譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對:Tiny熊
Solidity是一種特殊的語言,有許多的奇怪巧。由于Solidity被創建為可在EVM上使用其有限的函數集,因此許多函數在Solidity中的行為與大多數其他語言不同。幾個月前我寫了一篇博客文章,通過有十個技巧來節省Solidity中的gas消耗,但是收到了很大的反響。
10個技巧是:
合并打包變量
uint8不總是比uint256便宜
Mappings大部分時候比Arrays便宜
Solana基金會將于2023年10月30日開始舉辦Solana生態會議:金色財經報道,Solana 基金會宣布將于2023年10 月 30 日至 11 月 3 日在阿姆斯特丹舉辦 Solana 生態系統的旗艦會議。[2023/5/16 15:06:49]
不是所有的元素可以被打包
用bytes32而不是string/bytes
少使用外部調用
使用外部函數修改器
刪除不需要的變量
使用短電路規則
盡量避免修改存儲變量
在我的專欄:智能合約開發-打通Solidity任督二脈,有更多的文章深入介紹如何介紹GAS,訂閱超值。
數據:當前Solana生態總市值為135.2億美元:金色財經消息,據CoinGecko最新數據顯示,當前Solana生態總市值為135.2億美元(截至發稿時為13,520,031,549 美元),24小時交易額為1,410,972,920美元。[2022/8/3 2:55:37]
從那篇文章起,我又收集了更多的技巧與大家分享,再次分享給大家:
函數修飾器可能效率低下
添加函數修飾器時,將提取修飾器的代碼并替換函數內出現的_符號。這也可以理解為函數修飾器是內聯的。在普通的編程語言中,內聯小代碼更高效,并且不有任何實際的缺點,但Solidity不同。在Solidity中,EIP170將合約的最大大小限制為24KB,如果同一代碼多次內聯,則加起來就會很容易達到24KB大小限制。
Magic Eden:建議Solana錢包用戶轉移加密資產至新建錢包:8月3日消息,Solana 生態 NFT 市場 Magic Eden 在推特上表示,經進一步調查,Magic Eden 團隊建議為保護個人資產,用戶還要做以下工作:
1. 用新的助記詞創建一個新錢包
2. 把所有 NFT 和有流動性的加密貨幣轉移至新錢包
或者更穩妥的是把所有資產都放進冷錢包。
此前報道,Solana 生態 NFT 市場 Magic Eden 在社交媒體上發布警告稱,似乎有一個波及面極廣的 SOL 漏洞,正在耗盡整個生態系統的錢包。Magic Eden 提醒用戶進行以下設置保護個人資產:1. 進入 Phantom 錢包設置頁面;2. 點擊受信應用;3. 撤銷任何可疑鏈接的權限。[2022/8/3 2:55:15]
另一方面,內部函數不是內聯的,而是稱為獨立函數。這意味著它們在運行時gas要稍微貴一點,但是在部署中可以節省很多冗余字節碼。內部函數還可以幫助避免可怕的“堆棧太深錯誤”,因為在內部函數中創建的變量與原始函數不會共享相同的堆棧,但是在修飾器中創建的變量共享相同的堆棧。
Robinhood疑似上線Solana、Polygon、Shiba和Compound:4月12日消息,部分用戶在社交媒體上反映,在美股經紀商Robinhood應用中發現上線Shiba、Solana、Polygon和Compound,目前尚無官方公告發布相關信息。[2022/4/12 14:20:31]
通過這種技巧,我將一份合約的大小從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意味著什么?
今天,一好哥們來拜訪我。他是Discuz時代的互聯網創業者。和我說起了最近在做的toB的企業服務平臺。我們聊起了互聯網思維。比特傻告訴他互聯網所代表的效率、用戶體驗和鏈接思維,已經落后于時代.
1900/1/1 0:00:00去中心化仲裁協議Kleros將會成為DeFi和LegalTech的新寵,其開發出基于以太坊區塊鏈的仲裁協議,目標是建立去中心化司法平臺,為所有爭端提供快速、安全、負擔得起的仲裁.
1900/1/1 0:00:00譯文出自:登鏈翻譯計劃 譯者:翻譯小組 校對:Tiny熊 在本系列教程中,探索圍繞以太坊建立使用去中心化交易所(DEX)開發一個簡單的自動交易機器人.
1900/1/1 0:00:00作者:肖磊看市 公眾號:kanshi1314最近有很多同學在問,如何看待美日印澳可能組成的對華施壓“聯盟”,是否可以理解為二戰后美國和歐洲為了對抗蘇聯,建立的“北約”軍事同盟.
1900/1/1 0:00:00暴走時評:2020年對于以太坊來說,可謂是波瀾起伏的一年。DeFi的意外大熱給以太坊網絡帶來無限風光的同時也造成了令人望而卻步的網絡擁堵和居高不下的GAS費用.
1900/1/1 0:00:00要在以太坊上構建去中心化應用,你需要知道如何發送交易、簽名并廣播到網絡。通過交易可以轉移以太幣、部署自己的合約以及與其他智能合約交互.
1900/1/1 0:00:00