加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > ICP > Info

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

Author:

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

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對:Tiny熊

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

10個技巧是:

合并打包變量

uint8不總是比uint256便宜

Mappings大部分時候比Arrays便宜

Solana生態項目Marinade宣布其MNDE治理NFT將于4月4日開啟鑄造:4月3日消息,Solana生態項目Marinade宣布其MNDE治理NFT將于4月4日開啟鑄造,屆時將提供3333個限量版Octopus Chef。[2022/4/3 14:01:21]

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

用bytes32而不是string/bytes

少使用外部調用

使用外部函數修改器

刪除不需要的變量

使用短電路規則

盡量避免修改存儲變量

Solana NFT售價210萬美元,打破之前網絡記錄:10月2日消息,Solana Monkey Business的NFT是在Solana區塊鏈上鑄造的5,000個NFT的集合,剛剛以13,027SOL(約210萬美元)的價格出售了一個NFT——使其成為迄今為止最昂貴的基于Solana的NFT。所述的Sol Monkey是#1355。根據NFT稀有性工具HowRare.Is,它是收藏品中最稀有的NFT,有一個骷髏身體(2.42%的SolMonkeys有這個特征),一件橙色外套(1.06%)和一個鑲有寶石的皇冠(0.02%)。(TheBlock)[2021/10/2 17:20:31]

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

火幣礦池HPT與solo.top達成合作:據官方消息,火幣礦池生態通證HPT已與solo.top達成合作,現訪問solo.top即可使用HTP參與單幣無損挖礦,APY達100%+。

Solo.top是DeFi智能配資挖礦平臺,旨在為DeFi用戶提供接近0門檻且安全的DeFi金融服務。HPT是火幣礦池生態通證,與火幣礦池各業務有機結合。HPT持有人每日可以獲得火幣礦池數字資產持有激勵,也可深度參與火幣礦池的未來發展。[2021/4/1 19:37:55]

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

函數修飾器可能效率低下

聲音 | Blockchain Solutions Limited首席運營官:加密貨幣正在全球范圍內崛起:據CCN報道,Blockchain Solutions Limited首席運營官Lucky Uwakwe近日表示,加密貨幣正在全球范圍內崛起,65%的人現在都知道加密貨幣。 他引用了Luno Nigeria的研究顯示,25%的人現在以某種形式擁有加密貨幣。51%的人視加密貨幣為一種投資,16%的人使用加密貨幣進行網上購物,而19%的人使用加密進行匯款。他認為比特幣是第一個使用點對點技術的加密貨幣,是區塊鏈技術的簡單實現;比特幣作為一種支付工具,可用于匯款,并將價值作為投資工具。[2018/12/26]

添加函數修飾器時,將提取修飾器的代碼并替換函數內出現的_符號。這也可以理解為函數修飾器是內聯的。在普通的編程語言中,內聯小代碼更高效,并且不有任何實際的缺點,但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:SOLBOOLBOONFTMSOL價格BOOL價格BAMBOO價格FYZNFT

ICP
后農場時代的期待—APY | AMA 回顧_THE:WILLIE幣

2020年10月21日中午12點,墨客&APY.Finance;的CEOWill在Uniswap中文社區進行了“后農場時代的期待-APY”的AMA主題分享.

1900/1/1 0:00:00
杜克大學前教授的模型預測,比特幣將漲至7萬3美元丨幣鑫_比特幣:中國賣比特幣犯法嗎

比特幣周末兩天連續沖高,價格一路突破24000,早上觸及24288一線后又迅速下跌,但是又立馬反彈上來,說明多頭處于強勢.

1900/1/1 0:00:00
止盈止損介紹_USD:btc錢包地址怎么弄

霍比特現已上線部分幣對的“止盈止損”訂單功能,邀您體驗!“止盈止損”訂單是指,預先設置“觸發價”,“委托價”和“下單數量”,最新價達到觸發價,會按委托價掛單,幫助您保住利潤或減少損失.

1900/1/1 0:00:00
比特幣逐一實現中本聰最初所勾勒的愿景_比特幣:比特幣行情分析及最新消息今天

自中本聰發表比特幣白皮書這十幾年以來,比特幣逐漸進入大眾視角,然而,很多人并沒有真正地理解,甚至會懷疑比特幣的價值以及在顯示生活中的實用性。

1900/1/1 0:00:00
以太坊:如何擴展到數十億用戶?_以太坊:以太坊交易所

前言:構建可擴展性的DApp需要什么要求?以太坊還有多遠的差距?差距很遠,但一直在前進。藍狐筆記看來,區塊鏈不僅面臨擴展性問題,也面臨可用性、易用性問題,以及最重要的需求剛性程度。

1900/1/1 0:00:00
龔鳴:密碼戰爭、密碼朋克與 Web 3,區塊鏈的技術之路_區塊鏈:區塊鏈工程專業張雪峰

「暴走恭親王」龔鳴以現代計算機、密碼學與區塊鏈歷史上十幾位重要傳奇人物為線索,介紹了區塊鏈技術的演進之路.

1900/1/1 0:00:00
ads