泰達幣頻繁被增發!USDT增發最全技術細節披露

買賣虛擬貨幣

泰達幣頻繁被增發!近日,聽說以太坊上的泰達幣(USDT)頻繁被增發。本著學習的目的在 etherscan 上審計了泰達幣的智慧合約(TetherToken)原始碼以及 USDT 增發相關的呼叫事件,本文記錄一下分析過程。

以下是 TetherToken 智慧合約的 USDT 增發函式:

可以看到增發 USDT 需要 TetherToken 合約的 owner 賬戶呼叫 issue(uint) 增發函式進行,增發成功後還會丟擲 Issue(amount) 增發事件。

再看下最近的增發記錄截圖:

Transaction Hash:0xdd108cd36fbeaab03b29ac46d465ad9824618d683268681d3206bd78302e0d71

可以看到在上圖交易詳情中並沒有呼叫 TetherToken 合約的 issue(uint) 增發函式,而是呼叫了 MultiSigWallet 合約的 confirmTransaction(uint) 函式完成的增發操作。

需要注意以下兩點:

TetherToken 合約呼叫分析

我們先看看 MultiSigWallet 合約的 confirmTransaction(uint) 函式的實現

呼叫 confirmTransaction(uint) 函式確認並執行交易需要滿足以下條件

submitTransaction(address,uint,bytes) 會呼叫到合約內部的 addTransaction(address,uint,bytes) 函式,其實現如下:

最終一次完整的提交 -> 確認操作流程如下:

1、呼叫 submitTransaction(address,uint,bytes) 函式提交事務並傳入引數:contract-address、eth-value、payload。注意:提交事務包含一次事務確認。

依次傳送 Submission 事件 -> Confirmation 事件。

2、呼叫 confirmTransaction(uint) 確認並執行事務,需要 3 個不同的 owner 賬戶完成最終的確認。

依次傳送 Confirmation 事件 -> 執行 payload 所產生的事件(滿足確認數量)-> Execution 事件。

TetherToken 跨合約呼叫如下圖所示:

USDT 增發分析

繼續看這筆增發交易的呼叫事件,正好滿足呼叫 confirmTransaction(uint) 函式所產生的事件。

透過查詢 transactionId 即可看到呼叫引數

轉換成以下虛擬碼:

那麼 Bitfinex: MultiSig 2 地址的 USDT 是哪來的呢?根據 transactionId 繼續向前追蹤一個事務即可找到真正為 Bitfinex: MultiSig 2 地址增發 USDT 的交易:

轉換成以下虛擬碼:

Transaction Hash:0xb467ea92b5c0095b1a96f35eb466b239c13e5b0b3f493e3e452f832d99830d6b

這才是真正為 Bitfinex: MultiSig 2 地址增發 USDT 的操作。

USDT 增發如下圖所示:

可以看到,USDT 的增發需要透過 MultiSigWallet 跨合約呼叫才能完成。而 MultiSigWallet 智慧合約存在多個 owner 使用者,完成一次跨合約呼叫需要至少 3 個 owner 的確認。這種增發機制在一定程度上杜絕了當某一 owner 賬戶丟失或被盜時 USDT 被惡意增發的安全隱患。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;