简介
最近,闪电网络的火炬传递活动,让闪电网络一下子从理论阶段,跃升成实践。作者年前在同事的分享中,学习了闪电网络的原理,感觉设计确实很巧妙,一旦大规模应用,能让btc实现秒级支付,真正让btc的世界货币梦想come true。本文,会介绍闪电网络的设计原理,主要涉及多重签名地址、 RSMC、HTLC几大概念。
基本原理
假如Bob和Alice经常有业务来往,结算方式是btc。但是,btc的区块打包时间要10min,一般需要确认6块后,认为交易不可回滚。也就是他们每次交易需要等至少1h,才能确认交易是否成功。对于实时性要求很高、交易频率很高的场景,显然1h太长了。这时,就有人提出,能不能单独为Bob和Alice建立一个通道,他们之间的频繁交易先记账不上链,等想结束业务时再结算上链?闪电网络就是在这个大背景下横空出世的。
闪电网络的架构图,大致如下:
就拿Bob和Alice之间的交易步骤来说:
1. 首先,需要构建Bob和Alice之间的双向交易通道
2. 其次,需要解决Bob和Alice在通道中交易面临的信任问题
3. 若再来个第三方,比如Jack,如何实现三人之间的交易
接下来,我会根据构建步骤,来详细述说闪电网络的架构和原理。
构建双向交易通道
构建双向通道,通俗点讲,就是Bob和Alice各出一些btc,比如5btc,将其存入他们两人控制的2-2多重签名地址。但是,Alice和Bob是不相互信任的。Bob怕自己转btc之后,Alice不转btc也不提供私钥帮助Bob解锁币,使得资金陷入死循环。那么,我们需要在不相互信任的前提下,构建双向交易通道。其构建方法如下:
1. Alice使用公钥A1,Bob使用公钥B1,生成两个2-2多重签名地址:A1B1、B1A1
2. Alice构造一笔交易,转账给B1A1地址5btc,这笔交易没签名也没广播
3. Alice再构造一笔交易1,发起地址是B1A1,目的地址是比特币地址A1。这笔交易如果被广播,需要经过1000个块才能被打包
4. Alice将交易1单独发给Bob,请Bob对交易签名。Bob发现这笔交易只是Alice将自己的币转回给自己,对Bob没影响,Bob会签名并将交易1发回给Alice
5. Alice收到Bob签名后的交易1,对用B1公钥签名的交易使用A1签名测试,测试成功
6. Alice此时,可以放心将第2步的交易广播,即便Bob不合作,Alice也能拿回自己的币。这一步完成后,B1A1地址收到Alice充值的5btc
7. Bob也用相同的操作,往B1A1地址充值5btc,且保留有A1签名的交易2,随时可以赎回自己的币
8. 虽然B1A1地址收到了各自的钱,但是Bob和Alice手上还有交易1和交易2,随时会有毁约的风险。因此,最后一步需要Bob和Ailce共同发起一笔交易,将B1A1地址里的10btc,转移至A1B1地址里,至此完成了闪电网络双向通道的构建
点对点交易
接上一步,Bob和Alice建立了双向交易通道,接下来就可以交易了。但是,Bob和Ailce依旧要面临信任的问题。接下来介绍的RSMC技术,就是为了解决点对点交易时的信任问题。
RSMC
RSMC(Recoverable Sequence Maturity Contract),定义了闪电网络交易时的基本工作方式。它提供了一种无须信任的方法,能够准确的记录通道内Bob和Alice的资产分配情况。例如,初始时Bob和Alice各有5btc;经过一次交易,通道内资产分配变更为Alice: 3btc、Bob: 7btc;再经过一次交易,通道内资产分配变更为Alice: 4btc、Bob: 6btc。RSMC技术能够做到以下两点:
1. Alice和Bob之间交易时,能在双方互相不信任、交易不广播的情况下准确记录资产分配
2. Alice和Bob每进行一次新交易,旧交易能被废除,以最新交易为准来进行资产分配
下面,我会详细介绍RSMC实现的技术细节。
沿用上面的结果,多签地址A1B1拥有10个btc,Bob和Alice各占一半资产,作为交易的启动资金池。在后面的交易过程中,会使用很多btc地址,其中,Alice拥有A1、A2、A3...,Bob拥有B1、B2、B3...同时,也会使用很多多重签名地址,比如B2A1、A1B2...
下面,将详细介绍Bob与Alice的交易步骤,第一次交易资产分配变更为Alice: 3btc、Bob: 7btc:
1. Alice构造交易1,发起地址是A1B1,目的地址有两个:A1B2地址得到7btc,A1地址得到3btc
2. Alice构造交易2,发起地址是A1B2,目的地址是B1得到7btc。但是,这笔交易广播出去,需要1000个块之后才能被打包
3. Alice使用A1私钥对交易1和交易2签名,并不广播,私下发给Bob
4. Bob收到交易1和交易2,用自己的私钥B1、B2校验交易的有效性
5. Bob同样像Alice一样,构造交易3,发起地址是A1B1,目的地址有两个:B1A2地址得到3btc,B1地址得到7btc
6. Bob构造交易4,发起地址是B1A2,目的地址是A1得到3btc。但是,这笔交易广播出去,需要1000个块之后才能被打包
7. Bob使用B1私钥对交易3和交易4签名,并不广播,私下发给Alice
8. Alice收到交易3和交易4,用自己的私钥A1、A2校验交易的有效性
下面,来解释下,为什么Alice和Bob构造这四笔交易之后,就能使得在相互不信任的情况下,依旧能顺利的进行交易。
首选,Alice构建了交易1、2,交易1使得Alice立马就能获得3btc;交易2即便签名,Bob也需要等待1000个块打包后,才能拿到属于自己的7btc。在这期间,Bob如果有任何违约行为,Alice也有足够时间采取措施。因此,Alice构造的两笔交易明显偏向自己,但是需要Bob的签名,交易生效的权力在Bob。Bob同时也构造两笔这样偏向自己的交易,控制权同样在Ailce手上。第一次交易,就在这种互相制约的情况下,完成了资产的重新分配。
假如Alice和Bob继续进行交易往来,资产分配情况又变成了Alice: 4btc、Bob: 6btc。同样,他们会依照上面的步骤,再构造四笔交易。关键一点,为了废除旧交易,Alice和Bob需要交换A2、B2地址的私钥。接下来,我们来看看这么做的好处。
假如,Bob觉得之前能得到7btc,现在只剩下6btc了,他想违约广播旧的交易。那么,这种机制下违约会有什么后果呢?Bob将损失全部的btc!!!首先,Bob只能广播交易1,Alice瞬间得到3btc;接下来,Bob广播交易2,等待1000块后才能得到7btc。但由于Alice拥有A1和B2的私钥,她马上可以动用A1B2地址里的7btc,在交易2生效之前,立即转账给自己。这种骚操作使得Alice将获得全部的10个btc,Bob将分文不剩。因此,在这种巧妙的设计下,闪电网络能做到在不相互信任、交易不上链的情况下,依然可以顺利的完成快速交易。
Alice和Bob如果想结束闪电通道怎么办?和平的情况下,各自为对方签名最新交易,广播出去立即得到币。当一方想强制结束通道时,只需要签名有利于对方的两笔交易,对方立即得到币,而强制结束的一方需要等待1000个块后,才能获得自己的币,这也就是强制结束的惩罚。
闪电网络交易
上面说的都是Alice和Bob之间的点对点交易细节,倘若Jack也想加入他们的交易,那Jack和他们也需要建立通道吗?如果人人都建立点对点通道,成本是非常高昂的。闪电网络会通过整个点对点网络,寻找最短路径,通过路由节点完成交易。比如Jack只和Bob建立了点对点通道,而希望和Ailce进行交易,那么就需要Bob充当路由节点辅助交易的进行,而实现这个功能的技术就是HTLC。
HTLC
HTLC(Hashed Timelock Contract)允许Alice和Bob之间达成协议,协议将锁定Alice1btc,在时刻T到来之前,如果Bob能向Alice提供一个答案A,使得A的哈希等于实现约定的值H(A),Bob就能获得这1btc;如果超时后,Bob未能提供答案,则这笔钱自动归还给Alice。
我们举个例子来看HTLC如何用于闪电网络的交易的。首先,Jack希望转账1btc给Alice,然而和Alice并没有建立通道,需要通过Bob路由。可行的操作:Jack转账1btc给Bob,Bob再转1btc给Alice。但是,如何防止Bob收到钱作恶呢?除去点对点转账交易时候,依赖RSMC技术的约束,我们还需要通过HTLC技术对三方的行为进行约束,具体步骤如下:
1. Alice生成答案A,将Hash(A)发给Jack
2. Bob和Jack约定交易1,在T1时间之前,提供给Jack答案A,Jack会转账1btc给Bob
3. Bob和Alice约定交易2,在T2时间之前,提供给Bob答案A,Bob会转账1btc给Alice
4. 执行交易2,Bob支付Alice1btc,得到答案A
5. 执行交易1,Bob提供答案A给Jack,得到1btc
至此,Bob作为中间人,帮助Jack和Ailce完成转账。注意,T1时间要大于T2时间,这样Bob在拿到答案A后,才有充裕时间从Jack那里拿回币。
后记
本文介绍了闪电网络的基本原理,及其相关的核心技术,读完本文,应该能对闪电网络的架构有大体的了解。由于,闪电网络是基于比特币隔离验证技术的实现,后面将会为大家介绍隔离验证的原理,以及隔离验证解决的实际问题,尽请期待。
参考文献
白皮书:https://lightning.network/lightning-network-paper.pdf
解释多重签名:https://blog.csdn.net/lianquan_cn/article/details/81634897
详细解释rsmc:https://blog.csdn.net/lianquan_cn/article/details/81736392
大体解释闪电网络框架:https://www.jinse.com/bitcoin/317833.html
大体解释htlc和rsmc:https://www.8btc.com/article/92887