如何在Truffle控制台读取Solidity智能合约结构体的字段?
问题根因
- 合约初始化逻辑里,初始
taskCount为0,构造函数调用createTask时会先执行taskCount++得到1,再将第一条任务存入tasks[1],所以第一条任务的索引是1,不是0 - Solidity为
mapping(uint256 => Task) public tasks自动生成的getter方法不支持直接返回整个mapping,必须传入要查询的id作为参数才能拿到对应数据。
正确调用方法
Remix IDE调用
在合约的已部署实例中找到tasks方法,输入框填入1后点击调用,返回结果里的第一个字段就是第一个任务的id。
ethers.js 调用示例
// 需提前完成合约实例初始化,示例为ethers v6版本 const firstTask = await contract.tasks(1); const taskId = firstTask.id; console.log(taskId); // 输出 1
web3.js 调用示例
// 需提前完成合约实例初始化 const firstTask = await contract.methods.tasks(1).call(); const taskId = firstTask.id; console.log(taskId); // 输出 1
内容的提问来源于stack exchange,提问作者user10595057
相关产品推荐
相关产品推荐

