4

理解闪电网络1——支付通道(payment channel)

 2 years ago
source link: https://imnisen.github.io/lightning-network-payment-channel.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

理解闪电网络1——支付通道(payment channel)

1 Lightning Network概述

闪电网络是一个基于像比特币这类加密货币之上的"layer 2"支付协议。

可以用来解决像比特币网络的扩展问题。它有实时支付、可扩展、低成本和跨链等特性。

Note: 本文的图片来自bitcoinmagine, 它上面有对lighting network的详细介绍,非常值得一读,而且示意图非常清晰明了。

2 支付通道Payment Channel

闪电网络通过构建链下的双向支付通道,来支持双方转账,同时只将最终状态记录到区块链系统,兼顾了效率和可行性。

下面的图片较大,建议新建窗口打开浏览。

图1:支付通道建立和转账1

图2:转账2和支付通道状态更新

图3:通道关闭

  1. 图中黑色框表示比特币网络确认的Tx,蓝色的框表示Alice可以广播的交易,红色的框表示Bob可以广播的交易
  2. 钥匙表示一个密钥(数字串),锁是其hash值。Alice和Bob分别生成自己密钥(蓝色的是Alice的,红色的是Bob的)
  3. 假设Alice想要通过支付通道转账给Bob 1BTC,Alice先要和Bob之间建立通道
  4. 支付通道的建立需要Alice和Bob先存放一定的钱,图1中Alice和Bob从自己的Utxo中各存放了5BTC,并建立了一个2-of-2 multisig交易,表示这笔钱需要两人都同意(两人的签名)才能花费。该交易被广播和记录到区块链上。这一步生成的Tx称为opening transaction
  5. Alice和Bob各自随机生成密钥1,并将其hash值发送给对方
  6. 之后Alice和Bob各自建立Commitment Tx,建立完后发送给对方,建立Commitment Tx的过程见下一步
  7. 以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
  8. Bob做了类似的事情。Bob简历的commitment tx是:以opening tx 的10BTC为输入,输出是6BTC给Bob, 4BTC分情况: 1. 如果Bob拥有Alice的密钥1,那么Bob可以花费该4BTC, 或者2. Alice在1000Blocks后可以花费该4BTC。 之后Bob将该commitment tx签名,发送给Alice
  9. 这时候如果Alice将Bob给的commitment tx签名(Bob已经签名,Alice再签名表示可以花费了),然后广播到比特币网络,Bob会立即得到6BTC, Alice在等待1000Blocks后也可以得到4BTC。如果是Bob签名Alice给的Commit Tx并且广播后,ALice立即获得4BTC,Bob自己在1000bloks后可以获得6BTC。
  10. Commitment Tx意义分析:现在Alice和Bob拥有对方签过名(授权)的交易,但各自拥有的交易都是对对方有利的。比如Alice签名广播Bob给她的tx后后,Bob能立即获得该得的,而Alice自己该得到的要过一点时间才行获得,这段时间内,如果Bob对方发现Alice自己作弊(广播的是旧的,对Alice有利),那么Bob有办法获得Alice该得的,这样防止Alice作弊
  11. 假设他们没有做第9步,由于是双向通道,假设Bob又给Alice转了1BTC, 这时候,Alice和Bob应该各有5BTC了,来看看支付通道的变化
  12. 这时候参见图2,Alice和Bob分别生成密钥2,并经其hash值交给对方。
  13. 以Alice为例,同样的其生成类似第7步的commitment tx: 5BTC给Alice, 5BTC看情况(1. 1000Blocks后Bob可以获得该5BTC,2.如果Alice拥有bob的密钥2,那么Alice可以获得该5BTC)。和第7步不同的是,Alice同时将密钥1和新的commitment tx发送给Bob
  14. Bob也类似,生成commitment tx后,将其和密钥1一起交给Alice
  15. 现在Alice和Bob各自拥有新的对方生成的commitment tx。如图第9步,任意一方可以签名广播,这样双方也会得到各自该得到的(广播的这一房要延迟得到)
  16. 要是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得到了惩罚。
  17. 假设Bob和Alice经过多次转账后,现在Alice应得4BTC, Bob应得6BTC,Alice觉得他们应该不会再交易了,就需要将该支付通道关闭,参见图3,Alice计算好两人应得的btc后,建立一个closing Tx, Alice自己签名该Tx,然后将该tx发给Bob,让他签名并且广播。一般情况下,Bob没有理由拒绝。这样bitcoin网络上只会记录Opening Transaction和 Closing Transaction,Alice和Bob之间的多次交易记录不会被记录,降低了网络的负载。
  18. 另一方面,如果Bob由于某种原因没有回应Alice的关闭通道的请求,Alice可以将最后一步的commitment Tx签名并广播,这样自己过一段时间后也会得到应得的。

从另一个角度来看,双向通道的建立基于下面的博弈:

Alice和Bob各自生成对自己有益(表现为交易成功后自己立即有收益,对方有条件才能获得收益)的交易(但还缺另一个人同意才真正有效)发给对方,也就是commitment tx。

随着支付状态的变化(两人间又产生新的交易),两人又各自生产新的交易,并给与对方惩罚广播旧交易行为的权利(给与对方上一步的密钥)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK