Contract-Invocation
合約 API 非常困惑
TL;DR 我對 web3 中的 Contract API 感到非常困惑:https ://web3js.readthedocs.io/en/v1.2.6/web3-eth-contract.html
myContract.methods 在 geth 控制台中不可用,在 Ubuntu 16.0.4 上使用 Geth 1.9.11-stable 和 1.9.12-unstable(快速同步)
是版本問題嗎?我必須回到以前的版本才能使用此功能嗎?
更多詳細資訊我目前正在嘗試從我的 geth 控制台使用此 API 來檢索編碼的交易字元串,以進行簽名和送出
當我在 Remix (remix.ethereum.org) 上使用時,在我編譯 SimpleStorage 合約並部署到 Ropsten 後,我可以訪問以下方法
在混音控制台上:
> abi = [{"constant": false,"inputs": [{"name": "x","type": "uint256"}],"name": "set","outputs": [],"payable": false,"stateMutability": "nonpayable","type": "function"},{"constant": true,"inputs": [],"name": "get","outputs": [{"name": "","type": "uint256"}],"payable": false,"stateMutability": "view","type": "function"}] > mySimpleStorage = new web3.eth.Contract(abi) > mySimpleStorage.methods { "set": "function () { [native code] }", "0x60fe47b1": "function () { [native code] }", "set(uint256)": "function () { [native code] }", "get": "function () { [native code] }", "0x6d4ce63c": "function () { [native code] }", "get()": "function () { [native code] }" } > tx = mySimpleStorage.methods.set("x") > tx.encodeABI() 0x60fe47b10000000000000000000000000000000000000000000000000000000000000005
這就是我根據文件所期望的
使用 Geth 控制台:
web3.eth.Contract(大寫)甚至不存在:
> mySimpleStorage = new web3.eth.Contract(abi) TypeError: Value is not an object: undefined at <eval>:1:19(5)
我必須使用 web3.eth.contract(小寫):
> mySimpleStorage = new web3.eth.contract(abi) { abi: [{ constant: false, inputs: [{...}], name: "set", outputs: [], payable: false, stateMutability: "nonpayable", type: "function" }, { constant: true, inputs: [], name: "get", outputs: [{...}], payable: false, stateMutability: "view", type: "function" }], eth: {}, at: function(address, callback), getData: function(), new: function() }
無論如何,方法屬性失去了,不可能呼叫 encodeABI()
> tx = mySimpleStorage.methods Undefined > tx undefined
const contract = new web3.eth.Contract(abi, address);
我想你忘記了第二個參數,即智能合約地址。
我想我理解了這個問題。Geth 控制台支持 web3 0.2xx 而不是 1.x。所以沒有 encodeABI(),你必須改用 getData(),整個語法是不同的。這個舊介面的文件在這裡:https ://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethcontract