首页 > 解决方案 > 为什么以太坊钱包允许在合约异常的情况下确认交易?可以预防吗?

问题描述

我有一个 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来取消它。

  1. 为什么允许这样做?
  2. 我可以阻止它吗?(即,灰色的“确认”按钮,这样用户就不会犯错)

Metamask 截图

提前致谢!

标签: ethereumsoliditysmartcontractsmetamask

解决方案


推荐阅读