闪电网络很难懂,浅谈闪电网络

作者:理财课堂

图片 1

TPS

网络拥堵、转账时间长、交易缓慢、交易费用高等一直是比特币被诟病的问题。客观看待,比特币TPS低有利有弊。以太坊Vitalik提出了当前区块链技术面临的不可能三角:去中心化(Decentralization)、安全性(safety)和可扩展性(Scalability)。可扩展性主要也是指TPS。
比特币现在每秒处理7笔交易,以太坊每秒25笔交易,通过优化可能会提高到50或100,visa每秒的交易处理能力是2000笔,EOS号称优化后TPS可达百万,2017天猫双11创下了32.5万笔/秒交易创建的纪录,在这个数字后面,更是每秒多达几千万次的数据库写入(数据来源于公众号:阿里巴巴数据库技术)。
所有的区块链都会遇到不可能三角问题。针对于区块链的扩展性,有多种解决方案,比如:侧链、闪电网络(雷电网络)、分片、DAG等。
上周参加了一个分享会,研究了一下闪电网络,这篇文章主要写一下自己的理解。因为闪电网络原论文晦(ying)涩(wen)难(bu)懂(hao),如果有发现理解的不对的地方,请指正。
<<The Bitcoin Lightning Network:Scalable Off-Chain Instant Payments>>

如果Alice和Bob完成了一笔交易,他们手头各自都有账本,在没有第三方见证的情况下,他们都可能把账本按照对自己有利的方向进行篡改。银行是怎么解决这个问题的呢?在传统的银行业中,由于Alice和Bob都信任银行,因此银行充当了双方都信任的第三方来进行记账,并且以第三方的账目为准,因此双方不管怎么篡改账本都没用。区块链是怎么解决这个问题的呢?区块链同样引入了第三方来充当记账者,虽然Alice和Bob都不信任记账者,但系统会想尽办法来保证记账者的诚实性。

闪电网络-总体思想

  1. 闪电网络本质是针对扩展性的一种链下(off-chain)解决方案。
  2. 假如Alice和Bob经常发生比特币转账,Alice和Bob可以约定两个人都转50个比特币到一个 2-2多重签名,这个签名地址的币只有Alice和Bob同时签名才可以使用。
  3. 在发生转账之前,Alice和Bob维护一个这些币的归属副本,既:现在 2-2签名中有100个btc,其中50个归属于Alice,50个归属于Bob。
  4. 这时就可以认为Alice和Bob打开了一个双向支付通道,以后Alice和Bob之间的转账都可以视为归属副本的更新。
  5. Alice向Bob转了1个BTC,则两个人更新归属副本为:Alice-49BTC, Bob-51BTC,并且将原来的副本废弃。
  6. <font color='red'>副本并不广播到链上,所以是off-chain方案。</font>
  7. 当Alice和Bob决定不再有合作关系时,两个人可以将最新的副本广播到链上,按照归属副本的内容,将2-2签名中的币分别转给Alice和Bob,视为关闭通道。
  8. Alice想向Cavol转10个BTC,但是Alice和Cavol之间还没有建立通道。Bob既和Alice有双向支付通道,又和Cavol有双向支付通道,Alice可以支付给Bob 10BTC,然后由Bob代转给Cavol,Bob做为中间人,可以收取少量手续费。
  9. 所有用户之间的通道连接关系组成网络,既为闪电网络。

但是到了闪电网络,请注意,这里再也没有一个第三方记账者了!Alice和Bob又重新拿回了他们的小本子,各自记起了各自的账本。问题在于怎么保证他们都诚实记账!

具体实现

闪电网络的第一步是Alice和Bob之间需要打开通道,打开通道的本质是Alice和Bob约定转一定数量的比特币(>=0)到一个2-2签名地址,但是这里存在两个问题:

  1. 如何确保两个人都会转币?既不存在Alice已经转了,Bob故意作恶不转,导致Alice转的币取不出来的情况?
  2. 如何保证Alice和Bob转了以后,可以不相互依赖对方的情况下,能够保证把币取回来?因为存在这样的情况,可能Alice转了10BTC,而Bob转了1BTC,理论上如果Bob作恶的话,Bob可以敲诈Alice。

