热门稳定数字货币GUSD其实并没有第三方托管机构监管!

国庆长假快进尾声,今天把GUSD的合约代码仔细看了,得出一个非常惊人的结论:

GUSD已经抛弃了Custodian第三方托管合约,变成由Gemini自由控制的中心化的增发工具。

通过仔细阅读GUSD复杂的合约,笔者发现,GUSD的主合约:ERC20Impl合约的custodian(托管账户)从原先的Custodian合约变成了PrintingLimiter合约,导致增发等重要的操作可以不受Custodian合约控制,无需第三方托管账户操作。

事实上,GUSD的Custodian合约有史以来只操作了4次,见:https://etherscan.io/address/0x9a7b5f6e453d0cda978163cb4a9a88367250a52d
每次只是授权了confirmImplChange方法(该方法的Method Id为0x8181b029

下面,我们来进一步查看究竟GUSD是如何实现增发的。
首先,我们来看该代币地址:https://etherscan.io/token/0x056fd409e1d7a124bd7017459dfea2f387b6d5cd
显示余额为:957525.96GUSD(2018年10月6日16点左右)

在列表中随意找一个From0x0000...的Tx交易记录,点击后,查看交易详情:
https://etherscan.io/tx/0xd204a0e54d63a27de84074d48491016892a933ddce9cf7debf36747f1af96460
可以看出,该币交易增发了157,882.70个GUSD。

通过查询交易的Event Logs,可以看出,这笔交易完成后收到了三个事件:

  • ERC20Impl合约的requestPrint方法,发送PrintingLocked事件;
  • ERC20Impl合约的confirmPrint方法,发送PrintingConfirmed事件;
  • ERC20Proxy合约的发送代币,并释放Transfer事件。

而以上事件全部是由PrintLimiter合约中的limitedPrint方法统一控制的。

点击这里查看PrintLimiter合约源码

PrintLimiter合约中找到limitedPrint函数,源码如下:

function limitedPrint(address _receiver, uint256 _value) public onlyLimitedPrinter {
    uint256 totalSupply = erc20Impl.totalSupply();
    uint256 newTotalSupply = totalSupply + _value;

    require(newTotalSupply >= totalSupply);
    require(newTotalSupply <= totalSupplyCeiling);
    erc20Impl.confirmPrint(erc20Impl.requestPrint(_receiver, _value));
}

看最后一句erc20Impl.confirmPrint(erc20Impl.requestPrint(_receiver, _value));,是指拥有增发权限的用户,直接从requestPrint()方法中获取lockId,并交给confirmPrint()方法作为参数,确认其增发行为。

按道理,应该在提出增发申请,即requestPrint()后,由资金托管方Custodian进行多签授权,然后执行确认增发命令,即confirmPrint()。但实际上,这里全部省略了。

我们再来看看到底谁拥有增发权限的账户呢?也即是上面代码中的modifier方法onlyLimitedPrinter中的条件到底是什么?

看代码:

modifier onlyLimitedPrinter {
    require(msg.sender == limitedPrinter);
    _;
}

即只要发送改指令的以太坊账号msg.sender等于limitedPrinter就行了,而limitedPrinter是在部署PrintLimiter合约时的构造函数中设定的。因此,只要部署该合约时指定某个以太坊账户拥有增发权限即可。

那么,究竟谁是拥有这个增发权限的超级账号呢?
我们通过查询前面的交易记录:https://etherscan.io/tx/0xd204a0e54d63a27de84074d48491016892a933ddce9cf7debf36747f1af96460
找到From账户,就是给合约发送指令的msg.sender的地址:0xd24400ae8bfebb18ca49be86258a3c749cf46853

那这个地址又是什么呢?
让我们打开ERC20Impl合约的详情:https://etherscan.io/address/0x6704ba24b8640BCcEe6BF2fd276a6a1b8EdF4Ade#readContract
可以发现,以上地址就是sweeper

查看ERC20Impl合约的构造函数可以发现,这个sweeper地址是在部署ERC20Impl合约时设定的参数。通过etherscan.io查询,发现这个地址就是Gemini交易所地址。

由此,一个看似复杂,公平,受第三方监管的稳定币GUSD,其实增发完全被一个交易所账户控制着。增发过程很容易,只要执行PrintLimiter合约中的limitedPrint方法即可。所谓的托管方Custodian只是一个幌子罢了。

那么,GUSD的所有代码是不是都是摆设呢?也不是,在Custodian合约中,已经把所有逻辑写的很清楚了。其基本逻辑是:
如果某人需要执行某个更改(如增发),首先需要提出一个申请,获取lockId,然后第三方监管机构执行Custodian合约中的requestUnlock函数,提出解锁申请。第三方监管机构中有权限的几个账户中的两个对该申请审核,然后通过多签,确定是否批准解锁。如果批准,则执行人拥有执行该方法的权限(如增发)。
以上逻辑,其实建立了一套:发行-监管的模式,该模式适用于几乎所有金融应用场景。

根据笔者对GUSD合约的理解,只要将上面的limitPrint方法的modifier方法改为onlyCustodian即可实现增发行为的第三方监管,如下:

function limitedPrint(address _receiver, uint256 _value) public onlyCustodian {
    uint256 totalSupply = erc20Impl.totalSupply();
    uint256 newTotalSupply = totalSupply + _value;

    require(newTotalSupply >= totalSupply);
    require(newTotalSupply <= totalSupplyCeiling);
    erc20Impl.confirmPrint(erc20Impl.requestPrint(_receiver, _value));
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容

  • 2018年4月17日 星期二 晴 这几天作业不多,孩子总是很快就完成了!和前一段时间相比较,有一点娃还是很值得表...
    小鱼快乐游阅读 92评论 3 1
  • 第一章 夏洛克·福尔摩斯 先生 (接上集) “你们就从来没有聊过他的爱好吗?”我问道。 “没有。他这人不太容易向人...
    史黛拉945阅读 778评论 0 1
  • 假如我们都还年少 我定要 带你爬爬城东头的角楼 在梨花忽绽的时候 看一看雪落 听一听风流 假如我们都还年少 我定要...
    水青声阅读 515评论 4 7
  • 好可惜终于失去你,对不起我已经尽力——《好可惜》by庄心妍 总有一首歌可以触动到你内心深处最柔软的一块地方,或喜悦...
    小感想大杂烩阅读 857评论 0 0
  • 王轩炫走在漆黑狭窄的四层走廊里,靠着破碎的窗户折射着散乱的月光,踏着带有一丝血腥味的布满灰尘的道路。 ...
    睡着的皮球阅读 171评论 1 0