比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > 狗狗幣 > Info

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

Author:

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

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對:Tiny熊

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

10個技巧是:

合并打包變量

uint8不總是比uint256便宜

Mappings大部分時候比Arrays便宜

推特用戶:6月份在NEAR Protocol錢包中發現一個Bug,與Solana錢包被黑的情況相似:8月4日消息,推特用戶Hacxyk.稱,早在6月份就在NEAR Protocol錢包中發現了一個Bug,和最近Solana錢包黑客攻擊的情況幾乎一樣。當一個Near錢包用戶選擇“電子郵件”作為助記詞恢復方法時,助記詞會被泄露到第三方網站。[2022/8/4 12:02:08]

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

用bytes32而不是string/bytes

少使用外部調用

使用外部函數修改器

刪除不需要的變量

Soldman Gachs:目前債權人對三箭資本的索賠總額為28億美元并預計會上升:7月19日消息,自稱為三箭資本債權人之一的Soldman Gachs在推特上透露,會議投票決定不尋求新的清算人,因此Teneo將繼續擔任清算人。由Digital Currency Group、Voyager Digital、Blockchain Access UK Ltd、Matrix Port Technologies和CoinList Lend組成的債權人委員會代表了當前索賠資金的近 80%。

Soldman Gachs還表示,Su Zhu索賠500萬美元,ThreeAC Limited索賠2500萬美元,Chen Kaili Kelly(Kyle Davies的妻子)索賠6600萬美元。這些債權可能被視為準股權并從屬于債權人,或導致它們無法得到這些資金。目前索賠總額為28億美元。許多人還沒有提出任何索賠,或出于保密原因量化了索賠的金額。預計這一數字將大幅上升。

此前消息,法庭文件顯示三箭資本欠27家加密公司共35億美元,Genesis對三箭資本提出約12億美元的索賠。[2022/7/19 2:22:58]

使用短電路規則

Solana生態DeFi平臺Apricot Finance宣布與錢包Slope Finance集成:官方消息,Solana生態DeFi平臺Apricot Finance宣布與去中心化交易平臺和錢包Slope Finance集成,Apricot用戶將能使用Solana上的移動錢包訪問Lend和X-Farm功能。

據悉,Apricot由Lend、X-Farm和Assist三個產品組成。[2021/9/29 17:16:04]

盡量避免修改存儲變量

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

LBank Solar QNUT售賣BTC專場認購結束 下單總價值超157BTC:據悉,LBank Solar QNUT售賣BTC專場已于3月23日17:00 (UTC+8)結束,共有315人下單申購,下單總價值為157.3623 BTC,總成交金額超過10 BTC,認購成交比例6.35%。LBank將根據個人申購金額占總下單金額的比例進行實際認購額度分發。QNUT/USDT交易對將于同日19:00開通。更多詳情請關注LBank官網公告。[2020/3/23]

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

函數修飾器可能效率低下

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

狗狗幣
亞投所:IACN投顧鏈發行方案_USD

投顧鏈IACN發行總量恒定為10億個,且保證永不增發。發行方案如下:1、市場眾籌母幣:1%,1000萬枚。2、生態挖礦:99%,99000萬枚。 母幣分配方案 1、眾籌:500萬枚.

1900/1/1 0:00:00
購買IPFS/Filecoin礦機,這些套路你不得不看!_數字貨幣

從技術角度看,IPFS實際上并不是一種騙局,這項技術確實有其定位和實際應用價值。當然,使用IPFS/Filecoin并不是一個騙局,Filecoin是分散存儲區塊鏈的一個有價值的項目.

1900/1/1 0:00:00
Filecoin網絡凌晨出現故障,現已恢復丨星際數據_FIL

北京時間12月20日凌晨1:30開始filecoin主網發生重大事故,336458高度之后的區塊無法產生,官方緊急發布事故公告并且發布了新版本進行修復,需要所有礦工升級到最新1.4.0版本.

1900/1/1 0:00:00
JPM Coin 背后的「企業級以太坊」Quorum 如何滿足傳統銀行業需求_OIN

原文標題:《JPMCoin三部曲(中)-摩根大通為何青睞Quorum區塊鏈?》作者:MakerDAO中國區負責人潘超來源:Moneyness研究院本篇聊一聊JPMcoin背后的區塊鏈網絡-Quo.

1900/1/1 0:00:00
支付也能閱后即焚?讀懂剛剛完成減半的隱私幣 Zcash_CAS

隱私幣Zcash順利完成了減半和Canopy網絡升級,了解一下它的發展現狀與隱私機制。撰文:PaulVeradittakit,PanteraCapital合伙人翻譯:盧江飛Zcash已于北京時間.

1900/1/1 0:00:00
BitMEX 首席執行官:預測 2020 加密貨幣期權交易眾生相_BIT

一個將在2020年變得更加流行的策略是:備兌認購策略。原文標題:《何時交易期權?第2部分》撰文:ArthurHayes,BitMEX首席執行官我已經洋洋灑灑花了一長篇文章討論加密貨幣衍生品市場的.

1900/1/1 0:00:00
ads