在javascript中,我运行contract的方法
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中捕获此错误?
发布于 2021-11-12 09:16:24
如果您正在使用Ethers库,请执行此操作:
contract.methodName(...params, { from: myAccount })
.then(tx => {
//do whatever you want with tx
})
.catch(e => {
if (e.code === 4001){
//user rejected the transaction
}
});发布于 2019-11-02 02:02:29
下面的代码示例在Chrome (v78.0)和Firefox (v70.0)中使用Metamask插件在macOS上进行了测试,并在事务被用户拒绝的情况下给出了预期的错误消息:
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);
});
}在火狐控制台中的结果将如预期的那样为(参见最后一行app.js:218):

在Chrome控制台中的结果将如预期的那样为(参见最后一行app.js:218):

https://stackoverflow.com/questions/50621923
复制相似问题