我正在通过Google Chrome控制台使用Metamask(Chrome扩展程序)和web3.js API。但是,我有两个问题:
1)我正在尝试使用Ganache GUI(本地主机7545)发送一次简单交易,并在下面输入代码:
> ethereum.enable()
> web3.currentProvider.selectedAddress
<."0xb8662b66584ae08a88341df0d2b3fa7a65eb158c"
> var transaction = {
from: web3.currentProvider.selectedAddress,
to: "0xA8b62F503181D9A56683129de1B98ea4Bf143a40",
value: web3.toWei("1", "ether")
}
> web3.eth.sendTransaction(transaction)
然后我收到以下错误消息:
> Uncaught Error: The MetaMask Web3 object does not support synchronous methods like eth_sendTransaction without a callback parameter. See https://github.com/MetaMask/faq/blob/master/DEVELOPERS.md#dizzy-all-async---think-of-metamask-as-a-light-client for details.
at MetamaskInpageProvider._sendSync (inpage.js:1)
at MetamaskInpageProvider.send (inpage.js:1)
at Proxy.t.send (inpage.js:1)
at a.send (inpage.js:1)
at w.e [as sendTransaction] (inpage.js:1)
at <anonymous>:1:10
2)另外请注意,web3.version
似乎是0.20.7,而当我检查此网站https://web3js.readthedocs.io/en/v1.2.4/时,web3.js API的新版本似乎是1.2.4。使用Metamask扩展时,是否可以在chrome控制台中更新web3.js API版本?请注意,我尝试在控制台web3 = new Web3(web3.currentProvider)
中输入此内容,但web3.version
仍为0.20.7。
我认为优先级1)更关键。
[请您帮忙。
谢谢
对于第一个问题,可能恰如错误所言:Web3对象不支持同步方法,这意味着在调用web3.eth.sendTransaction时必须提供回调,因此当操作完成时,您将得到结果。回调,因为它是异步操作
这是正确的含义:
web3.eth.sendTransaction(transaction,function(err, transactionHash) {
if (!err)
console.log(transactionHash);
}
对于第二个问题,您可以更新metamask提供的web3包括web3 js文件的相关标记,然后执行:
web3 = new Web3(web3.currentProvider);