作者:白鱼

通道建立

闪电网络提出了RSMC(序列到期可撤销合约),具体过程:

  1. 比特币的交易结构是UTXO,Alice和Bob首先交换各自准备转到2-2签名中的UTXO输入,既各拿出5BTC,用于构建Funding Tx,输出为Alice和Bob的2/2多重签名,这个签名的输出此后只能同时具有Alice和Bob的签名才能花掉。而且,最重要的是,<font color='red'>此时Alice和Bob均不对Funding Tx进行签名,也不广播到链上,因为没有签名,即使广播到链上也会被立刻拒绝。</font> 这一步主要是为了解决第一个问题,保证不会出现有一个人转币了而另一个人没有转币。
  2. 为了解决第二个问题,双方需要构建Commitment Tx。Alice基于未广播的2-2签名构造两个合约C1a和RD1a,C1a的内容为:直接转给Alice5个BTC,剩下5个BTC转到新合约RD1a,RD1a的内容为,1000个确认以后Bob才可以花掉RD1a里面的5个BTC。然后Alice把C1a和RD1a都转交给Bob。同样,Bob也基于未广播的2-2签名,构造两个合约C1b和RD1b,其中C1b的内容为直接转给Bob 5个BTC,剩下5个BTC转到新合约RD1b,RD1b的内容为,1000个确认以后Alice才可以花掉RD1b里面的5个BTC。然后Bob把C1b和RD1b都转交给Alice。
  3. 到这一步,由于并未对Funding Tx进行签名,任何一方均无法作恶,任何一方也不会有任何损失。
  4. 双方均完成对Commitment Tx的签名并交换后,就可以对第一步中的Funding Tx进行签名,并交换。此时,Funding Tx是完整的交易,就可以广播到链上。
  5. 上述过程就是创建RSMC的全部过程,此时Alice和Bob之间的通道就已经打开。
  6. 这里面有几个关键点:
    • Commitment Tx基于Funding Tx,但是Funding Tx并未广播到链上,如何信任Commitment Tx?这里依赖了隔离见证的一些知识,SIGHASH_NOINPUT指令可以解决这个问题。
    • 为什么Commitment Tx创建以后,Funding Tx就可以签名画押了呢?首先,Alice签名的C1a和RD1a,转交给了Bob,Bob只要对这两个合约签名广播,就可以保证1000个确认以后,收回之前投入的5BTC。同理,Bob签名的C1b和RD1b也都转交给了Alice,Alice对这两个签名广播以后,等1000个确认也可以拿回自己的5BTC。
    • 大家应该发现这里有一个非常妙的地方,Alice和Bob都把半签的合约交给对方,都等待对方做最后的签名和广播,但是谁签名和广播,谁就会延迟获得自己的币。最后的结果就是,谁都不愿意先去广播,就会导致两方的通道可以长时间保持。
    • C1a,C1b, RD1a, RD1b这四个合约记录了Alice和Bob双向支付通道中币的归属副本。

特别感谢:Conflux研究总监、密码学专家杨光博士为此文提供校对

更新状态

现在Alice和Bob的通道已经建立,Alice向Bob转1BTC,怎么操作?

  1. Alice向Bob转1BTC,Alice变为4BTC,Bob变为6BTC,需要创建新的Commitment Tx,与上面的过程类似,半签以后交换,生成C2a, RD2a, C2b, RD2b。
  2. 此时两个状态均是有效的,那么最核心的问题来了,如何才能彻底废弃掉C1a和C1b呢?因为,Alice很有可能把Bob之前给他的C1b签名以后广播到链上,导致Bob承受1BTC的损失。RSMC采用了一个非常巧妙的方法,双方在每一次签名Commitment Tx时都使用不同的秘钥对,Bob在接受Alice第二个半签C2a时,需要Alice将C1a中使用的私钥交给Bob,表示爱丽丝放弃C1a,承认C2a。C1b也是同样对待。
  3. 假设,Alice已经签名了C2a,但是Alice故意把C1b广播到区块链上,Bob会马上拿到自己的5BTC,Alice会等1000个确认以后才能拿到剩下的5BTC。这个时间内,如果Bob监控到Alice作假,可以拿着Alice签过名的C1a和以及Alice交换过来的私钥,直接从区块链上取走剩下的5个BTC。既:不诚实的人会失去所有的币。

