以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads

OpenEthereum 客戶端 “柏林” 升級出錯始末_ETH

Author:

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

Alex:

你可能已經聽說了,@OpenEthereum客戶端的一個錯誤導致了一些支撐以太坊網絡的重要服務宕機。

我們來琢磨一下那筆造成事故的交易。

首先,我想感謝所有快速反應到事故并解決了問題的工程師:

https://twitter.com/OpenEthereumOrg/status/1382719444833726470?s=20…

另外,我沒有自己跟蹤所有的細節,下文中的重要事實都由用戶eb在EthR&Ddiscord服務器里提出。

先從那筆觸發了錯誤的交易開始:

https://etherscan.io/tx/0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247

ConsenSys:OpenSea在2021三季度占據97%的NFT市場交易量:12月10日消息,據ConsenSys分析指出,OpenSea在2021三季度占據了97%的NFT市場交易量,在創紀錄的8月份,該平臺占到NFT市場總銷售額32.5億美元中的31.6億美元,此外OpenSea上6,000多個NFT集合至少經歷了一次交易,包括購買、出售或鑄造。而直到今年4月NFT市場中占據主導地位的還是NiftyGateway,但從二季度開始OpenSea迅速崛起。另據DuneAnalytics顯示,12月8日,OpenSea的日交易量超過1.46億美元,接近2021年9月至10月期間的水平,一些用戶推測,原因之一可能是當日相對較低的gas費用。[2021/12/10 7:30:15]

這是一筆合約調用交易,從KuCoin交易所發出,向許多地址分發ETH。對該筆交易的calldata的ABI編碼錯誤,最終導致了鏈分裂。你可以在Etherscan上看看這筆交易的“InputData”。

華為即將全新發布操作系統openEuler歐拉:9月23日消息,華為官微消息,9月25日,華為將全新發布操作系統openEuler歐拉。日前,任正非表示,歐拉正在大踏步地前進,歐拉的定位是瞄準國家數字基礎設施的操作系統和生態底座,承擔著支撐構建領先、可靠、安全的數字基礎的歷史使命。[2021/9/23 17:00:08]

在合約中調用sendEths時,需要提供兩個參數:一個是關于目標地址的不定長數組;一個是關于轉賬數額的不定長數組;兩者相搭配才知道要轉移多少錢給哪個地址。

我們可以解析calldata來看看到底哪里出了錯:第一行表示地址列表從字節64開始。第二行表示轉移數額的列表從字節416開始。

?因此,大體上,我們是希望成對成對地、從上往下、向某個地址發送一定數量的ETH——看起來很直接嘛。

CtopEX幣高交易所投資湖南飛爾數礦信息有限公司500萬美金:據官方消息,CtopEX幣高交易所于5月24投資湖南飛爾數礦信息有限公司500萬美金,用于Swarm節點搭建,雙方將深度整合行業優勢資源,攜手共建全球分布式存儲的社區建設和生態發展,引領數字化存儲新時代。打通上下游產業鏈,完善產業布局。[2021/5/24 22:38:48]

然而,當我們開始遍歷這個列表,我們先跳轉到calldata的正確字節,而SolidityABI聲明了數據的第一個字是整個不定長數組的長度。

這就是最終bug的根源:因為calldada中的值是“0x10”,但是calldata只給出了10個?地址-數值對。對這個calldata的正確ABI編碼應該是“0xA”——不是“0x10”!

你可能已經猜到了那時候會發生什么事,我們可以通過執行情況跟蹤器來看看:

動態 | Opera與Ledger Capital合作探索區塊鏈應用:據9月28日發布的一份新聞稿稱,Opera已經與區塊鏈咨詢和金融服務公司Ledger Capital合作,探索可能的區塊鏈應用。根據聲明,這兩家公司正在調查區塊鏈的應用和用例,以及如何將該技術部署到Opera產品及其生態系統中。此前曾報道,Opera成為第一個包含內置加密貨幣錢包的主要web瀏覽器。Opera crypto wallet的產品負責人查爾斯?哈默爾(Charles Hamel)在評論這項舉措時說:“用crypto錢包付款就像直接從手機發送數字現金一樣……這為商家和內容創造者帶來了新的可能性。”[2018/9/29]

https://etherscan.io/vmtrace?txhash=0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247&type=parity

合約成功地遍歷了前10個地址。本來合約應該在此時停止執行,但根據calldata的聲明,還有很多個地址!那就繼續執行吧。

但是,根據calldata的結構,“第11個地址”是用于編碼列表長度的0x10,所以合約就嘗試發送0ETH到地址0x10。

此外,似乎,當合約嘗試讀取并不存在的calldata時,會返回0ETH——你可以想象成合約在這里跑出了一個錯誤,但它卻繼續發送0ETH到它從calldata中讀取的另外6個“地址”。

此時,你可能會注意到,0x10有可能是我們所謂的“特殊地址”之一,它完全在EVM預編譯合約的范圍內。

