1 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
Web3.js 合約對(duì)象與 Truffle 合約對(duì)象不同。結(jié)構(gòu)上有細(xì)微的差異,當(dāng)然,因?yàn)樗际菬o(wú)類型的 JavaScript,所以你不知道函數(shù)將有什么輸入或輸出。
從歷史上看,以太坊交易沒(méi)有返回值。Web3.js 行為早于這個(gè)時(shí)間,并且可能不支持直接返回交易值。getTransactionReceipt()然而,EIP 1288 記錄了如何通過(guò)對(duì)象獲取返回值receipt。
要讓 Web3.js 修改 EVM 狀態(tài),您需要執(zhí)行send()而不是call(). 這是另一個(gè)弱類型問(wèn)題,因?yàn)椴粦?yīng)混淆視圖和編寫(xiě)函數(shù)。
嘗試:
console.log("Calculator adding: ", await calculatorContract.methods.add(11, 88).send({
from: '0x38e3614A5Cf95f0DBb858D9E3752Ac477DA70ccD'
}));
解決 Truffle 和 Web3.js 之間的差異。解決行為差異的最簡(jiǎn)單方法是根本不使用 Truffle 工件,而是到處使用 Web3.js 合約。
詩(shī)。我推薦 OpenZeppelin SDK(Node.js / TypeScript)而不是 Truffle。它對(duì)于 TypeScript 類型來(lái)說(shuō)更加理智,也可以在前端和后端代碼中用作 Web3.js 的替代品。或者使用 Python 和 Web3.py 甚至更好,因?yàn)槿绻阌心芰η袚Q語(yǔ)言,那么這些為你的問(wèn)題中的猜測(cè)游戲留下了更少的空間。
添加回答
舉報(bào)