在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中发现这个错误?
答案 0 :(得分:0)
以下代码示例已在MacOS上使用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);
});
}
Firefox控制台中的结果将符合预期(请参阅最后一行app.js:218):
Chrome控制台中的结果将符合预期(请参阅最后一行app.js:218):