Solidity优化-减少智能合约gas消耗

1 · zhangzhishun · June 28, 2022, 2:29 a.m.
1. 优化方向1.1 首选数据类型尽量使用 256 位的变量,例如 uint256 和bytes32!乍一看,这似乎有点违反直觉,但是当你更仔细地考虑以太坊虚拟机(EVM)的运行方式时,这完全有意义。每个存储插槽都有256 位。因此,如果你只存储一个 uint8,则 EVM将用零填充所有缺少的数字,这会耗费 gas。此外,EVM 执行计算也会转化为uint256 ,因此除 uint256 之外的任何其他类型也必须进行转换。注意:通常,应该调整变量的大小,以便填满整个存储插槽。在第 3 节 “通过SOLC 编译器将变量打包到单个插槽中”中,当使用小于 256位的变量有意义时,将变得更加清楚。1.2 在合约的字节码中存储值一种相对便宜的存储和读取信息的方法是,将信息部署在区块链上时,直接将其包含在智能合约的字节码中。不利之处是此值以后不能更改。但是,用于加载和存储数据的gas 消耗将大大减少。有两种可能的实现方法:将变量声明为 constant 常量 (译者注:声明为 immutable同样也可以降低 gas)在你要使用的任何地方对其进行硬编码。uint256 public v1;uint...