什么是闪电网络?比特币闪电网络是怎么回事?
导语
加密货币具有显著特性,不易遭黑客袭击或关停。所有人都能通过加密货币在全球范围内传输价值,无需第三方介入。
为确保这些特征保持不变,须付出巨大代价。由于运行加密货币的节点众多,导致吞吐量受限。因此,虽是致力于面向大众普及的技术,但区块链网络能处理的每秒交易量(TPS)相对较低。
为打破区块链技术的固有局限性,各种可扩展性解决方案纷纷涌现,以提升网络可处理的交易数量。在本文中,我们将深入探讨比特币协议的一种扩展,即闪电网络。
什么是闪电网络?
闪电网络运行在区块链之上,旨在加速点对点交易。该网络的运用不仅局限于比特币,诸如莱特币等加密货币也集成其中。
我们可能会产生困惑,“在区块链之上”是什么意思?闪电网络即所谓的链下或Layer 2解决方案。个人可通过该网络交易,且无需在区块链中记录每笔交易。
闪电网络独立于比特币网络,拥有自主节点和软件,但仍需与主链通信。如要进出闪电网络,需在区块链中创建特殊交易。
个人的首笔交易实际上是在与其他用户建立一种智能合约。稍后我们会详细介绍。现在,我们先把智能合约设想为与其他用户共持的私人账本。用户可在这本账本中写入多笔交易。这些记录仅对用户与交易对手可见,且基于设置的特性,双方无法作假。
这种迷你账本称之为“通道”。例如,Alice和Bob分别向智能合约投入5 BTC。他们的通道中此刻各自有5 BTC的余额。然后,Alice写入账本“向Bob支付1 BTC”。现在,Bob有6 BTC,Alice余4 BTC。Bob日后又将2 BTC发还给Alice。余额更新后,Alice有6 BTC,而Bob剩4 BTC。他们可以这样持续操作一阵。
任意一方随时可将通道当前的状况发布到区块链中。届时,通道两端的余额分配到双方各自的链上地址。
顾名思义,闪电交易快如闪电。无需等待区块确认,即可在互联网连接允许时快速支付。
闪电网络为何必要?
截至目前,闪电网络(或简称“LN”)似乎是应对比特币区块链可扩展性最合理的方式。在如此庞大的生态系统中协调变化十分棘手,因为要面临硬分叉和潜在灾难性漏洞等风险。保护巨额价值安全是当务之急,而实验极为危险。
如果要把实验从区块链中移除,就必须更具灵活性。这样稍出差错,也不会对比特币网络造成实质影响。Layer 2解决方案不会破坏维持该协议运行10年以上的任何安全假设。
而且,没有必要改变惯有的操作方式。这样终端用户的链上交易照常进行,现在还多了链下交易选择。
使用闪电网络有诸多好处。我们将重点介绍以下几点。
可扩展性
比特币区块大约每十分钟创建一次,且容纳交易数量有限。区块空间属于稀缺资源,因此用户之间须相互竞价,才能保证自己的交易及时纳入区块空间。矿工最关心的是获取报酬,因此他们会优先纳入手续费更高的交易。
假设没有多名用户试图同时发送资金,这其实并不会成为问题。您可以将手续费设置得较低,这样交易可能会纳入到下一个区块。但是,所有人同时发布交易时,就会导致平均手续费大幅上涨,偶尔会超过5美元。在2017年牛市鼎盛时期,手续费甚至突破了50美元。
比特币平均交易手续费(以美元为单位)
这对于价值数千美元的比特币交易而言,似乎微不足道。但小额支付却举步维艰。谁会愿意为买一杯3美元的咖啡而额外支付5美元呢?
使用闪电网络仍需支付两项费用,即开启和关闭通道的费用。通道开启后,用户和交易对手可免费进行数千笔交易。交易完成后,只需将最终状态发布到区块链。
从宏观角度来看,如果有更多人选择闪电网络等链下解决方案,区块空间的使用效率将得到提高。小额、高频次的转账通过支付通道进行,而区块空间则用于大额交易和通道开启/关闭。如此一来,访问系统的用户群体数量增加,可扩展性进而获得长久发展。
小额支付
比特币设有最低交易金额,约为0.00000546 BTC。截至本文撰稿时,约等值于四美分。这已经是很小的数额,但闪电网络将交易限额压得更低,按目前最小的单位来算,为0.00000001 BTC,或一聪。
闪电网络对小额支付更具吸引力。按照常规交易的费用,在主链上发送小金额显得不切实际。然而在通道内,则可免费发送比特币的微小零头。
小额支付适用于众多用例。有人预测小额支付会成为订阅服务模式的有效替代方案,这样用户只需就每次使用的服务支付很小的金额。
隐私
闪电网络的第二个好处是用户信息的保密程度更高。各方无需在网络上扩散自己的通道信息。区块链中可能会显示“该交易开启了通道”,但不会透露交易详情。如果参与者选择将通道设为私密状态,则交易进展仅本人可见。
假设Alice和Bob共享通道,Bob又与Carol共享另一个通道,则Alice和Carol可通过Bob相互发送付款。如果Dan与Carol建立连接,Alice同样可向他发送付款。试想将这种模式扩展到支付通道相互连接的庞大网络中。按照这样的设置,只要通道关闭,就无法确定Alice究竟向谁发送了资金。
闪电网络如何运作?
我们已经解释了闪电网络如何依赖高层次上各节点的通道。现在研究一下其底层的具体原理。
多重签名地址
多重签名(或英文简称“multisig”)是可供多个私钥支付的地址。用户创建多重签名后,就能指定用于支付资金、签署交易所需的私钥数量。例如,5取1方案指五个密钥生成一个有效签名,且签署交易仅需一个密钥。3取2方案表示,如有三个密钥,需其中两个才能支付费用。
要预置闪电网络通道,参与者需在2取2方案中锁定资金,即仅需两个私钥用以签署交易,而转移代币同样需要两个私钥。让我们回到Alice和Bob的示例。接下来几个月内,他们需相互支付大笔费用,因此,他们决定开启闪电网络通道。
首先,他们在共有的多重签名地址中分别存入3 BTC。需特别强调的是,未经Alice同意,Bob无法把资金转出地址,反之亦然。
他们只需在调整两边余额时留下一纸记录。双方各自拥有3 BTC的初始余额。如果Alice想向Bob支付1 BTC,为何不直接记下Alice现有2 BTC,而Bob的余额为4 BTC呢?在决定真正转出资产之前,这样记录可以追踪到余额。
这种方式行之有效,但其中有什么奥妙呢?其实更重要的是,这样是不是让彼此合作变得易如反掌了呢?假设Alice最终拥有6 BTC,而Bob空无分文,那么Bob拒绝释放资金就不会有任何损失(或许失去的只是与Alice的友谊吧)。
哈希时间锁合约(HTLC)
上述系统很枯燥单调,与目前的受信任设置相比,没有什么过人之处。我们接下来介绍的机制可强制执行Alice与Bob之间的“合约”,就会有趣得多。如果其中一方不按规则行事,则另一方可采取补救措施,将资金撤出通道。
这种机制称为“哈希时间锁合约”,或缩写为“HTLC”。这个术语听上去令人生畏,但实际上是个非常简单易懂的概念。它结合了哈希锁和时间锁两种技术,对支付通道中各种拒不配合的操作采取补救措施。
哈希锁是加在交易中的条件,具体需证明自己知道某个秘密才能动用资金。发送方对一段数据进行哈希运算,并将带有哈希值的交易发送给接收方。接收方只有提供出与哈希值匹配的初始数据(即秘密),才能动用资金。唯一能获取该数据的途径是由发送方告知。
时间锁是防止在特定时间前动用资金的限制条件,可指定具体时间,或特定区块高度。
哈希时间锁合约(HTLC)通过结合哈希锁和时间锁而创建。在实际运用中,哈希时间锁合约(HTLC)可用于创建条件支付,即接收方须在特定时间前提供某个秘密,否则发送方收回资金。以下通过示例解释会更加浅显易懂。那么,让我们说回Alice和Bob。
开启和关闭通道
我们之前举了例子,设想Alice和Bob刚创建交易,双方向共享的多重签名地址存入资金。但是这些交易还没发布到区块链当中!我们需要先做一件事。
三枚代币来自Bob,还有三枚代币则来自Alice。
请记住,从多重签名中取出这些代币的唯一途径是Alice和Bob共同签署交易。如果Alice要把全部六枚代币发送到外部地址,需获得Bob批准。她先发起一笔交易,指明“将六枚比特币发送到该地址”,然后加上自己的签名。
如果她尝试立即发布交易,但没有Bob的签名包含其中,则交易无效。Alice须先将不完全交易交给Bob。他签名之后,交易才生效。
到此为止,我们还没建立督促众人诚信交易的机制。正如前文所述,如果交易对手拒绝合作,资金就会彻底困住。让我们来了解一下预防此类情况的机制。该机制涉及多步骤操作,请耐心听我们逐一介绍。
双方各提供一个秘密,我们称之为“As”和“Bs”。双方一旦透露秘密,结果不堪设想。因此,他们暂时要保守住秘密。两个秘密分别生成各自的秘密哈希值,即h(As)和h(Bs)。这样双方无需分享秘密,只需彼此分享哈希值。
Alice与Bob相互分享秘密哈希值。
Alice和Bob在向多重签名地址发布首笔交易之前,还需创建一系列承诺交易,即防止对方扣押资金的补救措施。
如果把通道想象成我们之前提过的迷你账本,那么承诺交易就是对账本的更新。每当创建一组新的承诺交易,就是在对二位参与者的资金进行再平衡。
Alice的交易有两个输出,一个支付她拥有的地址,另一个锁进新的多重签名地址。她签名后交给Bob。
Alice的交易有两个输出,一个到她自己的地址,另一个到新的多重签名,且需Bob签名才能生效。
Bob的情况一样,一个输出支付自己,另一个支付其他的多重签名地址。他签名后交给Alice。
两笔大同小异的不完全交易。
通常而言,Alice可在给Bob的交易中添加签名,让交易生效。但是我们注意到,这些支出资金来自于尚未拨款的的2取2多重签名。这类似于试图从目前余额为零的账户中支出支票。因此,这些部分签名的交易只有在多重签名启动和运行后才能使用。
新的多重签名地址,即3 BTC输出的目的地,具有一些特性。我们来看一下Alice签名给Bob的不完全交易。多重签名输出可在以下条件下使用:
双方可以合作签署交易。由于有时间锁,Bob在一段时间后才能自行花销。Alice如果知道Bob的秘密Bs,就能够动用资金。
对于Bob给Alice的交易:
双方可以合作签署交易。Alice在一段时间后方可自行花销。Bob如果知道Alice的秘密As,就能够动用资金。
请记住,双方均不知道彼此的秘密,因此第3点暂时无法实现。另一个注意事项是,如一方签署了交易,交易对手就能够立即动用资金,因为他们的输出未设置任何条件限制。签署方需等到时间锁到期才能自行花销资金,或与对方合作直接共同花销。
一切顺利!现在就能把交易发布到初始的2取2多重签名地址中去。这样做是安全的,因为您可以在交易对手放弃该通道时收回资金。
交易确认后,通道将开启并运行。第一对交易显示的是迷你账本的当前状态。这时,账本向Bob支付3 BTC,并同样向Alice支付3 BTC。
Alice要向Bob支付新款项时,两人会创建两笔新的交易来取代第一组交易。操作方式如出一辙,这笔交易会由各自签署一半。只是Alice和Bob要先放弃他们的旧秘密,并为下一轮交易交换新的哈希值。
例如,Alice要向Bob支付1 BTC,两笔新交易会把2 BTC存给Alice,而4 BTC给Bob。这样,余额就会更新。
双方均可随时签署和发布最近的一笔交易并在区块链完成“结算”。然而,签署发布方需等待时间锁到期,而另一方可马上花销费用。请记住,如果Bob签署和发布了Alice的交易,她就能拥有一次无条件输出。
双方可达成共识同时关闭通道,即合作关闭。这是资金返回链上最便捷的途径。但是,如有一方没有回应或拒绝合作,另一方可在时间锁到期后收回资金。
闪电网络如何预防作假?
我们可能会注意到此处存在攻击向量。假设Bob现有余额为1 BTC,要怎样才能阻止他发布余额更高的旧交易?毕竟他已经从Alice那里拿到了半签名的交易,他只需加上自己的签名就可以发布了,对吧?
没有任何措施能阻止他这样操作。但如果真要这么做,他可能会损失全部余额。假设他确实发布了旧交易,交易内容是向Alice支付1枚代币,并向我们此前提到的多重签名地址支付5枚代币。
Alice马上就会收到代币,但Bob必须等到时间锁到期才能从多重签名地址进行花销。是否记得我们上面提过,还要具备另一个条件,Alice才能立即动用同一笔资金?她需要一个自己当时不掌握的秘密。但是现在她已经知道这个秘密了——第二轮交易刚刚创建,Bob泄露了这个秘密。
在Bob只能静待时间锁到期时,Alice就能挪走所有资金。这种带有惩罚性质的机制确保参与者不会打歪主意试图作假,否则交易对手将获得他们的代币。
通道支付
我们之前说到过这个问题,通道之间可以建立连接,否则闪电网络无法有效支持支付功能。试想我们是否真的会预存500美元到同一家咖啡店,就为了接下来几个月每天都去喝上一杯?
其实完全没有必要这样做。 Alice和Bob开启了通道,Bob和Carol也已建立通道,那么Bob就能通过通道向二者付款。Alice通过这种方式跨越多个“跳点”,就能支付到路径中的所有人。
在这种情况下,Alice可通过多通道抵达Frank处。实际操作时,她一定会选择最便捷的通道。
中间机构在通道中起到一定作用,会收取少量费用,但非强制收取。闪电网络尚处于新兴阶段,收费市场还未成形。许多人期望能够基于流动性收取费用。
在基础链中,用户需根据占用的区块空间来支付费用,但与传输的价值无关。也就是说,支付1美元与1000万美元的费用是相同的。与之相反,闪电网络没有区块空间一说。
但是,存在本地余额和远程余额的概念。本地余额是指一方可“推送”到通道另一端的金额,而远程余额则是指交易对手可推送回本地一方的金额。
再来举个例子。下面我们详细了解一下上述其中一条路径:Alice <> Carol <> Frank。
Alice向Frank转账0.3 BTC之前和之后各位用户的余额。
Alice <> Carol和Carol <> Frank两条路径各有1 BTC的总容量。Alice的本地余额为0.7 BTC。大家此时在区块链中结算,则Alice收到0.7 BTC,Carol收到0.3 BTC的远程余额。
假设Alice要向Frank发送0.3 BTC,她会向Carol通道一侧推送0.3 BTC。然后Carol从自己的本地余额经通道向Frank推送0.3 BTC。最终,Carol的余额保持不变:来自Alice的+0.3 BTC和发送至Frank的-0.3 BTC相互抵消。
Carol充当Frank的中间连接没有损失价值,但是自己的资金支配灵活性变差。可以看到,她目前在与Alice的通道中可花销0.6 BTC,但在与Frank的通道端只能支配0.1 BTC。
我们设想一种情况,Alice只与Carol连接,而Frank连接的网络范围更广。此前,Carol通过Frank可向他人共计发送0.4 BTC,但现在她的通道一端只有0.1 BTC可供向外推送。
在这种情况下,Alice实际上正在蚕食Carol的资金流动性。在没有任何激励的情况下,Carol并不想让自己处于劣势。因此,她可能会提出“从我的通道每输出0.01 BTC,我将收取10聪的费用”。 这样一来,Carol在“较强”路径中舍弃的本地余额越高,赚得就越多。
如前所述,这里并没有事实上的收费要求。有人并不担心流动性变差,而有人只想与接收者直接开启通道。
闪电网络的局限性
如果事实证明,闪电网络能让比特币所有可扩展性问题迎刃而解,就皆大欢喜。但很遗憾,闪电网络存在着阻碍自身发展的缺点。
可用性
对于初学者而言,比特币并不是最直观的系统,地址、费用等等,可能都会让人摸不着头绪。但是钱包则抽离了这些复杂的内容,为用户提供与现有支付系统较为相似的操作。我们可以让他人下载智能手机钱包,并向他们发送代币。这样他们会很愿意去完成操作。
闪电网络目前无法做到这一点,其智能手机应用程序选择还十分有限。通常来说,闪电网络节点需访问比特币节点才能充分使用。
设置好客户端之后,用户还需开启通道才能进行支付。这个过程非常耗时,尤其当新人接触到“入站/出站容量”等概念,更是一头雾水。
所以说,闪电网络还需不断改进,降低准入门槛,让用户获得更流畅的体验。
流动性
闪电网络的一大诟病在于用户的交易能力受到了限制。个人支出不能超过锁定在通道中的金额。如果有人要支出所有资金,把通道的所有资金转到远程余额,则必须关闭该通道。或者,被动等待他人通过该通道进行支付,但这并不是理想的方式。
个人路径受限于通道总容量。以此前的Alice <> Carol <> Frank为例。如果Alice和Carol的通道有5 BTC的容量,而Carol和Frank的容量仅为1 BTC,那么Alice永远无法发送超过1 BTC的金额。即便如此,所有余额需在Carol <> Frank通道的Carol一端才能保证闪电网络的正常运作。这会严重限制通过闪电网络通道传输的资金量,继而连带影响到网络的实用性。
中心化枢纽
基于前面提到的问题,有人担心这样的网络会催生出大量“枢纽”,即具有强劲流动性且密切关联的大型实体,让所有大额支付都通过这些实体通道。
显然,这种发展势头并不是好现象。中心化枢纽会削弱系统,因为这些实体离线会严重扰乱用户之间的关系。此外,由于只有少数几个点进行交易,审查风险随之增加。
闪电网络的现状
截至2022年3月,闪电网络的运作一切正常,拥有超过3.5万个在线节点,8.5万多个活跃通道,并且容量突破3,570 BTC。
闪电网络节点的全球分布。资料来源:explorer.acinq.co
在众多不同的节点实现当中,Blockstream的c-lightning、闪电实验室(Lightning Labs)的闪电网络守护进程(Lightning Network Daemon)以及ACINQ的Eclair尤为热门。针对不太精通技术的用户,许多公司推出了即插即用节点。用户只需接通设备电源,就能开始使用闪电网络。
总结
闪电网络主网于2018年上线,尽管许多人认为它仍处于测试阶段,但该网络已经呈现出惊人的发展势头。
目前,只有具备一定技术熟练程度的用户才会操作闪电网络节点,因此网络仍需攻克一些可用性障碍。随着网络大力开发,准入门槛正在逐渐降低。
只要问题得以顺利解决,闪电网络将成为比特币生态系统中不可或缺的一部分,大大提升可扩展性和交易速度。
推荐阅读