比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

Solidity 技巧:如何減少字節碼大小及節省 gas_SOL

Author:

Time:1900/1/1 0:00:00

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對:Tiny熊

Solidity是一種特殊的語言,有許多的奇怪巧。由于Solidity被創建為可在EVM上使用其有限的函數集,因此許多函數在Solidity中的行為與大多數其他語言不同。幾個月前我寫了一篇博客文章,通過有十個技巧來節省Solidity中的gas消耗,但是收到了很大的反響。

10個技巧是:

合并打包變量

uint8不總是比uint256便宜

Mappings大部分時候比Arrays便宜

Lido V2已上線Solana,節點傭金降為5%:12月21日消息,Lido V2已上線Solana,主要變化是取消了專門的100%傭金,轉而支持公共驗證節點,最高傭金為5%。此外,驗證節點區塊和質押獎勵將獲得SOL而不是stSOL。

官方表示,v2的變化側重于節點運營商的盈利能力和簡單性,最終有助于為Lido用戶提供更安全的質押體驗。[2022/12/21 21:59:11]

不是所有的元素可以被打包

用bytes32而不是string/bytes

少使用外部調用

使用外部函數修改器

OpenSea即將支持Solana鏈NFT:金色財經報道,OpenSea官方在社交媒體發布視頻表示即將支持Solana鏈NFT。

據悉,Solana將成為繼以太坊、Polygon和Klaytn之后,OpenSea支持的第四個區塊鏈網絡。[2022/3/30 14:25:44]

刪除不需要的變量

使用短電路規則

盡量避免修改存儲變量

在我的專欄:智能合約開發-打通Solidity任督二脈,有更多的文章深入介紹如何介紹GAS,訂閱超值。

從那篇文章起,我又收集了更多的技巧與大家分享,再次分享給大家:

AOFEX于5月19日上線RUNE、SOL:據官方消息,AOFEX交易所于5月19日正式上線RUNE、SOL;將于AQ及USDT交易區15:00(GMT+8)上線RUNE,17:00(GMT+8)上線SOL交易;RUNE、SOL充提業務暫不開啟,具體時間將以公告形式另行通知。

THORChain是一個高度優化的多鏈,使用pBFT共識來實現亞秒級塊終結性。RUNE是THORChain生態圈的通證,可用于支付交易手續費、保持流動性,并用作出塊獎勵。持幣者可獲得分紅。

AOFEX數字貨幣金融衍生品交易所,旨在為用戶提供優質服務和資產安全保障。[2021/5/19 22:19:09]

函數修飾器可能效率低下

LBK Solar AVAX售賣專場下單總價值超494.98萬USDT:據悉,LBank“LBK Solar AVAX”售賣專場已于7月24日18:00 (UTC+8)結束,共有2,606個通過KYC認證的LBank賬戶下單申購,下單總價值超494.98萬USDT,總成交金額2萬USDT,認購成交比例0.404%,超額部分將退回。成交部分的USDT將實際用于回購銷毀LBK。LBank將根據個人申購金額占總下單金額的比例進行實際認購額度分發。AVAX/USDT交易對將于7月24日20:00(UTC+8)上線LBank。更多詳情請關注LBank官網公告。[2020/7/24]

添加函數修飾器時,將提取修飾器的代碼并替換函數內出現的_符號。這也可以理解為函數修飾器是內聯的。在普通的編程語言中,內聯小代碼更高效,并且不有任何實際的缺點,但Solidity不同。在Solidity中,EIP170將合約的最大大小限制為24KB,如果同一代碼多次內聯,則加起來就會很容易達到24KB大小限制。

另一方面,內部函數不是內聯的,而是稱為獨立函數。這意味著它們在運行時gas要稍微貴一點,但是在部署中可以節省很多冗余字節碼。內部函數還可以幫助避免可怕的“堆棧太深錯誤”,因為在內部函數中創建的變量與原始函數不會共享相同的堆棧,但是在修飾器中創建的變量共享相同的堆棧。

