【问题标题】:MetaMask - RPC Error: Error: MetaMask Tx Signature: User denied transaction signatureMetaMask - RPC 错误:错误:MetaMask Tx 签名:用户拒绝交易签名
【发布时间】: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 开发人员,那就太好了。
  • 同样,解决方案?

标签: javascript ethereum 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):

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 2021-11-18
      相关资源
      最近更新 更多