我可以避免在以 solidity 编写的用于气体优化的以太坊智能合约中进行验证吗?

Could I avoid validation in ethereum smart contracts written in solidity for gas optimization?

在某些情况下,输入验证只是为了确保用户输入在正确的范围内,否则会导致运行时错误。 我为什么要费心验证该输入并增加适当用户(大多数用户)的计算成本 为什么我不应该让错误的输入导致运行时错误而不进行验证以防止它在不知情的情况下发生?

我所说的验证是指:require(),assert(),revert()

您想要使用所谓的验证有多种原因。下面我概述了其中的一些。

1) 确保您的合约不会进入意外状态。预测用户应该如何与合约交互比预测合约如何被滥用要容易得多,因此检查以避免意外状态有助于限制代码路径和由此产生的攻击向量。

2) 调试并反馈给用户。如果您的合约代码有问题,使用 require() 可以让您向合约用户(通常是您的前端代码)提供有用的反馈

3) 与误用 and/or 重新进入相​​关的潜在成本相比,这些操作的成本相当小。