天天看點

閃電網絡(Lightning Network)學習總結

一、背景

  • 比特币是一種加密貨币,因其去中心化、不可篡改等特性避免了傳統金融體系可能帶來的風險,受到了越來越多的關注。但是,随着比特币的發展,其設計之初的一些欠缺逐漸顯露出來,其中非常嚴重的問題就是可擴充性問題。
  • 支付網絡Visa,2013年就在其網絡上實作47000TPS,而比特币由于區塊大小的限制,最多支援7TPS。如果每次比特币交易我們平均用300位元組,并假設塊大小無限制,達到與Visa峰值47000TPS的交易量等資料容量意味着每十分鐘每比特币區塊将近8千兆位元組資料。持續下去,每年資料将超過400萬億位元組。顯然,在比特币網絡上獲得Visa級的交易能力是不可行的。沒有家用電腦有那樣的帶寬和存儲。
  • 要使用比特币實作遠高于每秒47,000筆交易,需要在比特币區塊鍊本身之外進行交易。2015年2月Joseph Poon和Thaddeus Dryja兩位技術宅在論文“The Bitcoin Lightning Network:Scalable Off-Chain Payments”中提出了基于比特币的鍊下擴充方案:閃電網絡。
  • 衆所周知,比特币網絡至是以是可靠的、值得信任的,一個很重要的原因是因為每筆交易都是公開在鍊上的(on-chain),需要網絡上節點的認可的,是以交易的任何方沒辦法反悔、抵賴。現在要鍊下交易(off-chain Transaction),沒有了區塊鍊網絡,怎麼保證交易的雙方不會反悔、抵賴?

二、技術原理和過程

2.1 LockTime & Sequence Number

2.1.1 LockTime

LockTime字段是Transaction級别的,每個Transaction有1個LockTime字段,是用來鎖定區塊高度,也就是當區塊到了設定高度,交易才可以被打包。由此看出它表示的是絕對時間,用的是整個區塊鍊的長度,或者時間戳來表達的。下圖為LockTime值的含義。

閃電網絡(Lightning Network)學習總結

2.1.2 Sequence Number

Sequence Number是Input級别的,1個Transaction有多個Input,每個都對應1個Sequence Number。它是交易可替換的标志,預設是UINT_MAX= 0xffffffff = 4294967295。它是一個相對時間,表示的是目前交易所引用的UTXO所在的塊,後面追加了多少個塊。意思是達到所追加的塊數後,交易開始打包。下圖為transaction的部分結構。

閃電網絡(Lightning Network)學習總結

中本聰最初設計兩個值的構想:

1、發送一筆交易時LockTime設定為非零某值, Sequence為非最大值;

2、在LockTime到達前,可以用新版本的交易代替舊版本的交易,Sequence大被認為是新的

2.2 如何建立雙向支付通道

2.2.1 通道的融資交易 Funding Transaction

閃電網絡的設計是:交易雙方想要建立雙向支付通道進行轉賬,首先需要最初的通道融資交易Funding Tx,是通過一個或者兩個通道交易的雙方為Funding Tx提供資金(如下圖:Alice和Bob各提供0.5BTC),資金鎖定在Funding Tx交易中,就像一個錢箱子一樣,并由交易雙方進行簽名,隻有交易雙方都同意拿出資金,才能從錢箱子裡拿出錢。

閃電網絡(Lightning Network)學習總結

2.2.2 承諾交易 Commitment Transaction

在未廣播的Funding Tx建立後,雙方簽署并交換初始Commitment Tx。這些Commitment Tx來自于Funding Tx的雙重簽名輸出。但是,隻有Funding Tx在區塊鍊上廣播。來自Funding Tx的所有其他交易尚未廣播,以防交易雙方希望更新其餘額。

閃電網絡(Lightning Network)學習總結

為了更新餘額,他們必須更新他們的Commitment Tx輸出值。如果Alice和Bob現在同意通道餘額為0.4給Alice和0.6給Bob,并建立一個新的Commitment Tx來反映這一點。

閃電網絡(Lightning Network)學習總結

