以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads
首頁 > 比特幣 > Info

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

Author:

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

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對:Tiny熊

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

10個技巧是:

合并打包變量

uint8不總是比uint256便宜

Mappings大部分時候比Arrays便宜

數據:當前Solana生態總市值約為146.78億美元:金色財經報道,據CoinGecko最新數據顯示,當前Solana生態總市值約為146.78億美元(截至發稿時為14,678,362,030美元,24小時增漲26.3%),24小時交易額約為66.55億美元(截至發稿時為6,655,999,822美元)。[2023/1/15 11:12:52]

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

用bytes32而不是string/bytes

少使用外部調用

使用外部函數修改器

刪除不需要的變量

Coinbase:目前正在調查Solana幣提款延遲問題:7月7日消息,加密貨幣交易所Coinbase表示,目前正在調查Solana幣提款延遲問題。(金十)[2022/7/7 1:58:43]

使用短電路規則

盡量避免修改存儲變量

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

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

函數修飾器可能效率低下

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

Solana NFT游戲Genopets將上線Raydium去中心化公募平臺AcceleRaytor:11月3日消息,基于Solana的鏈上訂單簿AMM Raydium Protocol宣布,Solana生態“Move-to-Earn”NFT游戲Genopets將在其去中心化募資平臺AcceleRaytor啟動。

據此前報道,Genopets完成830萬美元種子輪融資,Konvoy Ventures和Pantera Capital領投。[2021/11/3 6:29:14]

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

Mark Cuban 旗下公司正在招聘 Solidity 智能合約開發者:根據一份公開的招聘表單顯示,達拉斯獨行俠老板 Mark Cuban 旗下公司正在招聘一名以太坊原生的智能合約開發者,需要擁有全面的技能和 Solidity 的專業知識,并表示\"Mark Cuban 熱衷于在以太坊區塊鏈上建立許多不同的令人興奮的項目\"。申請者需要提交曾經開發過的最佳智能合約的地址,以及郵箱地址。[2021/4/6 19:50:37]

通過這種技巧,我將一份合約的大小從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:SOLDITSOLIDLIDSOL幣很垃圾credit幣價格SOLID價格

比特幣
區塊鏈與人工智能的交集_人工智能:比特幣

現階段,號稱顛覆世界的兩項科技正各自面臨著難以攻克的問題,一邊是隨著人類科學技術的提升和生活水平的提高,AI領域的算力矛盾日漸突出;一邊是區塊鏈難以落地,僅停留在炒空氣幣的層面.

1900/1/1 0:00:00
專訪孟巖:DeFi 是 Web 3.0 的價值層協議_DEFI:DEF

數字資產研究院副院長孟巖分享Web3.0的特性、本質及DeFi的發展趨勢。原文標題:《Web3.0對話馬拉松|專訪孟巖:Web3.0是對互聯網初衷的回歸》受訪者:孟巖,數字資產研究院副院長,優證.

1900/1/1 0:00:00
萬向肖風:區塊鏈是集成計算、存儲與激勵等功能的應用基礎設施_Uniswap:eSwapping

肖風認為,區塊鏈的終極應用模式是通過高度集成各項功能,成為公共基礎設施,從而降低創業門檻、催生偉大應用.

1900/1/1 0:00:00
PoS 專業服務生態日漸成熟,他們眼中 Staking Economy 在 2020 年前景如何?_STAK:POS

鏈聞邀請了stake.fish、Wetez、ping.pub、節點易在內的專業節點服務商來聊聊一下PoS領域的一線工作者們對于2019年的總結和對2020年的展望.

1900/1/1 0:00:00
谷燕西:探討 Coinbase IPO 對加密數字金融影響_OIN:COI

Coinbase如果成功上市,會進一步推高比特幣價格,并促進加密數字金融基礎設施發展。原文標題:《Coinbase的IPO會加速加密數字金融的發展》撰文:谷燕西,美國力研咨詢公司創始人、區塊鏈和.

1900/1/1 0:00:00
以凱恩斯選美與納什均衡視角,比特幣是世界貨幣還是毫無價值?_ETH:BET

在一個沒有估值共識的市場,投資的行為更像是凱恩斯選美比賽,大家對其他人認為有價值的資產進行投資,同時,也沒有一個明確的納什均衡來形成最終的穩定.

1900/1/1 0:00:00
ads