作者:Daniel Tan,来源:MetaTrust Labs
01 摘要
2023-11-21 备受关注的Atomicals Market交易平台发生了0元购事件,让Atomicals Protocol及其交易平台Atomicals Market近日陷入风波。关于ARC-20代币的一系列问题引发了广泛的讨论和质疑。
Atomicals Protocol & Atomicals Market
Atomicals Market是ARC-20的交易市场,使用了Atomicals Protocol进行ARC-20的交易(Atomicals Market 和 Atomicals Protocls不是同一个公司)
Atomicals Market在21号发文指出在其基于Atomicals Protocol的交易过程中发现了PBST缺陷,导致用户在交易atom代币时遭遇损失。
与此同时,Atomicals Protocol于24号发文反击了Atomicals Market的言论并指出问题的原因在于Atomicals Market的疏忽,在交易中使用 SIGHASH_NONE 进行签名,将其用户置于危险之中。Atomicals Protocol表示并曾警告过Atomicals Market不应该使用SIGHASH_NONE进行签名(值得注意的是,同样是Atomicals交易平台的SatsX似乎并未出现类似情况)
分析后发现,导致0元购的根本原因在于Atomicals Market在PSBT中错误的使用了SIGHASH_NONE (TX:1623bf2997cde779dd9e0e2c54b5f7f196f36826dcb689e41acd7fff27ec5c93)
02 预备知识
在我们进一步分析事情原因前,需要先了解一些预备知识,这是因为BTC并没有使用Ethereum那样的账户模型。
UTXO
比特币未花费交易输出(UTXO)代表比特币所有权的特定部分。与利用账户和余额的传统系统不同,比特币通过这些单独的比特币部分进行操作。每个 UTXO 都由一个特定值定义,代表在交易中传输的比特币的不同部分。
在一笔交易的过程中,UTXO会被消耗并不再存在。因此,这一操作会生成一个或多个新的 UTXO。这些 UTXO 的集合,称为 UTXO 集,由所有网络节点维护和更新。每当一个新的区块处理生成和消除 UTXO 的交易时,就会发生这种情况。UTXO 集在使节点能够独立确认交易及其打算花费的比特币的合法性方面发挥着关键作用。
PSBT
部分签名的比特币交易(PSBT)是比特币生态系统中的一种协议,旨在提高传输未签名交易的便利性,使多个参与者能够同时签署单个交易。
PSBT(部分签名的比特币交易)在多种场景中提供实用性。考虑创建涉及三个人的 CoinJoin 交易。在此过程中,三个参与者中的每一个都会向中央协调器发送一条消息。该消息包含他们希望包含在 CoinJoin 中的 UTXO(未花费的交易输出)的详细信息。此外,每个参与者都指定在 CoinJoin 交易完成后应将其份额的比特币返回到的地址。
03 问题出在哪?
Atomicals Protocol 提到,在一个安全的 PBST 交换步骤中,卖方签署包含 ARC20 Atomical 的第 2 笔输入和接收付款金额的第 2 笔输出。
卖方需使用 SIGHASH_SINGLE | ANYONECANPAY 签名后,买方就可以添加他们的输入以获得资金,并添加他们购买 ARC20 代币的接收地址。
然后,Atomicals Market在swap中使用的并不是 SIGHASH_SINGLE,而是SIGHASH_NONE。
我们可以看一下NONE 和 SINGLE 的区别:
由于,Atomicals Market使用的是NONE,仅仅对一个input进行了签名,意味着只对卖出的代币数量进行了验证。而没有对output进行签名,意味着没有对接收的代币进行验证。最终导致,恶意用户无需支付代币即可以0元购的方式买走用户的代币。
04 资产损失
33,000 $ATOM
05 后续
Atomicals Market 承诺赔偿用户损失.
06 安全建议
项目方对依赖的协议应该有深入的研究,产品需要经过足够的测试和审计,重视所使用协议本身以及安全机构的建议。