從上圖中可以看出,Alice和Bob可以廣播任何一個Commitment Tx。但是這樣會産生新的危險:産生新的Commitment Tx後,資金較少的一方有顯著的動機廣播在Commitment Tx輸出中對其自身價值較大的交易。也就是說,在圖中,Alice為了自身的利益會廣播左邊的舊交易,這樣的話,Bob的資金将被竊取。顯然,在這種模式下無法建立支付通道。必須要知道是誰廣播了舊交易,并對其進行處罰,這就需要歸責。

歸責:在支付通道中,交易雙方合約承諾隻廣播最近的交易。任何對舊交易的廣播都将導緻違反合同,所有的資金都将作為罰款給予交易另一方。是以,交易雙方都需有一個唯一可識别的Commitment Tx:雙方必須簽署交易另一方負責廣播的Commitment Tx的輸入。由于一方擁有由另一方簽署的Commitment Tx版本,是以隻能廣播自己的Commitment Tx版本。

閃電網絡(Lightning Network)學習總結

這樣的模式可以識别出誰違反合約承諾,廣播了舊交易,但是還未做到對其進行懲罰。為了能夠實際執行合約承諾隻廣播最近的交易,有必要建構一個能夠撤銷一個交易的Commitment Tx。當交易一方廣播了舊交易後,延遲其獲得自己在通道中餘額的時間,以供交易另一方有時間證明其違反合約承諾,并對其進行懲罰。

2.2.3 可撤銷的序列成熟度合約(RSMC,Revocable Sequence Maturity Contract )

如何來延遲廣播交易的一方獲得自己餘額的時間呢?這就用到了2.1.2節介紹的Sequence Number。利用Sequence Number,在該交易UTXO所在塊後有Sequence Number數個塊确認才有效。在這段時間,交易另一方可以立即廣播一個證明的交易來撤銷廣播交易的一方獲得自己餘額的交易,對其懲罰。

閃電網絡(Lightning Network)學習總結

從圖中的Commitment Tx (C2a)可以看出,C2a的outputs有兩個,output1是Bob拿回自己在通道中的餘額,output0是一個RSMC。從RD2a來看,該交易隻有在所在塊後有Sequence Number數個塊确認才有效,也就是說,如果在這時間之前Bob拿出了Alice廣播舊交易的證明,那麼Alice就拿不到自己的餘額,但如果在這時間内Bob沒有拿出證明,Alice會在RD2a交易生效後廣播,拿到自己的餘額。

那Bob拿出的證明是什麼呢?違約救濟交易Breach Remedy Transaction。當雙方達成新的Commitment Tx 對(C2a/C2b)時,雙方将為新的Commitment Tx 簽署并交換簽名,然後使舊的CommitmentTx 無效;該無效宣告是通過**雙方簽署違約救濟交易Breach Remedy Transaction(BR1)**而發生的,BR1取代了可撤銷支付交易(RD1)。

閃電網絡(Lightning Network)學習總結

例子:如果Alice和Bob都生成了一對新的Commitment Tx (C2a/C2b):Alice支付給Bob 0.1BTC,并且取消了之前的Commitment Tx (C1a/C1b),并且後來Bob在區塊鍊上錯誤地廣播了C1b,那麼Alice可以從該通道中拿走Bob的所有餘額。Alice可以這麼做,因為Bob已經通過BR1向Alice證明了他永遠不會廣播C1b,自從他廣播C1b的那一刻起,Alice就可以把Bob在這個通道的所有餘額都拿走。

2.2.4 執行結算交易 (ES,Exercise Settlement Transaction)

如果交易雙方是合作的,希望拿回通道中的各自的餘額并關閉通道,那麼交易雙方可以用目前Commitment Tx中的餘額,并從Funding Tx中執行結算交易Exercise Settlement Tx(ES) 。

閃電網絡(Lightning Network)學習總結

執行結算交易的目的是減少區塊鍊上發生的交易數量且交易雙方能夠立即收到他們的資金,而不是一方等待撤銷支付交易RD生效。

由此,雙向支付通道就安全的建立好了。這個過程中,隻有在交易雙方最初建立通道時的Funding Tx是上鍊的以及在最後結算最終通道錢包餘額狀态是上鍊的。對于中間交易雙方互相之間的轉賬産生的餘額狀态改變都是放在鍊下的,避免了比特币鍊上交易效率的限制,實作雙方小額交易的即時支付。

