我在 Rinkeby 测试网络上为我的 Solidity 项目使用 web3。我正在尝试使用错误对象获取确切的还原消息。
try{
await contract.methods.acceptBattle(id).send({
from: address,
value:val
});
return '';
}
catch(e){
console.log(e.message);
}
代码在 catch 块中运行后,我得到以下格式的输出:
执行恢复:这场战斗不存在。 0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b426174746c65206e7 56d6265722069736e27742065786973742e0a0000000000
有没有办法只获取消息本身(在第一行)而不是后面的地址? 正如我在 Do all Ethereum networks return the revert reasons as a “message” field?
中看到的并且由于我在 Rinkeby 测试网络上运行,因此地址应该是错误数据字段的一部分,而不是消息的一部分。
这是回复消息的相关代码:
function acceptBattle(uint256 battle_id) public payable{
Battle storage bate=battleInfo[battle_id];
require(bate.amountBet>0, "Battle number isn't exist.\n");
require(bate.creator!=msg.sender, "Impossible to fight against yourself.");
require(bate.creator==bate.opponent, "This battle is closed, opponent already exist.");
require(msg.value==bate.amountBet, "Betting value isn't as specified for this battle.");
bate.opponent=msg.sender;
}