9月27日,據Etherscan顯示,Bitfinex交易所的一個主要錢包以7676.62ETH的Gas費用進行了一筆10萬美元USDT的轉賬,最終接收方為2019年從Bitfinex分拆出來的非托管交易所DeversiFi。這筆巨額礦工費隨后被不知名礦工轉至幣安交易所。
9月28日,事情得到一個圓滿的結局。經過Bitfinex和幣安及礦工交涉,以太坊區塊13307440顯示,礦工歸還了Bitfinex錢包昨晚誤操作而付出的7626ETH Gas費用,DeversiFi給礦工保留了50 ETH作為感謝費。
9月29日,DeversiFi發布了這一事件的完整報告。
發生了什么
UTC +1時間11.10.08 AM,用戶向DeversiFi存入10萬USDT。
這筆交易在 1 分鐘內得到確認......但這筆交易的交易費高達7,676 ETH(約2300 萬美元)
https://etherscan.io/tx/0x2c9931793876db33b1a9aad123ad4921dfb9cd5e59dbb78ce78f28717595
為什么發生
EthereumJS庫中的潛在問題,再加上在某些情況下和EIP-1559升級相關的gas費用變化,可能導致交易費用極高
又遇上Ledger硬件錢包有時可能以非人類可讀的方式顯示Gas費用,錯失用戶肉眼安全檢查
只有ETH數量非常大的錢包才會受到影響,其他用戶會看到交易失敗
DeversiFi做了什么
到UTC+1下午12:30:00,DeversiFi團隊意識到這個問題并開始了調查。
很快確定了兩個主要關注點,開始積極測試,試圖重現和解釋錯誤交易是如何創建的。
與區塊鏈社區分享了一個解釋,注意到這個交易https://twitter.com/deversifi/status/1442487743922286594
到UTC + 1時間16:45,禁用Ledger用戶存款
到晚上,找到gas費用函數中可能的罪魁禍首,并著手實施改進
增加了額外的安全和健全性檢查,以確保與交易相關的gas費用不會超過不切實際的閾值,以防止用戶錯誤、極端網絡費用飆升,并作為防止任何未來編碼錯誤的額外保護層
向EthereumJs維護者提交問題,描述了EthereumJs庫中的缺陷
最后與Ledger團隊就測試期間發現的異常情況進行了溝通,這些異常情況可能會混淆任何以太坊交易的異常高額費用
在28/09/21 15:30 之前推出了安全改進和重開存款
追回資金
不知名礦工在13307440區塊打包的巨額Gas費,之后發現此礦工將挖到的ETH存入幣安,DeversiFi立刻聯系了幣安。
幣安同意將DeversiFi的電子郵件地址傳遞給礦工
UTC + 1時間20:36 ,收到礦工的電子郵件,達成安全返還資金的流程
一個小時內,礦工完成退款交易,共退款7626枚ETH
https://etherscan.io/tx/0x85294effd53126b3bfa9e7f655267e00ac1ae2ef76f4569644670bf5403637d6
背景知識
先回顧一下EIP-1559如何改變以太坊交易費用的處理方式。
EIP-1559交易由三部分組成:
基本費用 - 由網絡決定并銷毀
Max Fee Per Gas - 為獲得區塊打包而為每單位Gas支付的最大金額
Max Priority Fee - 用戶可選的、直接支付給礦工的小費
EIP-1559 交易包括這些新字段,稱為類型 2,而提供原始 Gas Price 字段的遺留交易仍受支持,稱為類型 0。我們不討論類型 1 發生了什么。
一個常見的誤解是EIP-1559交易完全消除了用戶為交易支付過高Gas費的可能性。但在優先費用和最高費用都設置得太高的情況下,無法防止意外多付。
詳細調查
DeversiFi是以太坊上用于DeFi的第2層協議,其擁有一個前端,提供一個簡單的界面來從各種錢包訪問協議,包括Metamask和Ledger。大約一個月前,DeversiFi更新了前端,以利用倫敦硬分叉激活提供的EIP-1559交易,用最新版本的以太坊庫并按照文檔實現了新功能。
Metamask在生成消息和簽名時執行了很多繁重的工作,但是對于Ledger等其他錢包,DeversiFi使用@ethereumjs/tx npm包(https://github.com/ethereumjs/ethereumjs-monorepo)自己生成交易。
具體來說,創建了一個EIP1559交易主體,在與Ledger錢包庫接口之前生成消息注入參數和費用,以提示用戶在他們的硬件設備上簽名。
處理固定精度和擴展數值范圍的庫在以太坊生態系統中很重要,因為智能合約可以返回高達 256位的數字。JavaScript本身無法處理導致截斷或浮點錯誤的精度。并非所有的大數字庫都支持浮點值,不幸的是,ethereumjs庫使用了BN (https://github.com/indutny/bn.js/),而BN也不支持。看起來這有些道理,因為Solidity不直接支持除整數以外的任何內容,但它確實將責任推給了任何集成其庫的人,也不使用十進制小數數值。
這是這個過程第一個出現問題的地方,特別是計算gas和優先費用然后轉換成一個大數字對象時。由于利用最近幾個區塊用于預測優先費用,因此計算結果可能是十進制小數型數值(MyCrypto的Tay已經警告一段時間了)
當生成的gas值為整數時,底層的ethereumjs庫代碼完美運行,但是當gas值為十進制小數數值時變得奇怪。以太坊庫代碼使用的 BN庫拋出一個錯誤,表明傳遞了一個無效值,但是由于該值首先被轉換為緩沖區,因此沒有觸發錯誤處理。
例如,傳遞值33974230439.550003將得到一個整數35624562649959629,可能比預期高六個數量級。
當這種錯誤的數字解釋發生時,它要么由于優先gas金額高于每個gas的最大費用而失敗,要么因為用戶在錢包中擁有的ETH數量幾乎總是不可能足夠高來支付這筆巨額的Gas費超支。
這意味著,除了遇到此問題的少數硬件錢包用戶,幾乎所有人都不會理解他們的交易失敗的原因。
在Ledger上簽署交易時,會向用戶顯示最高費用,以便他們驗證將要授權的交易。讓事情進一步惡化的因素是,當前Ledger將非常大的費用顯示為十六進制值。
在嘗試重現該問題時,DeversiFi遇到了如上所示的費用提示。在顯示該問題的示例交易中,B526167CF91FECE4 的十六進制值等于 13053145295991336164,這相當于13053145295991.336164 Gwei或 13.05 ETH的天文費用?。
如果此交易被接受(并且錢包中存在用于支付它的資金),用戶將簽署最高216,564 ETH 的費用。
DeversiFi懷疑區塊13307440是否可能就是這種情況,其中已支付的最高費用超過了授權的ETH費用2倍。
Tags:
2021年6月9日,薩爾瓦多國會投票批準總統提交的比特幣作為法定貨幣的提案,薩爾瓦多成為全球首個承認比特幣為合法貨幣的國家。2021年9月7日是比特幣正式成為薩爾瓦多法定貨幣的第一天。 實際上,薩爾瓦多總統Nayib Bukele首次在6月份的邁阿密比特幣大會上大張旗鼓地宣布接受比特幣作為法定貨幣,這為他贏得了加密社區中一些知名成員的贊美。
這是對信標鏈提議的一個替代設計方案,信標鏈可以在比較遠的未來切換到這個模型 (替代現在計劃的 CBC),它試圖提供以下一些關鍵特性: 在正常情況下,提供有意義的單個 slot 的經濟確定性 (即類似于 Tendermint 的特性) 使得即使大多數驗證者參與合謀進行單個 slot 的重組,執行的成本也比現在高得多。
今年以來“元宇宙”概念吸引了國內外眾多科技巨頭如谷歌、騰訊、Facebook、字節跳動等扎堆布局,成為近期資本市場一大熱點。業內人士普遍認為個別賽道或將最先實現突破,從而率先受益,游戲行業就是普遍被看好的賽道。
9月27日,據Etherscan顯示,Bitfinex交易所的一個主要錢包以7676.62ETH的Gas費用進行了一筆10萬美元USDT的轉賬,最終接收方為2019年從Bitfinex分拆出來的非托管交易所DeversiFi。這筆巨額礦工費隨后被不知名礦工轉至幣安交易所。 9月28日,事情得到一個圓滿的結局。
數字歐元若設計和使用得當,可顯著改善歐洲支付體系,但其在隱私安全、金融風險及監管、基礎設施等方面,面臨的挑戰也不容忽視。除此之外,數字歐元或可對國際金融體系和貨幣體系帶來影響。 數字貨幣是數字經濟的發動機和數字社會的助推器。近年來,越來越多的國家和地區積極探索法定貨幣數字化形態,中央銀行數字貨幣(CBDC)逐步由理論走向實踐。
前段時間,一篇名為《NFT藝術品要結束了》的文章引起不少人關注,它向大家解釋了為什么看空NFT藝術品,也提到了NFT藝術家們的困境:他們越來越難從中盈利。
國際貨幣基金組織總裁Kristalina Georgieva最近在一次演講中談到了包括CBDC在內的數字貨幣。在10月5日,由博科尼大學和意大利國際研究所主辦的T20首腦會議上,Georgieva發表了演講。? 這場會議的與會者為家和相關專家,他們圍繞當前各種國際上面臨的挑戰展開了討論。