在上一篇文章里|深入解读闪电网络:HTLC 的工作方式与多跳支付的实现方式( 二 )


假设Alice现在要给Eric支付1btc 。 但是 , 如我们所见 , 他们并无直接的通道相连 , 而开设通道需要时间和金钱 。 幸运的是 , Alice连接着闪电网络 , 可以在一系列HTLC合约的帮助下完成间接支付 。 我们一步一步拆开来看 。
在上一篇文章里|深入解读闪电网络:HTLC 的工作方式与多跳支付的实现方式
文章图片
-逐步分解闪电网络中的支付路由-
Eric生成了一个秘密值R , 并把其哈希值发给了Alice(他不会把R展示给其他人)
Alice使用这条哈希值创建了一个HTLC , 而时间锁设置成未来10个区块 , 输出的数额是1.003btc 。 这额外的0.003btc是给支付通道链条中间方的手续费 。 那么 , Alice现在用HTLC锁住了1.003btc , 而HTCL的具体条件以大白话表述如下:“Alice会给Bob支付1.003btc , 只要他能在10个区块内交出秘密值R , 否则这些钱会返回给Alice” 。 他们之间的通道的余额也会因为这笔承诺事务而发生这般变化 , 现在Bob在通道内拥有2btc , Alice有0.997btc , 还有1.003btc锁在HTLC里面
到了Bob这里 , 他可以随意处置Alice的承诺事务(这笔HTLC事务是通过他们之间的通道来发送的) 。 他在自己跟Carol的通道中创建了一个HTLC输出 , 数额是1.002 , 时间锁设定为9个区块 , 使用了跟Alice所提供的同样的哈希值 。 Bob知道Carol如果想获得这笔钱 , 就不得不找出秘密数值R来解锁这个HTLC , 而一旦她这么做了 , 他就会知道这个R , 因此也能解锁Alice的HTLC , 拿到1.003btc 。 如果Carol没法找到这个秘密值R , Bob和Alice都能在时间锁解锁后拿回自己的钱 。 注意 , Bob发送的资金数额比自己能够得到的数额小0.001btc , 这就是他收取的手续费数额 。 Bob和Carol在通道内的余额变成:Carol拥有2btc , Bob拥有0.998btc , 还有1.002btc锁在HTLC中
Carol获得Bob发出的承诺事务之后 , 也如法炮制 , 在与Diana的通道中创建一个HTLC , 使用的哈希值与Bob提供的无二 , 时间锁设置为8个区块 , 数额为1.001btc 。 如果Diana能在8个区块以内揭示这个秘密数值R , 就能解锁这个HTLC , 获得1.001btc , 相应地 , Carol也会知道这个秘密数值 , 解锁Bob给她的HTLC , 获得1.002btc , 赚得0.001btc 。 Carol和Diana通道内的余额变成:Diana拥有2btc、Carol拥有0.999btc , 还有1.001btc锁在HTLC里面
最终 , 当Diana将一个HTLC(使用同一个哈希值作为锁)通过通道发送给Eric时 , 她把数值设为1btc , 时间锁设为7个区块 。 Diana和Eric的通道内余额变成:Eric拥有2btc、Diana拥有1btc , 还有1btc锁在HTLC里面
现在 , 我们来到了这个连锁支付的终点 。 Eric拥有这个秘密值R , 这个R的哈希值用在了所有的HTLC承诺事务中 。 Eric可以解锁Diana发给他的HTLC , 获得1btc;而Eric取回资金之后 , Diana也会知道这个R 。 Diana与Eric的通道内余额会变成:Eric拥有3btc , Diana拥有1btc 。
Diana收到这个秘密之后 , 也拿来解锁Carol发给她的HTLC , 获得1.001btc的同时也向Carol公开了秘密值 。 他们通道内的余额变成了:Diana拥有3.001btc , Carol拥有0.999btc 。
Carol收到秘密值R之后 , 解锁了Bob发过来的1.001btc , 因此Bob也知道了这个秘密值 。 他们通道内的余额变成了:Carol拥有3.002btc和Bob拥有0.998btc
最后 , Bob使用秘密值R获得了和Alice通道中的1.003btc 。 于是通道内的余额变成了:Bob拥有3.003btc , Alice拥有0.997 。
这样一个流程下来 , Alice就给Eric支付了1btc , 无需在彼此间另开一个直接相连的通道 。 整个支付链条中 , 也没有人需要信任另一个人 , 而且他们还因为中介服务赚到了0.001btc 。 即使支付在某个环节卡住了 , 也没有人会遭受损失 , 因为资金还锁在那里 , 时间过了就可以取回 。