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 影片教程全家桶》