保护好包:将交易减少一半以解决比特币网络拥塞
时间:2019-10-05 来源:区块链网络 作者:不详
比特币的网络拥塞情况千差万别。在几天的几个小时中,成千上万的交易正等待被包含在一个区块中,从而导致费用飙升并使许多用户等待。同时,在较慢的时间内,甚至没有足够的交易来填补所有障碍,而且最小的费用就足以快速确认。 对于需要快速进行大量事务的服务,高峰时段的网络拥塞当然是一个大问题。例如,交易所,挖矿池或薪资服务有时会同时向数百名用户付款-这些用户可能不耐烦地想拿钱。因此,这些服务需要支付高额费用,从而使比特币网络上的所有其他交易重回队列。 现在,比特币核心贡献者杰里米·鲁宾(Jeremy Rubin)认为,他已经找到了如何可靠地缓解网络拥塞的方法,从而提高了高峰时段比特币的吞吐量。 他的建议称为OP_SECURETHEBAG。 固定袋子 要了解OP_SECURETHEBAG(从现在开始,我们将其简称为“保护袋子”),我们举一个实际的例子并从基础开始。在此示例中,有12个客户都要求交易所在收取高额费用的同时发出提款。 (实际上,这可能很容易成为1200个客户,但只有12个客户,这个概念更容易解释。) 即使没有安全袋,交易所也是明智的,并且不会创建12个单独的交易来分别向每个客户付款。相反,为了节省费用,它创建了一个“批处理”交易,该交易更为紧凑。交易包括三个输入(指“发件人”地址,所有三个都属于交易所)和12个输出(包括“发件人”地址,属于不同的客户)。在此示例中,金额相加很好,因此没有更改地址。 在下面的图像中,交易看起来像右边的交易A-不像左边所示的12个单独交易。 图片来自Jeremy Rubin在Scaling Bitcoin 2019上的OP_SECURETHEBAG演示文稿中拍摄 由于批处理事务包含如此多的输出(每个客户一个),因此在数据方面非常大。事务越大,将其包含在块中的成本越高。而且在高峰时段,交易所要迅速确认交易会非常昂贵。 (虽然不像12个单独的交易那样昂贵,但是仍然很昂贵。) 现在,交易所可以改为收取较低的费用,在这种情况下,确认交易只需要一段时间。但是在确认之前,客户将一直在等待他们的钱,不确定他们是否真的会收到这笔钱:这笔钱可能会被双花,直到将交易包括在其中。这使客户不满意,而交易平台则不希望如此。 (在某些情况下,甚至可能无法让客户等待:例如,根据合约,薪资服务可能有义务在特定的一天确认交易。) 这是“安全袋”进来的地方。 安全袋是提议的“ OpCode”:对比特币编程语言的补充。该操作码实质上将使交易所将其批量交易“拆分”为两个交易:“发送”交易和“接收”交易。 其中第一个(“发送”交易)包括三个原始输入,指的是交易所拥有的地址。但它仅包含一个特殊输出。此输出称为“提交的输出”,其中包含一个特殊的加密货币哈希:看似随机但相对较短的数字字符串。 该哈希实质上是一个唯一的序列号,将其链接到两个事务中的另一个:“接收”事务。确保袋子安全的关键,可以使用已承诺的输出的唯一方法是通过此特定的“接收”事务,并通过哈希将其链接到该事务。 (用技术术语来说,哈希将提交给除“ prevouts”之外的整个“接收”事务,但这是一个实现细节。) 那么,“收款”交易可以视为原始交易的后半部分。它仅包含一个输入(指“发送”事务中的已提交输出)以及所有12个输出。因此,带有所有输出的“接收”交易要比“发送”交易大得多。 在下面的图像中,你可以在左侧看到正常的批量交易,而在右侧则看到安全袋付款的两个分开的交易(“发送”和“接收”)。 图片来自Jeremy Rubin在Scaling Bitcoin 2019上的OP_SECURETHEBAG演示文稿中拍摄 当它向其12个客户发出提款时,交易所同时广播“发送”和“接收”交易。但这两者之间有一个很大的区别,这就是诀窍的核心。较小的“发送”交易包括相对较大的费用,以确保快速确认。由于该交易很小,从数据角度来说,即使是相对较大的费用也是可以管理的。相比之下,较大的“接收”交易包含的费用要低得多,这意味着交易所可能需要一段时间才能确认。 相比之下,较大的“收款”交易所包含的费用要低得多,这意味着确认可能需要一段时间。但是这一次,等待低价交易确认对客户来说不是大问题,因为一旦“发送”交易被确认,就可以确保所有的钱都可以保证“接收” 交易。资金锚固在区块链中,除了交易所的客户之外别无其他。 钱还没有到位……但是手提包已经放好了。 孩子为父母付费 尽管上面概述的基本示例可以确保*交易所的12个客户最终获得他们的资金,但这可能还不能完全满足他们的所有要求。 (*如果交易费用从未降到所需水平,则“收款”交易实际上不会自行确认;这可以通过相同的技巧来解决,如本文其余部分所述。) 举例来说,12个客户之一的爱丽丝必须今天向房东付款。因此,仅仅知道她最终会收到她的钱是不够的-不管她有多确定自己确实会收到这笔钱。她实际上需要能够花费她的输出。 从技术上讲这是可能的。爱丽丝可以将未经确认的输出(12个之一)输出,并立即用于新交易中。唯一的问题:爱丽丝的交易只有在确认“收款”交易后才能确认。同时,她的房东要求今天进行确认交易。 幸运的是,爱丽丝可以利用旧的比特币技巧来确保“收款”交易和她自己的交易都可以确认:“孩子为父母付款”(CPFP)。基本上,如果爱丽丝在向房东的交易中包含足够高的费用,则矿机也将被激励将大笔“收货”交易也包括在内-即使他们不关心“收货”交易本身的费用。毕竟,只有同时确认两者,他们才能获得爱丽丝的高额费用。 也就是说,补偿大型“收货”交易将是非常昂贵的。这就是交易所最初使用“安全袋”的原因。现在,Alice无需为交易所而向所有12个客户支付批量交易的费用。这不会使她成为一个非常满意的客户。 幸运的是,安全袋提供了更好的解决方案。 树木付款 为了解决爱丽丝的问题,交易所可以进一步采取“安全袋”技巧。 在上面显示的基本示例中,“发送”交易包括一个“安全袋”输出,而单个“接收”交易包括一个相应的“安全袋”输入和12个正常输出。但是可以将这12个输出进一步拆分为更多的“接收”交易。 例如,“发送”交易可以包括两个“安全袋”输出,指的是两个不同的“接收”交易,每个交易都包括六个正常输出。当然,这意味着要进行快速确认,“发送”交易要贵一些,但是爱丽丝的费用将减少一半以上:她现在只为五个其他客户付款,而不是十一个。 更好的是,交易所可以在初始的“发送”交易和最终的“接收”交易之间创建“中间”交易这些“中间”事务都将包括一个“安全袋”输入和一个或多个“安全袋”输出以及可能的正常输出,从而创建树结构。这样,即使对于需要立即花费资金的客户,交易所也可以合理地降低CPFP成本。赶时间的客户最多需要为与他们相关的中间交易付款,而忽略其余交易。 如下图所示,交易所可以根据自己的需求选择最适合自己的方式来创建这种树。 (更多的中间步骤通常需要在区块链上确认更多的总交易数据,但每位用户的成本较低。“链式”付款类似于树式付款,但更多地取决于交易的时间顺序。) 图片摘自Jeremy Rubin在Scaling Bitcoin 2019上关于OP_SECURETHEBAG的演讲 详细信息和部署 本文介绍了安全袋的相当基本的实现。实际上,该提案可以各种方式实施和利用。例如,她不必使用CPFP才能向房东付款,而是可以将资金接收到Lightning渠道,并立即能够通过这些渠道向房东付款。还有其他更复杂的解决方案可以加快“接收”交易的速度。 同样,严格地说,建议的“安全袋操作码”不是实现两阶段支付解决方案的唯一方法。即使使用当前的比特币协议,也可以实现类似的目的-但它要求所有接收者进行协调与合作,在交易所及其客户的例子中这种可能性很小,而且随着更多用户加入,这种情况将变得更加困难。其他解决方案(例如契约)将需要升级比特币协议。 固定袋子也需要通过向后兼容的软分叉来升级协议。鲁宾已经完成了所需的大多数编码工作-尽管代码和构想仍需接受审查。此外,即使提案通过了所有同行评审,协议升级也可能需要一段时间才能被采用。因此,目前尚无法确定“安全袋”何时将在比特币上发布(如果有的话)。 感谢Jeremy Rubin的信息和反馈。有关安全袋的更多信息,仿真数据和其他各种用例,请参阅相关的比特币改进提案,有关该主题的开发邮件列表讨论以及鲁宾在特拉维夫的Scaling Bitcoin 2019上的完整演讲: 《安全囊:将交易减少一半以解决比特币网络拥塞》一文首先出现在《比特币杂志》上。 |