
支付信道是一种支持两方或多方直接交换及更新交易的机制。该机制包括用于创建或打开支付信道、更新信道、以及最终确定或关闭支付信道的方法。这一机制还考虑到了某一方不作出反应的可能性,通常使用的解决方法是在一段设定好的时间之后收回信道内的资金。
支付信道支持极为快速的交易更新,交易仅在结束时才会上链,被区块链加盖时间戳。
支付信道对于流式传输数据、操作一系列事件或者操作实时数据集十分有用,可应用在游戏等应用程序里。
支付信道的特性
- 支付信道可以任意打开或关闭;
- 支付信道可由直接参与方直接开通,无需第三方参与;
- 无论是否存在链上的行为,都可以打开支付信道;
- 支付信道可以是私密的,也可以是公开的;
- 一个信道中可以存在多个对等参与方;
- 参与方可以从信道中添加或删除其他参与方;
- 支付信道是数据的管道;
- 信道通常通过一笔链上支付来关闭,但这笔链上支付也可以在信道之外进行,同样可以实现信道的关闭。
支付信道机制简述
使用支付信道的交易需要满足以下要求:nSequence小于0xFFFFFF,且nLocktime已设置为将来的某一时刻或将来的某一区块高度。该交易可以在对等参与方之间进行多次更新,直到达到nLocktime或nSequence完成,并且交易的其中一方将该交易上传到区块链。
支付信道应用举例:流媒体电影
下面我们以流式内容服务为例子,示范打开、使用和关闭支付信道的流程。
第一步
观众浏览目录以查看标题。目标和标师的内容可以是链上的,也可以是链下的。
第二步
观众选择内容要观看的内容。此时,有以下几种方法可以管理信道:
- 公开方法:通过挖矿网络;
- 私密方法:为每个信道预先充值UTXO;
- 私密方法:为每个观众提供单独的内容购买和服务交付信道。
第三步
在这个例子中,我们假设对等参与方将在矿工管理的公共信道中使用一个锁定了时间的UTXO来为观看的内容进行支付。在本例中,我们假设使用一个UTXO。这个UTXO将进入一个双花监控池。
想要查看内容的观众需向提供此内容者发送具有以下输出脚本的交易,用来开启支付信道。其中:
- Svn是观众的信道签名的第n次迭代;
- Pv是观众的公钥;
- Hv是观众的PKH;
- Spn是服务提供商的信道签名的第n次迭代;
- Pp是服务提供商的公钥;
- Hp是服务提供商的PKH;
- Hc0是观众所选内容的merkle根的哈希;
- Hcn是内容第n帧的哈希,Hc1是第一帧的哈希;
- Cn是内容中的第n帧,其中C1是第一帧数据;
- Hfm是观众可以点击的消息的哈希,通过这种方式来提前结束或暂停流式内容;
- Fm是服务提供商用来结束流式内容的消息。
正在使用的输入的序号是1。
交易在两个脚本之间不断迭代,如下文所示:
迭代1
观众使用SIGHASH_ALL对他们想要花费的输入签名,以此进行支付,输出如下:
观众还提供以下数据,允许内容提供商在支付信道关闭时使用支付信道输出以下内容:
- 签名Sv0Pv通过脚本SIGHASH_ANYONECANPAY | SIGHASH_NONE签出。因为支付信道的当前TXID可以被生成,这就允许观众根据支付信道的最新版本对输出进行签名,因此观众可以生成该签名,。
这将允许服务提供商也对该交易进行签名,然后在网络上结算来关闭信道,从而确保第一帧的付款已完成。
该交易将第一帧的观看费用支付给服务提供商,剩余部分作为零钱返还给观众。如果观众在没有观看的情况下操作取消,该交易仍然可以被网络处理,观众提供的第二个签名会被使用,从而使服务提供商收到这个观众的观看费用。
第四步
服务商将对交易的新状态做出响应,将该交易输出修改为:
双方还为此输出提供了一个新的签名 Sp0,它用于当观众希望关闭信道时,进行会签并向网络广播上一次迭代的交易。
当观众收到此新输出时,他会根据更新的内容对输入进行签名,以表明他已观看了第一帧内容,并向流媒体服务商支付第二帧的费用。金额可以根据服务提供商的费用模型进行优化。
如果支付信道关闭,通过提供视频的第二个数据包,将其作为输入的一部分,便可以来花费此输出。然而这种方式所需的交易费用很高,因此这不是在链上创建输出的最好方式,但这样做可以让双方都知晓内容传输的进展。
第五步
观众通过下表所示的方式来完成交易:
与之前的迭代一样,用签名表明已收到此帧并为流媒体服务商交付下一帧的费用。收费方式还可以根据不同服务提供商的收费模型进行优化。
双方再次为此输出提供了一个新的签名 Sv1,允许服务提供商在需要关闭通道时进行会签。在这个例子中,密钥对并不需要在每次迭代时发生变更,然而想要变更也是可以的。
步骤 N
观众可以请求内容服务商关闭信道。比如暂停视频、改变播放速率、或通过更大的交易来一次性传输大量内容,在这种情况下,观众就需要关闭支付信道。
观众将结束播放的消息的哈希放在输出的前端。流媒体提供商看到它,就知道客户想要关闭信道。观众为此输出提供了一个新的签名Svn,,以允许流媒体服务提供商关闭信道。
步骤 N+1
内容提供者广播最终交易并使用以下脚本来收款:
Svn Pv Spn Pp Fm
通过这种方式,只需使用一段简短的代码,即可完成交易,而无需使用前面交互的大量内容数据。