Botanix Labs

2025年5月20日

Botanix 如何防止双重支付

Botanix 如何防止双重支付

比特币链的主要挑战之一是保持链与比特币之间收入和支出的资金平衡。这适用于存款(嵌入)交易和取款(嵌出)交易。

比特币链面临的主要挑战之一是保持链与比特币之间的资金流入和流出的平衡。这适用于存款(引入)交易和提款(退出)交易。如果这些流动没有得到管理,系统将迅速出现资产不平衡,导致双重消费交易和冲突输入的出现。Botanix优雅地用Spiderchain解决了这个问题。Botanix的Spiderchain是一个为比特币构建的联邦权益证明链,基于轮换的多重签名钱包结构。

在这个上下文中,多签名是什么意思?

在这种情况下,重要的部分是多签名。这个术语很可能对大多数web3用户来说都是熟悉的,因为多个用户可以在一个钱包中签署交易。在这个上下文中,“多签名”(多签名的缩写)指的是需要多个各方(通常是n-of-m个密钥)联合授权才能从该地址执行任何交易的比特币地址。

在Botanix中,每个Spiderchain时代创建一个新的2-of-3比特币多签名钱包(未来计划将这个比例更改为12/16,这将超过2/3),由协调节点控制。这意味着从这个地址支出的任何交易(例如,退出)需要至少67%的指定协调者的签名。这些多签名钱包在每个比特币区块中轮换,形成一个BTC存款和提款的保管链。

因此,在这种情况下,“多签名”不仅仅是一个共享钱包——它是Botanix信任最小化设计的基础,是比特币与其链之间的桥梁。它确保没有单一的各方可以单方面提取BTC,并通过轮换、可验证的签署者群体,使引入/退出过程获得安全保障。因此,对于大多数链来说,似乎是一个相当简单且众所周知的特性,但在比特币的情况下却发挥了巨大的作用。

“冲突输入”机制

这个机制背后的关键洞察是,来源于前一个退出的输入在当前交易中已经被消费。 在比特币的UTXO模型中,一旦UTXO被包含为已确认交易的输入,它就不能再次被消费。Botanix利用这个属性:通过将前一个退出的支出输出作为新退出的输入,任何广播重复退出交易的尝试将违反比特币的双重消费规则,并被拒绝。

如果协调者或用户尝试使用相同的UTXO重复退出,结果交易将包含“冲突输入”(即试图消费相同UTXO的两个交易),并将被视为无效。换句话说,已消费的多签名UTXO不能被重复使用;系统会检测到冲突并拒绝重复的交易。

例如,假设TXₙ是最后一次退出的比特币交易。它的输出包括一个未消费的变化UTXO Uₙ(用于资助下一个多签名)。当下一个退出发生时,Botanix协调者构建TXₙ₊₁,其中包括Uₙ作为其输入之一。在此时,Uₙ被TXₙ₊₁消费。如果任何一方(恶意或其他原因)试图重新广播TXₙ₊₁的第二个副本——或消费Uₙ的替代交易,网络将识别出Uₙ已经被第一个TXₙ₊₁消费,并将把第二个副本视为双重消费。重复的交易根本无法被挖矿或可靠传播,因为比特币共识禁止多次消费相同的UTXO。本质上,将已消费的UTXO作为输入使任何退出交易无法重放,从设计上强制单次使用。

这个机制类似于比特币交易链:每个新的输出明确消费之前输出的输出。一个重复(相同的)交易不能被确认两次,任何尝试重复使用相同输入的新交易将在比特币的规则下被视为无效。简而言之,Spiderchain使用UTXO模型来强制每次退出的独特性。

下面是一个逻辑,展示了输入/输出如何连接退出交易:

  • 前一个多签名UTXO (M1) → [退出TX] → 用户地址 (金额) + 新多签名UTXO (M2).

  • 在下一个区块中,M2成为“前一个退出UTXO”,被下一个退出TX消费。

  • 任何重复的退出TX将尝试再次消费M2,但由于M2已经被消费,因此尝试将失败。

根据设计,两个退出交易无法消费相同的比特币输出,因为每个交易都包括最新的输出作为输入。比特币节点将拒绝任何试图双重消费该输入的交易,因此意外或恶意重放会自动失效。

防止意外或恶意重放

冲突输入设计可以防止意外和故意的重复退出。意外情况下,用户或节点无法创建两个相同的提款,因为第二次尝试会与已消费的输入相冲突。恶意情况下,协调者或外部攻击者无法伪造同一资金的第二次退出。要尝试双重消费,攻击者需要创建一个消费相同UTXO的第二笔比特币交易;但由于有效交易已经消费了前一个退出的UTXO,因此任何具有相同输入的第二笔交易都会被视为双重消费并被认为无效。

