主页 > imtoken官网下载广告 > Tether 频发! 最全的USDT发行技术详解

Tether 频发! 最全的USDT发行技术详解

imtoken官网下载广告 2023-11-14 05:07:04

Tether 频发! 最近听说以太坊上的Tether(USDT)发行频繁。 出于学习的目的,我在etherscan上审计了Tether的智能合约(TetherToken)源码和USDT发行相关的调用事件。 本文记录分析过程。

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

泰达币频繁被增发!USDT增发最全技术细节披露

可以看出,USDT的增发需要TetherToken合约的owner账户调用issue(uint)增发函数泰达币频繁交易,增发成功后会抛出Issue(amount)增发事件。

我们来看看最近一条追加记录的截图:

泰达币频繁被增发!USDT增发最全技术细节披露

交易哈希:0xdd108cd36fbeaab03b29ac46d465ad9824618d683268681d3206bd78302e0d71

泰达币频繁被增发!USDT增发最全技术细节披露

可以看出,在上述交易细节中,并没有调用TetherToken合约的issue(uint)发行函数,而是调用了MultiSigWallet合约的confirmationTransaction(uint)函数来完成发行操作。

注意以下两点:

泰达币频繁被增发!USDT增发最全技术细节披露

TetherToken合约调用分析

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

泰达币频繁被增发!USDT增发最全技术细节披露

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

泰达币频繁被增发!USDT增发最全技术细节披露

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

泰达币频繁被增发!USDT增发最全技术细节披露

最终完成提交->确认操作流程如下:

1.调用submitTransaction(address,uint,bytes)函数提交交易,传入参数:contract-address、eth-value、payload。 注意:提交交易包括交易确认。

依次发送提交事件 -> 确认事件。

2. 调用confirmTransaction(uint) 确认并执行交易。 需要三个不同的所有者帐户才能完成最终确认。

依次发送Confirmation事件->执行payload产生的事件(满足确认次数)->Execution事件。

TetherToken跨合约调用如下图所示:

泰达币频繁被增发!USDT增发最全技术细节披露

USDT发行分析

继续看这个追加交易的调用事件,刚好满足调用confirmTransaction(uint)函数产生的事件。

泰达币频繁被增发!USDT增发最全技术细节披露

查询transactionId可以看到调用参数

泰达币频繁被增发!USDT增发最全技术细节披露

翻译成以下伪代码:

泰达币频繁被增发!USDT增发最全技术细节披露

那么Bitfinex:MultiSig 2地址的USDT从何而来呢? 根据transactionId泰达币频繁交易,继续向前追溯一笔交易,找到实际为Bitfinex:MultiSig 2地址增发USDT的交易:

泰达币频繁被增发!USDT增发最全技术细节披露

翻译成以下伪代码:

泰达币频繁被增发!USDT增发最全技术细节披露

交易哈希:0xb467ea92b5c0095b1a96f35eb466b239c13e5b0b3f493e3e452f832d99830d6b

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

USDT发行如下图所示:

泰达币频繁被增发!USDT增发最全技术细节披露

可见,USDT的发行需要通过MultiSigWallet跨合约调用来完成。 但是MultiSigWallet智能合约中存在多个owner用户,至少需要3次owner确认才能完成一次跨合约调用。 这种增发机制在一定程度上消除了所有者账户丢失或被盗时USDT被恶意增发的安全风险。