簡體   English   中英

MetaMask - RPC 錯誤:錯誤:MetaMask Tx 簽名:用戶拒絕交易簽名

[英]MetaMask - RPC Error: Error: MetaMask Tx Signature: User denied transaction signature

在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 中捕捉到這個錯誤?

如果您使用的是 Ethers 庫,請執行以下操作:

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

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

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM