摘自《精通比特币》
要说明状态通道,我们必须从一个非常简单的例子开始。 我们展示一个单向通道,意味着价值只向着一个方向流动。 为了便于解释,我们以一个天真的假设开始,假设没有人要试图欺骗他人。一旦我们解释了基本的通道概念, 我们将会接着看看是什么使得支付通道可以无信任化,从而让交易双方哪怕去尝试进行欺骗都无法成功。
对于这个例子,我们假设两个参与者:Emma和Fabian。 Fabian(卖家)提供由微支付通道支持以秒为单位时长计费的视频流服务。Fabian每秒视频收费0.01毫比特(0.00001BTC),相当于每小时36毫比(0.036BTC)的视频。Emma(卖家)是从Fabian那里使用以秒计费的支付通道来购买流媒体视频服务的用户。下图显示 Emma使用支付通道从 Fabian 购买视频流服务。
在这个例子中,Fabian (卖家)和 Emma(买家) 正在使用专门的处理支付通道和视频流的软件。 Emma(买家)在浏览器中运行该软件,Fabian (卖家)从服务器端运行该软件。该软件包括基本的比特币钱包功能,可以创建和签署比特币交易。“支付通道”的概念和术语对于用户都是完全不可见的。他们看到的是以秒为单位支付了的视频。
为了设置支付通道,Emma和Fabian建立了一个 2-2 的多重签名地址,双方各持一个密钥。从Emma(买家)的角度来看,她的浏览器中的软件提供了一个带有P2SH地址的二维码(以“3”开头),并要求她提交最多1小时视频的“押金”。
该地址因而得到了Emma的注资。支付给该多重地址的Emma(买家)交易,就是支付通道的资金交易或锚点交易。
就这个例子而言,我们假设Emma支付了 36 个毫比(0.036BTC) 到通道中。这将允许Emma消费长达1小时的流媒体视频。这笔资金交易设定了可以在这个通道上发送的最大数量(数据量),即设置了通道容量。
资金交易从Emma 的钱包中消耗一个或多个输入以集成资金。它创建一个价值为36毫比的输出,支付给Emma(买家)和 Fabian(卖家)之间共同控制的多重签名 2-2 地址。它也可能有一个作为找零钱到 Emma的钱包的额外输出。
一旦资金交易得到确认,Emma可以开始观看视频。Emma的软件创建并签署一笔承诺交易,改变通道余额,将0.01毫比归入Fabian(卖家)的地址,并退回给Emma(买家)的35.99毫比。
Emma签署的交易消耗了由资金交易创造的36毫比输出,并创建了两个输出:一个用于找钱,另一个用于Fabian的付款。交易只是部分被签署了 - 它需要两个签名(2-2),但只有 Emma的签名。
当Fabian的服务器接收到此交易时,它会添加第二个签名(用于 2-2 输入),并将其返回给 Emma 并附带时长1秒的视频。现在双方都有谁都可以兑换的完全签署的承诺交易,这个承诺交易代表着通道中的最新正确余额。双方都不会将此交易广播到网络中。
在下一轮,Emma(买家)的软件创建并签署另一个承诺交易(承诺2号),该交易从资金交易中消耗相同的 2-2 输出。二号承诺交易分配一个 0.2 毫比的一个输出到 Fabian 的地址,还有一个一个输出为 35.98 毫比,作为找零返回给 Emma 的地址。 这个新交易支付的是连续两秒的视频内容。Fabian的软件签署并返回第二个承诺交易,再加上视频的另一秒内容。
利用上述的方法,Emma的软件继续向Fabian的服务器发送承诺交易,以换取流媒体视频。因为Emma观看了更多秒数的视频,通道中属于Fabian的钱逐渐累积变多。假设Emma观看600秒(10 分钟)的视频,创建和签署 600 笔承诺交易。 最后的承诺交易(#600)将有两个输出,将通道的余额分成两半,分别为6毫比属于Fabian和30毫比属于Emma。
最后,Emma 点击“停止”停止流媒体视频。 Fabian或Emma现在可以发送最终状态交易以进行结算。最后一笔交易即为结算交易,向 Fabian 支付所有 Emma 消费的视频,并向 Emma退还资金交易中剩余的资金。
图显示了Emma 和 Fabian 之间的通道以及更新通道余额的承诺交易。
最后,只有两个交易记录在块上:建立通道的资金交易和在两个参与者之间正确分配最终余额的结算交易。