Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MetaMask-RPC错误:错误:MetaMask Tx签名:用户拒绝事务签名_Javascript_Ethereum_Metamask - Fatal编程技术网

Javascript MetaMask-RPC错误:错误:MetaMask Tx签名:用户拒绝事务签名

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); }); 然后通过元掩码拒绝事务。在控制台中获取一个

在javascript中,我运行contract的方法

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开发人员会很好。同样的,解决方案?