比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads
首頁 > DOGE > Info

SOL:Solidity 技巧:如何減少字節碼大小及節省 gas_BOO價格

Author:

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

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對:Tiny熊

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

10個技巧是:

合并打包變量

uint8不總是比uint256便宜

Mappings大部分時候比Arrays便宜

Solana基金會推出100萬美元基金,并推出ChatGPT相關插件:4月26日消息,據官方推特,Solana基金會宣布推出100萬美元的小規模基金,用于探索Solana區塊鏈和人工智能的交互。贈款范圍從5000美元到25000美元不等,新的和現有的項目都有資格獲得資助,旨在鼓勵Solana生態系統探索人工智能的新用例。要獲得資助,工具或應用程序必須公開供他人使用、發布時開源、有可供基金會使用的源代碼。此外,SolanaLabs已經為ChatGPT插件創建了一個開源參考實現,該插件允許用戶直接從ChatGPT與Solana網絡進行交互。一旦ChatGPT插件可用,用戶將能夠檢查錢包余額,轉移代幣和購買NFT。[2023/4/26 14:26:59]

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

THNDR Games推出P2E紙牌游戲Club Bitcoin: Solitaire:9月20日消息,比特幣游戲公司THNDR Games發布P2E手機版紙牌游戲Club Bitcoin: Solitaire。該游戲將允許玩家在玩紙牌游戲的同時賺取比特幣。(CoinDesk)[2022/9/20 7:07:06]

用bytes32而不是string/bytes

少使用外部調用

使用外部函數修改器

刪除不需要的變量

使用短電路規則

盡量避免修改存儲變量

Solana生態去中心化保險協議Amulet Protocol已啟動測試網:9月7日消息,Solana生態去中心化保險協議Amulet Protocol已啟動測試網,用戶可在測試的同時完成項目團隊提供的任務來獲得獎勵。Amulet 表示目前正在接受Kudelski的審計,主網計劃于月底推出。

此前報道,Amulet Protocol于今年4月底宣布完成了由gumi Cryptos Capital領投的600萬美元種子輪融資。[2022/9/7 13:14:26]

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

Solend在智能合約漏洞賞金平臺Immunefi推出漏洞賞金計劃:Solana生態借貸協議Solend在智能合約漏洞賞金平臺Immunefi推出漏洞賞金計劃,賞金總上限為50萬美元。漏洞按等級分別獎勵高達5萬美元、2萬美元和5千美元。漏洞范圍為:因凍結或盜竊而損失(本金)用戶資金;治理資金丟失;盜竊無人申領的收益;凍結無人申領的收益;資金暫時凍結至少1小時;無法調用智能合約。[2021/8/15 22:15:54]

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

函數修飾器可能效率低下

添加函數修飾器時,將提取修飾器的代碼并替換函數內出現的_符號。這也可以理解為函數修飾器是內聯的。在普通的編程語言中,內聯小代碼更高效,并且不有任何實際的缺點,但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:SOLSolanaBOOOLAsol幣發行價格是多少solana幣什么意思BOO價格solana幣官網

DOGE
區塊鏈:資產的數字化表達:從資產的定義理解比特幣等區塊鏈數字資產_比特幣市值走勢圖最新

互聯網是文字-紙張技術在信息傳播場景中的數字化升級,而區塊鏈是文字-紙張技術在合約支持場景中的數字化升級.

1900/1/1 0:00:00
區塊鏈:Nervos 謝晗劍:互操作性 2.0 讓用戶從任何入口進入區塊鏈_比特幣鉆石今日最新價格

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

1900/1/1 0:00:00
區塊鏈:以科斯交易成本視角看,區塊鏈是否有望打破公司這種組織?_coinbase

其實每一項技術革命,最終都將以改變社會組織形態的面貌出現,90年代因為互聯網技術革命,許多思想先驅認為,互聯網讓人們可以在一個龐大開放的網絡上進行交流和協作,從而會打破公司這種組織.

1900/1/1 0:00:00
ACA:Acala 創世已通過慢霧科技安全審計_CAL

近期,慢霧科技安全團隊正式完成了對Acala的安全審計服務。Acala——全球首個去中心化開放式金融聯盟、Polkadot生態金融中心,旨在聯合Polkadot生態系統創建開放式金融框架,為全球.

1900/1/1 0:00:00
比特幣:談喻凱:空頭散戶韭菜被割成泡沫 比特幣牛市還有多遠_CUSDT幣

比特幣的價格在這幾個月出現了大幅上漲,從1萬美元迅速上漲到近期歷史最高水平24000美元左右。在短短幾個月的時間里上漲超過135%。市場討論比特幣的價格在達到24000美元之后的走勢是一種猜測.

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

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

1900/1/1 0:00:00
ads