这次我们就要再次用到上文提到的哈希密钥锁了。
现在我们考虑过了两天,Bob要向Alice转1个BTC,即双方发生第二笔交易B。类似他们仿照上述第一笔交易操作进行第二次记账,此时应当是Alice 5个,Bob 5个。
一个最大的区别是建立第二笔交易B之前,两人会相互交换第一笔交易中的密文,即对方第一把锁的钥匙。这么做的目的在于作废第一笔交易记录A,使得两人都只能承认最新的交易记录B有效。
设想Bob在第一笔记录中拥有6个比特币,而第二笔记录变成了5个,那么如果他想作弊去签名并广播第一条记录呢?
结果是他将失去通道内所有的比特币!
因为Bob签名并广播了下图交易之后,Alice立马会获得4个BTC,同时Bob则必须等待1000个区块之后才能解锁6个BTC。然而,由于此时Alice已经获得了密文即钥匙1,所以Alice可以赶在Bob之前解锁这6个BTC。综合来看,只要Bob想要广播旧交易记录,他就会一无所有。
有了能作废旧账的保证,双方就可以在通道内反复任意多次交易,每次交易之后的状态都是资金池资金的划分比例的最新确认状态。
最后,关闭通道。如本文第二部分所讲,有两种方式关闭通道,一是单方面强制关闭,即某一方将自己控制的最新交易签名后广播出去即可。二是商议后关闭,此时双方再从最开始的多签地址构建一笔交易。
至此,我们明白了如何在无信任的条件下如何建立双向支付通道。
2.闪电网络:如何使路由节点保持诚实?
同样的,在建立闪电网络的时候,我们同样会遇到信任问题:Alice想转给Carol 1个BTC,需要经过Bob,但Bob会担心自己给Carol转1BTC后,Alice耍赖;同样Alice会担心如果先给Bob转了1BTC,Bob也耍赖不转给Alice。在传统的金融系统中,是由大型知名金融中介机构的信用提供保证的。但闪电网络中,并没有这样一个独立于交易者的第三方去提供信用担保。
闪电网络采用了一种HTLC(哈希时间锁定合约)完美解决了这个问题。
过程是这样的,第一,Carol会选择一个随机密文并运算得到其哈希值,再将此哈希值交给Alice。第二,Alice拿到哈希值后,会构建一笔转账给Bob的交易。这笔交易需要Bob拿到Carol的密文才能解锁,如果Bob在限定的时间内没有解锁成功,这笔钱则退回给Alice。第三,Bob从Alice处拿到哈希值,他也构建一笔转账给Carol的交易,Carol必须拿密文来解锁。第四,当Carol提供密文从Bob处获得1个BTC,Bob立马会拿密文从Alice处获得1个BTC,这就完成了从Alice给Carol转账的任务。
上述过程可以看作一个智能合约。故事类似于这样:A想经过B转账给C,那么C先给A一把锁,C有钥匙A有钱。A跟B说,你从C那里拿到了钥匙,我的钱就是你的了。B就拿着锁去找C,用钱跟C换钥匙,然后拿钥匙去换A的钱。如此一来,就实现了钱和锁从A到B再到C,钥匙从C到B再到A的一个流转。
当然,在实际操作过程中,Alice给Bob转账金额需要大于1个BTC,支付必要的路由费以激励Bob充当路由节点。
其次,要注意两笔交易之间的哈希时间长度设置,第二步时间必须长于第三步时间。如果Bob在Alice关闭交易之后拿到Carol的钥匙,他将无法找Alice拿回1个BTC。 到这里,我们已经明白了闪电网络中通过路由节点达成交易的技巧,最后一步只需把之前两步整合进交易即可,就不再赘述了。
闪电网络原理科普就到这里了,下一篇笔者会讲一下闪电网络对改善比特币扩展性的优势与不足,包含路由节点中心化,路由费等问题。
< END >此文由 中国比特币交易钱包 编辑,未经允许不得转载!:首页 > 比特币行情 » 闪电网络很难懂?你需要看看这篇文章 | 硬核科普