深入解读闪电网络:支付通道( 二 )


在通道存在的整个生命周期里 , 只有两笔事务被发到了比特币网络中并记录到了比特币区块链上(就是充值事务和结算事务) 。 在这两笔事务之间 , 双方可以交换无数次承诺事务 , 这些事务都不需要提交到区块链上 。
深入解读闪电网络:支付通道
文章图片
一个简单的支付通道案例
在解释更加复杂的机制之前 , 我们先来考虑一个简单的、单向的通道的例子 。 为了简化这个解释 , 我们假设双方都是诚实的 。 后面我们会再考虑帮助我们阻止欺诈的机制 。
假设一个通道有两个参与者 , Emma和Fabian 。 Fabian提供付费的视频流服务 , 而观看者通过通道来实现小额支付——每观看一秒就要付出0.00001btc , 相当于每小时0.036btc 。 Emma是一个想看视频的普通用户 。
深入解读闪电网络:支付通道
文章图片
Emma和Fabian使用一个特殊的程序来同步播放视频和运行支付通道 。 Emma在自己的网络浏览器中启动这个程序 , 而Fabian在自己的服务器上使用同一个程序 。 这个程序具有一个普通的比特币钱包软件的所有功能 , 它可以创建和签名交易 。 支付通道的整个机制可以完全隐藏起来 , 用户看到的事实就是这个视频是按秒计价的 。
现在我们来看看这个付费服务的具体工作流程 。 一开始 , Emma和Fabian要开启通道:建立一个2-2的多签名地址 。 从用户的视角来看 , 这个程序创建了一个P2SH地址(一个多签名钱包)并要求用户充入足以支付一个小时视频服务的资金 。 Emma转了0.036btc到这个地址 , 而这笔交易也就成了所谓的充值事务 。
充值事务被打包到某个区块之后 , 这个通道就算开启了 , 视频也就开始播放 。 在第一秒钟 , 用户创建并签名了一条承诺事务 , 改变了通道内的余额:现在Fabian有了0.00001btc , Emma还剩0.03599btc 。 这笔事务使用了充值事务的输出 , 并创建了两个输出 , 含义就如我们这里所述 。 从服务商的角度看 , 程序收到了这笔事务 , 于是也签上名、连同第一秒的视频发回给Emma 。 现在双方都有了一笔对方手动签过名的、反映通道最新状态的承诺事务;如有需要 , 任何一方都可以把这笔交易发送到比特币网络中 。
到了第二秒 , Emma这边的程序又创建了一笔新的承诺事务 , 使用的同样是充值交易的输出(跟第一笔一样) , 这一次 , 承诺事务的第一个输出给了Fabian0.00002btc , 把0.03598给了Emma 。 这笔事务用来支付第二秒的视频下载 。
我们假设 , Emma看了10分钟的视频 , 然后就退出了 。 在这段时间里 , 她签名并发送了600笔承诺事务(600秒的视频) 。 最后的一笔有两个输出:0.03btc给Emma , 和0.006给Fabian 。 Emma关闭了通道 , 把最后一笔承诺事务广播到了比特币网络中作为结算事务 。 如此 , 这个通道只有一头一尾两笔事务记录到了区块链上 。
深入解读闪电网络:支付通道
文章图片
免信任的通道
当然 , 从这个例子来看 , 一切都好 , 但这是因为双方都是诚实的 。 不难想象某些时候 , 其中一方会欺骗对方 , 像上面这么简单的设计可能就不够用了 。
虽然通道开启着 , Emma还是需要Fabian的签名来取出资金 , 因为这个通道是2-2的多签名地址 。 如果Fabian消失了 , Emma的资金可能会永远锁在这个通道里面 。 虽然通道开启着 , Emma可以使用任何一笔双方都签过名的承诺事务 。 在观看视频10分钟之后 , 她可以拿第一笔承诺交易上链 , 完全不需要经过Fabian的再次同意 。时间锁