说明:此文的思路取之于Aaron van Wirdum于2016年写就、发布于Bitcoin Magzine的《闪电网络三部曲》,许多基本说明的制图亦取之于此。在此对Bitcoin Magazine及Aaron van Wirdum先生本人表示感谢。想要查看英文原版的,链接见

网络

假设A想给C转1个BTC,但是A和C之间没有双向转支付通道,但是B和A、C都有通道,那么A可以直接在链上给C转1个BTC,也可以和C建议通道以后再转,也可以拜托B帮忙转1BTC。A通过双向支付通道 经由B给C转1BTC的过程,就是闪电网络的应用。在不可信的情况下,转账过程如何操作?哈希时间锁定合约(HTLC)!

  1. 为了完成这次交易,A会先给C发一个随机数字R,接着C会对R进行签名,生成一个哈希H,并返回给A。
  2. 然后A就找到B,如果B能够给出生成签名H的key,那么A就同意更新渠道的支付分配,为B转1个BTC。实际上,A和B会先更新Commitment Tx,A生成三个交易,C1a,RD1a和HTLC(a),C1a和RD1a的内容同上面的RSMC,HTLC(a)的内容为,如果B找到可签名H的key,B可以直接拿走HTLC中的1BTC,否则HTLC(a)中的1BTC在一定的锁定期之后,A可以重新花掉。
  3. 之后B会拿着H去找C,用1个BTC来换签名key,同时更新B和C的支付分配。更新过程同A和B之间一样,基于HTLC。因为签名的key就是从C这里生成的,所以他肯定知道,而且理论上也只有他才知道。接着C将签名用的key告诉B,并更新了其渠道的支付分配。
  4. 同理,B使用key从A那里也拿到了1BTC,A以脱链的形式付给C一个BTC。
  5. 这里有两个需要注意的问题,A和B之间以及B和C之间的支付分配都会重新创建Commitment Tx,而每个Commitment Tx带有锁定时间(如之间的1000个确认),A和B之间的锁定时间需要长于B和C之间的锁定时间,防止在B拿到key之后,A和B之间的锁定时间已经到期,B会拿不到币。
  6. 第二个问题是:在B找C拿key的过程中,A和B之间的通道可以随时断开,B不需要信任A在此期间会关闭通道,因为即使A作恶,故意关闭通道,HTLC(a)中的币,A还需要等到一定的锁定期以后才能花掉,只要B在这个锁定期内拿到签名所用的key,就可以从HTLC(a)中拿走1BTC。
  7. B作为中间人,可以收取少量的费用。
  8. 通道之间的交易,实际上无需确认等待,瞬时完成的,对于比特币的TPS有大量的提升。

闪电网络有利有弊,有人看好有人看衰,不可否认两点是:链下节点会相对中心化;比特币交易速度会有大幅提升,交易费也会显著降低。
闪电网络可以用来做跨链,甚至有团队用闪电网络做去中心化交易所,值得期待。
文章里面没有图,主要是图不太容易画明白,抱歉。
相关资料,公众号后台回复”闪电网络“获取。

闪电网络最近再次火爆,一方面是由于“闪电火炬“的传递,一方面是闪电网络节点数目的明显增加。据闪电网络浏览器数据显示,全网节点已经达到6294,活跃节点达3235,资金量达到691BTC,通道数目为27030。

全球范围看,美国部署的节点最多,共929个,占节点总数的28.56%;来自美国的通道数共12008个,占节点总数的43.75%。其次是德国、法国、加拿大。

值得一提的是,美国的这929个节点大部分是商户,这其中不仅仅包括被人津津乐道的爱华斯披萨店、自由职业服务网站ND Work,还包括著名的社交软件商Twitter。Twitter首席执行官Jack Dorsey公开表示,正在尝试在推特上使用闪电网络进行比特币打赏,这个想法可能会在今年落地。甚至还有传言称,麦当劳美国也在测试比特币的闪电网络。

毫无疑问,美国正在刮起一阵“闪电网络”的旋风。如果这些商家最后都成功采用了闪电网络,这将给比特币的支付推广带来的影响不可小觑。

