支付通道,区块链支付通道的开发

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45121735/article/details/93602478

脱链交易似乎是比特币扩展的最佳选择,而多家公司正在构建和测试脱链交易基础设施,很少有人经历过它们的工作方式。

问题
首先,为什么我们需要在区块链之外进行交易呢?使用比特币的人正在寻求安全性,区块链肯定是实现安全交易的最佳方式。当然,问题在于区块链非常昂贵且效率低,因为网络中的每个参与者都存储整个历史的副本并且必须限制使用以便保持可持续参与网络。

可以放在区块链上的有限数量的数据会产生竞争,使交易包含在分类账中,从而推动交易成本上升。因此,为了保持区块链层的轻量级和安全性,我们需要尽可能少地使用它并找到其他方式进行交易。

离线支付渠道
支付渠道基于交易替换的想法,以在将未经证实的交易广播到网络之前更新未经证实的交易的状态。这个概念比大多数人想象的要早,实际上Satoshi自己在第一个比特币版本中实现了类似的东西(但他当时的目标不是提高可扩展性,而是在一组参与者之间实现高频交易)。

通过在广播之前替换交易,可以在不使用昂贵且缓慢的区块链的情况下进行多次交易。离线支付渠道可分为三组:

单向支付渠道
基于时间的双向支付渠道
基于惩罚的双向支付渠道
单向支付渠道
单向支付渠道已经在2013年首次实施,当时Matt Corallo和Mike Hearn增加了对BitcoinJ的支持,但他们的用例相当有限,因为他们只允许你将资金从A转移到B而不是相反的方式。

在这里插入图片描述单向支付渠道的基本设计如下:

Alice将1 BTC发送给Alice和Bob之间的2-of-2 multisig合同。
为了向Bob发送0.1 BTC,Alice创建并签署了一个交易,该交易给自己提供0.9 BTC,给Bob提供0.1 BTC并将其发送给Bob。
为了在第二时刻发送其他0.2 BTC,Alice更新频道的状态,创建另一个事务,向自己发送0.7 BTC,向Bob发送0.3。
Alice不能向网络广播,并且已经在区块链中包含任何这些交易,因为她没有Bob的必要签名(请记住,资金被锁定在多重合同中)。
鲍勃总是被激励只播放频道的最后状态,因为它代表了他收到更多比特币的结果。
为了保护Alice免受Bob没有响应并且不合作广播该频道的任何状态(也阻止Alice的资金)的风险,在multisig合同开始时创建一个时间锁定的交易,其向Alice退还一个BTC。需要时间锁定以确保Alice仅在Bob无响应的情况下才能使用此事务。
在时间锁定期结束之前,Bob将广播频道的最后状态,以避免Alice广播时间锁定事务的风险。
然而,时间锁定事务不是理想的解决方案,因为它容易受到延展性攻击。为了缓解这种情况,2015年协议升级引入了CLTV(检查锁定时间验证),它允许在合同本身的脚本中包含时间锁,而不是创建特定的事务,从而避免了延展性问题。

NB这种支付渠道具有预定的有限寿命,鲍勃在时间锁定期满后继续使用频道确实不安全,需要在该日期之前关闭频道。

基于时间的双向支付渠道
虽然在单向支付渠道中,只有Alice可以将钱汇给Bob,但不是相反,在双向渠道中,流量可以双向进行。

单向支付频道的安全性是基于这样一个事实,即Bob没有动机广播该频道的旧状态,因为它只会使Alice感兴趣(失去Bob签名,不能自己播放旧状态) )。然而,在双向信道中,双方可能有动机在不同时间广播信道的旧状态,因此需要不同的安全模型。为此,有两种不同的方法:基于时间和基于惩罚的安全性。我们将开始分析前者。

一个基于时间的通道通过时,锁定交易,这样通道的最后状态始终最低的时间锁定实现安全,这意味着它是第一个可以在blockchain播出。具有较低时间锁定的每个新事务使所有先前的事务无效,从而更新信道的状态。

为了使这样的系统真正无信任,有必要创建第一笔交易,在任何比特币转移到multisig之前将资金发回给双方,以防双方中的一方变得没有反应。但是,创建一个花费未经证实的事务的事务会使各方面临可塑性攻击的风险,这意味着只有SegWit事务可以在此过程中使用,因为与正常事务不同,它们不受可塑性问题的影响。在这里插入图片描述然而,这样的设计有一个明显的问题,通道的安全性只保证到第一次锁定到期,之后必须关闭(即将资金发送给双方),给予频道预定的有限寿命。

为了克服这个问题,可以使用相对时间锁而不是先前看到的绝对时间锁来实现略微不同的设计。通过相对时间锁定,只有在事务包含在块中之后,时钟才会开始计时。为了使用相对时间锁来实现没有到期日期的通道,我们需要构建一个由双方预先签名的特殊启动事务,目的是激活时间锁(开始计时)。然后,只有当其中一方希望单方面关闭频道时才会广播(如果双方同意,他们可以用正确的金额向各自的地址发送简单的交易)。在启动事件发生之前,时间锁定被冻结并且可以无限期地保持在该状态。

