1. 引言
闪电网络是一个去中心化的系统。闪电网络的卓越之处在于,无需信任对方以及第三方即可实现实时的、海量的交易网络。
闪电网络节点(Lightning node,简称为LN)为:
与Bitcoin主网进行连接和交互的软件,同时,也运行在闪电网络内部。
闪电网络节点不同于Bitcoin节点。Bitcoin节点必须验证链上的每笔交易,而Lightning node仅需验证与其直接交互的交易。
仅有Funding Tx和final funds settlement会记录在比特币主网上:
- Funding Tx 链上交易:创建支付通道
- Settlement Tx 链上交易:当用户想要settle the balance sheet时,可发起更新比特币主网账号余额。
闪电网络内的交易都统称为Commitment Tx,用于维护通道内双方的balance。只要Alice和Bob需要,通道可一直保持开启状态。Commitment Tx本身并不会影响Alice和Bob各自在比特币主网上的Bitcoin balances。只有当通道关闭时,将触发Settlement Tx 同时产生交易费。当有Settlement Tx时,闪电网络钱包中各节点的Bitcoin将同步记录在Bitcoin主网上。
2. RSMC及建立通道
闪电网络内单个节点无法发送支付,需与其他节点开通支付通道。
闪电网络的通道本质是比特币链上的一个2-of-2多签钱包。
开通通道时需构建RSMC。所谓RSMC,全称为Revocable Sequence Maturity Contract(序列到期可撤销合约)。RSMC通过巧妙的设置Commitment Tx的多重签名输出,以及sequence的延迟入链形成惩罚窗口期,解决了在微支付通道中的币单向流动问题。
+-------+ +-------+
| |--(1)--- open_channel ----->| |
| |<-(2)-- accept_channel -----| |
| | | |
| A |--(3)-- funding_created --->| B |
| |<-(4)-- funding_signed -----| |
| | | |
| |--(5)--- funding_locked ---->| |
| |<-(6)--- funding_locked -----| |
+-------+ +-------+
- 1)Alice发起open_channel请求,在请求中说明:所锚定的目标链、计划为该通道内充入的资金、Alice向比特币链上创建2-of-2钱包公钥等信息。
- 2)Bob回应accept_channel:Bob用于2-of-2钱包的公钥、Funding Tx固化的确认区块数等。
- 3)至此,Alice、Bob已锁定了通道参数。假设各自出0.5BTC,Alice、Bob通过funding_created相互构建待提交上链的Funding Tx,注意此时双方均未对Funding Tx签名。【为确保Funding Tx上链之后,Alice、Bob仍能将各自的钱赎回。】【事实上是先不交换C1a/C1b的签名,而是先对RD1a/RD1b交换签名后,再交换C1a/C1b的签名。】
- 3.1)Alice构造Commitment Tx:C1a和RD1a,并交给Bob签名。C1a的第一个output为多重签名地址——需要Alice的另一把密钥Alice2和Bob的2/2多重签名,且只有C1a上链达sequence个区块确认后才能被花费;C1a的第二个ouput为B 0.5BTC,当C1a上链后可立即被花费。
- 3.2)Bob构建Commitment Tx:C1b和RD1b,并交给Alice签名。C1b和RD1b的结构与C1a、RD1a对称。
- 4)当Alice、Bob双方均完成对Commitment Tx的签名并交换之后,再funding_signed各自对Funding Tx进行签名并交换,再将该Funding Tx提交上链。
- 5)Alice将双方签名的Funding Tx提交到比特币主链上。Alice、Bob均监听主链,等待达到要求的区块确认数后,相互发送funding_locked。
当相互收到funding_locked之后,通道创建完成。
C1a, C1b两笔交易花费的是同一个output(Funding Tx的output),故这两个交易只有一个能上链。若Alice广播C1a,则Bob立即拿到0.5BTC(C1a的第二个输出),而Alice需要等C1a得到1000个确认,才能通过RD1a的输出拿到0.5BTC。另一方,若Bob广播C1b,则Alice立即拿到0.5BTC,Bob等待C1b得到1000个确认,才能通过RD1b拿到0.5BTC。也就是说,单方广播交易终止合约的那一方会延迟拿到币,而另一放则立即拿币。
3. 通道内交易更新
Alice和Bob各自0.5BTC的余额,此时Alice从Bob处购买了一件商品,价格为0.1BTC,那么余额应该变为Alice 0.4BTC,Bob 0.6BTC。于是创建新的Commitment Tx,对于Alice来说是C2a 和RD2a,对于Bob来说是C2b和RD2b,过程与上面类似。
1)创建Commitment Tx C2a/C2b,但是此时并不交换对C2a/C2b的签名。
2)双方都对对方的Revocable Delivery transaction (RD2a/RD2b) 签名,并交换相应的签名。
3)当双方都有对方已签名的Revocable Delivery transaction之后,双方会交换对C2a/C2b的签名。
4)此时C1a/C1b和C2a/C2b都可广播。为了使C1a/C1b失效,双方会交换对之前commitment C1a/C1b 的Breach Remedy Transaction (BR1a/BR1b) 签名。当Breach Remedy Transaction (BR1a/BR1b) 签名完成交换后,通道状态变为了C2a/C2b,且balance也commit了。【即只有收到BR1a,Bob才发货。只有收到BR1b后,Alice才确认收货。】
由于任意已签名的Commitment Tx都可广播上链,且仅有一个可成功广播,因此有必要防止old Commitment Tx被广播到链上。此时两个状态均是有效的,那么最核心的问题来了,如何才能彻底废弃掉C1a和C1b呢?
RSMC采用了一个非常巧妙的方法,在C1a的第一个输出中,采用了Alice2和Bob的多重签名,Alice将Alice2 的私钥交给Bob,即表示Alice放弃C1a,承认C2a。
Alice交出Alice2的私钥给Bob,那么Bob就可以修改RD1a的output给他自己,形成新的交易BR1a。若Alice破坏规则,在存在C2a的情况下依然广播出C1a,那么Alice的惩罚就是失去她全部的币。Alice交出Alice2的私钥,或者对交易BR1a进行签名(并发送给Bob),两者是等同的,都是对C1a的放弃。
反之亦然,Bob交出Bob2的私钥给Alice即意味放弃C1b,而仅能认可C2b。
引入sequence的目的是,阻止后续交易上链(RD1a),给出一个实施惩罚窗口期,当发现对方破坏规则时,可以有1000个块确认的时间去实施惩罚交易,即广播BR1a代替RD1a。若错过1000个块时间窗口,则无法再实施惩罚了(RD1a可上链了)。
4. HTLC及路由支付
路由支付的核心技术为HTLC。HTLC解决了币跨节点传递的问题。HTLC为Commitment Tx中的一个output,具有如下属性:
- Hashlock:只有正确的收款方知道该hash值的preimage,可保证正确的收款方可收到款项。
- Timelock:time lock应根据路由时间递减设置,一方面可保证中间的路由方可在其上游time lock到期前收到垫付的资金;另一方面,当无人可在设置的timelock期限内提供正确的preimage,则可将其支付出去的金额收回。
disclose R 拉取资金的流程为:Step 4、5、6。
当委托路径有人断开时,其交易对手方将负责将当前的Commitment Tx state广播上链。只有失败的无响应的通道状态才会在链上关闭,而所有其他通道将继续根据通道内novation机制更新其Commitment Tx。因此,交易费的问题仅发生在直接通道的交易对手方。
Diana, when the chain has reached her, immediately retrieves her funds, using the secret and revealing it to Carol. Carol also wishes to get her money back from Bob but he does not respond so, to avoid risk, she closes the channel, sending the last commitment transaction (the HTLC contract previously sent by Bob) into the blockchain and, with the help of the secret, retrieves the funds. In this case, Bob still has three days to surface and took his money from Alice (as the transaction has made it to the blockchain, he can easily find it and see the R). Otherwise, at the expiration of the timelock, she will be able to retrieve all her money.
It can be seen that if a participant for some reason leaves the system, he or she is the only one who risks losing funds, while all other participants of the chain are safe.
为了实现路由支付,由收款方向Alice提供Hash®,其中R为仅收款方知道的某秘密preimage R。Alice需要在Commitment Tx中额外引入一个HTLC output:
为了实现可在不广播上链的情况下在链下关闭HTLC合约,需在output中嵌入RSMC。
Bob向Alice证明其知道R,链下关闭HTLC:
5. 关闭通道
关闭通道的方式有3种:
- 1)最好的方式——合作关闭通道:Alice和Bob同时同意关闭通道,双方发起Settlement Tx交互签名,并将该Settlement Tx广播上链。【双方均可快速收到相应的资金。】
合作关闭通道可使Alice、Bob双方以更低的手续费立刻获取各自的资金。
- b)不好的方式——单方面关闭通道:非恶意原因一方不响应,另一方可广播最新的Commitment Tx上链。【广播的一方需等待Revocation Delivery transaction为valid,才能取回资金;非广播的一方可快速取回资金。】
- c)最不好的方式——revoked transaction close:某一方试图作弊,广播过期的Commitment Transaction。另一方在预设的区块数(如1000个区块)内发现了该作弊行为,则可通过广播Breach Remedy Transaction来获得通道内的所有资金。【作为惩罚,作弊的一方将失去其在通道内的所有资金,发现作弊行为的非作弊方可获得通道内的所有资金。】
6. 闪电网络中的在线要求
为了发送和接收支付,比特币闪电网络中的节点必须随时保持在线。
离线会在闪电网络中产生一系列问题。如支付通道中的一方有可能关闭该通道,并在另一方不在的情况下将资金存入口袋。这就是所谓的欺诈通道关闭。对于关闭通道有一个异议期限,但是若其中一方长期缺席可能导致该期限过期。