当前位置:首页 > 比特币新闻 > 正文

Gemini稳定币智能合约研究报告

来源: 互联网时间:2019-01-09 16:18:21

作者: 金丘区块链研究院 洪蜀宁

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_object.dot

可以看出,GUSD的合约结构与其白皮书所描述的是一致的,各合约的功能如下:

  1. ERC20Proxy合约:即白皮书中的Proxy合约,是GUSD对外提供服务的接口,所有功能均通过ERC20Impl合约实现。这个合约是唯一且永久不变的。
  2. ERC20Impl合约:即白皮书中的Impl合约,实现了GUSD几乎所有的功能,如发行、销毁、转账等等。这个合约是可以升级的。
  3. ERC20Store合约:即白皮书中的Store合约,实现了GUSD数据储存功能,保存了所有账户的余额以及总发行量等信息。这个合约也是唯一且永久不变的。
  4. PrintLimit合约:对发行量的上限进行管理,允许指定的账户提升或降低发行总量上限。GUSD发行总量无法超过该上限。
  5. Custodian合约:用于权限管理,所有需要权限的操作均通过Custodian合约来调用。在合约中设置了多种权限管理模式,如双人控制、离线签名、延时生效等。

上图最下方的地址0xd24400ae8bfebb18ca49be86258a3c749cf46853是极为关键的管理账号,掌握了GUSD发行、销毁、合约升级、权限管理等所有的核心权限,相当于Linux操作系统的root账户。该账号一旦丢失或被盗,将会造成系统的崩溃。

合约功能分析

继续对合约的源代码进行分析,各合约的功能和继承关系见下图。

gusd_class.dot

类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合约权限管理的机制。

结论

优点

  1. 代码规范,注释较为丰富且合理。
  2. 参考MVC模式实现的Proxy、Impl、Store合约具备充分的灵活性,便于BUG修复和功能升级。
  3. Custodian机制灵活,且可任意调整管理机制。

缺陷

  1. 主账户权限过于集中,未进行分权治理,风险极高,是系统安全的瓶颈,会成为黑客和内部人员攻击的重点目标。
  2. 未实现专门的监管接口,监管指令仍需通过主账户进行操作,无法防范Gemini公司作恶的情形。
  3. 发行过程未能实现双人操作,如果能改为Gemini公司申请发行、托管银行审核确认的方式则更能减少超发风险。
  4. Custodian解锁机制的回调函数过于灵活,万一调用了错误的或恶意的合约函数,可能会对用户资金造成损失。

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。