在这里插入图片描述这种结构需要一些区块链监视以查看另一方是否已经广播了启动事务,因为在这种可能性中,准备好在先前的事务变为可广播之前关闭具有最后状态的信道。

基于惩罚的支付渠道
创建没有到期日的渠道的另一种方法是将安全性建立在惩罚恶意交易对手而不是按时。这个想法仍然是将资金锁定在渠道中涉及的双方之间的多重合同中,但为了保证正确的行为得到尊重,双方签署的交易都花费在更复杂的智能合约设计上,以确保交易更换安全。这种支付渠道设计是用于照明网络实施的。

为了建立频道,首先Alice和Bob必须生成秘密(即随机数)并交换散列。双方创建了一笔融资交易,并在2比2的多重合同中存入一些硬币,假设他们各自提供0.5比特币,但在将其广播到网络之前,他们都创建了后续的融资交易交易,即所谓的承诺交易。在承诺交易中,Alice向自己发送0.5 BTC,并将0.5 BTC发送给合约,其中硬币可以在预定的时间量(例如,交易进入区块链后一周)或者包括在交易中的Alice之后由Bob消费。 Bob生成的秘密。

此时,Alice签署交易并将其交给Bob,Bob现在也可以签名并在他希望关闭频道的任何时候广播它(如果Alice没有响应或者他需要链上的流动性)。

与此同时,Bob创建了一个承诺交易,该交易对于Alice的一个是镜面的,向自己发送0.5 BTC,并且0.5到一个合约,其中一周后Alice可以花费硬币或者包括Alice生成的秘密。

在这里插入图片描述每一方都签署他的承诺,并将其交给对方,他们可以随时签名和广播
Alice的承诺交易的脚本将遵循以下模板:

输出0:0.5 BTC到以下合同

OP_DUP OP_HASH160 <hash160(pubK Alice)> OP_EQUALVERIFY OP_CHECKSIG
输出1:0.5 BTC到以下合同

OP_IF
“+7天”OP_CHECKSEQUENCEVERIFY OP_DROP
OP_CHECKSIG
OP_ELSE
OP_SHA256 <sha256(Bob secret)> OP_EQUALVERIFY
OP_CHECKSIG
OP_ENDIF
此时,资金交易可以发生,并在区块链上广播。现在,Alice知道如果她的对手方对锁定在频道中的资金没有反应,她可以单方面签署并发送Bob收到的交易链,恢复比特币。然而,她必须等待一个星期以使时间锁定到期,但在此期间,鲍勃不能花费合同的另一部分,因为他仍然不知道爱丽丝的秘密。

multisig地址Alice和Bob发送比特币的脚本将如下所示:

OP_2 OP_2 OP_CHECKMULTISIG
到目前为止,我们所做的只是安全地设置通道,但仍然必须进行第一次真正的脱链交易。与我们在基于时间的渠道中已经看到的情况类似,通过交易替换实现了脱链支付,但这次旧交易将使用秘密而不是时间锁来使其无效。

当Bob想要向Alice支付0.1 BTC时,首先他们都需要生成一个新的秘密并共享相应的哈希值,这些哈希值将用于构建与前一个相同结构的新承诺事务,但不是发送0.5 BTC对爱丽丝和0.5自己,他现在向爱丽丝发送0.6 BTC,向自己发送0.4 BTC。

现在存在两种不同但有效的承诺交易。由于Bob可以尝试在区块链上广播旧的交易(这给他0.1额外的BTC),因此使其无效并启用安全交易替换非常重要。为此,双方现在可以共享他们为先前交易生成的秘密。通过这种方式,如果鲍勃试图广播旧的交易,爱丽丝有一整周的时间来花费锁定在合同中的资金,提供鲍勃的秘密,然后鲍勃可以将任何BTC移出它。现在鲍勃强烈反对尝试旧的交易广播,因为他将失去他在频道上投入的所有资金。

在这里插入图片描述所描述的过程实现了安全的交易替换,允许信道无限期地保持开放,在许多交易发生后没有增加结算成本(使其优于基于时间的信道),但仍需要一些区块链监控以确保安全性。

支付渠道是脱链扩展解决方案的基石,但仅凭它们还不够,因为它们需要为每个想要进行交易的人打开渠道(并锁定流动性)。为了解决这个问题,Lightning Network引入了一些额外的基于hashlock的加密技术,使不同的支付渠道相互通信形成一个网络(确定过于简单,您可以在这里了解有关Lightning Network的更多信息)。

全球多个团队和开发人员正在探索其他改善比特币支付可扩展性的解决方案,例如渠道工厂帮助重新平衡支付渠道,Schnorr签名和MAST脚本以减小规模(同时改善隐私)链上结算交易和许多其他惊人的建议。

制定区块链规模并不容易,目前用于资助基础设施改进的资源有限。比特币可能需要一段时间才能与主流集中式解决方案竞争,但比特币可以存在几个世纪,所以等待正确开发所需的时间是完全值得的。

展开阅读全文

没有更多推荐了,返回首页