Solidity计算器合约出现无限Gas需求错误,求问题定位
Solidity计算器合约Gas报错分析与解决
你遇到的这个"Gas requirement is infinite"是Solidity编译器的误判,你的add函数逻辑完全没问题——只是对单个storage变量result进行赋值,不存在循环、大面积修改storage的操作,实际执行时Gas消耗是正常的。
编译器之所以会弹出这个提示,是因为它在做Gas估算时,偶尔会对简单的storage写入操作产生误报,尤其是当合约中包含带require的函数(比如你的div函数)时,但这并不影响合约的实际部署和调用。
验证方式
实际部署合约后调用add函数,会发现它能正常执行,Gas消耗就是修改单个storage变量的固定值(约20000 Gas),远低于区块Gas上限。
可选优化
可以把result变量改为private,通过getResult函数对外暴露读取权限,更符合合约封装规范:
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.13; contract Calculator { int private result; function add(int a, int b) public { result = a + b; } function sub(int a, int b) public { result = a - b; } function mul(int a, int b) public { result = a * b; } function div(int a, int b) public { require(b != 0, "B should not be 0!"); result = a / b; } function getResult() public view returns (int) { return result; } }
内容的提问来源于stack exchange,提问作者TSK KRISH
相关产品推荐
相关产品推荐

