BTC双花疑云揭晓,竟然只是一次RBF交易

[复制链接]
12447 |0
发表于 2021-1-22 21:00:00 | 显示全部楼层 |阅读模式

wk588_com_444vc0zbvbw.jpg

wk588_com_444vc0zbvbw.jpg

 

昨天,BitMENPXS Research在推特上发布消息称,他们的ForkMonitor在BTC区块链上花费了双倍的钱。可以理解的是,“双花”这个词让人们在社交媒体上忧心忡忡,所以我很快想解释一下到底发生了什么,以及这对BTC意味着什么。

 

wk588_com_u0uoboejfii.jpg

wk588_com_u0uoboejfii.jpg

wk588_com_qgrgrwb2ain.jpg

wk588_com_qgrgrwb2ain.jpg

 

陈旧的区块

 

在中本聪共识中,所有节点都会自动切换到最重的有效链。这允许他们将自己的本地分类账状态(谁拥有什么)与其他所有人的状态同步。

 

有时,两个矿池几乎在同一时间找到一个新区块,并且这些区块具有相同的累积难度。然后,一些节点切换到一个区块,其他节点切换到第二个区块。在很短的一段时间内,BTC网络就会出现分叉。但是很奇怪的是,一旦找到下一个区块,分叉就会解决。

 

例如,假设一些矿工在666833-1区块进行挖矿,而另一些矿工在666833-2区块挖矿。一旦其中一个发现了666834区块,这个区块链将会有更高的累积难度,所有仍然在666833-1上的节点将会自动放弃其区块链并切换到新的规范区块链。

 

这正是BTC网络中发生的情况,因为SlushPool和F2Pool同时发现了区块666833。在币安的矿池发现666834区块和F2Pool的区块变得陈旧之后,双方的关系破裂。

 

现在陈旧的区块相对频繁地出现,完全不需要担心。但是可疑的“双花”呢?

 

什么是双花?

 

双花有两种流行的定义,一种是技术性支出,一种是实用性支出。

 

从技术上讲,当某方收到的付款(交易T1)首先包含在区块链中,然后在以后被删除时,就会发生双花。只有当包含该交易本身已过时时,才会发生这种情况。

 

此外,新的区块链不包含T1是不够的,否则它仍可能包含在下一个区块中。在两次花费中,T1的一个输入必须由冲突的交易T2花费。由于输入已花费在T2中,因此T1就变成无效,并从网络中删除。

 

我们称其为双花,不是因为用户被双重花费了,而是因为交易的输入已经被双重花费了。但实际上,如果T1>T2是否实际上将代币的所有权从一个用户更改为另一个用户也很重要。

 

换句话说,T1代币的接收者不得不发送其他资金或产品作为交换。下面是一个真实发生的例子:

 

1. 攻击者在交易所购买了100万美元的以太经典。

2. 他们把以太经典换成100万美元的BTC,然后提现。

3. 然后,攻击者通过创建竞争性交易T2,在交易上花费双倍的费用。在该交易T2中,攻击者将最初用于交易的相同代币花回自己手中。

4. 攻击者现在拥有100万美元的以太经典和100万美元的BTC。交易所的空头BTC为100万美元。

 

第三步相当于退回支票,这在BTC网络中极其困难。反转T1需要反转T1之上的所有区块,这将要求攻击者控制大量的哈希率。所以这种攻击只能由矿工或者像NiceHash这样的市场上租用哈希算力的人来执行。

 

请注意,最大的代币都不能用这种方式攻击。如果有人从Nicehash租借了所有的SHA256哈希算力(约500 PH/s),那将是BTC当前哈希率(123 EH/s)的0.4%。

 

基本上所有的双花事件,包括最近的事件,都是完全无害的。即使是大型矿工(而不是两个矿池之间的意外竞争)故意孤立了包含T1的区块,只要接收者遵循共同确认的经验法则,他们就无法通过攻击获利。在这种情况下,我们仅看到在不同时间确认了冲突的T1和T2。

 

正如我们现在看到的,BTC用户有充分的理由广播这种冲突的交易。

 

