譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對:Tiny熊
Solidity是一種特殊的語言,有許多的奇怪巧。由于Solidity被創建為可在EVM上使用其有限的函數集,因此許多函數在Solidity中的行為與大多數其他語言不同。幾個月前我寫了一篇博客文章,通過有十個技巧來節省Solidity中的gas消耗,但是收到了很大的反響。
10個技巧是:
合并打包變量
uint8不總是比uint256便宜
Mappings大部分時候比Arrays便宜
Solana生態DEX Cypher遭遇黑客攻擊,損失約100萬美元加密資產:8月8日消息,Solana生態去中心化交易平臺Cypher遭遇黑客攻擊,損失約100萬美元加密資產。目前,該協議的合約已被凍結,開發者正在嘗試與黑客取得聯系,以協商退還資金。[2023/8/8 21:31:53]
不是所有的元素可以被打包
用bytes32而不是string/bytes
少使用外部調用
使用外部函數修改器
刪除不需要的變量
使用短電路規則
盡量避免修改存儲變量
Absolute Labs完成800萬美元種子輪融資:4月12日消息,據官網消息,Web3錢包關系管理平臺WRM開發商Absolute Labs宣布完成800萬美元種子輪融資,Aglaé Ventures、Alpha Praetorian Capital、The Luxury Fund、Near Foundation、MoonPay、Plassa Capital、Punja Global Ventures、Samsung Next、Sparkle Ventures (Animoca Brands) 和 W3i參投,該公司打算利用這筆資金擴大業務和業務范圍。
據悉,WRM平臺的用戶包括LVMH、The Sandbox、Moonpay和Mocaverse,這是一款Web3 CRM解決方案,使營銷人員能夠獲得對潛在客戶的重要見解,統一Web2和Web3鏈上數據,確定可操作的細分并自動化跨渠道活動,包括整個營銷渠道中的NFT空投。[2023/4/12 13:58:17]
在我的專欄:智能合約開發-打通Solidity任督二脈,有更多的文章深入介紹如何介紹GAS,訂閱超值。
慢霧:Solana公鏈上發生大規模盜幣,建議用戶先將熱錢包代幣轉移到硬件錢包或知名交易所:8月3日消息,據慢霧區情報,Solana公鏈上發生大規模盜幣事件,大量用戶在不知情的情況下被轉移SOL和SPL代幣,慢霧安全團隊對此事件進行跟蹤分析:
已知攻擊者地址:
Htp9MGP8Tig923ZFY7Qf2zzbMUmYneFRAhSp7vSg4wxV、CEzN7mqP9xoxn2HdyW6fjEJ73t7qaX9Rp2zyS6hb3iEu、5WwBYgQG6BdErM2nNNyUmQXfcUnB68b6kesxBywh1J3n、GeEccGJ9BEzVbVor1njkBCCiqXJbXVeDHaXDCrBDbmuy
目前攻擊仍在進行,從交易特征上看,攻擊者在沒有使用攻擊合約的情況下,對賬號進行簽名轉賬,初步判斷是私鑰泄露。不少受害者反饋,他們使用過多種不同的錢包,以移動端錢包為主,我們推測可能問題出現在軟件供應鏈上。在新證據被發現前,我們建議用戶先將熱錢包代幣轉移到硬件錢包或知名交易所等相對安全的位置,等待事件分析結果。[2022/8/3 2:55:22]
從那篇文章起,我又收集了更多的技巧與大家分享,再次分享給大家:
Solana Labs CEO:網絡是否再次出現故障“并不重要”:金色財經報道,9 月Solana 網絡在每秒處理數十萬筆交易后脫機,過程持續了17個小時。?Solana Labs 的首席執行官兼 Solana 的聯合創始人 Anatoly Yakovenko 當被問及網絡再次出現故障的可能性有多大時,Yakovenko表示,這并不重要,只要賬本至少有一份副本,資金仍然是安全的,交易最終會得到處理。Yakovenko 將停機時間比作塊之間特別長的等待。他聲稱 Solana 并沒有真正下線,只是在那段時間沒有確認的區塊。他指出,比特幣可能有兩個小時沒有區塊的時期。他還聲稱,其他區塊鏈平臺,如比特幣和以太坊,在交易過程中提供軟擔保——特別是對于那些沒有資金支付交易費用的人。但Yakovenko承認,對于需要高速處理交易的人來說,停機時間是一個問題。對于關心在 40 毫秒內傳遞消息的人來說,這很重要。(theblockcrypto)[2021/11/20 7:00:22]
函數修飾器可能效率低下
添加函數修飾器時,將提取修飾器的代碼并替換函數內出現的_符號。這也可以理解為函數修飾器是內聯的。在普通的編程語言中,內聯小代碼更高效,并且不有任何實際的缺點,但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意味著什么?
加密貨幣行業是一個資產選擇過剩、波動過剩、交易平臺過剩、信息過剩等多重「過剩陷阱」疊加的行業,所以行業周期被快速壓縮.
1900/1/1 0:00:00比特幣主要由三個部分組成。其中,工作量證明和公鑰密碼學這兩個部分均基于數學層面,第三個部分則是人類行為。說白了,比特幣要想持續運行下去,是需要人來維護的,因此離不開經濟激勵系統。
1900/1/1 0:00:00目前100000人已關注加入我們掃一掃下載全網最新數據報告 查看完整報告請閱讀全文 查看完整報告請閱讀全文 以上資料均從網絡公開資料收集整理而成.
1900/1/1 0:00:00本文不構成任何投資建議,投資有風險,入市需謹慎!最近大家都很難,市場萎縮的厲害,山寨一片哀嚎,連平臺幣都一輪大跌。但是,我想說。希望也許就在眼前.
1900/1/1 0:00:00流民主投票委托「專業的人做專業的決策」,對提高現有治理場景中「投票的參與率」有很大的效果。原文標題:《DAOFest回顧:流民主算法能否解決當前區塊鏈治理的困境》撰文:ASResearch在區塊.
1900/1/1 0:00:00隨著社會的發展,科技的進步,新事物取代新事物是必然的。就比如大哥大必然取代BB機,智能手機必然取代傳統手機,新能源汽車取代燃油汽車一樣,是人類社會發展的趨勢,也是社會發展的必然結果.
1900/1/1 0:00:00