比特幣行情 比特幣行情
Ctrl+D 比特幣行情
ads
首頁 > TRX > Info

SOL:Solidity Optimizer and ABIEncoderV2 Bug

Author:

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

通過以太坊漏洞賞金計劃,我們收到了關于新的實驗性ABI編碼器(名為ABIEncoderV2)中的一個缺陷報告。經研究,我們發現該組件存在一些相同類型的不同變化。本公告的第一部分詳細解釋了這個錯誤。新的ABI編碼器仍然標記為實驗性的,但我們認為這值得強調,因為它已經在主網上使用。

此外,優化器中的兩個低影響bug在過去兩周內已經被確定,其中一個bug已經在Solidityv0.5.6修復。兩者都是在0.5.5版本中引入的。詳情請參閱本公告的第二部分。

在0.5.7版本中,本文中提到的所有bug與漏洞都已經被修復。

這里提到的所有bug都應該在涉及相關代碼路徑的測試中很容易看到,至少在使用0和非0值的所有組合運行時是這樣。

感謝Melonport團隊(TravisJacobs和JennaZenk)和MelonCouncil(NickMunoz-McDonald,MartinLundfall,MattdiFerrante和AdamKolar),他們通過以太坊漏洞賞金計劃報告了這些!

Solana Status:2850個節點中約有280個節點正在運行v1.16,約占10%:金色財經報道,Solana Status在社交媒體X(原推特)上稱,8月23日,Solana Labs 的核心貢獻者請求志愿者將其主網 beta 節點升級到 v1.16.9,目標是獲得運行 v1.16 的 10% 的權益。這是升級主網測試版的標準操作流程。由一小部分志愿者開始升級有助于發現測試網上尚未發現的任何剩余問題。截至目前,2850個節點中約有280個節點正在運行v1.16,約占10%。其中一些節點遇到了問題,目前節點運營商和核心貢獻者正在調查這些問題。作為計劃測試過程的一部分,在問題得到徹底調查和解決之前,此版本不會進入下一階段。分階段升級旨在在大多數集群升級之前檢測問題,并且是系統按預期工作的結果。[2023/8/31 13:07:49]

誰應該關注

如果您已經部署了使用實驗性ABIencoderV2的合約,那么這些合約可能會受到影響。換言之,只有在源代碼中使用以下指令的合約才會受到影響:

珍珠奶茶零售商Boba Guys利用Solana生態系統來建立其鏈上忠誠度計劃:4月14日消息,加利福尼亞和紐約的珍珠奶茶零售商 Boba Guys 正在利用 Solana 生態系統來建立其鏈上忠誠度計劃,旨在進一步深化其社區并通過其 Web3 獎勵計劃回饋客戶。利用 Solana 的高速、低成本網絡,Boba Guys 計劃集成 NFT 和代幣門控體驗,以幫助加強其消費者參與度。Solana 基金會商業業務發展主管 Josh Fried 表示,Solana 基金會最近向 Boba Guys 投資了 10 萬美元,以幫助該公司將業務擴展到 Web3,同時加速 Web3 忠誠度計劃在整個 Solana 生態系統中的發展。[2023/4/14 14:04:50]

pragmaexperimentalABIEncoderV2;

此外,還有許多需要觸發的bug。有關更多信息,請參閱下面的技術詳細信息。

Solana Labs CEO:Solana將面臨形式驗證、type-rich 字節碼、存儲動態定價等多重挑戰:11月6日消息,Solana Labs首席執行官Anatoly Yakovenko 在 Solana Breakpoint里斯本峰會中表示,Solana將面臨三個艱巨的挑戰,首先是形式驗證,即網絡上的安全保證;其次是type-rich字節碼,這指的是網絡的不同部分如何相互通信;第三是存儲動態定價,這是一種讓驗證者節點管理Solana區塊鏈大小增長多少的方法。未來最大的挑戰是如何讓多個區塊生產者同時運行,如果可以解決這個問題,應該能讓網絡運行得更快。Yakovenko表示,他還希望看到區塊生產與交易執行分離,實現更快地處理Solana區塊鏈上的交易。[2022/11/6 12:21:44]

據我們所知,主網上有大約2500個合同使用實驗ABIEncoderV2。尚不清楚其中有多少存在該bug。

