摘要
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)
预备知识
在我们进一步分析事情原因前,需要先了解一些预备知识,这是因为 BTC 并没有使用 Ethereum 那样的账户模型。
UTXO
比特币未花费交易输出(UTXO)代表比特币所有权的特定部分。 与利用账户和余额的传统系统不同,比特币通过这些单独的比特币部分进行操作。 每个 UTXO 都由一个特定值定义,代表在交易中传输的比特币的不同部分。
在一笔交易的过程中,UTXO 会被消耗并不再存在。 因此,这一操作会生成一个或多个新的 UTXO。 这些 UTXO 的集合,称为 UTXO 集,由所有网络节点维护和更新。 每当一个新的区块处理生成和消除 UTXO 的交易时,就会发生这种情况。 UTXO 集在使节点能够独立确认交易及其打算花费的比特币的合法性方面发挥着关键作用。
PSBT
部分签名的比特币交易(PSBT)是比特币生态系统中的一种协议,旨在提高传输未签名交易的便利性,使多个参与者能够同时签署单个交易。
PSBT(部分签名的比特币交易)在多种场景中提供实用性。 考虑创建涉及三个人的 CoinJoin 交易。 在此过程中,三个参与者中的每一个都会向中央协调器发送一条消息。 该消息包含他们希望包含在 CoinJoin 中的 UTXO(未花费的交易输出)的详细信息。 此外,每个参与者都指定在 CoinJoin 交易完成后应将其份额的比特币返回到的地址。
问题出在哪?
Atomicals Protocol 提到,在一个安全的 PBST 交换步骤中,卖方签署包含 ARC 20 Atomical 的第 2 笔输入和接收付款金额的第 2 笔输出。
卖方需使用 SIGHASH_SINGLE | ANYONECANPAY 签名后,买方就可以添加他们的输入以获得资金,并添加他们购买 ARC 20 代币的接收地址。
然后,Atomicals Market 在 swap 中使用的并不是 SIGHASH_SINGLE,而是 SIGHASH_NONE。
我们可以看一下 NONE 和 SINGLE 的区别:
由于,Atomicals Market 使用的是 NONE,仅仅对一个 input 进行了签名,意味着只对卖出的代币数量进行了验证。而没有对 output 进行签名,意味着没有对接收的代币进行验证。最终导致,恶意用户无需支付代币即可以 0 元购的方式买走用户的代币。
资产损失
33, 000 $ATOM
后续
Atomicals Market 承诺赔偿用户损失.
安全建议
项目方对依赖的协议应该有深入的研究,产品需要经过足够的测试和审计,重视所使用协议本身以及安全机构的建议。
关于 MetaTrust Labs
MetaTrust Labs 是新加坡南洋理工大学孵化的领先Web3人工智能安全工具和代码审计服务提供商。我们提供先进的 AI 解决方案,赋予开发者和项目相关者保护Web3应用程序和智能合约的能力。我们的综合服务包括 AI 安全扫描、代码审计、智能合约监控和交易监控。通过整合 AI,我们确保构建一个安全的生态系统,增强用户和开发者之间的信任。
Website: https://metatrust.io/
Twitter: https://twitter.com/MetatrustLabs