甚至在结算之前就可以观察到冲突,但是只有当受害者为一笔交易花费了价值并且另一笔交易在接收链中获胜时,才会发生成功的双花。因此,更换钱包支付、无意的费用上涨或不成功的冲突并不一定是欺诈。零配置竞争和覆盖已提交的区块具有根本不同的成本和风险。
每个输入使用 txid 和索引引用先前的输出。当至少一个输入引用同一个未花费的输出点,但它们不能同时支付时,两笔交易发生冲突。验证区块时,节点会检查输入是否存在,以及是否在给定历史记录或同一区块的其他地方较早地被花费过。有效的 UTXO 集中只有一个分支存活;攻击不会产生聪的副本,它试图让接收者对丢失的分支进行操作。 [比特币白皮书——交易、时间戳服务器和计算] [比特币开发者指南——交易] [比特币核心——validation.cpp]
挖矿之前没有未提交交易的全局内存池或共识顺序。同行可以首先看到由于促销、拓扑、收费政策、包状态或 eclipse 隔离而导致的各种冲突。 First-see是一个中继策略,不是矿工确认第一个选项的义务。商家后端的 txid 仅证明一个已签名的候选者已到达,而不是整个网络已看到它或赢得了一个区块。 [比特币开发者指南 — 支付处理] [比特币核心 — Mempool 替代品]
Replace-byfee允许节点替换满足费用和反DoS规则的mempool冲突;自版本 28 以来,full-RBF 一直是 Bitcoin Core 中的默认策略。发送方可以合法地增加滞留支付费用并保留接收方的输出,或重定向该值。在这两种情况下,共识都会看到共同的候选者并接受有效挖掘历史中的变体。单独的 RBF 信号、替换或碰撞并不能证明欺诈;对于零配置来说,没有信号的交易同样不安全。 [比特币核心 — Mempool 替换] [BIP 125 — 选择完全按费用替换]
在竞争攻击中,付款人向商家发送一笔交易,并将冲突发送给矿工或其他同行,以便商家在区块选择一个选项之前发出不可退货的商品。结果取决于推广、商家的网络看法、矿工的选择和转账时间。更多独立的侦听器将改善检测,但不会产生确定性的最终结果。 Race、Finney 和 Vector76 名称是场景模型,而不是交易数组或各种共识规则。 [比特币开发者指南——支付处理] [Karam 等人。 ——比特币中的不当行为]
具有挖矿能力的芬尼式攻击者首先私下找到包含冲突的区块将价值返回给他,然后用相同的UTXO向商家零配置支付,并在收到货后发布隐藏区块。只有当该区块保持可用并在诚实的竞争对手区块阻碍准备之前被网络接受时,该计划才会成功;攻击者同时面临区块奖励和挖矿成本的风险。等待商家的交易包含在经过验证的区块中会结束经典序列,但并不能消除以后的重组风险。 [比特币白皮书——交易、时间戳服务器和计算] [Karame 等人。 ——比特币中的不当行为]
一旦得到确认,冲突就不能再仅仅将付款推出内存池:备用有效分支必须跳过付款,包括第二笔支出,并获得比接收者的活动链更多的链工作。即使没有几乎同时发生的区块欺诈或软件或网络事件,重组也可能发生;对受害者的成功双花只是通过赢得冲突来获得价值。 Bitcoin Core 可以显示丢失钱包交易的负面确认和钱包冲突。 [比特币核心——验证] [比特币核心——validation.cpp] [比特币核心RPC——gettransaction]
攻击者的算力份额、确认深度和可获得的价值决定了私人和诚实工作的随机竞赛。低于 50% 并不意味着机会为零;永久多数显着增加了追赶的可能性,但它不允许矿工伪造签名、花费外部 UTXO、超额发行或强制全节点接受无效区块。成本包括算力、能源、失去诚实奖励、损失风险、流动性和风险敞口;收入还可以包括市场地位,因此仅仅租赁机器的价格是不够的。 [比特币白皮书 — 交易、时间戳服务器和计算] [Rosenfeld — 基于算力的双花分析] [Garay、Kiayias 和 Leonardos — 比特币主干协议]
每次额外的提交都会迫使备用分支重做更多的积压工作,并且根据假设,会降低成功的可能性。没有通用的安全号码:咖啡、汽车、证券交易所存款和不可退还的提款表现出不同的价值、动机和纠正的可能性。经常被引用的六项肯定是一种惯例,而不是共识。该政策还应监控算力分布、异常重组、后端信任、日食风险和移交的可逆性。 [比特币开发者指南 — 支付处理] [Rosenfeld — 基于算力的双花分析]
后端可以监控其自己的全节点上冲突的内存池支出,调用 gettxspendingprevout,读取钱包冲突,比较活动提示并警告确认丢失。更多的对等点或独立节点减少了盲点,但没有检测到冲突是薄弱的证据:攻击者可以拦截它或将其发送到其他地方。资源管理器显示自定义节点视图,并且可能会延迟。检测允许停止分配;它不能告诉矿工获胜或将零配置转变为确认。 [比特币核心 RPC — gettransaction] [比特币核心 RPC — gettxspendingprevout] [Karame 等人。 ——比特币中的不当行为]
对于链上结算,使用自己的全节点进行验证,将订单与确切的 txid、输出和金额绑定,根据可能的损失设置深度,如果发生重组或冲突,则停止履行并将记入余额与可提取金额分开。不要将未经确认的更改后代视为独立于父级。闪电网络以不同的方式处理快速循环支付:确认的资金出点锚定通道,承诺/撤销规则控制链下状态;零配置渠道故意信任资助者,并不能消除资金双花风险。 [BOLT 2 — 对等协议] [Bitcoin Optech — 零配置通道]
要获得更完整的理解,请将本词条与以下词条结合阅读: 交易, 确认, Mempool, Proof of Work, Replace-by-Fee (RBF), Bitcoin. 反向关联还来自: 确认, Replace-by-Fee (RBF), 拜占庭将军问题, 日蚀攻击.