<div id="ng5vq"><tr id="ng5vq"></tr></div>

  • <div id="ng5vq"></div>

      <em id="ng5vq"></em>
      <div id="ng5vq"></div>

          专注区块链信息及金融服务

          洪蜀宁:Gemini稳定币智能合约研究报告

          洪蜀宁 ·

          2018年09月19日

          热度: 44233

          本文对Gemini稳定币GUSD的智能合约代码进行了分析,并指出了其优缺点。

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

          金丘区块链研究院 洪蜀宁

          Gemini稳定币概况

          纽约金融服务局(NYDFS)于9月10日批准了Gemini Trust LLC发行的Gemini Dollar(代码GUSD),这是全球首个合规稳定币,由全美最大的托管银行?#26639;?#38134;行(State Street Bank)负责资金托管,并聘请了第三方注册会计师事务所定期进行独立审计,相比于之前Tether公司发行的USDT等稳定币,在资金安全性方面有了重大的进步。

          与USDT基于比特币的Omni协议发行方式不同,GUSD是基于以太坊的ERC20代币,更加便于与占市场绝大多数份额的其它ERC20代币进行去?#34892;?#21270;的交易,这也是GUSD的一大优势。笔者从Gemini公司官网找到了GUSD合约的源代码链接,并进行了详细的研究分析。

          GUSD智能合约代码分析

          合约结构分析

          GUSD共包含6个智能合约,分别为ERC20Proxy、ERC20Impl、ERC20Store、PrintLimit?#32422;?个独立的Custodian合约,所有合约均由地址0x4c2F150Fc90fed3d8281114c2349f1906cdE5346创建。
          合约之间的相互依赖关?#23548;?#19979;图。



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

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

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

          合约功能分析

          继续对合约的源代码进行分析,各合约的功能?#22270;?#25215;关?#23548;?#19979;图。


          类MVC模式

          可见Proxy、Impl、Store三个合约构成了一种类似于MVC的设计模式:Proxy相当于View,Impl相当于Controller,Store相当于Model。作为Controller的Impl合约实现了绝大多数业务逻辑,由于其并不存储数据,故可以任意升级替换而不影响用户资金。相信这样的模式会因其灵活性被将来的项?#31185;?#36941;模仿。

          Impl合约可替换

          Impl合约的可替换性是通过ERC20ImplUpgradable合约实现的,该合约通过requestImplChange和lconfirmImplChange两个方法?#24066;鞢ustodian为Proxy指定新的Impl合约地址,之后Proxy将会调用新的Impl合约中的代码。

          合约治理

          Custodian合约通过一种称为解锁(Unlock)的机制?#35789;?#29616;灵活的权限控制。解锁操作要么由主账户(即前述0xd24400地址)、要么由任意账户发送1个以上的ETH进行申请,申请时可指定一个回调函数(任意的合约调用操作)。该申请需要等待一?#38382;?#38388;方可生效,主账户发起的申请需等待2天,其他账户发起的需等待一周。申请生效后,需由2个不同的管理员签名生成确认交易(目前共有6个管理员账户),2个签名验证无误后,Custodian合约会自动调用之前指定的回调函数,从而实现管理机制的调整。

          而Custodian合约本身也是可替换的,可以通过CustodianUpgradeable合约的requestCustodianChange和confirmCustodianChange方法指定新的Custodian合约地址,从而调整对Proxy、Impl、Store合约权限管理的机制。

          结论

          优点

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

          缺陷

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


          文章声明:本文为火星财经专栏作者作品,不代表火星财经观点,版权归作者所有,如需转载,请提前联系作者或注明出处。

          声明:本文为入驻“火星号”作者作品,不代表火星财经官方立场。转载请注明出处、作者和本文链接
          提示?#21644;蹲视?#39118;险,入?#34892;?#35880;慎。本资讯不作为投资理财建议。

          推广
          相关新闻

          涨幅榜

          你可能?#34892;?#36259;的内容
          下一篇

          从蒸汽机车到高铁,从 POW 到 SPOS 的共识机制历史

          河北十一选五软件