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%