ethereum - 为什么以太坊钱包允许在合约异常的情况下确认交易?可以预防吗?
问题描述
我有一个 Solidity 合同,其功能基本上是这样的:
function do(uint256 number) public nonReentrant {
require(number < 10, "Number should be less than 10");
stuff(number);
}
我认为require
应该阻止用户犯错,但是当我上链(Etherscan)并向函数写入无效数字(例如do(100)
)时,它仍然允许我确认交易。(当然,它收取大约 100 倍于正常情况下的 gas,但它允许这样做。)如果我确认,交易会发送,但它会陷入困境(这是有道理的,因为没有矿工愿意打扰挖掘会回滚的交易)。然后我需要支付gas来取消它。
- 为什么允许这样做?
- 我可以阻止它吗?(即,灰色的“确认”按钮,这样用户就不会犯错)
提前致谢!
解决方案
推荐阅读
- reactjs - 提交时反应/挂钩额外的未定义字段
- r - 如何让折线图中的每一年都有不同的颜色
- cmd - CMD 将所有文件跨任何子文件夹移动到现有级别并删除子文件夹
- c# - Microsoft Graph API 自定义列未显示在项目字段中
- mysql - 使用“键集分页”重置计数
- python-3.x - python-plotly 在同一图中具有相同 Y 轴的多条线
- javascript - 状态更新时重新渲染反应组件
- javascript - 地图图层在初始加载后不会再次渲染
- css - 为什么 div 标签没有通过其 className 更改 css?
- asio - 有没有我可以学习的教程来了解 Steinberg ASIO SDK?