但可惜的是,这股风潮尚未在中国落地开花。闪电网络浏览器显示,截至目前,中国一共只部署了11个节点,其中上海占4个,北京2个,江苏2个,相比起美国来说简直少的可怜。可以说,虽然闪电网络很重要,但它还未在国内引起足够的重视。

01

直观图像

下面两张图分别是ACINQ开发的LN浏览器展示的节点连接可视化拓扑图像以及比特币全球节点的分布图。从图中可以看出,闪电网络与比特币网络结构类似,它首先是一种软件,需要在本地部署一种独立的客户端,从而成为节点,然后节点寻找到活跃节点建立通道,最后连接成网络。

从下图中可以看出,欧洲和北美是闪电网络和比特币节点部署最多的地方,而在东亚、澳大利亚等地方也有部署,但数量较少。这种直观的初步认知对理解LN是非常有必要的。

闪电网络节点图比特币网络节点图

02

闪电网络原理白话版

很多人说闪电网络是比特币的未来,是趋势。但笔者始终觉得,如果不能理解底层的技术原理,就无以言对上层应用的深刻理解,更不足以谈对未来趋势的判断。接下来,我将在Aaron van Wirdum 编写的《闪电网络三部曲》的基础上,用更加通俗的语言介绍闪电网络。感谢Aaron van Wirdum绘制的交易结构图,这对我们理解闪电网络将会起到莫大(博客,微博)的帮助。

理解闪电网络主要分为两步,一是理解双向支付通道,二是诸多通道扩展成闪电网络。

闪电网络想要解决的是比特币扩容、交易即时确认和手续费高的问题。举个例子来说明闪电网络整体思路,设想我们的老朋友Alice要给Bob转1个比特币,她该怎么做呢?

传统做法是Alice可以挑选出其未花费的输出用对应私钥签名,并向比特币网络广播,矿工验证打包,一般来说6个区块之后即可确认交易。这个过程很慢,需要等待一个小时左右,并且还要支付给矿工的手续费。于是呢,天才的程序员们碰撞出了闪电网络的解决方案。

操作过程是这样的,Alice和Bob先各自把5个BTC转给一个由两人共同控制的多重签名地址。这笔交易和比特币网络上其他普通交易没什么太大区别,只是转出的地址是一个多签地址。这个过程称为开启通道。

多重签名技术是多个用户同时对一个数字资产进行签名。可以简单地理解为,一个账户多个人拥有签名权和支付权。如果一个地址只能由一个私钥签名和支付,表现形式就是1/1;而多重签名的表现形式是m/n,也就是说一共n个私钥可以给一个账户签名,而当m个地址签名时,就可以支付一笔交易。例如,多重签名2/3,表示3个人拥有签名权,而两个人签名就可以支付这个账户里的比特币;多重签名1/2,表示2个人拥有签名权,谁都可以单独来支配这笔资金。

开启通道后,这个多签地址里面就拥有10个比特币,这是被区块链记录了的,全网承认。接下来就是Alice和Bob私底下的交易了,不广播,不记在链上,正因如此,交易确认速度快,几乎零手续费,这个过程称为链外交易,在交易通道中进行。

1.构建双向支付通道

什么是通道?怎么在通道进行交易呢?它安全吗?

简单来说,Alice和Bob都会在各自的小本本上记账,他们都知道对方怎么记的,且有密码学设计保证谁也不能多记耍赖。这当然也是由闪电协议精巧的设计保证的,后文再讲技术细节。

那么我们就可以想象出这样一个通道:在这个通道中,一开始Alice和Bob各有有5个,如果第一笔记“Alice有4个,Bob有6个”,这就相当于Alice给Bob转了1个比特币。如果,过了几天,Alice又要向Bob支付2个比特币,那么他俩会再记一次账,这次记“Alice有2个,Bob有8个”,同时上次记的“Alice有4个,Bob有6个”在两人共同确认后作废,也就是说,本次记账后,Alice只有2个比特币,她不能再拿出旧账单说“Alice有4个,Bob有6个”。

注意,在通道关闭之前,这10个比特币只能在Alice和Bob之间使用。也就是说,在不关闭通道的情况下,主网只知道多签地址有10个比特币,并不知道Bob已经拥有了其中的8个比特币,这就是所谓“双向支付通道”。

