You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 12:15:03