2.3 如何跨多節點實作通道支付

上一節描述的雙向支付通道隻能實作通道内的安全交易。但是,不可能在閃電網絡所有節點間都建立雙向支付通道,那樣就構成了一個全連接配接網絡。是以,必須有一種方案來實作在沒有建立雙向支付通道的兩個節點間的安全交易,也即是要使用跨多個節點的通道網絡建構安全傳輸到最終目的地。該方案的核心就是哈希時間鎖定合約HTLC。

2.3.1 哈希時間鎖定合約 (HTLC,Hashed TimeLock Contract)

HTLC的目的是允許通過hash跨多個節點實作全局狀态。這種全局狀态由時間承諾time commitments和基于時間的資源無阻礙(通過公開原像)time-based unencumbering of resources via disclosure of preimages來保證。

HTLC是通過區塊鍊強制執行的與一個交易另一方的通道合約。在一個通道的交易另一方同意以下條款為一個哈希的時間鎖合約:

1、如果Bob可以從已知的哈希H中産生一個未知的20位元組随機輸入資料R,三天之内,Alice将通過向Bob支付0.1 BTC來解決合約問題。

2、如果三天過去了,那麼上述條款無效,清算過程無效,雙方不得試圖在三天之後結算和索賠。

3、隻要本合約雙方當事人同意,任何一方都可以(也應該)按照本合約的條款以任何方式選擇并提前終止本合約。

4、違反上述條款将使本合約中鎖定資金的最高罰款,作為保真保證金支付給未違反上述條款的交易另一方。

為了使示例更清晰,我們使用days表示HTLCs,使用block height表示RSMCs。

實際上,這種付款方式取決于接收者在一定時間内對R的了解。在此時間段之後,資金将被退還給發送者。例如:如果Bob在三天内知道R,那麼他可以通過廣播交易來贖回資金;Alice不能以任何方式扣留資金,因為當交易廣播在比特币區塊鍊上時,腳本傳回為有效。

在交易中,HTLC是Commitment Tx中的一個輸出:

閃電網絡(Lightning Network)學習總結

從概念上講,這個腳本從單個HTLC輸出有兩個可能的路徑。第一個路徑(在OP IF中定義)将資金發送給Bob,前提是Bob能夠生成R。第二條路徑是被贖回,使用 3 天timelock退款給 Alice。為期 3 天的 timelock 使用來自于交易的 LockTime 執行。

2.3.2 不可撤銷的 HTLC 構造 Non-revocable HTLC Construction

從腳本及下圖可以知道單個HTLC輸出有兩個可能的執行路徑。如果Bob能在3天内生成原像R,他就能執行路徑1,獲得Alice支付給他的0.1BTC。三天後,Alice可以廣播路徑2。當3天過去後,任何一個都是有效的。

閃電網絡(Lightning Network)學習總結

然而,此模型不能用于多個Commitment Tx,關閉HTLC是絕對必要的。因為為了讓Alice得到她的退款,她必須終止合約并收到她的退款。否則,當3天後Bob發現R時,他可能會偷走本該屬于Alice的資金。

對于不合作的交易對手,如果不将HTLC廣播給比特币區塊鍊,則無法終止HTLC,因為不合作的一方不願意建立new Commitment Tx。

2.3.3 鍊下可撤銷HTLC Off-chain Revocable HTLC

為了能夠在不向比特币區塊鍊廣播的情況下終止HTLC合同,需要在輸出中嵌入RSMCs,其結構與前面描述的雙向通道類似。

閃電網絡(Lightning Network)學習總結

以Alice廣播C2a的時間為起點為例,如果Bob沒有此後三天内提供前像R,那麼Alice有權收回這0.1個比特币。但是Alice廣播了C2a,Alice要拿回資金會比較波折。為此,Alice在C2a廣播三天後,廣播HT1a(HT1a的output包含了一個RSMC)。在HT1a獲得1000個确認之後,Alice再廣播HTRD1a,此時,Alice就可以從中擷取0.1個比特币了。值得注意的是,在Alice廣播HT1a之後,廣播HTRD1a之前,Alice與Bob可以協商達成一個新的花費交易來替代目前HTLC。