关于这个记账过程,EthFans翻译的《用算盘了解闪电网络》可以说很形象了。

之后Alice和Bob就可以在通道里过上你来我往的相互转账的愉快生活,远离主链的拥堵与高费用。这就好比俩人结婚了,夫妻们想要私下结算,只要俩人同意,想怎么算就怎么算。

天有不测风云,突然有一天,Alice不想和Bob这么转来转去了,想取出自己在通道里的钱去外面的花花世界潇洒快活。那么就需要关闭通道了,常有两种方式,一是协议离婚,如下图,这种方式很和平,双方共同从最开始的多签地址签名发起一笔交易分别转到两人各自控制的地址对应数额的比特币,同时将之前记在小本本上的所有旧账一笔勾销。

二是起诉离婚,Alice想离而Bob不想离,这时Alice可以单方面强制关闭通道,将小本本最后一笔交易广播出去,只要矿工验证并打包进区块,这婚也算离了,代价是Alice并不能立马得到比特币,需要等待一定时间。

本着劝和不劝分的原则,闪电协议设置了哈希时间锁定合约,单方面强制离婚会受到延迟收到退款的惩罚,这是为了保证双方交易的稳定。

以上最后一个过程是通道关闭。注意,不管是协议离婚还是起诉离婚,这都是要法院受理登记的。关闭通道一定要发起交易并广播到主网,最后矿工记录,所以还是要忍耐一定确认时间和支付手续费的,这与闪电网络无关。

至此我们已经知道了Alice和Bob链下互相转账的那点事儿了,这就是所谓“双向支付通道”。开启通道需要在主链交易,这是锁定资金,关闭通道也需要在主链交易,这是释放资金。中间可以进行任意多次转账支付,是0确认0手续费的。

2.将双向支付通道扩展成闪电网络

新问题来了,世界上除了这两位,还有Carol、Eric、Diana等等。设想Alice想转给Carol 1个BTC,她该怎么办呢?自然地,她俩可以再重复上述操作建立一个双向通道。但是,如果我们为了应用闪电网络,需要世界上每两个人之间都建立一条通道,这将是非常大的工作量且不切实际的。为了解决这一问题,我们需要将双向支付通道扩展成闪电网络。

假如Bob和Carol之间已经建立了支付通道,而Alice和Bob之间也有支付通道,那么Alice可以先把钱转给Bob再由他转给Carol,即Bob充当了支付的中间人,在网络里他就是一个路由节点。 如上图,B和C,A和B之间有通道, A和C就通过B来达成交易。更一般地,A和F可以经过B、D来交易。

当很多的节点相互建立通道,最后就会形成闪电网络。

03

闪电网络原理技术细节版

通过上文,我们差不多了解了闪电网路是如何形成的。但是看完大家一定会觉得有哪里不对劲。哪里不对劲呢?

我们来回顾一下历史。

如果Alice和Bob完成了一笔交易,他们手头各自都有账本,在没有第三方见证的情况下,他们都可能把账本按照对自己有利的方向进行篡改。银行是怎么解决这个问题的呢?在传统的银行业中,由于Alice和Bob都信任银行,因此银行充当了双方都信任的第三方来进行记账,并且以第三方的账目为准,因此双方不管怎么篡改账本都没用。区块链是怎么解决这个问题的呢?区块链同样引入了第三方来充当记账者,虽然Alice和Bob都不信任记账者,但系统会想尽办法来保证记账者的诚实性。

但是到了闪电网络,请注意,这里再也没有一个第三方记账者了!Alice和Bob又重新拿回了他们的小本子,各自记起了各自的账本。问题在于怎么保证他们都诚实记账!

1.双方支付通道:如何使记账的双方保持诚实?

这是一个非常有意思的问题,使得我们的第一步——建立“双向支付通道”,变得难以维持了。那么,Alice和Bob这样两个完全不信任对方的陌生人,究竟该如何在没有主链矿工记录的情况下,相互转账交易?

