近日,听说以太坊上的泰达币频繁被增发。本着学习的目的在etherscan上审计了泰达币的智能合约源码以及USDT增发相关的调用事件,本文记录一下分析过程。
以下是TetherToken智能合约的USDT增发函数:
可以看到增发USDT需要TetherToken合约的owner账户调用issue(uint)?增发函数进行,增发成功后还会抛出Issue(amount)?增发事件。
再看下最近的增发记录截图:
Tether在以太坊网络新增印钞3亿枚USDT(已授权未发行):据Whale Alert数据,北京时间01月01日19:16,Tether公司在以太坊网络新增发3亿枚USDT。交易哈希为180e333633de85488e61c595f711caa44a598aa8b73f88e517c5e2593f6e26cb。
对此,Tether首席技术官Paolo Ardoino表示,以太坊网络补充了3亿枚USDT的库存。这是一笔已授权但未发行的交易,意味着该金额将用作下一次发行请求的库存。[2021/1/1 16:14:06]
TransactionHash:0xdd108cd36fbeaab03b29ac46d465ad9824618d683268681d3206bd78302e0d71
Tether在波场链上新增印钞3亿枚USDT:Whale Alert数据显示,北京时间11月7日6:49,Tether公司新增印钞3亿枚USDT,交易哈希为:02ae7072fa4ade2998209518d354c62d3a38f4a9e2789850d5e6d287e263ffe1。[2020/11/7 11:54:44]
可以看到在上图交易详情中并没有调用TetherToken合约的issue(uint)?增发函数,而是调用了MultiSigWallet合约的confirmTransaction(uint)?函数完成的增发操作。
需要注意以下两点:
TetherToken合约调用分析
《富爸爸,穷爸爸》作者:储存黄金比特币来防止美联储印钞偷走你的钱:6月23日消息,《富爸爸,穷爸爸》作者罗伯特·清崎(Robert Kiyosaki)表示,真正的钱是在人们生产的时候创造出来的。如果你烤饼干并将饼干卖出去,你就创造了真正的钱。而当有人受雇却不做任何事时,你的钱就被偷了。同理,当美联储印出数万亿美元钞票时,美联储给所有人都施加了压力。储存黄金、白银和比特币,以此来防止小偷偷走你的钱。(U.Today)[2020/6/23]
我们先看看MultiSigWallet合约的?confirmTransaction(uint)?函数的实现
调用?confirmTransaction(uint)?函数确认并执行交易需要满足以下条件
近一周Tether共计新增印钞3亿USDT:据Tokenview稳定币数据显示,截至今日15:00时,Tether近一周共计新增印钞3亿USDT,较上周增加15.38%。通过Tether Treasury地址新发行了1.7亿USDT,较上周增加46.92%。?在已发行的USDT中,有1.28亿流入了以Bitfinex和币安为首的5家交易所。[2020/3/14]
submitTransaction(address,uint,bytes)?会调用到合约内部的addTransaction(address,uint,bytes)?函数,其实现如下:
声音 | 印刷机制造商巨头CEO:尽管加密货币等数字支付兴起,但印钞机业务仍将保持强劲势头:据Business Standard消息,针对“由于电子商务、移动支付、数字货币的发展,纸币正变得过时”的说法,全球第二大印刷机制造商Koenig&Bauer首席财务官Mathias Daehn予以反驳。其表示,由于流通中的法定货币与国内生产总值(GDP)密切相关,新兴市场尤其需要越来越多的现金。[2019/4/25]
最终一次完整的提交?->?确认操作流程如下:
1、调用submitTransaction(address,uint,bytes)?函数提交事务并传入参数:contract-address、eth-value、payload。注意:提交事务包含一次事务确认。
依次发送Submission事件->Confirmation事件。
2、调用confirmTransaction(uint)?确认并执行事务,需要3个不同的owner账户完成最终的确认。
依次发送Confirmation事件->执行payload所产生的事件->Execution事件。
TetherToken跨合约调用如下图所示:
USDT增发分析
继续看这笔增发交易的调用事件,正好满足调用confirmTransaction(uint)?函数所产生的事件。
通过查询transactionId即可看到调用参数
转换成以下伪代码:
那么Bitfinex:MultiSig2地址的USDT是哪来的呢?根据transactionId继续向前追踪一个事务即可找到真正为Bitfinex:MultiSig2地址增发USDT的交易:
转换成以下伪代码:
TransactionHash:0xb467ea92b5c0095b1a96f35eb466b239c13e5b0b3f493e3e452f832d99830d6b
这才是真正为Bitfinex:MultiSig2地址增发USDT的操作。
USDT增发如下图所示:
总结
可以看到,USDT的增发需要通过MultiSigWallet跨合约调用才能完成。而MultiSigWallet智能合约存在多个owner用户,完成一次跨合约调用需要至少3个owner的确认。这种增发机制在一定程度上杜绝了当某一owner账户丢失或被盗时USDT被恶意增发的安全隐患。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。