2.3.4 流程:A fully revoked commitment Tx and terminated HTLC

閃電網絡(Lightning Network)學習總結

上圖中,Commitment 3是最近的交易。

2.3.5 例子:Payment over the Lightning Network using HTLCs.

閃電網絡(Lightning Network)學習總結

Alice想向Eric轉賬1BTC, 因為Alice并沒有直接跟Eric建立通道,但是有一條到Eric的路徑:Alice——>Bob——>Carol——>Diana——>Eric。

首先Eric生成密鑰R,并将密鑰R的哈希H給Alice。Alice向Bob發起了一筆commitment Tx,一共1.003BTC,output指向持有Eric提供的密鑰R的收款人。因為Bob并沒有密鑰R,是以他轉而向跟他建立通道的Carol發起一筆commitment Tx,一共1.002BTC,這樣如果Carol能向他提供密鑰R的話,他轉可以獲得1.003-1.002=0.001個BTC, 因為Carol也沒有密鑰R,是以他向Diana發起另外一筆1.001BTC的commitment Tx,期望Diana能給他密鑰R,最後到達了Eirc,他提供了密鑰R,是以所有人都獲得了對應的commitment Tx,交易完成。

三、優缺點

3.1 優點

3.1.1 Scalability

比特币網絡将需要支援更高數量級的交易量,以滿足自動支付的需求。未來聯網裝置的增長需要一個機器對機器支付和自動微支付服務的平台。閃電網絡交易是在區塊鍊之外進行的,沒有授權的信任和所有權,允許使用者在其他裝置之間進行幾乎無限的交易。

3.1.2 Instant Payments

比特币将交易聚合成間隔10分鐘的區塊。人們普遍認為,在确認了六個區塊(約一小時)後,比特币上的支付是安全的。在閃電網絡中,支付不需要阻止确認,而且是即時和原子的。Lightning可以用于零售銷售終端,使用者裝置到裝置的交易,或任何需要即時支付的地方。

3.1.3 Micropayments.

小額支付的可能性可以打開新的市場。閃電使人們可以将資金發送到0.00000001比特币,而無需承擔保管風險。目前,比特币區塊鍊的最低輸出規模是比特币的數百倍,每筆交易收取固定的費用,這讓微支付變得不切實際。閃電允許使用實際的比特币交易進行最低限度的比特币支付。

3.1.4 Cross-Chain Payments.

Alice使用比特币,Bob同時使用比特币和x币,Carol使用假設的x币,Alice可以在不了解x币共識規則的情況下支付給Carol。

3.2 缺點

3.2.1 Complexity of channels.

理論上,閃電網絡的鍊下交易應該是無縫交易的,但是若付款者采取過于過于複雜的路線,不确定會發生什麼,通道太多,費用也會增加。跨多節點支付的路徑問題也是制約閃電網絡廣泛應用的瓶頸。

3.2.2 Routing concentration.

對于擁有大量資金的節點,大多數交易都将通過這些節點,會使得網絡進一步中心化,雖然這些中心并不能擷取重大的利益。

3.2.3 Economic fluctuations.

在閃電網絡中交易,交易雙方必須送出超過交易額度的資金,這樣才能使交易通道打開并有效的資金流動性。但是大量資金鎖定在在支付通道裡,意味者必須承受市場的波動。

四、參考文獻

[The Bitcoin Lightning Network_ Scalable Off-Chain Instant Payments.pdf](The Bitcoin Lightning Network_ Scalable Off-Chain Instant Payments.pdf)

lightning-network-presentation-sfbitcoinsocial-2015-05-26.pdf

lightning-network-presentation-time-2015-07-06.pdf

lightning-network.pdf

http://www.lightning.network/

https://www.cnblogs.com/dgutfly/p/10796024.html

http://www.sohu.com/a/302182618_489821

https://www.ucloud.cn/yun/24315.html

https://www.sohu.com/a/227799336_100137203

https://blog.csdn.net/chunlongyu/article/details/80417309

https://www.jianshu.com/p/05a298fbf88f

https://blog.csdn.net/mongo_node/article/details/85986365

https://www.cnblogs.com/dgutfly/p/10781174.html