1 回答
TA贡献1772条经验 获得超5个赞
Web3.js 合约对象与 Truffle 合约对象不同。结构上有细微的差异,当然,因为它都是无类型的 JavaScript,所以你不知道函数将有什么输入或输出。
从历史上看,以太坊交易没有返回值。Web3.js 行为早于这个时间,并且可能不支持直接返回交易值。getTransactionReceipt()然而,EIP 1288 记录了如何通过对象获取返回值receipt。
要让 Web3.js 修改 EVM 状态,您需要执行send()而不是call(). 这是另一个弱类型问题,因为不应混淆视图和编写函数。
尝试:
console.log("Calculator adding: ", await calculatorContract.methods.add(11, 88).send({
from: '0x38e3614A5Cf95f0DBb858D9E3752Ac477DA70ccD'
}));
解决 Truffle 和 Web3.js 之间的差异。解决行为差异的最简单方法是根本不使用 Truffle 工件,而是到处使用 Web3.js 合约。
诗。我推荐 OpenZeppelin SDK(Node.js / TypeScript)而不是 Truffle。它对于 TypeScript 类型来说更加理智,也可以在前端和后端代码中用作 Web3.js 的替代品。或者使用 Python 和 Web3.py 甚至更好,因为如果你有能力切换语言,那么这些为你的问题中的猜测游戏留下了更少的空间。
添加回答
举报