Solana錢包Phantom推出新產品Explore:金色財經消息,Solana錢包Phantom宣布推出新產品Explore,該產品提供移動dapp瀏覽器的精選體驗。據其介紹Explore將有助于瀏覽頂級NFT集合、探索流行的dapp和發現新的NFT集合。[2022/9/2 13:03:45]

如何檢查合約是否受影響

只有當滿足以下所有條件時,該bug才會出現:

涉及到數組或結構的存儲數據直接發送到外部函數調用,發送到abi.encode或發送到eventdata,而無需事先分配給本地變量AND

數組包含大小小于32字節的元素,或者一個結構具有共享存儲槽的元素或類型bytesNN小于32字節的成員。

除此之外,在以下情況下,您的代碼不受影響:

如果所有結構或數組僅使用uint256或int256類型

區塊鏈社交平臺Kin計劃從Stellar轉移至Solana鏈上 以滿足其高速交易需求:移動應用公司Kik在2017年為其區塊鏈項目Kin進行了9800萬美元IC0融資,當時融資是在以太坊區塊鏈上完成的。然后該公司將區塊鏈社交平臺Kin轉移到了Stellar鏈上并開始運行,現在,Stellar似乎也不能滿足其發展需要,Kin表示將在幾個月內轉移到高性能公鏈 Solana 區塊鏈上。

據悉,Kin 改進方案寫道:Stellar 系統使Kin能夠接觸到數以百萬計的消費者,但我們知道這不是一個長期的解決方案。Stellar系統的出塊時間為5秒,因此,不管網絡負載如何,用戶的交易可能會出現5秒的延遲,我們并不認為這是一種很好的用戶體驗。

而Solana是一個高吞吐量的區塊鏈,Solana 基金會的Anatoly Yakovenko說到:Kin 是展示Solana能力的最佳方式之一。我們希望看到其他尋求速度和馬力的項目也遷移到Solana。Kin的改進方案認為,轉移至Solana之后,將使交易延遲時間減少84%。據測量,Solana每秒大約可以處理60000個交易,出塊時間為400ms,不過Solana基金會也會向Kin基金會支付一筆轉移費用,向Kin提供最多1%的SOL代幣供應量 (按今天的價格計算,約為600萬美元),并且在轉移之后的24個月內,每有100萬名新活躍用戶加入,Solana 將會為Kin提供0.1%的代幣解鎖。基于Kin改進提案,Solana基金會將于2021年1月7日開始跟蹤轉移進展。(coindesk)[2020/5/25]

如果您只使用整數類型并且一次只編碼一個數組

如果您只返回此類數據但不使用abi.encode,在外部調用或事件數據中。

如果您的合約符合這些條件,并且想要驗證合約是否確實存在漏洞,您可以通過與我們聯系。

如何防止

為了保守起見,實驗性ABI編碼器只有在明確啟用時才可用,允許人們與它進行交互并測試它,而不會在它被認為穩定之前對它過分信任。

我們盡最大努力確保高質量,并且最近開始研究OSS-Fuzz上某些部分的“語義”模糊測試。

對于開發人員-使用漏洞檢測器等工具很難檢測Solidity編譯器中的,因為對源代碼或抽象語法樹表示進行操作的工具不會檢測僅引入編譯字節碼的缺陷。

防止這些缺陷的最佳方法是為您的合約進行一系列嚴格的端到端測試,因為編譯器中的錯誤很可能不是“靜默”而是表現為無效數據。

危害

當然,根據程序控制流程,任何bug都會產生各種各樣的后果,但我們預計這更容易導致故障而不是可利用性。

當bug被觸發時,在某些情況下會將方法調用上的錯誤參數發送到其他合約。

時間線

2019年3月16日:

通過漏洞賞金計劃進行報告,關于直接從存儲到ABI編碼器的布爾數組中讀取時所導致的損壞。

2019年03月16日至2019年03月21日:

調查根本原因,分析受影響的合約。在主網上部署了大量使用實驗性編碼器編譯的合約,其中許多合約沒有經過一致性校驗的源代碼。

對bug的調查發現了更多觸發bug的方法,例如使用結構。此外,在同一程序中還發現了一個數組溢出錯誤。

檢查了在Github上發現的一些合約,沒有發現任何合約受到影響。

對ABI編碼器進行了錯誤修正。

2019年03月20日:

決定公開信息。

推理:檢測所有易受攻擊的合同并及時與所有作者聯系是不可行的,最好防止主網上的不安全合約進一步擴散。

2019年3月26日:

新的編譯器版本,版本0.5.7。

