理解闪电网络1——支付通道(payment channel)
1 Lightning Network概述
闪电网络是一个基于像比特币这类加密货币之上的"layer 2"支付协议。
可以用来解决像比特币网络的扩展问题。它有实时支付、可扩展、低成本和跨链等特性。
Note: 本文的图片来自bitcoinmagine, 它上面有对lighting network的详细介绍,非常值得一读,而且示意图非常清晰明了。
2 支付通道Payment Channel
闪电网络通过构建链下的双向支付通道,来支持双方转账,同时只将最终状态记录到区块链系统,兼顾了效率和可行性。
下面的图片较大,建议新建窗口打开浏览。
解读:
- 图中黑色框表示比特币网络确认的Tx,蓝色的框表示Alice可以广播的交易,红色的框表示Bob可以广播的交易
- 钥匙表示一个密钥(数字串),锁是其hash值。Alice和Bob分别生成自己密钥(蓝色的是Alice的,红色的是Bob的)
- 假设Alice想要通过支付通道转账给Bob 1BTC,Alice先要和Bob之间建立通道
- 支付通道的建立需要Alice和Bob先存放一定的钱,图1中Alice和Bob从自己的Utxo中各存放了5BTC,并建立了一个2-of-2 multisig交易,表示这笔钱需要两人都同意(两人的签名)才能花费。该交易被广播和记录到区块链上。这一步生成的Tx称为opening transaction
- Alice和Bob各自随机生成密钥1,并将其hash值发送给对方
- 之后Alice和Bob各自建立Commitment Tx,建立完后发送给对方,建立Commitment Tx的过程见下一步
- 以Alice为例,Alice以第3步的opening tx的输出为输入, 输出是:4BTC给Alice, 6BTC分情况(通过比特币脚本实现): 1.如果Alice拥有Bob的密钥1(通过hash值等于bob的密钥1的hash值证明),那么Alice可以花费该6BTC; 或者2. Bob在1000Blocks后可以花费该6BTC(通过CSV实现)。之后,Alice将该commitment Tx签名(授权),然后发送给Bob
- Bob做了类似的事情。Bob简历的commitment tx是:以opening tx 的10BTC为输入,输出是6BTC给Bob, 4BTC分情况: 1. 如果Bob拥有Alice的密钥1,那么Bob可以花费该4BTC, 或者2. Alice在1000Blocks后可以花费该4BTC。 之后Bob将该commitment tx签名,发送给Alice
- 这时候如果Alice将Bob给的commitment tx签名(Bob已经签名,Alice再签名表示可以花费了),然后广播到比特币网络,Bob会立即得到6BTC, Alice在等待1000Blocks后也可以得到4BTC。如果是Bob签名Alice给的Commit Tx并且广播后,ALice立即获得4BTC,Bob自己在1000bloks后可以获得6BTC。
- Commitment Tx意义分析:现在Alice和Bob拥有对方签过名(授权)的交易,但各自拥有的交易都是对对方有利的。比如Alice签名广播Bob给她的tx后后,Bob能立即获得该得的,而Alice自己该得到的要过一点时间才行获得,这段时间内,如果Bob对方发现Alice自己作弊(广播的是旧的,对Alice有利),那么Bob有办法获得Alice该得的,这样防止Alice作弊
- 假设他们没有做第9步,由于是双向通道,假设Bob又给Alice转了1BTC, 这时候,Alice和Bob应该各有5BTC了,来看看支付通道的变化
- 这时候参见图2,Alice和Bob分别生成密钥2,并经其hash值交给对方。
- 以Alice为例,同样的其生成类似第7步的commitment tx: 5BTC给Alice, 5BTC看情况(1. 1000Blocks后Bob可以获得该5BTC,2.如果Alice拥有bob的密钥2,那么Alice可以获得该5BTC)。和第7步不同的是,Alice同时将密钥1和新的commitment tx发送给Bob
- Bob也类似,生成commitment tx后,将其和密钥1一起交给Alice
- 现在Alice和Bob各自拥有新的对方生成的commitment tx。如图第9步,任意一方可以签名广播,这样双方也会得到各自该得到的(广播的这一房要延迟得到)
- 要是Bob作弊,广播第7步Alice给她的旧的commit tx会怎么样呢,毕竟Bob有动机(旧的Alice给的tx里自己会得到6BTC,新的Alice给的Tx自己只会得到5BTC),如果是这样的话,那么旧的tx广播后,Alice立即得到4BTC,Bob在等待6得到BTC的过程中,Alice可以用第14步Bob给自己的密钥1去取回Bob的6BTC,这样Bob只会得到0BTC,Alice回到10BTC。Bob得到了惩罚。
- 假设Bob和Alice经过多次转账后,现在Alice应得4BTC, Bob应得6BTC,Alice觉得他们应该不会再交易了,就需要将该支付通道关闭,参见图3,Alice计算好两人应得的btc后,建立一个closing Tx, Alice自己签名该Tx,然后将该tx发给Bob,让他签名并且广播。一般情况下,Bob没有理由拒绝。这样bitcoin网络上只会记录Opening Transaction和 Closing Transaction,Alice和Bob之间的多次交易记录不会被记录,降低了网络的负载。
- 另一方面,如果Bob由于某种原因没有回应Alice的关闭通道的请求,Alice可以将最后一步的commitment Tx签名并广播,这样自己过一段时间后也会得到应得的。
从另一个角度来看,双向通道的建立基于下面的博弈:
Alice和Bob各自生成对自己有益(表现为交易成功后自己立即有收益,对方有条件才能获得收益)的交易(但还缺另一个人同意才真正有效)发给对方,也就是commitment tx。
随着支付状态的变化(两人间又产生新的交易),两人又各自生产新的交易,并给与对方惩罚广播旧交易行为的权利(给与对方上一步的密钥)
3 参考列表
- https://bitcoinmagazine.com/articles/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791/
- https://bitcoinmagazine.com/articles/understanding-the-lightning-network-part-creating-the-network-1465326903/
- https://bitcoinmagazine.com/articles/understanding-the-lightning-network-part-completing-the-puzzle-and-closing-the-channel-1466178980/
- https://blog.chainside.net/understanding-payment-channels-4ab018be79d4