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

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

1. 首选数据类型

尽量使用 256 位的变量,例如 uint256 和 bytes32!乍一看,这似乎有点违反直觉,但是当你更仔细地考虑以太坊虚拟机(EVM)的运行方式时,这完全有意义。每个存储插槽都有 256 位。因此,如果你只存储一个 uint8,则 EVM 将用零填充所有缺少的数字,这会耗费 gas。此外,EVM 执行计算也会转化为 uint256 ,因此除 uint256 之外的任何其他类型也必须进行转换。

注意:通常,应该调整变量的大小,以便填满整个存储插槽。

2. 在合约的字节码中存储值

一种相对便宜的存储和读取信息的方法是,将信息部署在区块链上时,直接将其包含在智能合约的字节码中。不利之处是此值以后不能更改。但是,用于加载和存储数据的 gas 消耗将大大减少。有两种可能的实现方法:

  1. 将变量声明为 constant 常量 (译者注:声明为 immutable同样也可以降低 gas,测试constant比immutable更加节省gas)
  2. 在你要使用的任何地方对其进行硬编码。
// 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;
    }
}<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值