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


Hitesh拿到的由Irene签名的事务有两个输出 , 第一个输出不带时间锁 , 立即给Irene支付5btc , 而第二个输出带有时间锁 , 支付5btc给Hitesh , 但要等(这笔事务上链后的)1000个区块之后 , 这个输出才能花用 。 详情如下:
深入解读闪电网络:支付通道
文章图片
与此同时 , Irene也可拿到由Hitesh签名的一个承诺事务 , 有两个输出:一个立即给Hitesh支付5btc , 另一个输出则给Irene支付5btc , 但要等1000个区块之后才能花 。
深入解读闪电网络:支付通道
文章图片
因此 , 双方都拿到了一笔由对方签名的承诺事务 。 Hitesh和Irene都可以随时把手上的承诺事务签名后广播出去 , 但是 , 一旦这么锁了 , 另一方都会立即拿到钱 , 而自己只能等到1000个区块之后才能拿到 , 这可是大大的不利 。 不过 , 这还不足以让双方都诚实守信 。
深入解读闪电网络:支付通道
文章图片
这就要讲到我们的最后一个功能了 , 可撤销的密钥 , 使得任一方如果试图欺诈 , 对方都可以惩罚TA , 使之血本无归 。
如上所述 , 每一笔承诺事务都有一个“延后”的输出 , 我们把这个输出做得再复杂一点:这个输出既可以被等待了1000个区块的承诺事务发送者使用 , 也可以被通道的另一方使用 , 如果TA持有撤销密钥的话 。 当Hitesh创建承诺事务并交给Irene时 , 他的第二个输出既可以为自己所用(要等待1000的区块)也可以为Irene使用 , 如果后者掌握了撤销密钥的话 。
Hitesh会秘密地保管这个密钥 , 仅当他决定使用新的一笔承诺事务来更新通道内状态时才会发给Irene 。 事务的详情如下:
深入解读闪电网络:支付通道
文章图片
(译者注:看代码会更清晰一些:第一个输出是给立即Irene支付5btc;第二个输出则是带条件的 , 既可以使用撤销密钥 , 立即获得5btc , 也可在1000个区块后 , 使用Hitesh的私钥来使用这个输出 。 注意这里的“IF…ELSE…”式条件 , 它跟我们在其它的计算机编程中的含义是一样的 。 )
附带一个例子可能会更容易理解 。 假设Irene希望给Hitesh发送2btc , 这时候他们要更新通道的状态 , 也就是要创建一笔新的承诺事务 。 双方各自创建一个不对称的承诺事务 , 并且 , 在签名之前 , 先把上一笔承诺事务的撤销密钥交给对方 , 如此便“撤销”了上一笔承诺事务 。 如果Hitesh希望以通道最后的余额来结算 , 而Irene看着觉得更旧的状态对自己更有利 , 她可以尝试把自己手中的上一笔承诺事务签名后广播到网络中 , 但这笔承诺事务的撤销密钥已经暴露给了Hitesh;如果他发现这笔承诺事务上链了 , 他有足足1000个区块的时间可以把通道内的所有钱都拿走(第一个输出当下就给了他 , 而第二个输出只需他提供撤销密钥就可以立即使用)(没错 , 这个“取消”的动作没法自动化 , Hitesh必须关注Irene是否发送了旧的承诺事务到网络中 , 然后使用撤销密钥) 。
因此 , 这种使用不对称可撤销承诺的通道的效率要更高 , 因为它不限制通道的寿命 , 也不限制交易发送的次数 。
结语
到这里 , 我们的第一篇文章就结束了 , 估计你也要一段时间来消化一下 , 你也可以在评论中提问 。 在下一篇文章 , 我们会解释HTLC的功能 , 最终解释闪电网络是如何工作的 。
链接
“Masteringbitcoin”—AndreasM.AntonopoulosSegregatedwitnessfordummiesLightningnetworkwhitepaperLightningnetworkindepth,part2:HTLCandpaymentrouting(完)