以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > ICP > Info

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

Author:

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

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對:Tiny熊

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

10個技巧是:

合并打包變量

uint8不總是比uint256便宜

Mappings大部分時候比Arrays便宜

幣安恢復Solana鏈上USDT充值業務:11月17日消息,幣安發布公告稱,經過內部評估和審查,幣安現已恢復USDT(Solana鏈)的充值。[2022/11/18 13:19:01]

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

用bytes32而不是string/bytes

少使用外部調用

使用外部函數修改器

刪除不需要的變量

使用短電路規則

盡量避免修改存儲變量

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

歐科云鏈OKLink上線Solana區塊鏈瀏覽器:5月23日消息,歐科云鏈 OKLink 宣布上線Solana區塊鏈瀏覽器,成首款提供中文界面的Solana瀏覽器。新上線的Solana瀏覽器,提供六大賬戶分類展示,支持全部交易行為解析。

作為OKLink區塊鏈瀏覽器15條公鏈中第一個支持Account模型中非EVM系的公鏈,Solana瀏覽器不僅支持鏈上數據查詢,還提供了交易概覽、鏈上概要、區塊信息、供應量等關鍵性數據。

據悉,OKLink區塊鏈瀏覽器此前已支持BTC、ETH、BSC、Polygon等多個主流公鏈數據查詢與檢索,并提供鏈上全周期、多維度的數據指標。[2022/5/23 3:35:50]

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

Stepn:不會在Solana以及BNBChain之間建立跨鏈橋:金色財經消息,對于Ronin跨鏈橋被攻擊事件,Web3鏈游Stepn表示,在四月份的Solana和BNBChain整合中,將不會建立跨鏈橋梁,兩個生態保持獨立。[2022/3/30 14:25:45]

函數修飾器可能效率低下

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

VaultAge Solutions首席執行官被指控盜竊數百萬美元的加密貨幣:AllAfrica的一份報告指出,南非加密貨幣投資公司VaultAge Solutions首席執行官Willie Breedt被指控盜竊數百萬美元的加密貨幣。據稱,Breedt已逃離南非前往莫桑比克。自2019年12月以來,他從未與投資者進行過溝通。目前,該國刑事調查部門正在調查他的下落。(Cryptoglobe)[2020/6/1]

另一方面,內部函數不是內聯的,而是稱為獨立函數。這意味著它們在運行時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:SOLSolanaBOOSOLASOLOsolana幣發行價格bookchainSolarCoin

ICP
如何使用閃電貸從 0 撬動百萬美元?Value DeFi 協議閃電貸攻擊簡要分析_CRV

By:慢霧安全團隊 據慢霧區消息,2020年11月15日,ValueDeFi的ValueDeFiMultiStables保險庫遭遇閃電貸攻擊,慢霧安全團隊于第一時間跟進并進行相關分析.

1900/1/1 0:00:00
鏈游玩家周報(12.14-12.20)_區塊鏈

導語:上周鏈游玩家平臺動態總覽:首席福利官鏈小銀直播;《小魚探險記》12.15上線鏈游玩家平臺;《掛出個大俠》12.17上線鏈游玩家平臺.

1900/1/1 0:00:00
2020 年 11 月收益最高的 yield farming 有哪些?_ING

yieldfarming為用戶提供了一種新的方式,通過使用無許可流動性協議持有加密貨幣來獲得回報。它允許任何人使用基于以太坊區塊鏈構建的去中心化的“貨幣樂高”生態系統來賺取被動收入.

1900/1/1 0:00:00
幣圈未來思考(一)以太坊帝國的黃昏_以太坊

本文不構成任何投資建議,投資有風險,入市需謹慎!以太坊是目前當之無愧的山寨幣老大,也是很多人的信仰,ETH2.0經過了幾年的建設,也見到了曙光,但是我潑一盆冷水,看似輝煌的背后.

1900/1/1 0:00:00
肖風:區塊鏈商業突破將由開發者推動,DFINITY 是面向開發者的友好型網絡_區塊鏈

區塊鏈商業突破與消費互聯網的商業路徑不同,消費互聯網是消費者驅動網絡運行,而區塊鏈是開發者驅動網絡運行.

1900/1/1 0:00:00
謝晗劍:CKB,版本控制與區塊鏈演進_CKB

Git讓生活變得更加有趣,我希望CKB也可以做到這一點。原文標題:《CKB,版本控制與區塊鏈演進》撰文:謝晗劍,Nervos首席架構師,秘猿科技首席執行官,前以太坊核心研發團隊成員我是Linus.

1900/1/1 0:00:00
ads