此外,Botanix治理会惩罚任何尝试签署或广播冲突退出交易的协调者。系统规则将“在Spiderchain中不当的多签署——要么签署错误的退出交易,要么参与双重消费”视为可降低的罪行。由于桥接代码以确定性方式构建完整交易(输入、输出、金额),操作员无法秘密修改输入。因此,如果协调者故意签署与其他交易冲突的交易(例如,尝试双重消费),该节点有风险失去其抵押物。通过这种方式,Botanix通过比特币共识(拒绝双重消费)和其自身的挖掘和削减规则强制独特的退出约束。

逐步运作方式

此时,在深入探讨这一机制的内部工作原理并获得高层次的理解后,让我们逐步仔细看看它的运作方式。尽管有许多相互关联的技术过程,但从更广泛的角度来看,整体图景出乎意料地变得简单:

引入(存款)

  1. 生成一个网关地址。Botanix协议通过将联邦的FROST公钥与用户的以太坊地址结合,为用户派生一个独特的taproot“网关”地址。

  2. 向多签名发送BTC。用户用BTC资助这个网关地址。实际上,这将BTC发送到由协调者控制的Spiderchain的联邦多重签名钱包中。原始的BTC仍然锁定在这些比特币多签名地址中;还没有任何资金从比特币转出。

  3. 在EVM上铸造合成BTC。一旦存款交易获得足够的确认,侧链(或通过桥接的用户)构建Merkle包含证明并调用Spiderchain EVM上的Botanix铸造合约。该EVM交易燃烧链上引入的“证明”调用,并发出铸造事件,此后系统在用户的EVM账户中铸造等量的合成BTC(减去比特币和EVM的燃气费用)。

结果是,用户现在在Botanix EVM上持有合成BTC,按1:1的比例由蜘蛛链多签名锁定的比特币支持。已消费的BTC出现在多签名钱包的UTXO集中。Botanix验证者拥有自己的比特币实例,以监控比特币并相应地更新其UTXO集,并验证证明,以确保相应的EVM代币每次存款只铸造一次。

退出(提款)

  1. 在EVM上燃烧。用户通过在Spiderchain EVM上发送交易来发起一次退出,燃烧他们的合成BTC。该EVM交易从用户的余额中扣除(燃烧)请求的金额(减去EVM的燃气费用)。

  2. 构建比特币交易。孤立的合成BTC值现在需要在比特币上解锁。协调者检测到燃烧事件(因为协调者也是EVM验证者,因此他们可以看到这些数据)。在下一个比特币时代,指定的时代领导协调者收集所有未决的退出请求。根据Spiderchain的设计,它选择要消费的池中的UTXO。Botanix采用后进先出(LIFO)策略:它将首先消费最新存入的(最年轻的)UTXO。这保护了较旧的存款免受假想的恶意接管行为。
    在实践中,协调者不断选择UTXO,直到其总值覆盖提款金额加上比特币矿工费用。然后构建一个原始比特币交易:输入是所选的UTXO,输出包括(a)用户的比特币提款目标地址和(b)将任何剩余金额发送回新的Spiderchain多签名地址的变化输出(确保变化仍在Spiderchain中)。

  3. 阈值签名和广播。一旦交易构建完成,所有联邦成员共同使用他们的FROST密钥共享对其进行签名。完成≥t-of-n个签名后,完全签署的比特币交易广播到比特币网络。此时,Spiderchain中的BTC燃烧已实现为链上的比特币支出。用户最终收到请求的BTC减去合并费用:具体而言,净退出金额是EVM上的燃烧金额减去比特币网络费用。

确保共识和削减

为了维护可信环境并确保机制的稳健性,Botanix利用比特币的简洁性和可靠性以及更现代系统的先进能力。这种混合方法通过将简单与复杂结合加强了安全性。

一方面,除了标准UTXO/消费规则“UTXO一旦被消费,就不能再消费”之外,不需要任何特殊的比特币共识规则。这是比特币共识中的基本检查,因此冲突输入机制仅依赖比特币现有的规则。只要协调者在每个新的退出交易中包含前一个退出UTXO,比特币节点将自动拒绝任何重放或重复,无效。

另一方面,如果协调者恶意行为(例如,签署第二个冲突交易以颠覆多签名),Botanix的权益证明协议和削减条件将惩罚该协调者。这是一个良好的激励,以排除可能的恶意行为。

本质上,“冲突输入”策略利用UTXO模型本身来强制一次性退出。通过将每一次退出的输入链接到前一个退出的输出,Botanix确保只有第一笔有效交易可以成功;任何重复交易都是双重消费,自然会被比特币网络拒绝。这优雅地防止了意外的重复交易和恶意重放攻击,安全性由比特币的共识规则和Botanix自身的内部削减激励共同支持。