Solidity如何通過程式碼減少gas消耗

  • 2020 年 2 月 23 日
  • 筆記

我們知道,在以太坊上的交易gas是有上限的,因此也是比較昂貴的,特別是針對一些複雜業務的處理,隨著業務數據的增長,有可能會導致gas超高,甚至業務無法進行操作。

之前專門寫過文章來描述如何減少gas的細節內容,這裡再為大家講解一種通過程式碼中memory來大幅度減少gas使用。

首先先看下面示例程式碼:

pragma solidity ^0.5.10;    contract Test{        struct User{          uint age;          uint balance;          uint num;      }        User user;        function initUser() public{          user = User({age:20,balance:1000,num:1});      }        function setUser1() public {          user.age = 30;          user.balance = 20000;          user.num = 2;      }        function setUser2() public {          User memory temp = user;          temp.age = 40;          temp.age = 20001;          user.num = 3;          user = temp;      }  }

在上述程式碼中,我們首先通過initUser方法來初始化一個User對象的數據,然後分別調用setUser1和setUser2兩個方法。

你會發現,setUser1需要消耗36476gas,而setUser2隻需要效果31595gas,它們的效果相同,消耗的gas卻差了5000gas,如果User的欄位增多,那麼此差距會越來越大。

那麼這兩種寫法的區別是什麼呢?我們知道,區塊鏈上的寫操作是比較昂貴的,而setUser1進行了多次的寫操作,而setUser2隻進行了一次整體的寫操作。因此,節省了相當大一部分的gas。

SpringBoot技術影片

CSDN學院:《SpringBoot 影片教程全家桶》