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

北京链安
北京链安 机构得得号

Apr 28, 2020 聚焦区块链社区安全服务与资讯

该文章已上链

摘要: USDT频繁被增发,审计了泰达币的智能合约(TetherToken)源码以及 USDT 增发相关的调用事件,本文记录分析过程。

印钞机的秘密:USDT增发最全技术细节首次披露
00:00
06:36

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

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

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

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

Transaction Hash:0xdd108cd36fbeaab03b29ac46d465ad9824618d683268681d3206bd78302e0d71

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

需要注意以下两点:

TetherToken 合约调用分析

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

<img src="https://52midu.oss-cn-shanghai.aliyuncs.com/group/c1fa3ba2c2104dc18bc7787c9d53cbf6_565x605.png" border="0" alt="" />

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

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

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

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 即可看到调用参数

转换成以下伪代码:

<img src="https://52midu.oss-cn-shanghai.aliyuncs.com/group/b9ce39dbb9874e6cb9edb6c7ea5be768_544x100.png" border="0" alt="" />

那么 Bitfinex: MultiSig 2 地址的 USDT 是哪来的呢?根据 transactionId 继续向前追踪一个事务即可找到真正为 Bitfinex: MultiSig 2 地址增发 USDT 的交易:

转换成以下伪代码:

<img src="https://52midu.oss-cn-shanghai.aliyuncs.com/group/f6af679da2024f8686d7dd8848bd96bb_468x86.png" border="0" alt="" />

Transaction Hash:0xb467ea92b5c0095b1a96f35eb466b239c13e5b0b3f493e3e452f832d99830d6b

这才是真正为 Bitfinex: MultiSig 2 地址增发 USDT 的操作。

USDT 增发如下图所示:

总结

可以看到,USDT 的增发需要通过 MultiSigWallet 跨合约调用才能完成。而 MultiSigWallet 智能合约存在多个 owner 用户,完成一次跨合约调用需要至少 3 个 owner 的确认。这种增发机制在一定程度上杜绝了当某一 owner 账户丢失或被盗时 USDT 被恶意增发的安全隐患。

作者:北京链安;来自链得得内容开放平台“得得号”,本文仅代表作者观点,不代表链得得官方立场凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由投稿人本人负责得得号平台发布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,平台会立即下线。如遇文章内容问题,请发送至邮箱:linggeqi@chaindd.com

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 北京链安 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信