SDT:印钞机的秘密:USDT增发最全技术细节披露

近日,听说以太坊上的泰达币频繁被增发。本着学习的目的在etherscan上审计了泰达币的智能合约源码以及USDT增发相关的调用事件,本文记录一下分析过程。

以下是TetherToken智能合约的USDT增发函数:

可以看到增发USDT需要TetherToken合约的owner账户调用issue(uint)?增发函数进行,增发成功后还会抛出Issue(amount)?增发事件。

再看下最近的增发记录截图:

四月Tether净印钞约合109亿USDT,总市值突破556亿美元:据Tokenview区块浏览器数据显示:四月USDT新印钞109亿枚,新销毁1.71万枚。其中以太坊上印钞数量约35亿,波场链上印钞约74亿,新增印钞共计流入8家交易所,共计27.2亿,按流入量排名分别为Bitfinex-19.33亿枚、Binance-5.02亿枚、Nexo-1.48亿枚、OKEX-9934万枚、Huobi-3018.5万枚。当前USDT总市值已超过556亿美元。[2021/5/8 21:38:46]

TransactionHash:0xdd108cd36fbeaab03b29ac46d465ad9824618d683268681d3206bd78302e0d71

数据:2021年三月Tether净印钞约合67亿USDT,总市值突破414亿美金:据Tokenview区块浏览器数据显示:三月USDT新印钞67亿枚,新销毁1305枚,共计净印钞67亿枚。其中以太坊上印钞数量约24亿,波场链上印钞约43亿,新增印钞共计流入5家交易所,按流入量排名分别为Bitfinex-7.5亿枚、Nexo-3.25亿枚、Binance-1.57亿枚、Huobi-1231万枚、HitBTC 319万枚。当前USDT总市值已超过414亿美元。[2021/4/1 19:36:59]

可以看到在上图交易详情中并没有调用TetherToken合约的issue(uint)?增发函数,而是调用了MultiSigWallet合约的confirmTransaction(uint)?函数完成的增发操作。

需要注意以下两点:

数据:9、10两月Tether新增印钞约合44.2亿USDT:据Tokenview区块浏览器数据显示,9、10两月USDT新增印钞44.2亿枚。新销毁10亿枚,其中以太坊上印钞数量约23.2亿,波场链上约21亿。发行的USDT流入5家交易所,共计金额29.37亿,其中约有12.3亿流入了Bitfinex交易所,占比41.8%,16.9亿流入了币安交易所,占比57.5%。截止10月31日,USDT的流通量约为166.368亿枚[2020/11/2 11:26:17]

TetherToken合约调用分析

我们先看看MultiSigWallet合约的?confirmTransaction(uint)?函数的实现

调用?confirmTransaction(uint)?函数确认并执行交易需要满足以下条件

Tether在波场链上新增印钞1亿USDT:Tokenview区块浏览器数据显示,Tether于今日18:05在波场链上新增印钞1亿USDT。区块高度为:20707511。Bitfinex首席技术官PaoloArdoino对此表示,波场网络补充了1亿USDT的库存。这是一笔已授权但未发行的交易,这意味着该金额将用作下一次发行请求的库存。经查询发现,截至目前,Tether在波场网络上的TRC20USDT总发行量约27.83亿枚。[2020/6/17]

submitTransaction(address,uint,bytes)?会调用到合约内部的addTransaction(address,uint,bytes)?函数,其实现如下:

声音 | 陈伟星:区块链最大的作用是改变印钞逻辑和信贷逻辑:泛城资本陈伟星今日发微博表示,区块链最大的作用是改变印钞逻辑和信贷逻辑,最大的障碍是人们对货币的意识形态,认为过度印货币就是政府的权力。但这种意识形态的认知是不科学的,因为政府权力的实质,是抽取高生产力的人的一部分财富,去协调低生产力的人的发展和保障。而印钞和信贷做的不好,是遏制生产力的,意味着政府权力的减少,反之如果有好的印钞和信贷方法,则能加速生产力的发展,意味着政府能力的提高。这个道理,通常也只会在现代法币体系和银行体系失败,大家才会真正理解。[2019/11/22]

最终一次完整的提交?->?确认操作流程如下:

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被恶意增发的安全隐患。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:15ms0-1:72ms