![](/img/trans.png)
[英]Metamask sends RPC Error although it is caught in Javascript
[英]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.