取代您的交易

 

每当用户将交易广播到网络时,他们就会参与第一次价格拍卖。通过在交易中附加费用,他们希望矿工将其纳入一个区块。理性的矿工倾向于支付最高的交易来填满他们的区块,因为这给了他们最大的利润。

 

但是与常规拍卖不同,区块空间市场有一个怪癖:如果出价没有赢得它所竞标的区块空间,它不会被撤回,而是自动进入下一次拍卖。如果出价太低,无法包含在内,则交易(以及相应的代币)会长期停滞不前,那将是一个大问题。

 

因此,用户需要一种方法来提高已经发布的交易的费用。一个有用的副作用是,用户可以降低交易费用费率,因为他们总是可以选择以后提高费用。这使得区块空间拍卖更加有效。

 

最后,为了关闭支付渠道(例如在闪电网络中),可能需要增加费用。不合作的关闭有严格的截止日期,由于费用不足而错过这个截止日期可能会导致用户资金的损失。

 

用户可以通过三种方式进行交易:

 

  • 父母为孩子付钱(CPFP)。
  • 交易加速器。
  • 按费用替换(RBF)。

 

如果发送者支付的费用不够,则“父母为孩子付费”可以接收用户加快交易速度。为此,他广播一种辅助交易,该交易使用未确认交易的输出作为输入,并支付比平常更高的费用。如果矿工希望从子交易中获得费用,而子交易的有效性取决于包含的父交易,那么他现在被激励将两个交易包含在内。

 

交易加速器是链下市场,用于确认在链上市场支付费用不足的交易。这些通常由矿池提供,有并以免费和付费的形式存在。用户可以将他们的交易ID粘贴到加速器中,然后矿池将以更高的优先级包含它。由于不需要签名,因此发送方和接收方以及任何人都可以使用它们(例如:Via比特币和比特币.com)。

 

按费用替换允许用户创建一个替换交易,该交易至少花费一个与被卡住交易相同的输入,但需要支付额外的费用。(如果它没有花费相同的输入,那将完全是一个单独的交易。)

 

除了在卡住的交易上增加费用外,交易替换对于像迭代付款批量处理之类的用例非常有用。虽然常规批量处理将许多支付合并到同一笔交易中,然后再发布,但同样可以先发布交易,然后在交易广播之后,但在一个矿工将其包含在区块之前,通过添加更多的输入和输出来迭代该交易。

 

有问题的交易

 

回到实际的问题上,在区块666833-1、666833-2和666834中到底发生了什么?

 

正如BTC工程师和研究员0xB10C在此图中所示,一个用户(我们称她为Alice)广播了三次竞争的交易,与前一次相比,每一项都更新了费率。

 

wk588_com_bf3uj1ra0mt.jpg

wk588_com_bf3uj1ra0mt.jpg


第一个收费标准是1 sat/b,这太低了,不能包含在区块中。因此,大约23小时后,她决定使用RBF替换该交易,并收取9.4 sat / b的较高费用。请注意,Alice此时已经等待了几乎一整天,在她广播替换交易之前,她的交易仍未进行。但是,新的费率仍然太低,所以她在三个小时后又用更高的费率代替了它。

 

这一分析后来也得到了BitMENPXS Research的证实。

 

那是双花吗?

 

我们确定用户可以在交易被确认之前使用RBF替换交易。由于用户试图取消先前卡住的交易并将其发回给自己,因此更新后的交易通常具有与第一个交易不同的输出。这几乎肯定是Alice的替代交易2和3所发生的情况。

 

因此,交易的不同版本可以同时在网络中浮动。当矿工包含两个冲突的(但不是有害的)交易时,先前包含的交易可能变得无效。这使得它最初看起来像是双花。

 

虽然理论上讲,BTC网络可能出现双花,但这通常不是一个严重的问题。以下是一些您感到惊慌时有用的启发方法:

 

无效交易的价值在数千万到数亿美元之间。考虑到这样的双花可能会严重损害BTC的声誉和市场价值,并且矿工使用的硬件价值数百亿美元,这是矿工实现“跳票”获利的最低成本。相比之下,今天的交易价格约为25美元。

 

