
技術解析 BRC-20 錢包的潛在攻擊方式
TechFlow Selected深潮精選

技術解析 BRC-20 錢包的潛在攻擊方式
從 BRC-20 的設計原理出發,系統性分析幣安暫停 ORDI 提現的原因。
撰文:Trustless Labs
在深入研究 BRC-20 代碼和機制後,我們發現轉賬階段存在針對 huge holder 可能的攻擊手段。為了幫助交易所檢查是否存在流程規範問題,同時也踐行白帽精神,我們嘗試使用測試過的手段鎖定了幣安 ORDI 熱錢包資產,導致幣安暫停 ORDI 提現。我們第一時間通知了幣安團隊,溝通了操作細節,以幫助幣安儘快恢復提現,三小時後,幣安恢復了 ORDI 提現。本文會從 BRC-20 的設計原理出發,系統性地分析一下幣安暫停 ORDI 提現的原因,幫助大家理解為什麼任何人都可以鎖定你的 BRC-20 餘額。
首先我們在 UniSat 上看一下鏈上都發生了什麼。

這是撰寫本文時 UniSat 上展示的幣安 ORDI 熱錢包餘額,分為三部分 Transferable、Available 和 Balance。這裡涉及到 BRC-20 中的三個基本概念 Transferable balance、Available balance 和 Overall balance。Transferable balance 是指可以直接轉出的餘額,Available balance 是指可以變成 Transferable balance 的餘額,Overall balance 是前面兩者之和,表示當前地址總餘額。看到這裡大家可能會問了,既然當前幣安 ORDI 熱錢包有這麼多餘額,那為什麼還無法提現轉出呢?彆著急,我們繼續往下看。
BRC-20 的轉賬需要兩步操作,第一步先 inscribe 一個 transfer 的 Inscription ,第二步再把這個 Inscription 轉給接收方,完成 BRC-20 的轉賬。由於 Inscription 轉移是基於 UTXO 的,也就是說,第一步 inscribe 了多少 amt 的 Inscription ,第二步就只能轉出多少 amt 的 BRC-20,所以前面提到的 Transferable balance 也是基於 UTXO 的。舉個例子方便大家理解,假設 A 是一個新創建的地址,然後你 mint 了 m 個 ORDI 到 A 地址,或者從其他地址轉了 m 個 ORDI 到 A 地址,這時 A 地址的 Available balance 和 Overall balance 都為 m ,Transferable balance 為 0 。然後我們從 A 地址轉 n 個 ORDI 到 B 地址,第一步先 inscribe 一個 amt 為 n 的 Inscription 到 A 地址(當且僅當 n <= m 時,該 Inscription 是有效的),此時 A 地址的 Transferable balance 為 n ,Available balance 為 m - n ,Overall balance 為 m ;第二步再轉移這個 amt 為 n 的 Inscription 到 B 地址,此時 A 地址的 Available balance 和 Overall balance 都為 m - n ,Transferable balance 為 0 , B 地址的 Available balance 和 Overall balance 都為 n ,Transferable balance 為 0 ,轉賬完成。

以 UniSat 上展示的幣安 ORDI 熱錢包交易列表為例,圖中 Method 為 inscribe-transfer 的對應上面講到的第一步操作,Method 為 receive 或 send 的對應第二步,而且圖中最後兩筆交易共同組成了一個完整的 BRC-20 轉賬。另外三筆 inscribe-transfer 的交易分別 inscribe 了 amt 為 8,210,108 、6,099 、2,683 的三個 Inscription,這三個 Inscription 共同組成了 Transferable balance。所以如果現在要從幣安 ORDI 熱錢包轉出 ORDI ,只能轉出三筆對應 amt 的 ORDI ,當然無法滿足用戶多樣的提現需求。
出現這種情況的原因在於,任何人都可以 inscribe 一個任意的 Inscription 到任意地址,所以任何人都可以通過執行 BRC-20 轉賬的第一步操作鎖定任意地址的 BRC-20 餘額。那麼幣安應該如何解決目前面臨的問題呢?其實很簡單,只要把前面提到的三個 Inscription 轉給自己,就可以把 Transferable balance 變回到 Available balance ,然後再根據用戶提現需求 inscribe 對應 amt 的 Inscription 轉出。但是這隻能解燃眉之急,無法從根本上解決問題,只有改進協議本身,解決目前 BRC-20 設計上存在的缺陷,方可一勞永逸。
歡迎加入深潮 TechFlow 官方社群
Telegram 訂閱群:https://t.me/TechFlowDaily
Twitter 官方帳號:https://x.com/TechFlowPost
Twitter 英文帳號:https://x.com/BlockFlow_News













