我想使用 web3.js 向用户显示还原原因,例如在用户尝试铸造已经铸造的 erc721 令牌的情况下。我正在使用 try catch 块并查看错误消息,但我想隔离错误消息以向用户显示有意义的原因。提前致谢。
问问题
1999 次
2 回答
4
@Petr Hejda 之前的回答对我没有用,他的建议也没有回应@Chakshu Jain在评论中的问题。
相反,我从开头和结尾删除了一些slice()
在解析 JSON 时导致错误的字符,因此我可以处理错误消息并获取错误消息。
if (err) {
var errorMessageInJson = JSON.parse(
err.message.slice(58, err.message.length - 2)
);
var errorMessageToShow = errorMessageInJson.data.data[Object.keys(errorMessageInJson.data.data)[0]].reason;
alert(errorMessageToShow);
return;
}
于 2021-11-13T23:13:17.837 回答
3
它在 JS 错误对象中返回为data.<txHash>.reason
.
这是一个错误的 Solidity 代码
pragma solidity ^0.8.0;
contract Test {
function foo() public {
revert('This is error message');
}
}
因此,调用该foo()
函数的事务应该与 message 一起恢复This is error message
。
try {
await myContract.methods.foo().send();
} catch (e) {
const data = e.data;
const txHash = Object.keys(data)[0]; // TODO improve
const reason = data[txHash].reason;
console.log(reason); // prints "This is error message"
}
于 2021-03-31T08:52:13.027 回答