交易所或其他大型实体如果不等待更合理数量的确认,就不会接受如此大的交易作为最终交易。因此,攻击者无法通过替换单个区块来退回支票,他们可能必须替换10个以上的区块。这就要求现有的大多数矿工相互勾结,同时冒着破坏他们在挖矿硬件上的投资。

 

像许多辩论一样,这归结为对“双花”一词的定义。今天我提供了其中两个原因,其中一个是技术性的,指的是INPUT的双重支出,而不是另一个用户。输入双花显然已经发生,但对其他用户没有任何影响。

 

从实际意义上说,双倍支出就像是在向另一位用户付款后退还支票。我们可以非常肯定地说这是有几个原因的。

 

  • 其他更有可能的解释的存在,例如用户(不是矿工)使他们自己的交易无效。
  • 我们没有其他可能导致有害的双重支出的因素,例如,更大的无效交易和大量的陈旧区块。

 

由于媒体很快就会注意到“双花”之类的术语,所以我认为当启发式方法没有一个指向有害意义上的双花时,我们应该谨慎使用。相反,我建议说“交易已经失效”,这具有更广泛的含义,包括用户可能故意取消交易的许多方式。

 

Alice想做什么?

 

因此,我们已经确定这肯定不是矿工故意用更高难度的区块链替换一个区块链以退回一张非常大的支票的双花。它没有矿工的参与,只是一个陈旧的区块。

 

然而,许多人仍对Alice发表的不同交易的性质感到好奇。她为什么要取代原来的交易?这是否是尝试“零配置”的商人花双倍的钱吗?

 

我们可以立即排除后者,因为在初始交易和第一个替换交易之间几乎经过了整整一天。但探索Alice把代币花给了谁还是很有趣的。虽然我们不知道谁分别控制输出,但我们可以使用一些启发方法来解决这个难题。

 

1. 输入可以忽略,因为我们知道输入必须由用户控制。

2. 具有一个输出的交易几乎总是内部转账(意味着同一用户的多个钱包之间)。您很少在钱包中输入正确的钱来支付给其他人。

3. 具有两个输出的交易通常会支付给第三方,其余的费用返还给用户(所谓的变更输出)。

 

把难题拼凑起来,我们可以看到交易2和交易3都只有一个输出,这意味着Alice可能控制这些输出。交易1与交易3共享一个输出,因此同样适用于交易3。

 


wk588_com_2yg02wbgob0.jpg

wk588_com_2yg02wbgob0.jpg  

这只剩下交易1的第二个输出3JaLvP了。要回答这个问题,我们需要绕一小段路。为什么费用较低的交易(1sat/b)获胜?Slushpool讨厌钱吗?

 

答案是否定的,Slushpool的行为完全符合预期。原因是Alice或她的对手使用了我们之前讨论过的另一种技术CPFP来确认交易。

 

换句话说,她进行了一个以前未知的第四个交易,其中包括交易a13c2bd…的滞留输出(地址3JaLvP)作为同一区块中的唯一输入。

 

wk588_com_wgl5qegznps.jpg

wk588_com_wgl5qegznps.jpg


正如我们在这里看到的,新的交易支付了更高的费用率(46.3sat/byte),足以支付这两笔交易。因为包含交易1290376...的条件是包含交易a13c2bd...,因此Slushpool必须同时包含这两者。

 

通过从3JaLvP中支出资金,我们可以非常确定地知道,这些资金确实达到了他们的目标目的地,实际上并没有被重复使用。我们知道这一点是因为只有控制3JaLvP的私钥的人才能签署最终得到确认的CPFP交易。

 

Alice试图发送给第三方Bob的可能性很小,Bob已经厌倦了等待钱到来。所以他用CPFP把未经确认的输出给了她。但这可能是Alice用自己的钱包汇款或尝试不同的方式来提高交易费用。

 

wk588_com_d3feeez5kbr.jpg

wk588_com_d3feeez5kbr.jpg

 

因此,我们可以得出结论,所有的输出确实是由Alice控制。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表