這篇文章發布了。

技術細節

背景

合約ABI是一種規范如何與來自外部的合約或合約之間的交互來交換數據的規范。它支持各種類型的數據,包括數字,字節和字符串等簡單值,以及更復雜的數據類型,包括數組和結構。

當合同收到輸入數據時,它必須解碼,并且在返回數據或將數據發送到另一個合同之前,它必須對其進行編碼。Solidity編譯器為合約中的每個已定義函數生成這兩段代碼。在Solidity編譯器中,生成編碼器和解碼器的子系統稱為“ABI編碼器”。

2017年中旬,Solidity團隊開始研究名為“ABI編碼器V2”的全新實現,目標是提供更靈活,安全,高性能和可審計的代碼生成器。這個實驗性代碼生成器在明確啟用后,自2017年底開始向用戶提供0.4.19版本。

缺陷

實驗性ABI編碼器不能正確處理短于32個字節的非整數值。這適用于bytesNN類型,bool,enum和其它類型的,當它們是數組或結構的一部分并直接從存儲中編碼時。這意味著這些存儲引用必須直接在內部使用abi.encode(...),作為外部函數調用或事件數據中的參數,而無需事先分配給局部變量。使用return不會觸發錯誤。類型bytesNN和bool將導致數據損壞,但enum可能導致無效revert。

此外,即使基礎類型是整數類型,也可能無法正確處理元素短于32字節的數組。如果編碼的元素數量不是適合單個存儲槽的元素數量的倍數,那么按照上面描述的方式編碼這樣的數組會導致編碼中的其他數據被覆蓋。如果編碼中的數組后面沒有任何內容,或者如果只編碼單個數組,則不會覆蓋其他數據。

兩個無關的bug

與上面解釋的ABI編碼器問題無關,在優化器中發現了兩個錯誤。兩者都引入了0.5.5。除非使用內聯匯編,否則它們不太可能出現在編譯器生成的代碼中。

通過最近為OSS-Fuzz添加Solidity來識別這兩個錯誤-這是一個用于查找各種項目中的差異或問題的安全工具包。對于Solidity,我們已經包含了多個不同的模糊測試器,用于測試編譯器的不同方面。

優化器將操作碼序列轉換((x<<a)<<b))轉換為(x<<(ab))時不會正確處理加法中的溢出。

如果將常量31用作第二個參數,則優化器會錯誤地處理byte操作碼。在對bytesNN編譯時常量值為31的類型執行索引訪問或在內聯匯編中使用字節操作碼時,可能會發生這種情況。

這篇文章由@axic,@chriseth,@holiman聯合撰寫

Tags:SOLOLASOLASolanaSolidexInverse Bitcoin Volatility Index Tokensolana幣總量solana幣價格

TRX
BANK:關于 LBank 將于 4 月 26 日啟動 IOG(Playgroundz) 售賣的公告

尊敬的LBank用戶 LBank將于4月26日開啟IOG(Playgroundz)的售賣活動。 售賣時間: 開始時間:4月26日,2019,14:00(UTC8)結束時間:4月26日,2019,

1900/1/1 0:00:00
TOP:ZG.TOP上線Launchpad第二期項目——BRDT

尊敬的ZG.TOP用戶:ZG.TOP已上線“Launchpad上線通道”,為給優質初創項目提供更快捷的上幣通道,和給予用戶提供早期投資機會.

1900/1/1 0:00:00
ETH:JEX上線月ETH期權0530公告

ETH看漲期權 代碼月ETH看漲0530期權標的ETH合約類型歐式看漲期權計價單位USDT最小價格單位0.0001USDT合約比例25:1.

1900/1/1 0:00:00
GATE:Gate.io公布4月10日“搶購點卡送GT”結果(超過價值5億美金有效下單)

Gate.io“搶購點卡送GT活動”第3天順利完成并第二次打破記錄!2小時的下單量超過了5億美金價值.

1900/1/1 0:00:00
USD:JEX上線周HT期權0503公告

HT看漲期權 代碼周HT看漲0503期權標的HT合約類型歐式看漲期權計價單位USDT最小價格單位0.0001USDT合約比例1:8.

1900/1/1 0:00:00
THE:Bitfinex Respond to New York Attorney General's Actions

Earliertoday,theNewYorkAttorneyGeneral’sofficereleasedanorderitobtained–withoutnoticeorahearing–i.

1900/1/1 0:00:00
ads