我正在使用混合方式编写一份合同,我碰到了一个错误,但我无法调试它。当我在remix中输入事务散列时,它告诉我json是空的("")。
我正在测试ropsten测试网络,并使用元请求可能钱包。
有办法记录文本并查看这些日志吗?
发布于 2021-03-14 02:38:12
失败的事务不能发出事件,因为失败的==什么都没有发生。这对调试是不方便的。
您可以使用require()检查假设,并发出一个理由。当require()表达式的计算结果为false时,可以观察到原因。
合同失败的原因有很多。有些是故意捕获并发出原因的,而另一些则是因为协议或不可能进行进一步的处理。
一个协议级的错误将发送更多的钱比实际的帐户。你自己去查查,情况并非如此。在合同中你不能做任何事情来使它更有信息,因为它不会有那么远。
在除以零、访问超出边界的数组等情况下,不可能进行进一步的处理,而且可以使用require()检查这些内容。
例如:
function elementAtIndex(uint row) external view returns(address) {
require(row < myAddressArray.length, "row is out of range");
return myAddressArray[row];
}或者..。
function divider(uint nom, uint denom) extern pure returns(uint) {
require(denom > 0, "denominator is zero");
return nom/demon;
}作为一种普遍的启发式方法,尝试捕捉每一个可能发生的错误。你经常可以报告问题的所在,如果你没有收到消息,至少你知道问题不是什么。当你优化时,删除不可能的条件检查,这些条件可能是你为调试目的插入的,但倾向于为可能与输入相关的情况保留信息,因为它能帮助每个人了解正在发生的事情。
希望能帮上忙。
https://ethereum.stackexchange.com/questions/94609
复制相似问题