買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > BNB價格 > Info

Solana:Solidity 技巧:如何減少字節碼大小及節省 gas_NewSolution 2.0

Author:

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

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對:Tiny熊

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

10個技巧是:

合并打包變量

uint8不總是比uint256便宜

Mappings大部分時候比Arrays便宜

Tensor擬效仿Blur對Solana NFT交易者推出“Season 1 airdrop”空投:金色財經報道,在完成300萬美元新一輪融資后,Solana鏈上NFT市場Tensor宣布擬效仿Blur對Solana NFT交易者進行空投,目前已推出了“Season 1 airdrop”,根據其在社交媒體發布信息顯示,Solana NFT藏家可以領取與其在區塊鏈網絡上的交易活動成比例的免費獎勵盒,任何在過去六個月內在任何市場上買賣 Solana NFT 的人都有資格參與。另據Dune Analytics數據顯示,Tensor的Solana NFT交易額周一飆升至單日新高,達到23,351 SOL(約合48.6萬美元),交易量約為2800筆。據悉,Tensor后續還將推出“Sean 2 airdrop”,但只會獎勵其平臺上的交易活動,而不是更廣泛的 Solana NFT 市場。(decrypt)[2023/3/8 12:48:20]

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

報告:33%的行業專家透露對Solana團隊失去信任的主要原因是網絡中斷問題:金色財經報道,Finder在10月27日分享的一份報告顯示, 33%的行業專家透露,他們對Solana團隊失去信任的主要原因是網絡中斷問題。?盡管存在擔憂,但 55 位金融科技和 Web3 專家中有 37% 表示他們仍然完全信任 Solana,而 30% 表示樂觀,網絡挑戰是增長軌跡的一部分。?值得注意的是,Solana 造成中斷的主要原因尚未確定,這是導致專家意見分歧的一個因素。事實上,22% 的專家組表示,中斷是由于低成本交易,而其余的則提到了集中化等更大的問題。[2022/10/28 11:52:49]

用bytes32而不是string/bytes

Binance US在Tron、Solana、Avalanche和Polygon網絡上允許USDC存款和提款:金色財經報道,Binance US在Tron、Solana、Avalanche和Polygon網絡上允許USDC存款和提款。[2022/10/11 10:30:23]

少使用外部調用

使用外部函數修改器

刪除不需要的變量

使用短電路規則

盡量避免修改存儲變量

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

馬紹爾群島簽署法案,推出加密貨幣作為主權貨幣(sole sovereign currency):CNBC Cryptotrader主持人Ran NeuNer在Twitter上稱,聯合國成員國馬紹爾群島簽署了一項里程碑式的法案,將其主權貨幣(sole sovereign currency)定為一種加密貨幣,這意味著該國加密貨幣合法化。該國銀行等機構必須支持該種加密貨幣。[2018/5/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:SOLLANASolanaSOLANewSolution 2.0solana幣今日價格行情solana幣SOLAPE

BNB價格
ALA:流動性池可自定義?Pantera 合伙人解析 Balancer 「智能池」_BAL

DeFi協議須思考如何為用戶提供高度可定制且多功能的平臺,Balancer智能池是在自定義和開源策略方面的積極實踐.

1900/1/1 0:00:00
區塊鏈:冒志鴻:究竟什么是去中心化應用?_比特幣

進入2019年,加密貨幣市場依然低迷,「公鏈」危機卻接踵而至,「去中心化應用」一時間成為熊市寒冬里的希望,不斷有各種自稱去中心化應用的類游戲日創千萬交易流水的消息傳出.

1900/1/1 0:00:00
比特幣:No.79 | 區塊鏈投資與非對稱風險_Metronome

前言:周末看了一本書《非對稱風險》,本書的作者納西姆·塔勒布,原書名《Skininthegame》,塔勒布是我們這個時代偉大的思想者之一,塔勒布傾其一生研究不確定性、概率和知識的問題.

1900/1/1 0:00:00
CELO:亞洲區塊鏈速覽:嘉楠耘智或本月赴美上市,IOTA 聯創退圈做 VR_CELL價格

GlobalCoinResearch每周發布兩次亞洲區塊鏈市場新聞Newsletter,該公司是一家專注于亞洲區塊鏈市場及技術的投研公司.

1900/1/1 0:00:00
USDT:比特幣暴漲至24000,合理回調才能持久上漲,現在怎么獲取比特幣_usdm幣是什么幣

比特幣由于機構投資者的涌入以及現實世界資產與加密貨幣的互通性增強,這次比特幣價格達到2萬美元與2017年牛市完全不一樣:“這只是剛剛開始,散戶還沒有大量涌入,主要是機構在買.

1900/1/1 0:00:00
CHA:分布式資本黃凌波:區塊鏈行業或迎來企業數據上鏈大爆發_Crab Contract

黃凌波認為2020年會有越來越多來自傳統企業、政府、金融機構的傳統數據開始上鏈,將極大地豐富區塊鏈行業生態,帶來各種革新的商業機會.

1900/1/1 0:00:00
ads