合理使用 private 和 internal
分析
在 Solidity 中,public变量具有自动生成的 getter 函数,虽然很有用,但在合约部署期间会产生额外的 Gas 成本(公共函数会增加跳转表的大小)。如果常量不需要在合约或派生合约之外访问,则更改其可见性可以节省 Gas。请记住,私有变量并非私有的,使用web3.js提取变量值并不困难。对于那些旨在供人类而非智能合约读取的常量来说尤其如此。
部署包含大量常量的合约public可能会因为新增的 getter 函数而增加不必要的部署 Gas 成本。此外,每次访问这些常量时都会消耗额外的 Gas。
测试
文件位置:
src/compiler/Visibility.sol
test/compiler/Visibility.t.sol测试结果:
forge test --gas-report --mt test_visibility_ -vvv --optimize
总结
-
审查常量:检查合同中的
public常量。 -
调整可见性:如果一个常量不需要在合约外部或派生合约中访问,可以考虑将其可见性更改为
internal。如果它也不需要被派生合约访问,可以考虑将其设置为private。 -
测试合同:确保您的合同在进行可见性调整后仍能按预期运行。
对应源码
本文配套代码固定到提交
8960383;Gas 数据会随编译器、优化器参数和 EVM 版本变化。