1. 首选数据类型
尽量使用 256 位的变量,例如 uint256 和 bytes32!乍一看,这似乎有点违反直觉,但是当你更仔细地考虑以太坊虚拟机(EVM)的运行方式时,这完全有意义。每个存储插槽都有 256 位。因此,如果你只存储一个 uint8,则 EVM 将用零填充所有缺少的数字,这会耗费 gas。此外,EVM 执行计算也会转化为 uint256 ,因此除 uint256 之外的任何其他类型也必须进行转换。
注意:通常,应该调整变量的大小,以便填满整个存储插槽。
2. 在合约的字节码中存储值
一种相对便宜的存储和读取信息的方法是,将信息部署在区块链上时,直接将其包含在智能合约的字节码中。不利之处是此值以后不能更改。但是,用于加载和存储数据的 gas 消耗将大大减少。有两种可能的实现方法:
- 将变量声明为 constant 常量 (译者注:声明为 immutable同样也可以降低 gas,测试constant比immutable更加节省gas)
- 在你要使用的任何地方对其进行硬编码。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract CryptosTribeToken {
uint256 add;
uint256 public v1;
uint256 public immutable v2=10;
function calculate() public view returns (uint256 result) {
return v1 * v2 * 10000;
}
}<

本文介绍了以太坊智能合约中优化gas消耗的策略,包括使用256位变量以减少填充和转换成本,将数据存储在合约字节码中以节省读写操作,通过编译器将变量打包到单个存储插槽以及通过汇编直接进行位操作进一步压缩存储。这些方法旨在减少昂贵的SSTORE操作,提高合约执行效率。
最低0.47元/天 解锁文章
883

被折叠的 条评论
为什么被折叠?