而我們也并不期望預編譯合約0x10能夠返回ETH。如此,它就成了一個ETH黑洞。但是,這也并不必然造成任何問題。到底是什么導致了整個客戶端崩潰?

原因在于,0x10實際上是一個由EIP-2537斷言的預編譯合約,是為BLS配對密碼學程序而設的,但這個EIP還未部署到主網上。所以雖然你能夠跟這個地址互動,但主網上的這個地址里沒有任何合約,不會有任何進一步的動作。

此外,我們還需要一個事實來解釋這次分裂,你可能也猜到了,就是“柏林”硬分叉:它改變了EVM中Gas消耗量的計量方法。

在EIP-2929實施后,如果你在一筆交易中對同一個存儲槽多次執行狀態存儲操作,第一次執行會消耗更多Gas,后續執行的消耗會更少。這種重定價理論上能更準確地反映當前的客戶端訪問存儲項的成本……

而且,要知道,在所有客戶端的執行中,這些數據通常都換存在更便宜的硬件層中。

現在我們終于找到了OpenEthereum在區塊#12244294處發生的Bug:該客戶端包含了所有已實現的預編譯,作為EIP-2929訪問清單的一部分。

因為EIP-2537在大部分客戶端中都已經實現就緒了,OpenEthereum對所有訪問了0x10的交易都給了gas折扣。

但網絡的絕大部分活躍客戶端都不是這樣實現EIP-2929的,它們只會給訪問了已激活預編譯合約的交易提供gas折扣——而EIP-2537屬于還未激活的預編譯合約!所以,OpenEthereum客戶端對該交易消耗了多少Gas的計算與網絡中其他客戶端發生了分歧。

所幸,@mhswende很快找出了該bug,而@sorpaas出力修復了該bug:https://github.com/openethereum/openethereum/pull/364

還有很多東西可說,我也預期會有比我更能觀察到全貌人來撰寫更好的時候報告。

我能說的只是,這個bug彰顯了硬分叉的內在風險,以及持續致力于建設更有彈性的基礎設施的重要性。

依賴于OpenEthereum客戶端的單客戶端系統在今天停機了一段時間,因為客戶端無法在問題區塊出現后與網絡保持同步。Etherscan自身也因此停機。

慶幸的是,這個bug沒有嚴重到導致重大的鏈分叉,但這樣的可能性并不是不存在。我們可以利用多客戶端實現來提升抗性——多客戶端本身就是我們以太坊生態的一大長處——并推動您的基礎設施提供商也這樣做。

我們已經看到,2021年的普及速度已經前所未有地快,而且前景非常光明。我們要從這個事故中吸取教訓,一起打造更好的以太坊。

Tags:ETHPENOPENHERLift.Kitchen ETHPepeNetworkOpen CampusEthereumFair

抹茶交易所
BKEX Global 關于ETP專區新增DGB3L、DGB3S的公告_KEX

尊敬的用戶: BKEXGlobalETP專區將于2021年4月21日15:00上線DGB3L、DGB3S.

1900/1/1 0:00:00
期權市場:利好兌現 | Blofin_比特幣

2021年4月14日,Coinbase在美國納斯達克公開上市,Coinbase每股參考價為250美元,上市當日開盤價格即為381美元,漲幅超過50%.

1900/1/1 0:00:00
聯農寶,首個區塊鏈農業電商平臺 科技帶你顛覆傳統生活_區塊鏈

鄉村農產品是純天然、無公害、原生態的綠色食品,“綠色食品”主要來源就是鄉村。但卻因為交通不便而造成這種農產品的銷售成為主要難題,鄉村銷售農產品大多是在本地鄉鎮上擺攤售賣,但是因為鄉鎮人口較少,而.

1900/1/1 0:00:00
如何理解 DeFi?(下):去中心化交易所和保險_DEFI

在上周《如何理解DeFi》我們介紹了什么是DeFi、去中心化穩定幣和去中心化借貸。今天這篇文章會向大家繼續介紹DeFi中的去中心化交易所、去中心化衍生品和去中心化保險.

1900/1/1 0:00:00
哪些國家的比特幣挖礦事業蒸蒸日上?_比特幣

挖礦是比特幣等其他加密貨幣的核心基礎。比特幣的挖礦是一種保護網絡安全、實現獎勵的機制,并且是加密貨幣去中心化精神的關鍵。挖礦將交易數據添加到區塊鏈中,并解鎖新的比特幣誕生,使整個網絡井然有序.

1900/1/1 0:00:00
關于SHIB\/USDT下線的公告_AEX

親愛的AEX安銀小伙伴:因運營規劃調整,自發布公告起,已下線SHIB/USDT交易對。·未完成撤單的用戶,屆時我們將統一撤銷用戶掛單并關閉交易對并開啟提幣Patrick Hansen:歐盟目前還.

1900/1/1 0:00:00
ads