Javascript MetaMask-RPC错误:错误:MetaMask Tx签名:用户拒绝事务签名
在javascript中,我运行contract的方法Javascript MetaMask-RPC错误:错误:MetaMask Tx签名:用户拒绝事务签名,javascript,ethereum,metamask,Javascript,Ethereum,Metamask,在javascript中,我运行contract的方法 contract[methodName](...params, { from: myAccount }, (err, response) => { console.log('get transaction', methodName, err, response); if (err) return reject(err); resolve(response); }); 然后通过元掩码拒绝事务。在控制台中获取一个
contract[methodName](...params, { from: myAccount }, (err, response) => {
console.log('get transaction', methodName, err, response);
if (err) return reject(err);
resolve(response);
});
然后通过元掩码拒绝事务。在控制台中获取一个错误
MetaMask - RPC Error: Error: MetaMask Tx Signature: User denied transaction signature.
但我无法在代码中捕获此错误。回调不起作用
如何在JS中捕获此错误?以下代码示例在macOS上使用Chrome(v78.0)和Firefox(v70.0)中的Metamask插件进行测试,并在用户拒绝事务的情况下提供预期的错误消息:
createContract: function () {
let myContract = new web3.eth.Contract(ABI, CONTRACT_ADDRESS, {
from: account,
gasLimit: web3.utils.toHex(7900000),
gasPrice: web3.utils.toHex(1000000000)
});
myContract.methods.myMethodName().send().on("receipt", (receipt) => {
// Transaction succeeded
myContract.getPastEvents(
"myEventName", {
fromBlock: receipt.blockNumber,
toBlock: receipt.blockNumber
}, (errors, events) => {
for (let event in events) {
let returnValues = events[event].returnValues;
// Now do something with the event
}
});
}).catch(function (e) {
// Transaction rejected or failed
console.log(e);
});
}
Firefox控制台中的结果将与预期一致(见最后一行app.js:218):
Chrome控制台中的结果将与预期一致(见最后一行app.js:218):
目前也存在此问题。此处相同。在Chrome(我运行的是Metamask 4.7)中不起作用,但在Firefox(运行Metamask 3.x.x)中起作用。它完全破坏了控制流-不仅异常似乎没有被抛出,而且web3调用后执行的代码也没有。同样奇怪的行为,几天前工作正常。但是现在不可能捕捉到Metamask的异常。。。看起来Chrome插件有问题。在Firefox.Jup中仍然运行良好,在Chrome+Metamask+本地测试环境中也存在同样的问题。在这里找一个Metamask开发人员会很好。同样的,解决方案?