Gemini穩定幣智慧合約研究報告
作者: 金丘區塊鏈研究院 洪蜀寧
Gemini穩定幣概況
紐約金融服務局(NYDFS)於9月10日批准了Gemini Trust LLC發行的Gemini Dollar(程式碼GUSD),這是全球首個合規穩定幣,由全美最大的託管銀行道富銀行(State Street Bank)負責資金託管,並聘請了第三方註冊會計師事務所定期進行獨立審計,相比於之前Tether公司發行的USDT等穩定幣,在資金安全性方面有了重大的進步。
與USDT基於比特幣的Omni協議發行方式不同,GUSD是基於以太坊的ERC20代幣,更加便於與佔市場絕大多數份額的其它ERC20代幣進行去中心化的交易,這也是GUSD的一大優勢。筆者從Gemini公司官網找到了GUSD合約的原始碼連結,並進行了詳細的研究分析。
GUSD智慧合約程式碼分析
合約結構分析
GUSD共包含6個智慧合約,分別為ERC20Proxy、ERC20Impl、ERC20Store、PrintLimit以及2個獨立的Custodian合約,所有合約均由地址0x4c2F150Fc90fed3d8281114c2349f1906cdE5346建立。
合約之間的相互依賴關係見下圖。
可以看出,GUSD的合約結構與其白皮書所描述的是一致的,各合約的功能如下:
- ERC20Proxy合約:即白皮書中的Proxy合約,是GUSD對外提供服務的介面,所有功能均通過ERC20Impl合約實現。這個合約是唯一且永久不變的。
- ERC20Impl合約:即白皮書中的Impl合約,實現了GUSD幾乎所有的功能,如發行、銷燬、轉賬等等。這個合約是可以升級的。
- ERC20Store合約:即白皮書中的Store合約,實現了GUSD資料儲存功能,儲存了所有賬戶的餘額以及總髮行量等資訊。這個合約也是唯一且永久不變的。
- PrintLimit合約:對發行量的上限進行管理,允許指定的賬戶提升或降低發行總量上限。GUSD發行總量無法超過該上限。
- Custodian合約:用於許可權管理,所有需要許可權的操作均通過Custodian合約來呼叫。在合約中設定了多種許可權管理模式,如雙人控制、離線簽名、延時生效等。
上圖最下方的地址0xd24400ae8bfebb18ca49be86258a3c749cf46853是極為關鍵的管理賬號,掌握了GUSD發行、銷燬、合約升級、許可權管理等所有的核心許可權,相當於Linux作業系統的root賬戶。該賬號一旦丟失或被盜,將會造成系統的崩潰。
合約功能分析
繼續對合約的原始碼進行分析,各合約的功能和繼承關係見下圖。
類MVC模式
可見Proxy、Impl、Store三個合約構成了一種類似於MVC的設計模式:Proxy相當於View,Impl相當於Controller,Store相當於Model。作為Controller的Impl合約實現了絕大多數業務邏輯,由於其並不儲存資料,故可以任意升級替換而不影響使用者資金。相信這樣的模式會因其靈活性被將來的專案普遍模仿。
Impl合約可替換
Impl合約的可替換性是通過ERC20ImplUpgradable合約實現的,該合約通過requestImplChange和lconfirmImplChange兩個方法允許Custodian為Proxy指定新的Impl合約地址,之後Proxy將會呼叫新的Impl合約中的程式碼。
合約治理
Custodian合約通過一種稱為解鎖(Unlock)的機制來實現靈活的許可權控制。解鎖操作要麼由主賬戶(即前述0xd24400地址)、要麼由任意賬戶傳送1個以上的ETH進行申請,申請時可指定一個回撥函式(任意的合約呼叫操作)。該申請需要等待一段時間方可生效,主賬戶發起的申請需等待2天,其他賬戶發起的需等待一週。申請生效後,需由2個不同的管理員簽名生成確認交易(目前共有6個管理員賬戶),2個簽名驗證無誤後,Custodian合約會自動呼叫之前指定的回撥函式,從而實現管理機制的調整。
而Custodian合約本身也是可替換的,可以通過CustodianUpgradeable合約的requestCustodianChange和confirmCustodianChange方法指定新的Custodian合約地址,從而調整對Proxy、Impl、Store合約許可權管理的機制。
結論
優點
- 程式碼規範,註釋較為豐富且合理。
- 參考MVC模式實現的Proxy、Impl、Store合約具備充分的靈活性,便於BUG修復和功能升級。
- Custodian機制靈活,且可任意調整管理機制。
缺陷
- 主賬戶許可權過於集中,未進行分權治理,風險極高,是系統安全的瓶頸,會成為黑客和內部人員攻擊的重點目標。
- 未實現專門的監管介面,監管指令仍需通過主賬戶進行操作,無法防範Gemini公司作惡的情形。
- 發行過程未能實現雙人操作,如果能改為Gemini公司申請發行、託管銀行稽核確認的方式則更能減少超發風險。
- Custodian解鎖機制的回撥函式過於靈活,萬一呼叫了錯誤的或惡意的合約函式,可能會對使用者資金造成損失。
版權宣告: ofollow,noindex">
作者保留權利。文章為作者獨立觀點,不代表巴位元立場。