选择加入 RBF 常见问题解答
概述
- 什么是选择加入 RBF?
- 这是个新功能吗?
- 它有什么用?
- 它是如何工作的?
- 选择加入 RBF 的实现是否会改变“非 RBF”交易被双重花费的可能性?
- 选择加入 RBF 是否会使欺诈性支出更容易成功?
- 假设人们在没有确认的情况下接受选择加入交易,那么选择加入交易本身是否对专门的欺诈者更有用?
- 为什么未确认的交易不安全?
- 是谁发明了未确认交易替换?这是否违背了比特币的“愿景”?
- 选择加入 RBF 的拉取请求有争议吗?
- 此更改何时以及如何激活?
- 选择加入 RBF 仅对调整费用有用吗?
- 钱包需要保持在线状态才能以更高的费用发出替换吗?
- 选择加入 RBF 是否增加了“懒惰”的交易处理者被诈骗的风险?
- 如果我认为 RBF 很糟糕怎么办?
- 为什么实施“选择加入”而不是让矿工替换任何交易?
- 我听说选择加入 RBF 的添加几乎没有讨论
- 这可以用来对未准备好的(旧的)钱包进行双重花费吗?所有钱包都需要更新吗?
- 为什么不使用“先到先得安全替换费用”(FSS-RBF)
- 什么是“子支付父”(CPFP)?
- 为什么没有将 CPFP 用于 RBF?
什么是选择加入 RBF?
选择加入替换费用 (RBF) 允许在交易在区块中确认之前将其标记为可替换。
这是个新功能吗?
中本聪在比特币软件的第一个版本中引入了交易替换,但后来由于拒绝服务问题而被删除。选择加入 RBF 通过要求交易替换支付更高的费用来解决此问题。
它有什么用?
在交易等待确认期间,一些钱包希望能够更新这些交易,以增加其费用(这可能有助于它们更快地确认)、将多个交易压缩成一个、创建后台混币(以提高隐私),或执行其他一些有用的操作。
它是如何工作的?
选择加入 RBF 是对内存池和网络中继代码的更改,它允许这些钱包选择性地在交易中添加一个信号,该信号告诉完整节点这些特定交易可以在它们在新的区块中确认之前进行更新(替换)。
选择加入 RBF 的实现是否会改变“非 RBF”交易被双重花费的可能性?
不。交易必须被标记为可替换(序列号低于 MAX_1),才能使选择加入 RBF 实现将其视为可替换。
选择加入 RBF 是否会使欺诈性支出更容易成功?
选择加入 RBF 对未使用它的交易没有影响,也没有人被迫使用它。交易确认后它就没有效果。这意味着,关心未确认交易的用户可以继续不使用 RBF。
假设人们在没有确认的情况下接受选择加入交易,那么选择加入交易本身是否对专门的欺诈者更有用?
我们目前没有理由相信它们会(至少不是明显地)阻止使用最有效工具和实践的欺诈者。但是,如果它们是(或者直到更清楚地表明它们不是),收件人可以通过继续将具有非最大序列号的交易视为不安全,直到它们得到确认为止。
由于使用选择加入 RBF 的支出者有能力增加其费用,并且即使有许多交易正在等待确认,也可能减少其确认时间,因此要求在为其提供服务之前确认其交易并非不近人情。
为什么未确认的交易不安全?
比特币交易通过异步分布式系统中继,在该系统中不存在全局一致的“第一个”。爱丽丝先看到的东西,鲍勃可能后看到。比特币设计没有提供爱丽丝和鲍勃就哪笔交易真正先发生达成一致的机制;他们所能做的就是等待看看这些交易中的哪笔交易在最佳区块链上的有效区块中得到确认。
如今,复杂的双重花费攻击者使用工具来映射网络连接,方法是进行看起来无害的冲突支出,并查看哪些版本出现在哪些商户以及哪些区块中。这使他们能够制作同一交易的两个版本,一个发送给受害者,另一个发送给矿工以确认。
向商家支付的不可替换支付的存在可以防止他的节点在它出现在由只是开采他们先看到的东西的矿工开采的区块中之前了解双重花费。这种简单而常见的模式有时会被其他技术进一步放大,例如使用未确认的交易链、低费用或非标准交易。
因此,未确认交易的大部分安全性并非来自比特币系统内部,而是来自外部因素,例如大量诚实的比特币用户永远不会试图欺骗他们的供应商,供应商对少量欺诈的容忍度,供应商诉诸法律制度或其他类型的追索权的能力(或威胁),以及与比特币协议的设计无关的其他因素。
所有这些都同样适用于选择加入 RBF(并且与美国的信用卡支付情况类似,在美国,信用卡支付在交换后几个月内很容易撤销,但欺诈率仍然很低,以至于几乎所有重要的商家都接受它们)。此外,由于 RBF 有时可以消除长时间的确认延迟,因此一些以前被迫接受未确认交易以防止不幸延迟的商家将不再需要这样做,这减少了他们遭受欺诈的风险。
但是,没有使用选择加入 RBF 的人坚持你同意上述关于未确认交易安全性的观点。选择加入 RBF 是选择加入的,如果你不需要它,你不需要使用它。
是谁发明了未确认交易替换?这是否违背了比特币的“愿景”?
未确认交易的交易替换是比特币第一个版本的特性。交易可以通过设置非最大序列号来标记自己为可替换。这后来被禁用,因为攻击者有可能以很小的成本耗尽所有完整节点之间的带宽,从而造成拒绝服务漏洞。
此外,矿工没有动力遵循惯例并接受替换,甚至可能存在在早期版本的交易支付更高费用时违反惯例的动机。
这两个因素使替换在几年内无法恢复,但 2013 年彼得·托德提出要求替换支付严格更高的费用率,并且要求替换将费用率提高至少中继新交易所需的最低费用率。这消除了拒绝服务和激励相容性问题。
彼得最初的工作更进一步,将激励相容性推向了逻辑结论,理由是,对于匿名的、短暂的、自我选择的矿工来说,你真正可以依靠的唯一行为是替换费用更高。更高的费用偏好还可以使节点能够以一种对于仅接受它们看到的交易第一个版本节点不可能的方式,基于内存池中的费用率来收敛到一组交易。
由于这些原因,以及系统以预期的方式运行比以“不可预测但平均更好方式”运行更安全且更有保护性,因此他建议对所有交易进行替换。他还提出了一种协议,以一种强大的激励相容的方式消除双重花费的经济收益,称为替换焦土,即如果有人试图对您进行双重花费,您将所有资金都花在费用上,这样攻击者就拿不到它们。(但这是一种只有博弈论者才会喜欢的提议。)
在彼得提出建议后,我们收到了像Greenaddress这样的钱包的强烈要求,要求选择加入 RBF,因为他们确实需要一种合理的方式来处理费用,并且认为选择加入 RBF 是一个很好的方法,这就是提议被更改以匹配中本聪最初的选择加入行为的原因。
选择加入 RBF 的拉取请求有争议吗?
一点也不。在经过几个月的广泛非正式讨论后,PR 于 10 月 22 日发布。随后在至少四次比特币开发周会中讨论了它(2015-11-05、2015-11-12、2015-11-19 和 2015-11-26)。
在 PR 讨论中,19 人发表了评论(包括来自至少三个不同钱包品牌的员工),14 人明确确认了更改,其中包括至少一个人在过去对全面 RBF 非常直言不讳。在 PR(或我们知道的其他地方)开放期间,没有提供明确的负面反馈。
此更改何时以及如何激活?
选择加入 RBF 并没有真正的“激活”,因为它不是比特币共识的一部分。它是一种本地策略行为,因此随着人们采用行为不同的软件,更改会一次一个节点地发生。网络上已经有一些节点以各种方式执行 RBF,并且已经存在了一段时间,可能已经好几年了。
比特币核心 0.12 将在 2016 年 2 月左右发布,并将包含选择加入 RBF,此后可能还需要几个月才能使这种行为成为普遍现象。这可能会因使用它的应用程序的开发而加快。
选择加入 RBF 仅对调整费用有用吗?
不,钱包可以使用选择加入 RBF 执行的另一件有用的事情是在第一个付款未确认之前将两个或多个付款合并成一个付款。即使替换需要支付比原始付款更高的费用,这也能够节省大量的字节和交易费用。
选择加入 RBF 还可用于实现更高级的协作稳定方案,例如交易穿透。
各种智能合约情况也需要替换,但它们通常使用锁定时间来创建更强的排序并解决历史上的替换不可用问题;这些可能是最初设计中支持比特币协议中的替换的动机。
虽然比仅仅调整费用更有趣,但调整费用的能力也不容小觑。这意味着初始费用可以使用更低的“最可能”估计值,而不是不得不“以防万一”而过度支付;即使很少进行替换,这也导致费用更低。
钱包需要保持在线状态才能以更高的费用发出替换吗?
不。替换可以预先计算、时间锁定并交给始终在线的远程服务器,以便稍后广播,无需担心服务器会窃取任何用户资金(最糟糕的情况是它可能无法广播)。
例如。在区块 100 时,钱包想要进行一项交易,该交易设置为在 3 个区块内确认。钱包编写了一个锁定在 101 的交易,并使用其对 3 个区块确认费用的最佳估计,同时它还编写了锁定时间分别为 104、105、106、107… 的替换交易,每个交易的费用都是(例如)最后一个交易的 1.5 倍。这些可以交给接受高级锁定时间交易的节点。
即使矿工知道将来会支付更高的费用,但从理性上讲,他们仍然更喜欢现在可以包含的费用——因为如果他们等待,另一个矿工很可能会收取这笔费用。上面建议的乘法增加意味着,在最坏的情况下,交易会多支付 50%,但仍然可以在几个交易中达到任意高的费用。
选择加入 RBF 是否增加了“懒惰”的交易处理者被诈骗的风险?
事实并非如此,至少没有明显的变化,而且这是设计使然。选择加入 RBF 是通过 nSequence 字段进行标记的,该字段专门用于覆盖可替换性。许多一般信任未确认交易的程序和平台,已经将低序列号交易视为可疑交易,并在其确认之前忽略它们。
还有数十种其他方法可以改变交易的确认速度或可靠性,并增加成功进行欺诈性双重支付的可能性:
- 支付低手续费
- 使用非标准标记或版本
- 使用未确认的输入
- 表现出任何形式的拒绝服务攻击模式
- 创建尘埃输出
- 等等。
这些标准经常变化,并且取决于用户可配置的特定节点策略。试图评估未确认支付风险的各方必须跟踪所有这些因素,以及更多其他因素,并且他们必须积极应对变化。选择加入 RBF 是一个已知数月之久,并在已检测到的行为上叠加的,高度传达的补充。如果在对未确认交易进行警惕所需的努力方面有任何变化,那也可能只是微不足道。
除此之外,目前尚不清楚选择加入 RBF 交易对于使用复杂工具的攻击者来说,实际上是否比非 RBF 交易更适合进行欺诈性双重支付。
一些进行未确认置信度分析的方已经明确表示他们已经做好了准备,如果有人知道仍然需要帮助适应的软件,请告知我们,我们将很乐意提供帮助。
如果我认为 RBF 很糟糕怎么办?
那就不要使用它:不要在您自己的交易中设置它,并将您收到的所有序列号低于 MAX_INT-1 的交易视为不存在(或已被双重支付),直到它们得到确认。选择加入 RBF 是选择加入的。
据我们所知,没有常用的软件将序列号设置为低于 MAX_INT-1,而且许多程序(包括“交易置信度”计量器)已经将低序列号视为可能存在双重支付。毕竟,交易已被明确标记为可替换,即使没有 RBF,nLocktime 也可能导致冲突首先得到确认。
如果有人向您发送可替换的交易,而您不会对其进行零确认记账,那么他们的替换可以使该交易以他们希望确认的速度得到确认。对于使用非标准交易功能或使用未确认的输出进行交易的发送方,已经存在类似的情况,这使交易客观上更容易发生双重支付,但在这些情况下,没有修复方法可以快速完成交易。
RBF 是一个针对同意参与者的功能。如果您不想参与,则不必参与。您不喜欢它不是阻止其他人将其用于不涉及您的交易的理由。
为什么实施“选择加入”而不是让矿工替换任何交易?
现在,没有任何东西可以阻止矿工替换即使是非选择加入交易,一些矿工之前已经在自己身上试验了 RBF。通过提供一个可以满足用户对该功能需求的标准实现,矿工可能会有更少的动机开始用更高手续费率的变体替换任何交易。
我听说选择加入 RBF 的添加几乎没有讨论
最近的 RBF 讨论可以追溯到 2015 年 5 月。
Github
IRC 会议
有许多其他日志记录,例如 #bitcoin-dev 和 #bitcoin-core-dev。
邮件列表讨论,没有特别的顺序
- [bitcoin-dev] 选择加入完整替换手续费 (Full-RBF)
- [Bitcoin-development] 首次观察到的安全替换手续费
- [Bitcoin-development] 使用替换手续费节省成本,30%-90%
- [bitcoin-dev] 通过双重支付未确认交易造成重大损失
- [bitcoin-dev] BIP:完整替换手续费部署时间表
- [Bitcoin-development] 替换手续费 v0.10.0rc4
- [bitcoin-dev] 钱包如何处理实际交易手续费
中本聪最初引入了 未确认交易替换,但由于拒绝服务攻击而被禁用(彼得·托德通过要求每次替换支付更高的费用来修复了这个问题)。
这可以用来对未准备好的(旧的)钱包进行双重花费吗?所有钱包都需要更新吗?
无论是否有 RBF,未确认交易始终可以被双重支付。欺诈行为目前很容易,RBF 不会改变这一点。
钱包只需要在想要使用选择加入 RBF 时才更新。这为钱包提供了一个新的维度,让他们可以进行创新,并为用户提供有益的功能。
为什么不使用“先到先得安全替换费用”(FSS-RBF)
FSS-RBF 表示,只有在所有之前的输出都被完全花费时,才能修改交易。这可以防止双重支付,但当它实际使用时,它有三个问题:
-
它会导致交易大小增加,因为您必须为每个替换添加一个新的输入。
-
许多钱包没有额外的输入可以花费,因此它们根本无法使用 FSS-RBF。
-
它降低了隐私性,因为它几乎总是会增加找零输出的价值,从而公开地将该输出标记为找零。
什么是“子支付父”(CPFP)?
子交易支付父交易是一种通过进行依赖于第一个交易的另一个交易来向交易添加手续费的方式。
为什么没有将 CPFP 用于 RBF?
子交易支付父交易 (CPFP) 无法解决同样的问题。RBF 允许 _发送方_ 增加手续费;CPFP 有用,因为它允许 _接收方_ 增加手续费。
RBF 比 CPFP 更有优势,因为它不需要使用任何额外的区块空间,因此效率大约高出 30% 到 90%。
计划支持 CPFP 和选择加入 RBF。