闪电网络:HTLC高效转账网络
闪电通道,它的实现机制其实有个名称,叫RSMC(Recoverable Sequence Maturity Contract),中文名为“序列到期可撤销合约”,很拗口吧!所以,我前面一直不敢把它摆出来吓人。今天,就趁着介绍它兄弟的机会,让哥俩的名字也露露面吧。它兄弟的名字叫HTLC(Hashed Timelock Contract),中文名叫做“哈希时间锁定合约”,也是一奇葩名字。不过没关系,叫什么不重要,是什么才重要,大家记住他们的简称,然后知道它们是干啥的就行了。
一条条的闪电通道建立后,就可以互相串连起来发挥作用,构成闪电网络。串联的关键先生便是HTLC这个家伙了。
对于RSMC,其实执行的是一种无条件支付,就是说,A支付给B,B直接就接受支付了,不需要满足什么额外条件。但是HTLC是一种有条件支付,A在支付给B的时候,设定了一个额外条件,B必须满足这个条件才行。
这个条件的实行,依赖于一个概念:秘密。
秘密的定义很简单,其实就是哈希前的原始值,比如S的哈希值为H(S),在这里S就是秘密。假如 A以HTLC的方式发送比特币给B,那么他们事先约定好H(S),A在发送的时候,会在脚本里设置一个附加条件:如果B在某个指定时间之前,能提供一个秘密S,其哈希值等于H(S),那么 B才能获得比特币,否则,这些比特币仍会回到A的账户。
接下来,我们看看如何用HTLC来实现闪电通道与闪电通道的连接。
考虑这么一个场景:A和B之间有闪电通道,B和C之间有闪电通道,但A和C之间没有直接的闪电通道。现在,A要利用这两条闪电通道向C支付1个比特币。
我们来看实现步骤,如图:
1、C生成一个秘密S,并将S的哈希值H(S)发给A,或者,A生成秘密,发给C也行,反正是两人商定好一对S和H(S);
2、A向与他互联的闪电节点,广播这么一条信息:谁能20分钟(随意指定的一个时间,真实的闪电网络转账,时间可以比这短的多)之内提供一个秘密S,它的哈希值是H(S),那么A将发送1个比特币给他;
3、B收到这个消息之后,也向他的邻居闪电节点,广播一条信息:谁能在10分钟(B的时间要设置得比A小一点,使B获得秘密后有时间告知A)之内提供一个秘密S,它的哈希值是H(S),那么B将发送1个比特币给他;
4、C收到B的消息后,告诉B他可以提供秘密S,B又继续告诉A;
5、A构造一笔额度为1个比特币的HTLC交易:如果B在20分钟内能提供一个哈希值是H(S)的秘密,B就能获得这1个比特币,否则这1个比特币会退回到A的账户;
6、同样,B也构造一笔1个比特币的HTLC交易:如果C能在10分钟之内提供秘密S,他就能获得这1个比特币;
7、C提供秘密S给B,验证通过后,C拿到1个比特币;
8、B提供秘密S给A,验证通过后,B拿到1个比特币。
这样,A和C之间虽然没有直接的闪电通道,但也可以实现闪电转账。当然,B做为中间节点,一般都会收取一点手续费。整个闪电网络,正是由这些一条条点对点的闪电通道,互相连接而构成的一个高效转账网络。