通過這種技巧,我將一份合約的大小從23

要設置或清除布爾值,可使用:

functionsetBoolean(uint256_packedBools,uint256_boolNumber,bool_value)publicviewreturns(uint256){if(_value)return_packedBools|uint256(1)<<_boolNumber;elsereturn_packedBools&~(uint256(1)<<_boolNumber);}

使用這種技術,你可以在一個存儲槽中存儲256個布爾值。如果你嘗試正常打包bool(如在結構體中)變量,一個插槽中則只能在裝入32個布爾型。

注意:僅當你要存儲32個以上的布爾值時才使用此技巧。

使用庫節省字節碼

當你調用庫的公共函數時,該函數的字節碼不會包含在合約內,因此可以把一些復雜的邏輯放在庫中,這樣減小合約的大小。不過你得清楚,調用庫會花費一些gas和使用一些字節碼。對庫的調用是通過委托調用的方式進行的,這意味著庫可以訪問合約擁有的數據,并且具有相同的權限。因此對于簡單任務不值得這樣做。

另外,你還需要知道,庫的內部函數,solc編譯器則把器內聯到了合約內。內聯有其自身的優點,但是需要字節碼空間。

本文收錄于專欄《智能合約開發-打通Solidity任督二脈》掃碼進入專欄獲取智能合約大師秘籍

無需使用默認值初始化變量

如果未設置/初始化變量,則變量具有默認值(0,false,0x0等,取決于數據類型)。如果你使用默認值對其進行顯式初始化,那只會浪費gas。

本文來源于非小號媒體平臺:

登鏈社區

現已在非小號資訊平臺發布105篇作品,

非小號開放平臺歡迎幣圈作者入駐

入駐指南:

/apply_guide/

本文網址:

/news/9558545.html

免責聲明:

1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險

2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場

上一篇:

幣安為何推出第三條鏈?這對BNB意味著什么?

Tags:SOLLIDBOOLBOOsol幣價格走勢BLID幣BooleancoinBOOK價格

酷幣交易所
淺析YFI 的治理模式,CellETF同樣擁抱去中心化治理!_EARN

什么是YFI? YFI的全稱是yearn.finance,YFI是項目Token的名稱。yearn是一個支持各種DeFi協議的聚合理財平臺,會在協議間自動移倉以幫助投資者獲得最大的理財收益.

1900/1/1 0:00:00
BoringDAO:拓展 DeFi 邊界,無聊中蘊藏生機 | AMA 回顧_ORI

2020年10月22日下午4點,BlockArk聯合創始人Warren在Uniswap中文社區對話BoringDAOcorememberMikeMeng.

1900/1/1 0:00:00
信貸如何推動加密貨幣市場增長?從八十年代狂熱的日經指數說起_TAL

日本市場曾經的增長是通過前所未有的信貸擴張來推動的,而加密貨幣才剛剛嘗到了債務對市場影響的甜頭.

1900/1/1 0:00:00
一文了解比特幣前輩們的愿景: E-cash、b-money 與 Hashcash 等_CASH

各種比特幣前身相似多于不同,除了優先考慮隱私的E-cash外,其它都傾向于關注信任最小化。原文標題:《各種比特幣前身的愿景》撰文:TonySheng來源:幣信研究院盡管比特幣通常被認為是「第一個.

1900/1/1 0:00:00
加密貨幣與加密商品:加密世界,人們口中的價值究竟是什么?_比特幣

「價值」是加密世界中,長期,反復,被討論的話題。是否有價值,是哪種價值?如何捕獲價值?到底什么是ValueCapture?什么樣的加密項目可以具備ValueCapture能力?價值判斷的波動性,

1900/1/1 0:00:00
Nervos 謝晗劍:互操作性 2.0 讓用戶從任何入口進入區塊鏈_比特幣

目前的跨鏈方案存在標準不統一,用戶體驗差的問題,互操作性2.0要打通跨鏈標準和降低用戶進入門檻.

1900/1/1 0:00:00
ads