Solidity中使用`assert`消耗所有gas的目的是什么?

问题描述 投票:0回答:1

他们说

assert
主要是为了使用代码分析器来检测我们合约中的逻辑错误,但为什么它也消耗剩余的gas?

我们不能使用一个新的关键字,它的作用相同(就像

require
),但不消耗剩余的gas?

花费尽可能少的gas不是更好吗?Solidity不应该对其功能进行一些改变吗?

我只是不明白目的(因为每个答案都只是指定断言是为了检查永远正确的事情,而 require 是为了检查用户的输入;但这不是我的答案)。

debugging solidity smartcontracts
1个回答
0
投票

我猜其他人也有和你一样的问题,因为从 Solidity 0.8 开始,

assert
不再消耗剩余的gas了:

失败的断言和其他内部检查(例如除以零或算术溢出)不使用无效操作码,而是使用恢复操作码。更具体地说,他们将使用等于对 Panic(uint256) 的函数调用的错误数据,并带有特定于情况的错误代码。

这将节省错误时的gas,同时仍然允许静态分析工具将这些情况与无效输入的恢复区分开来,例如失败的需求。

(来自 https://docs.soliditylang.org/en/latest/080-writing-changes.html

© www.soinside.com 2019 - 2024. All rights reserved.