作为铺垫,我们需要讲解两个概念,哈希时间锁定和哈希密钥锁定。首先是哈希时间锁定,这是在交易脚本里面设置时钟,必须要等设定时间之后,才能用地址的私钥签名解锁地址里的比特币。例如Alice收到了一笔2 BTC转账,但是对方设定了1000个区块之后才能解锁,所以Alice必须等待1000个区块之后才能用自己的私钥签署交易,花费其中的BTC转给Bob。

其次是哈希密钥锁定。哈希函数可以把一串输入转换成256位固定长度的输出,计算过程称为一次哈希运算,其中输入称为密文,输出称为密文的哈希值。哈希函数具有单向性,即从密文可以算出哈希值,但是从哈希值反向算出密文几乎是不可行的。计算的办法是暴力破解,逐一输入密文进行哈希运算,验证运算结果是否为要求的哈希值。基于这种特性,可以把一个密文的哈希值放入交易的输出当中充当哈希密文锁,也就是必须得输入该哈希值对应的密文才能解锁脚本中的比特币。例如,例如Alice收到了一笔2BTC转账,但是对方设定了哈希值锁定,所以Alice必须得到交易方的密文,同时配合自己的密钥签名才能签署交易,花费其中的BTC转给Bob。

有了这两个工具,让我们看看那群程序员天才们是如何构想出一个程序,使得互不相识的双方能够诚实记账的。

在原理的白话版我们已经讲过了关于通道的三个步骤:开启通道,通道内交易,关闭通道。

开启通道较为简单,Alice和Bob分别向多签地址1转入5个BTC。这是一个2/2地址,也就是必须两人都签名,此地址的比特币才可以转出去。

接下来是通道内交易,我们需要讲解Alice和Bob之间的两次交易才能完全明白双向支付通道的巧妙之处。第一次Alice需要向Bob支付1个BTC,第二次Bob需要向Alice支付1个比特币。

第一次交易的流程是,Bob首先在自己电脑的闪电网络软件上构建交易,如下左图所示。

Bob在构建交易时需要通过闪电网络软件的通信模块和Alice建立联系,获得Alice创建的密文的哈希值,然后把这个哈希值作为哈希锁放在自己构建的交易里。这笔交易Bob把10个比特币分别转给Bob控制的普通地址6个和另一个“多签地址2”4个BTC。

多签地址2是一个1/2地址,也就是两个条件有一个满足即可解锁。具体来说,需要Bob用自己的私钥和Alice的密文同时来解锁;或者Alice等待1000个区块后用私钥来解锁。如下图,这两个条件是双向支付通道的精髓所在,请先记住它,稍后分析中会讲设计的原因。

Bob构建完交易后会签名,然后把这笔未完成的交易以点对点方式发送给Alice,而不是广播到全网。显然,上述交易是对Bob有利的,一旦Alice签名并广播,Bob可以立即获得6个比特币,而Alice需要等到1000个区块之后才能拥有4个比特币。

这也就是上文提到的单方面“起诉离婚”会受到延时惩罚的技术实现细节。然而,这笔对Bob有利的交易的主动控制权却掌握在Alice手里,因为Alice不签名并广播的话,这笔交易暂时不会生效的。

在Bob创建这笔对自己有利的交易同时,Alice也创建了类似的一笔对自己有利的交易,两者是一种镜像。

这个过程相当于是Alice帮Bob在他的小本本上记了一笔账,这10个比特币Bob占6个,Alice占4个,同理Bob也帮Alice记账了。具体来说,就是Alice电脑里保存着Bob创建并签名的未完成交易,Bob保存着Alice创建并签名的未完成交易。两者合在一起,就完成了他们之间第一笔交易的记账过程,完整过程如下图。

这个过程并不需要互相信任,只需双方同时在线,建立联系并交换哈希值,再在各自的电脑里创建交易最后发送给对方。整个过程不需要经主链由矿工打包确认,所以非常快速并且没有手续费。也可以看到,任何一方都可以随时强制关闭通道,将自己占主动权的交易签名并广播全网,代价是1000区块延时。

但是这里仍然有一个问题,就是外界无法知道通道内的交易次序,因此无法鉴别通道关闭后广播出去的交易,是否为最终交易。例如,如果双方在这个通道里不断发生交易,最后导致Alice手中有9个,Bob手里有1个,但假设最后Bob强制关闭交易通道,并广播出去Alice有5个,Bob有5个,Bob便能凭空赚得4个。该怎么解决这个问题呢?

