一文读懂闪电网络工作原理
一 引言
了解比特币的人都知道,比特币网络的拥堵问题由来已久,转账高手续费、速度缓慢严重制约了比特币的发展。关于扩容的争论喋喋不休,共识分歧严重,造成了多次比特币分叉。目前来看,社区共识无法达成一致已经很明确,解决比特币现有问题的方法只能寄托于闪电网络上。
二 何为闪电网络
什么是闪电网络呢?闪电网络是一个分布式网络,通过智能合约功能以支持跨参与者网络的即时付款,同时利用区块链的特性消除将资金托管给第三方带来的风险。主要作为用于即时、高容量的微支付。闪电网络的目的是实现安全地进行链下交易,其本质上是使用了哈希时间锁定智能合约来安全地进行0确认交易的一种机制,通过设置巧妙的‘智能合约’,完善链下通道,使得用户可以在闪电网络上进行0确认的交易。
对于大多数币民来说,闪电网络神秘的面纱始终无法揭开,讲解闪电网络的文章层出不穷,但是大部分还是让人看了云里雾里,无法真正明白其精髓,致使大部分人不屑用、不敢用、不会用不一而足,严重制约了闪电网络的发展。
本文将用最通俗的语言,直观的讲明闪电网络运行原理及发展现状,为闪电网络的快速普及做些许贡献。
三 闪电网络关键技术
要明白闪电网络原理,两个关键技术必须首选搞清楚。
1多重签名技术
多重签名技术可以理解为一把锁,必须用多个钥匙同时插入才能打开。比如1/2多重签名,表示2个人拥有钥匙,只要有一把钥匙插入就能打开;2X2多重签名,要求用两把钥匙同时插入才能打开。如下图所示。
图1
2哈希时间锁合约(HTLC)
HTLC(Hashed Timelock Contract, 哈希时间锁合约),即限时转账,理解起来其实也很简单。 比如比特币,通过在UTXO的输出脚本中嵌入一段脚本,要花费这个输出,必须满足签名和hash值的原值都满足要求才能花费或者达到一定时间之后,签名才能花费。如下图所示。张三、李四在多签地址中有10BTC未花费,张三、李四协商达成一致后,同时签名生成交易,输出1支付给张三6BTC,输出2的锁定脚本有两个条件,满足任意一条即可花费,一条为张三提供签名并且提供额外锁定条件的解锁脚本,如果条件1满足则输出2的4btc属于张三;另一个条件为等待n个区块高度后,若条件一仍未满足,则李四签名,输出2的4btc属于李四。条件1中的的额外锁定条件很简单,比如张三生成一段随机数RN,通过H=MD5(RN)生成哈希值H,将H放入锁定脚本中。张三在解锁脚本中提供RN,即可满足输出2的条件一。由于条件一不需要等待时间,而条件二需要等待n个区块确,因此,只要条件一能满足,条件二就无法执行,这保证了张三优先花费输出2的权利。
图2
四 闪电网络工作原理
图3
闪电网络工作的第一步就是建立通道。开启通道的过程就是张三和李四分别向多重签名地址转账5BTC(该值可以是任意值),转账的过程需要广播并被矿工记录在区块链上,这个多签地址里面就拥有10个比特币,这是被区块链记录了的,全网承认,这时,张三和李四之间的通道就创建完成了。
接下来就是张三和李四私底下的交易了,不广播,不记在链上,正因如此,交易确认速度极快,几乎零手续费,这个过程称为链外交易,在交易通道(channel)中进行,此时的交易速度完全取决于网速,类似即时通信的速度。在通道中转账,双方必须记住每笔交易的金额以及交易历史数据,因为在通道中的交易过程是不上链的,而且只有自己对自己的金额安全负责,对方是不管的。如果自己把交易历史数据丢失,则最终关闭通道清算各自金额时,就无法保证数额的正确性,也就无法防止对方作恶。只要详细记录每笔交易,就能通过密码学设计保证谁也不能多记耍赖,这就是闪电网络协议设计的精妙之处。
闪电网络设计考虑到了各种作恶的可能性,其严谨的设计确保了通道的任何一方都不敢真正作恶,否则将会受到严厉的惩罚。这种巧妙设计,确保了无第三方的可靠即时支付。可以说,惩罚机制是保证闪电网络最关键的部分。下面通过两笔转账来理解何为惩罚机制。
张三、李四建立通道之初,通道内总共有10BTC,其中张三、李四各有5BTC。假设第一比转账,张三转给李四1BTC,则转账后,张三有4BTC,李四有6BTC;第二笔转账李四转给张三2BTC,则转账后张三有6BTC,李四有4BTC。怎样使双方无法反悔或者作恶呢?这里就用到了HTLC技术。
闪电网络支付,每笔交易的支付方需要向收款方索要收款码,类似支付宝扫码支付,如图4所示。
该支付码中除了包含支付金额等信息外,索要支付码的过程,也确保了双方都是在线的。
第一笔交易,张三转给李四1BTC,张三需要向李四索要一把锁H1,该锁H1只有李四能够解密,虽然李四作为收款方,但他同样需要向张三索要一把锁H2,该锁只有张三能够解密。然后张三、李四构建承诺交易(commitment transaction),将对方发过来的锁嵌入到交易的锁定脚本中,然后将构建的交易发送给对方。如图5所示。
图5
第二笔交易,李四转给张三2BTC,李四需要向张三索要一把锁H3,该锁H3只有张三能够解密,张三同样需要向李四索要一把锁H4,该锁只有李四能够解密。
到此时,第二笔交易跟第一笔交易流程基本相同,但关键来了,张三、李四将对方发过来的锁嵌入到交易的锁定脚本中构建承诺交易(commitment transaction),,发送给对方之前,必须将第一笔交易对锁的钥匙发送给对方,来作废第一笔交易。这一步骤是保证双方无法抵赖、无法作恶的最关键步骤。
第二笔交易李四转账给张三2BTC后,正常情况下,张三有6BTC,李四有4BTC,如果在第二笔交易生成之前,双方不把第一笔交易的钥匙发送给对方,若李四把第一笔交易中的交易T1签名并广播,该笔交易会被矿工打包到区块中从而生效,则交易T1 的输出2的条件1张三没有H1的钥匙,从而无法花费,再等待足够的区块高度后,李四便可以通过条件二来花费该笔交易的6BTC,从而从张三处骗得2BTC。若再第二笔交易之前,双方都获得了对方生成锁的钥匙,则该问题迎刃而解。若李四还想通过该方法骗取张三2BTC,则张三可以通过交易T1条件1直接花费该6BTC,同时输出1的4BTC也属于张三,李四将一无所有。通过这种方式来保证历史交易全部作废,双方必须承认最新的交易结果,直到通道关闭。
如何实现任意节点之间转账呢?看图6.
图6
图6中,老王想支付给咖啡馆0.01btc,但是老王与咖啡馆之间并没有建立通道,这时,就需要借助中间人了。老王与张三、张三与咖啡馆都建立了闪电网络通道,则老王可以通过张三中转完成付款。这个过程中,我们同样会遇到信任问题:老王想转给咖啡馆0.01个BTC,需要经过张三,但张三会担心自己给咖啡馆转0.01BTC后,老王耍赖;同样老王会担心如果先给张三转了0.01BTC,张三也耍赖不转给咖啡馆。在传统的金融系统中,是由大型知名金融中介机构的信用提供保证的。但闪电网络中,并没有这样一个独立于交易者的第三方去提供信用担保。HTLC(哈希时间锁定合约)完美解决了这个问题。
过程是这样的,第一,咖啡馆会选择一个随机密文并运算得到其哈希值,再将此哈希值交给老王。第二,老王拿到哈希值后,会构建一笔转账给张三的交易。这笔交易需要张三拿到咖啡馆的密文才能解锁,如果张三在限定的时间内没有解锁成功,这笔钱则退回给老王。第三,张三从老王处拿到哈希值,他也构建一笔转账给咖啡馆的交易,咖啡馆必须拿密文来解锁。第四,当咖啡馆提供密文从张三处获得0.01BTC,张三立马会拿密文从老王处获得0.01 BTC,这就完成了从老王给咖啡馆转账的任务。
上述过程可以看作一个智能合约。过程类似于这样:A想经过B转账给C,那么C先给A一把锁,C有钥匙A有钱。A跟B说,你从C那里拿到了钥匙,我的钱就是你的了。B就拿着锁去找C,用钱跟C换钥匙,然后拿钥匙去换A的钱。如此一来,就实现了钱和锁从A到B再到C,钥匙从C到B再到A的一个流转。
当然,在实际操作过程中,老王给张三转账金额需要大于0.01BTC,支付必要的路由费以激励张三充当路由节点。其次,要注意两笔交易之间的哈希时间长度设置,第二步时间必须长于第三步时间。如果张三在老王关闭交易之后拿到咖啡馆的钥匙,他将无法找老王拿回0.01BTC。
至于通道关闭,也有两种关闭方式,第一种是协议关闭。张三、李四都承认最终的结果,则可以协商构建一笔多签交易,一个输出给张三,一个输出给李四,只要金额没问题,双方都签字,交易立即生效,通道随机关闭。另一种方式是一方想关闭通道,另一方不同意或者不在线,则想关闭通道的一方比如张三,假设此时只有第一笔交易,双方都不知道对方锁的钥匙,张三只要将交易T2签名并广播,则等待一定的区块高度之后,张三通过交易T2的输出2条件二来花费该笔交易。当然,李四可以立即花费该笔交易,并不需要等待。
【BitTribeLab】BitTribe Lab是一个全球创新实验室(节点)网络,以建设去中心化未来信息基础设施和去中心化金融(Defi)新世界为愿景,邀请思想家、科幻小说爱好者、技术极客、开源软件开发者等等加盟。
欢迎添加BitTribeLab【微信号:BitTribeLab123】,回复”技术“,进入BitTribeLab技术开发者社区/交流群,一起探讨技术、交流思想,共同推进区块链技术的发展及应用。