1. 程式人生 > >solidity智慧合約位元組數最大值及縮減位元組數

solidity智慧合約位元組數最大值及縮減位元組數

智慧合約最大位元組數

在Solidity中,EIP 170將contract的最大大小限制為24 KB 。因此,如果智慧合約內容過多,會導致無法進行釋出操作。

減少壓縮位元組數方法

方法及變數命名

在一定程度上,方法或變數的長短會影響位元組數的多少,因此可通過減少方法名或變數名來對內容進行壓縮,但一般情況下效果很小,畢竟方法和變數名本身所佔空間有限。

減少成員變數定義

如果某個值只使用一次或兩次,那麼就儘量減少再獨立建立一個變數,變數越多,編譯後所佔位元組數越多,此項能減少不少編譯後的大小。

變數初始化

變數顯式的初始化不僅會消耗gas,還會增加編譯後的位元組碼,因此能使用預設值即使用預設值。

避免重複檢查

有些值在業務前後以及做相應的檢查了,就沒有必要重複檢查,減少此類程式碼,有效縮減編譯後的位元組數。

定義常量

比如像1e18這樣的數值,多處使用,一定要定義常量,直接寫會導致編譯後的位元組碼變長,通過此方式可有效減少位元組碼數量。

減少public屬性

預設public的屬性編譯之後會提供對應的呼叫方法,因此將不必要的public屬性設定為內部的,則可減少對應的方法位元組。

使用簡短的原因字串

require或revert等原因字串描述簡單化。

單線交換

Solidity可以在單個語句中交換變數值。從而避免定義臨時的中間變數。

(result[i], result[j]) = (result[j], result[i])

以上的寫法典型的應用場景就是氣泡排序,當需要交換陣列中兩個值的位置時,可通過上面的寫法,減少定義中間變數。

使用事件帶提儲存

有些資料沒必要儲存在區塊鏈上,浪費資源,可通過事件將資訊記錄在日誌中。

使用庫來儲存一些位元組碼

公共庫的函式不會成為智慧合約的一部分,因此可以將一些計算操作寫入公共庫裡面,然後通過授權進行相應的訪問。

原文連結:https://www.choupangxia.com/2019/08/06/solidity%e6%99%ba%e8%83%bd%e5%90%88%e7%ba%a6%e5%ad%97%e8%8a%82%e6%95%b0%e6%9c%80%e5%a4%a7%e5%80%bc%e5%8f%8a%e7%bc%a9%e5%87%8f%e5%ad%97%e8%8a%82%e6%95%