本文来自BFTF技术社区联盟,作者:BFTF技术社区联盟,编译:方圆,星球日报经授权发布。
导读:闪电网络是用来解决比特币网络拥塞问题而提出的比特币网络改进方案。闪电网络的本质是把比特币网络作为结算网络,两个节点间在建立通道后,所有交易都可以在链下完成。本文作者对闪电网络进行了综合介绍,十分适合区块链从业者阅读。
如果您曾经使用过比特币,那么您可能会遇到长达一小时(或最差情况长达一天)的交易(确认)时间。 在交易量很高的时候,比特币网络曾经积压了超过15万笔未验证的交易,并且现在已经是司空见惯的情况了。如此之长的交易确认时间和高昂的手续费结合起来,让人很难以在小额支付场景上使用比特币(比如中午吃顿饭花30块钱,矿工打包交易需要的手续费可能远高于这个数字)。
闪电网络可以帮助我们解决这个问题。 闪电网络是 Thaddeus Dryja 和 Joseph Poon 的心血结晶,他们二人在2015年提交了关于闪电网络的白皮书。如果你对阅读长篇大论的论文没兴趣,我会在本文中简要介绍闪电网络的原理和流程。
闪电网络是什么?
从本质上看,闪电网络是比特币用户从比特币区块链中兑换货币价值的一种方法。 这是通过一些与比特币区块链交互的复杂脚本来实现的,并且它允许小额交易快速付款(交易费用也很低)。 如果比特币在未来想成为一种可行的支付方式,那么闪电网络就是一个必要的提高比特币区块链伸缩性的工具。 这种做法可以扩展到跨链交易。 这种价值互换在实践中是类似的,除了它们发生在两种不同的货币/区块链之间。 我们在这里更详细地讨论原子交换。
关于闪电网络的作用和简介到此为止,下面我们进入关于闪电网络细节介绍阶段。
闪电网络如何工作?
打开双向支付通道
如果要使用闪电网络,那么需要设置支付通道。 支付通道是闪电网络传输价值的交易途径。 如果要打开支付通道,需要在比特币区块链上新建交易。
“然而我以为你说所有这些都发生在链外?”别担心,闪电网络确实是在链外,但你首先必须让比特币网络知道你正在开展交易。 完成此操作后,交易双方保留通道上的资产负债表。 每次移动资金时,交易和更新的账户余额都将记录在此账本中,并且在您在通道上进行支付后,可以将最终结果广播到区块链。
多签钱包
那么如果支付通道发生在链下,资金在何处/如何管理,它们如何被记录到比特币区块链上?为了使用支付渠道,双方都需要将他们的资金发送到多签钱包地址。
假设Molly和Steve对超级碗的结果下注。他们每人下注1 BTC,并希望确保对方持有他/她的交易,因此他们将资金存入多签钱包。多签钱包的功能类似于存款保险箱,而交易的一组私钥可以允许任何一方访问资金。资金将保持锁定在钱包中,直到:
Molly和Steve都签名了最终交易
一方完成最终交易,或
达到时间限制并自动提交交易。一旦发生这种情况,资金将被转回双方的个人钱包。
为了成功设置多签钱包,Molly和Steve都创建了一个值(实质上是解锁事务的密钥),然后他们使用这些值来创建哈希值并发送给对方。掌握这些对于理解承诺交易如何在以后发挥作用至关重要。
一旦Molly和Steve将各自的资金存入多签钱包,他们就可以创建所谓支付通道并将其广播到比特币区块链。广播后,将使用一系列承诺交易来管理资金。
通过承诺交易转移钱
最终Molly赢了赌注,她赢了0.5个比特币,为了开始转移这笔财富,Molly和Steve都会通过签名承诺交易来更新他们在支付渠道中的各自余额。 承诺交易根据双方协议在两个参与者之间划分资金,实质上,这些交易就像欠条一样,一旦支付通道关闭才会实际支付(指记到比特币区块链上)。
例如,Molly签名了一笔交易,该交易将1.5 BTC发送给她自己,并将0.5BTC发送给新的多签地址。 然后,她签名此交易并将其哈希发送给Steve。 反过来,Steve签名承诺交易类似Molly的签名的那样,只是他发送.5 BTC给自己而将1.5BTC发给另一个多签地址。 然后他签名交易并将此交易的哈希发送给Molly。
a)2BTC在最初的多签钱包,b).5 BTC在一个多签钱包里,支付给Steve,以及c)1.5 BTC在一个多签钱包给Molly。实际上,一旦任何一方发送其各自的交易哈希值,支付渠道中的资产负债表将更新。 那么这样,在不使用比特币区块链的情况下我们就进行了交易。
钱包里的钱只能在三个条件下解锁:
锁定时间到了
任何一方通过值(key)从他们设置的多重签名钱包中解锁资金,或者
双方一起签名交易。
要注意,如果一方决定关闭支付通道并单独签名交易,他/她将不得不等待到交易签名时设置的预定时间(由合约规定)才能收到他/她的资金。这听起来有点过分,但必须通过这样的手段防止作弊。
定期付款/更新通道
如果Molly和Steve想继续更新通道或进行多次交换怎么办?
假设Steve正在向Molly支付定期服务费,比如理发。史蒂夫将0.2 BTC存入他们的多重签名钱包,每次理发之后,他都会向Molly签名承诺交易,将0.001 BTC发送到新的多签地址。要做到这一点,他必须重复我们刚才的步骤,在区块链上开一个新事务。
因此,要处理定期付款,需要每次更新多重签名地址中的帐户余额。为了做到这一点,Steve每次理发,他都会向他设立的多重签名钱包投入一笔新款来支付给Molly。但在这样做时,他为这个新事务创建了一个新值和一个新哈希值。Molly也要做同样的事情,当双方交换新的哈希时,他们还要交换前一个交易的旧值(注意不是交换哈希值,旧事务的哈希值在上一次已经交换)。
这确保了任何一方都不能欺骗对方。如果关闭支付通道时Steve试图通过广播旧的交易来欺骗Molly,他就有麻烦了。
例如,如果当关闭通道时,Steve将原始状态广播,他签名了原始交易(Molly和Steve各一个BTC)。因为Molly有之前交易的密钥,所以她可以惩罚Steve。更重要的是,Steve必须等到锁定时间才能拿到钱,而Molly可以立马拿到钱。因此,如果她发现Steve广播了原始数据,她可以在多签名钱包中直接拿走2 BTC(因为她有此交易的密钥,因此,能够解锁其资金)。
因此,如果一方试图欺骗另一方,则交易对手将获得所有资金。这种惩罚是为了阻止不良行为者滥用支付通道的资金分配。
此外,如果Molly不在线的话,发现这种犯规的节点操作员和矿工可以代表她行事。作为补偿,这些他们将获得一定的赏金。
关闭支付通道
当Molly和Steve准备关闭通道时,他们只需用他们的私钥签署一笔交易,将他们的最终账户余额广播到区块链。此时,矿工将进行验证并将其存储在区块链中。与打开通道的交易一样,此关闭通道交易需要和比特币区块链交互。
或者,双方也可以设定合约期限的到期日。例如,使用nLockTime算法,他们可以保证30天内支付通道亦然打开,30天之后,通道将关闭,最终余额将被广播到区块链。但是,每当各方想要更新其余额时,到期日期都会减少。因此,如果Molly和Steve在一个赛季中投注多个足球比赛,每次下注时,nLockTime合同将有一个新的,缩短的到期日期(例如,如果第一个承诺交易将在30天内完成,第二笔交易将在第29天到期,然后第三笔交易将在第28天到期,依此类推)。
nLockTime合约的目的很简单:它使帐户余额保持最新,并防止一方伪造帐单。就像我们之前讨论过的那样,每次商定承诺交易时,旧帐户余额都会被换成新的帐户余额,每个参与方都会记录这个新余额以及旧私钥。如果任何一方企图欺骗对方,欺诈方将受到处罚。
多通道支付和HTLC
“如果Molly和Steve想要将比特币发送给对方,但他们之间没有打开的支付通道怎么办呢?”他们可以通过中间人。
事实证明,Molly和Steve都有与Chuck打开的支付通道,因此他们不需要开辟新的通道,而是通过Chuck进行交易。
现在,这在理论上是一个值得信赖的交易,诀窍在于以安全的方式进行交易。 为此,闪电网络实现了哈希时间锁定合约(HTLC)。
Molly想给Steve付0.5 BTC。为此,Steve必须创建值(实质上是确认代码或密钥)。然后他创建一个这个值的哈希值发送给Molly。为了简化这个书面插图,我们将用V表示值,用H表示哈希值。
当Molly收到H时,她与Chuck分享。如果Chuck透露V,Molly则会向Chuck发送0.5 BTC。为了获得V,Chuck将他自己的BTC的0.5发送给Steve以换取V。一旦他有了这个值,他就把V发送给Molly然后收到0.5BTC。这样Molly有效地将0.5 BTC转让给Steve。
具体流程如下:
Steve创造V和H→Steve将H送到Molly→Molly将H发送给Chuck→Chuck将BTC发送给Steve→Steve将V发送给Chuck→Chuck将V发送给Molly→Molly将BTC发送给Chuck
因此,值(V)用作散列(H)的确认码/密钥,其表示事务的接收/锁定。
“但Molly怎么知道Chuck给她的V是合法的,Chunck付钱之后Steve跑路了怎么办”
正如nLockTime在双向支付渠道中让每个人都必须诚实一样,哈希时间锁定合约让各方对此负责。
对于HTLC,正在交易的比特币资金再次被锁定在多签钱包中,并且只能在提供值(V)和哈希值(H)之后解锁a)或b)合约在超时期限之后到期。
实际上,这意味着,当Molly和Chuck达成协议让Molly付给Steve时,她使用HTLC将她欠Chuck的比特币锁在一个多签钱包里。一旦Chuck支付Steve并收到V,他就可以输入V和H进入HTLC,获取到Molly支付的比特币。或者,如果Chuck未能完成交易而且合约在一周之后到期,那么Molly的比特币将被释放并重新进入她的私人钱包。
同样的动作发生在Chuck和Steve自己的支付渠道上。在Steve揭晓V之前,Chuck无法将他的比特币交给Steve。一旦Steve揭晓V,Chuck将可以从Molly那里获取资金并且Steve收到Chuck的BTC。
理论上,这个过程可以运行在多个支付通道和多个人的情况下。
总结:为什么闪电网络很重要
这是一个复杂的话题,要做到深入浅出是很困难的,读到这里的都是真爱。
概述:闪电网络是一个链下系统,允许个人多次交换比特币而无需将所有这些交易记在链上。只有两个事务(以及打开和关闭)记录在区块链上,而所有其他事务(尽可能多的事务)都通过离线节点进行处理。
这个模型有几个主要的好处:
有效的小额支付:闪电网络面向小额支付。闪电网络不需要支付超过传输价值的高昂费用,而是允许用户相互发送少量货币而无需直接通过比特币网络。他们仍然需要向节点运营支付费用,但与比特币网络费用相比,这是微不足道的。
可扩展性和延迟解决方案:与之前的观点一致,闪电网络将减少比特币网络膨胀。减少链上交易的数量意味着减少矿工的工作量,这反过来意味着更快的交易时间和更低的费用。如果不必将每笔交易都放在区块链的公共账本上,那么网络运行起来会更加顺畅。此外,闪电网络交易将比链上的交易快得多。
目前,闪电网络支持比特币,Litecoin和Vertcoin。 闪电网络仍处于测试状态,在本文发布时尚未确认主网上线时间。