使用 web3.js 库调用智能合约方法
Calling a smart contract method using web3.js library
我是 web3.js 的新手,我正在尝试从 omesigo 智能合约调用一个方法,但我遇到了一个令人困惑的错误。
我已经阅读过 web3 文档并尝试过。
package.json
{
"name": "web3-learn",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.3.1",
"babel-cli": "^6.26.0",
"web3": "^1.0.0-beta.38"
}
}
node version: 10.15.0
index.js 相关行:
let contract = web3.eth.Contract(abi, address);
contract.methods.name().call((err, res) => {console.log(res)});
/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/@babel/runtime/helpers/nonIterableSpread.js:2
throw new TypeError("Invalid attempt to spread non-iterable instance");
^
TypeError: Invalid attempt to spread non-iterable instance
at _nonIterableSpread (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/@babel/runtime/helpers/nonIterableSpread.js:2:9)
at _toConsumableArray (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/@babel/runtime/helpers/toConsumableArray.js:8:60)
at CallContractMethod.set (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/web3-core-method/dist/web3-core-method.cjs.js:405:34)
at MethodsProxy.executeMethod (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/web3-eth-contract/dist/web3-eth-contract.cjs.js:525:26)
at Function.anonymousFunction.(anonymous function) [as call] (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/web3-eth-contract/dist/web3-eth-contract.cjs.js:497:27)
at Object.<anonymous> (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/index.js:34:25)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
它应该打印 Omisego 代币名称。
预先感谢您的帮助。
我遇到了同样的错误,通过将 Web3 库升级到 "web3": "^1.0.0-beta.39"
解决了这个问题
深入分析错误,似乎与contract.method arguments
的深度克隆有关。经过几个小时无果而终的调试后,我偶然发现了 Web3 版本,发现它是 beta.39
的特色版本。 (一天前发布)
我一直面临同样的问题,与您的方法唯一不同的是 web3 api 的版本,对我来说是 1.0.0-beta.46。问题的解决似乎有些牵强。
我是 web3.js 的新手,我正在尝试从 omesigo 智能合约调用一个方法,但我遇到了一个令人困惑的错误。 我已经阅读过 web3 文档并尝试过。
package.json
{
"name": "web3-learn",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.3.1",
"babel-cli": "^6.26.0",
"web3": "^1.0.0-beta.38"
}
}
node version: 10.15.0
index.js 相关行:
let contract = web3.eth.Contract(abi, address);
contract.methods.name().call((err, res) => {console.log(res)});
/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/@babel/runtime/helpers/nonIterableSpread.js:2
throw new TypeError("Invalid attempt to spread non-iterable instance");
^
TypeError: Invalid attempt to spread non-iterable instance
at _nonIterableSpread (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/@babel/runtime/helpers/nonIterableSpread.js:2:9)
at _toConsumableArray (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/@babel/runtime/helpers/toConsumableArray.js:8:60)
at CallContractMethod.set (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/web3-core-method/dist/web3-core-method.cjs.js:405:34)
at MethodsProxy.executeMethod (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/web3-eth-contract/dist/web3-eth-contract.cjs.js:525:26)
at Function.anonymousFunction.(anonymous function) [as call] (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/node_modules/web3-eth-contract/dist/web3-eth-contract.cjs.js:497:27)
at Object.<anonymous> (/home/amin/Documents/projects/solidity-workshop/solidity-learn/src/web3-learn/index.js:34:25)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
它应该打印 Omisego 代币名称。 预先感谢您的帮助。
我遇到了同样的错误,通过将 Web3 库升级到 "web3": "^1.0.0-beta.39"
深入分析错误,似乎与contract.method arguments
的深度克隆有关。经过几个小时无果而终的调试后,我偶然发现了 Web3 版本,发现它是 beta.39
的特色版本。 (一天前发布)
我一直面临同样的问题,与您的方法唯一不同的是 web3 api 的版本,对我来说是 1.0.0-beta.46。问题的解决似乎有些牵强。