下圖為RSMC交易的結構圖,左側為Alice的視角,右側為Bob的視角,中間Funding Tx為共同可見。圖中帶<>號的簽名表示已經簽名成功,不帶<>號表示待簽名。
1.雙方各拿出0.5BTC,構建Funding Tx(資金池),輸出為Alice和Bob的2/2多重簽名。此時,Funding Tx未簽名,不能廣播進主鏈。
2.Alice構造Commitment Tx:C1a(Commitment Tx 1a)和RD1a(Revocable Delivery 1a),並交給Bob簽名。C1a的第一個輸出為多重簽名地址,Alice的另一把私鑰Alice2和Bob的2/2多重簽名,第二個輸出為Bob 0.5BTC。
3.RD1a為C1a第一個輸出的花費交易,輸出給Alice0.5BTC,但此型別交易帶有sequence,作用是阻止當前交易進塊,只有前向交易有sequence個確認時才能進塊
4. Bob構造Commitment Tx:C1b(Commitment Tx 1b)和RD1b(Revocable Delivery 1b),並交給Alice簽名。結構與C1a、RD1a是對稱關係。
5. Bob對C1a和RD1a進行簽名,並將簽名給Alice;同理,Alice對C1b和RD1b簽名,完成後給Bob。此時,由於並未對Funding Tx進行簽名,任何一方均無法作惡,任何一方也不會有任何損失。
6. 雙方均完成對commitment Tx的簽名並交換後,各自再對Funding Tx進行簽名,並交換。此時,Funding Tx是完整的交易,可以廣播進入主鏈。
上述就是建立RSMC的全部過程。
交易雙方先預存一部分資金到微支付通道里,初始情況下雙方的分配方案等於預存的金額。每次發生交易,需要對交易後產生資金分配結果共同進行確認,同時簽名把舊版本的分配方案作廢。任何一方需要提現時,可以將他手裡雙方簽署過的交易結果寫到區塊鏈網路中,從而被確認。
任何一方在任何時候都可以提現,提現時需要提供一個雙方都簽名過的資金分配方案。在一定時間內,如果另外一方拿出證明表明這個方案已經被作廢了(非最新的交易結果),則資金罰沒給質疑方;否則按照提出方的結果進行分配。罰沒機制可以確保沒人會故意拿一箇舊的交易結果來提現。
另外,即使雙方都確認了某次提現,首先提出提現一方的資金到賬時間要晚於對方,這就鼓勵大家儘量都在鏈外完成交易。透過 RSMC,可以實現大量中間交易發生在鏈外。
交易更新
Alice和Bob各自擁有0.5BTC的餘額,此時Alice從Bob處購買了一件商品,價格為0.1BTC,那麼餘額應該變為Alice 0.4BTC,Bob 0.6BTC。於是建立新的Commitment Tx,對於Alice來說是C2a 和RD2a,對於Bob來說是C2b和RD2b,過程與上面類似。
此時兩個狀態均是有效的,那麼最核心的問題來了,因為C1a和C1b已經是處理過的交易了,C2a和C2b才是最新交易狀態,如何才能徹底廢棄掉C1a和C1b呢?RSMC採用了一個非常巧妙的方法,在C1a的第一個輸出中,採用了Alice2和Bob的多重簽名,Alice將Alice2的私鑰交給Bob,即表示Alice放棄C1a,承認C2a。同樣的邏輯,Bob將Bob2的私鑰交給Alice,即表示Bob放棄C2a,承認C2b。
Alice交出Alice2的私鑰給Bob,那麼Bob就可以修改RD1a的輸出,將RD1a中輸出給Alice的BTC輸出給他自己,形成新的交易BR1a(Breach Remedy 1a)。若Alice破壞合約,在存在C2a的情況下依然廣播出C1a,那麼Alice的懲罰就是失去她全部的幣。Alice交出Alice2的私鑰,或者對交易BR1a進行簽名,兩者是等同的,都是對C1a的放棄。反之亦然,Bob交出Bob2的私鑰給Alice即意味放棄C1b,而僅能認可C2b。
引入sequence的目的是,阻止後續交易(RD1a)進入主鏈,給出一個實施懲罰視窗期,當發現對方破壞合約時,可以有1000個塊確認的時間去實施懲罰交易,即廣播BR1a代替RD1a。若錯過1000個塊時間視窗,則無法再實施懲罰了(RD1a進入主鏈了)。
交易關閉
關閉RSMC,直接按照最終的餘額構造出一個Commitment TX即可,例如輸出為Alice 0.1BTC,Bob 0.9BTC,無需再設定多重簽名,構造懲罰交易等。
閃電網路——HTLC
上面我們講述了閃電網路中合約RSMC是交易雙方建立一個雙向的微支付通道,那閃電網路中的節點是否需要為每一位交易夥伴建立新的支付通道?
答案是不需要。
HTLC可以保障任何兩個人之間的轉賬都可以透過一條支付通道來完成。
HTLC簡單理解就是限時轉賬,透過智慧合約,雙方約定轉賬方先凍結一筆錢,並提供一個雜湊值,如果在一定時間內有人能提出一個字串,使得它雜湊後的值跟已知值匹配(實際上意味著轉賬方授權了接收方來提現),則這筆錢轉給接收方。透過HTLC可以在閃電網路任意節點之間安全轉移價值而無需信任中介節點。
下面舉例說明Alice如何使用HTLC透過閃電網路轉賬給Dave一筆資金。
假設Alice和Dave之間並未建立一個微支付通道但可以透過閃電網路建立起一條Alice和Dave之間的臨時支付路由通道。
首先雙方透過其他通道(綠色線條所示),Alice告知Dave要轉 0.01 BTC 給Dave,Dave產生一個隨機數R,以及對R進行雜湊運算得到H,Dave保留R並把雜湊值H傳遞給Alice。
Alice和Bob之間有已經建立的微支付通道,Alice可以產生一個HTLC合約並連同H送給Bob (紅色虛線所示),該合約的意思是:如果Bob能夠在合約過期(兩天)內提供一個H值對應的隨機數R值,則合約規定的 0.01 BTC就歸Bob所有,如果合約過期,則返回合約金額給Alice。同理,Bob和Dave之間也可以建立類似的HTLC合約,區別在於合約過期時間是遞減的。至此,紅色虛線所示的Alice到Dave之間支付路由通道就建立了。
履行HTLC合約的過程也相當簡明,由於Dave持有H對應的隨機數R,就可以在HTLC合約(Bob和Dave間的合約)過期前,透過把R傳遞給Bob以得到HTLC合約的資金。同理,Bob把得到的R傳遞給Alice以得到資金。
至此,整個HTLC交易完成並關閉。
閃電網路整合RSMC和HTLC兩種機制,可以讓任意兩個節點之間的交易都在鏈下完成。在整個交易中,智慧合約起到了中介的重要角色,而區塊鏈網路則確保最終的交易結果被確認。
總結
閃電網路透過將大量的交易放在鏈下完成,大大降低了主鏈負荷,從而讓主鏈快如閃電。然而,從其工作原理分析,閃電網路也會帶來一些問題。
(1)如果通道中任一節點反應遲鈍,使用者可能要等上幾個小時才能關閉支付通道,並透過另一種途徑重新傳送資金
(2)沒有離線支付: 使用者無法支付不線上的人
(3)不適合大額支付: 即使一條經由各種支付通道的路線可能存在,但通道中其它節點多重簽名錢包中的資金可能不足以轉移大筆資金
(4)集中化: 閃電網路可能會鼓勵支付樞紐的集中化(類似於礦工集中化)。閃電網路包含百萬級別的支付通道,通道內鎖定了大量的資金,特別是大的中介人通道容易成為系統性攻擊的目標。
沒有一種技術可以解決所有問題,雖然閃電網路仍然存在一些問題,但不可否認閃電網路是一個創新性的設計。對於閃電網路的研究仍在繼續,相信未來閃電網路的應用會更加完善。
參考文獻
1. Joseph Poon, Thaddeus Dryja, "The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments"
2. 知乎使用者,連結:https://www.zhihu.com/question/46515457/answer/111101523
3. 閃電網路. 區塊鏈技術指南
4. 比特幣閃電網路介紹,連結:https://segmentfault.com/a/1190000014120112
5.關於閃電網路,你應該知道的7件事,連結:https://36kr.com/p/5144019.html
更多區塊鏈資訊:www.qukuaiwang.com.cn/news