MetaMask - RPC 错误:错误:MetaMask Tx 签名:用户拒绝交易签名

Posted

技术标签:

【中文标题】MetaMask - RPC 错误:错误:MetaMask Tx 签名:用户拒绝交易签名【英文标题】:MetaMask - RPC Error: Error: MetaMask Tx Signature: User denied transaction signature 【发布时间】:2018-11-10 07:50:15 【问题描述】:

javascript中我运行合同的方法

contract[methodName](...params,  from: myAccount , (err, response) => 
    console.log('get transaction', methodName, err, response);
    if (err) return reject(err);
    resolve(response);
);

然后通过 MetaMask 拒绝交易。控制台报错

MetaMask - RPC Error: Error: MetaMask Tx Signature: User denied transaction signature.

但我无法在我的代码中发现此错误。回调不起作用。

如何在 JS 中捕捉到这个错误?

【问题讨论】:

目前也有这个问题.. 这里也一样。在 Chrome 中不起作用(我正在运行 Metamask 4.7)但在 Firefox 中起作用(运行 Metamask 3.xx)它完全破坏了控制流 - 不仅似乎没有抛出异常,而且遵循 web3 的执行代码也没有打电话。 同样奇怪的行为,几天前还可以正常工作。但现在不可能捕捉到 Metamask 的异常......看起来像 Chrome 插件问题。在 Firefox 中仍然运行良好。 Jup,在 Chrome + Metamask + 本地测试环境中有同样的问题。如果能在这里找到一位 Metamask 开发人员,那就太好了。 同样,解决方案? 【参考方案1】:

如果您使用的是 Ethers 库,请执行此操作:

contract.methodName(...params,  from: myAccount )
.then(tx => 
    //do whatever you want with tx
)
.catch(e => 
     if (e.code === 4001)
         //user rejected the transaction
      
);

【讨论】:

【参考方案2】:

以下代码示例在 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):

【讨论】:

以上是关于MetaMask - RPC 错误:错误:MetaMask Tx 签名:用户拒绝交易签名的主要内容,如果未能解决你的问题,请参考以下文章

MetaMask - RPC 错误:权限请求已经挂起,在 Angular 10 中

MetaMask - RPC 错误:无法设置未定义的属性(设置“加载默认值”)错误

无法从另一台机器连接到 Geth 节点 RPC

MetaMask/json-rpc-middleware-stream

Plasm部署智能合约——配置MetaMask-RPC网络——2021.6.2

Plasm部署智能合约——配置MetaMask-RPC网络——2021.6.2