实际支付的费用 = gas used * gas price
您可以花费的气体量有 2 个上限
- gaslimit(您愿意为交易使用的最大gas,由用户个人配置)
- block.gaslimit(区块块中允许的最大 gas,由网络配置)
下面看一下代码:
以下示例会将gas 消耗完毕,Try on Remix 可以自己的试试是什么效果。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Gas {
uint256 public i = 0;
// 该函数会用光所有的Gas
// i 的值会被回滚,但使用了的Gas 无法退出到账号。
// Gas spent are not refunded.
function forever() public {
while (true) {
i += 1;
}
}
function test_gas()
public
returns (
bool,
uint256,
uint256
)
{
//一个区块内允许的最大gas,由网络设置
uint256 gas_limit = block.gaslimit;
uint256 gas_left = gasleft();
bool is_same_as_gas_limit = gas_limit == gas_left;
uint256 gas_price = tx.gasprice;
i = 10;
gas_left = gasleft();
uint256 gas_used = gas_limit - gas_left;
return (is_same_as_gas_limit, gas_price, gas_used);
}
}