比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads
首頁 > MATIC > Info

ETH:OpenEthereum 客戶端 “柏林” 升級出錯始末_OPEN

Author:

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

Alex Stokes@ralexstokes:

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

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

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

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

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

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

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

ENS近24小時交易額增長67%,排名達到OpenSea第一:金色財經報道,據OpenSea最新數據顯示,ENS過去24小時的交易額為687 ETH,增長率為67%。近24小時交易額排名位列OpenSea第一。[2022/9/6 13:10:43]

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

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

我們可以解析 call data 來看看到底哪里出了錯:第一行(在 Etherscan 上標記為 ?“”)表示地址列表從字節 64(行 “”)開始。第二行表示轉移數額的列表從字節 416(行 “”)開始。

Slope回應:未在集中式服務器上存儲個人數據,仍在調查具體原因:8月4日消息,針對Solana生態錢包大規模攻擊事件,Slope發布公告稱,根據目前了解的情況,很多Slope錢包遭到入侵,Slope許多員工和創始人的錢包也被盜了。Slope關于攻擊事件起因有一些假設,但尚未確定。Slope正在積極開展內部調查和審計,與頂級外部安全和審計團隊合作;正與整個生態系統中的開發人員、安全專家和協議合作,努力識別和糾正這些問題。

Slope建議所有用戶采取以下措施:創建一個新的、獨立的種子短語錢包,并將所有資產轉移到新錢包。同樣,不建議在新錢包上使用與Slope上相同的種子短語。硬件錢包仍然是安全的。

此外,Slope的公告沒有說明是否可能與私鑰存儲問題有關。一位Slope代表告訴CoinDesk,“我們不會在集中式服務器上存儲任何個人數據。”

據此前報道,Solana?Labs首席執行官Anatoly Yakovenko最初在推特上表示,他懷疑該漏洞可能與Apple iOS供應鏈攻擊有關,但后來將源頭縮小到對Slope集中式服務器的黑客攻擊,其中私鑰似乎以純文本形式存儲。Twitter 上的其他開發人員也推測,Slope將私鑰以明文形式存儲在集中式服務器上,而攻擊者已將其破壞。(CoinDesk)[2022/8/4 2:57:58]

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

Copernic Space和Lunar Output通過公開代幣化銷售載荷空間:金色財經報道,區塊鏈太空裝備公司Copernic Space和太空機器人公司Lunar Output將以NFTs的形式出售飛船上的有效載荷空間。企業和買家將能夠在Lunar Outpost的M1 MAPP漫游器上購買、分割和轉售有效載荷空間NFT。NFT的所有權將賦予登陸器內以公斤為單位的有效載荷空間。

Copernic Space聯合創始人兼首席執行官Grant Blaisdell在接受采訪時表示,此次銷售將涵蓋3.5公斤的可用有效載荷空間,初始銷售價格為每公斤425萬美元。(cointelegraph)[2021/9/29 17:15:55]

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

NFT交易平臺OpenSea用戶地址數量于6月環比增長19%:據DuneAnalytics數據顯示,NFT交易平臺OpenSea用戶地址數量于6月環比增長19%。[2021/7/13 0:47:33]

這就是最終 bug 的根源:因為 call dada 中的值是 “0x10”(注意,這可是 16 進制!),但是 call data 只給出了 10 個 ?地址-數值對。對這個 call data 的正確 ABI 編碼(填在行 和行 的)應該是 “0xA” —— 不是 “0x10”!

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

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

OpenBazaar因資金用盡 宣告將于1月15日停止運行:1月5日消息,去中心化商品交易平臺OpenBazaar發推宣布,為OpenBazaar重要部分供電的大部分基礎設施將于1月15日停止運行,并表示捐贈資金已用盡,OB錢包將不再能夠負擔這些費用。[2021/1/5 16:27:44]

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

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

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

此時,你可能會注意到,0x10 有可能是我們所謂的 “特殊地址” 之一,它完全在 EVM 預編譯合約的范圍內(所謂 “預編譯合約”,就是一類特殊合約,在 EVM 之外有最優的實現,但是編譯起來與大多數合約一樣)。

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

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

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

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

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

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

因為 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:ETHPENOPENTHEFomo Ethpendle幣最新消息OPENX幣Revenge on the Squid Gamers

MATIC
BTC:BTC或將進一步回調 交易者應謹慎抄底_TUSDB幣

消息人士稱,拜登政府正在為快速增長的加密資產制定立法框架。此消息和上周拜登政府對于財政部的支持相呼應.

1900/1/1 0:00:00
NFT:共為創新大會圓桌 | 試問:NFT究竟價值幾何_區塊鏈

金色財經現場報道,4月10日,由金色財經主辦,波場TRON總冠名,HBTC、SumSwap、SubGame首席合作企業的“2021共為·創新大會”在上海舉辦.

1900/1/1 0:00:00
數字人:1000萬元數字人民幣專屬福利來了_數字人民幣消費紅包怎么用不了

 4月10日,羅湖區再次拓展數字人民幣試點成果,打造數字人民幣應用先行示范區,啟動數字人民幣“春之禮”活動.

1900/1/1 0:00:00
NFT:與慈善結緣 NFT 讓世界更美好_Crypto Gaming United

美國數字藝術家 Beeple 的 NFT《Everydays. The first 5000 days》在英國拍賣平臺佳士得拍出了 6900 萬美元的天價;Twitter CEO 多西的一條 N.

1900/1/1 0:00:00
EOS:技術周刊|Kusama已上線平行鏈拍賣介紹網頁_ETH

本周技術周刊包含以太坊、波卡、Filecoin、EOS四個網路的技術類新聞。以太坊客戶端Geth發布1.10.2版本以太坊客戶端Geth發布1.10.2版本,包括修復了為柏林硬分叉準備相關的一些.

1900/1/1 0:00:00
區塊鏈:金色早報 | BTC再次突破60000美元 ETH市值超越網飛_比特幣中國官網地址點擊進入官網

頭條 ▌美國SEC專員:美國如果試圖禁止主流加密貨幣,可能付出沉重的代價美國證券交易委員會(SEC)專員海斯特·皮爾斯(Hester Peirce)表示,美國政府禁止比特幣將是愚蠢的事情.

1900/1/1 0:00:00
ads