这次我们就要再次用到上文提到的哈希密钥锁了。

现在我们考虑过了两天,Bob要向Alice转1个BTC,即双方发生第二笔交易B。类似他们仿照上述第一笔交易操作进行第二次记账,此时应当是Alice 5个,Bob 5个。

一个最大的区别是建立第二笔交易B之前,两人会相互交换第一笔交易中的密文,即对方第一把锁的钥匙。这么做的目的在于作废第一笔交易记录A,使得两人都只能承认最新的交易记录B有效。

设想Bob在第一笔记录中拥有6个比特币,而第二笔记录变成了5个,那么如果他想作弊去签名并广播第一条记录呢?

结果是他将失去通道内所有的比特币!

因为Bob签名并广播了下图交易之后,Alice立马会获得4个BTC,同时Bob则必须等待1000个区块之后才能解锁6个BTC。然而,由于此时Alice已经获得了密文即钥匙1,所以Alice可以赶在Bob之前解锁这6个BTC。综合来看,只要Bob想要广播旧交易记录,他就会一无所有。

有了能作废旧账的保证,双方就可以在通道内反复任意多次交易,每次交易之后的状态都是资金池资金的划分比例的最新确认状态。

最后,关闭通道。如本文第二部分所讲,有两种方式关闭通道,一是单方面强制关闭,即某一方将自己控制的最新交易签名后广播出去即可。二是商议后关闭,此时双方再从最开始的多签地址构建一笔交易。

至此,我们明白了如何在无信任的条件下如何建立双向支付通道。

2.闪电网络:如何使路由节点保持诚实?

同样的,在建立闪电网络的时候,我们同样会遇到信任问题:Alice想转给Carol 1个BTC,需要经过Bob,但Bob会担心自己给Carol转1BTC后,Alice耍赖;同样Alice会担心如果先给Bob转了1BTC,Bob也耍赖不转给Alice。在传统的金融系统中,是由大型知名金融中介机构的信用提供保证的。但闪电网络中,并没有这样一个独立于交易者的第三方去提供信用担保。

闪电网络采用了一种HTLC(哈希时间锁定合约)完美解决了这个问题。

过程是这样的,第一,Carol会选择一个随机密文并运算得到其哈希值,再将此哈希值交给Alice。第二,Alice拿到哈希值后,会构建一笔转账给Bob的交易。这笔交易需要Bob拿到Carol的密文才能解锁,如果Bob在限定的时间内没有解锁成功,这笔钱则退回给Alice。第三,Bob从Alice处拿到哈希值,他也构建一笔转账给Carol的交易,Carol必须拿密文来解锁。第四,当Carol提供密文从Bob处获得1个BTC,Bob立马会拿密文从Alice处获得1个BTC,这就完成了从Alice给Carol转账的任务。

上述过程可以看作一个智能合约。故事类似于这样:A想经过B转账给C,那么C先给A一把锁,C有钥匙A有钱。A跟B说,你从C那里拿到了钥匙,我的钱就是你的了。B就拿着锁去找C,用钱跟C换钥匙,然后拿钥匙去换A的钱。如此一来,就实现了钱和锁从A到B再到C,钥匙从C到B再到A的一个流转。

当然,在实际操作过程中,Alice给Bob转账金额需要大于1个BTC,支付必要的路由费以激励Bob充当路由节点。

其次,要注意两笔交易之间的哈希时间长度设置,第二步时间必须长于第三步时间。如果Bob在Alice关闭交易之后拿到Carol的钥匙,他将无法找Alice拿回1个BTC。 到这里,我们已经明白了闪电网络中通过路由节点达成交易的技巧,最后一步只需把之前两步整合进交易即可,就不再赘述了。

闪电网络原理科普就到这里了,下一篇笔者会讲一下闪电网络对改善比特币扩展性的优势与不足,包含路由节点中心化,路由费等问题。

END

本文首发于微信公众号:碳链价值。文章内容属作者个人观点,不代表和讯网立场。投资者据此操作,风险请自担。

本文由永利集团官网发布,转载请注明来源

关键词: