区块链-制造无需信任的通道

目录:http://www.javashuo.com/article/p-nitsjfvy-ey.html区块链

简单的支付通道:http://www.javashuo.com/article/p-wchvcflk-md.html.net

摘自《精通比特币》  视频

咱们刚刚描述的通道只有在双方合做,没有任何失败或企图欺骗的状况下工做。 咱们来看看破坏这个通道的一些场景,而且看看须要什么来修复这类场景:blog

  • 一旦资金交易发生,Emma(买家)须要Fabian(卖家)的签名才能得到给本身的找零。若是 Fabian 消失,Emma 的资金将被锁定在 2-2 中,并完全损失。这个通道一旦创建,若是在双方共同签署至少一个承诺交易以前,有任何一方断开,就会致使资金的流失。 
  • 当通道正在运行时,Emma能够采起Fabian已经签署的任何承诺交易,并将它发回链上。若是她能够发送承诺交易#1,只支付1秒的视频,为何要支付600秒的视频? 通道失败是由于Emma能够经过广播对她比较有利的先前的承诺来欺骗。

这两个问题均可以用时间锁(timelocks)来解决 - 咱们来看看咱们如何使用交易级时间锁(nLocktime)。开发

除非她有保证的找零退款,不然Emma不能冒风险进行2-of-2 签名。为了解决这 个问题,Emma同时创建了资金和退款交易。她签署资金交易,但不传送给任何人。Emma只将退款交易传送给Fabian,并得到他的签名。get

退款交易做为第一承诺交易,其时间锁确立了通道生命的上限。在这种状况下, Emma(买家)能够将nLocktime设置为30天或未来的第4320个区块。全部后续承诺交易必须具备较短的时间锁,以便在退款交易以前能把它们赎回io

如今,Emma(买家)已经有一个彻底签署的退款交易,她能够自信地发送签署过的资金交易,由于她知道她最终能够在时间到期后最终赎回退款交易,即便Fabian消失也不会有问题。class

在通道生命中双方交换的每一项承诺交易都会被时间锁锁进将来时间点。可是,对于每一个承诺,延迟时间会稍短一点,因此最新的承诺能够在被它废止的前一承诺以前被赎回。stream

因为nLocktime,任何一方都只有其时间到期后才能成功传播任何承诺交易。若是一切顺利,他们将合做并经过结算交易合理地关闭通道,这样一来发送中间的承诺交易就没必要要了。实质上说,承诺交易只在一方断线而另外一方不得不单方面关闭通道时才使用。比特币

例如,若是未来承诺交易#1被时间锁定到未来的第4320个块,则未来承诺交易#2被时间锁定到未来的4319个块。(同理可知,)承诺交易#600则能够在承诺交易#1 变为有效以前600个块的时间被消费。

图显示每一个承诺交易设置较短的时间锁,容许在它在以前的承诺变为有效前被花费

每一个后续承诺交易必须具备较短的时间锁,以即可以在其前任以前和退款交易以前进行广播。可以尽早广播承诺交易的能力确保了承诺交易可以花费资金输出, 并排除任何其余承诺交易经过话费资金输出来赎回。比特币区块链提供的担保, 即防止双重支出和执行时间锁定,有效地容许每一个承诺交易废止其前任有效性。

状态通道使用时间锁来在时间维度中执行智能合约。在这个例子中,咱们看到时间维度如何保证最近的承诺交易在任何早先的承诺以前变得有效。所以,最近的承诺交易能够传输,消费输入和使先前的承诺交易无效。绝对时间锁定的智能合同的执行能够防止其中任何一方的欺骗。此实现只须要绝对的交易级时间锁 (nLocktime)。接下来,咱们将看到如何使用脚本级时间锁定, CHECKLOCKTIMEVERIFY 和 CHECKSEQUENCEVERIFY来构建更灵活,有用和复杂的状 态通道。

第一次出现的单向支付通道在 2015 年由阿根廷开发商团队演示为视频流应用样 板。你仍然能够在 streamsium.io 看到它。

时间锁并非使先前的承诺交易无效的惟一方法。在接下来的章节中,咱们将看到如何使用撤销密钥来实现相同的结果。时间锁是有效的,但其有两个明显的缺点。在通道首次打开时创建最大时间锁,限制了通道的使用寿命。更糟糕的是, 他们迫使通道实现以在容许长期通道,和迫使其中一位参与者在提早关闭的状况下等待很长时间的退款之间取得平衡。

例如,若是容许频道保持开放30天,经过将退款时间设置为 30 天,若是其中一方当即消失,则另外一方必须等待30天才能退款。终点设置越远,退款时间越远。

第二个问题是,因为每一个后续的承诺交易必须减短期锁,因此在双方之间能够交换的承诺交易数量有明确的限制。例如,一个30天的通道, 设置了位于将来第4320个块的时间锁,在必须被关闭前只能容纳4320个中间承诺交易。

将时间锁定承诺交易的间隔设置为1个区块存在危险。经过将承诺交易之间的时间锁设置为1个区块,开发者给通道参与者带来了很是高的负担,参与 者必须保持警戒,保持在线并监视,并随时准备传送正确的承诺交易。

如今咱们了解如何使用时间锁来使先前的承诺无效,咱们能够看到合做关闭通道和经过广播承诺交易单方面关闭通道之间的区别。全部承诺交易都是时间锁定的, 因广播承诺交易老是要等待时间到期。可是,若是双方赞成最后的余额是多少, 而且知道他们都承担最终实现余额的承诺交易,那么他们能够构建一个没有时间锁表明相同余额的结算交易。

在合做关闭中,任一方均可以提取最近的承诺交易, 并创建一个各方面彻底相同的结算交易,惟一差异就是结算交易省略了时间锁。 双方均可以签署这笔结算交易,由于知道没法做弊以获得更多的余额。经过合做签署和发送结算交易,能够当即关闭通道并兑换余额。最差的状况下,当事人之 一能够是卑鄙小人,拒绝合做,强迫另外一方单方面关闭最近的承诺交易。可是若是他们这样作,他们也必须等待他们的资金。