5.3 閃電網路的設計

xiaohuanglv發表於2018-08-25

閃電網路(Lightning Network)是一個點對點對等網路,完全去中心化的數字貨幣微支付系統。這個微支付系統的理念適用於比特幣、以太幣和萊特幣這樣的數字貨幣,針對以太 坊上的以太幣,有一個叫雷電網路的微支付系統,原理類似。閃電網路的亮點是它完全基於買賣雙方的獨立雙向支付通道,不需要任何形式的押金擔保,也不需要任 何信任的第三方即可實現實時的海量交易。

閃電網路在實際應用中一般先開闢一個支付通道,並提交給一個微支付網路,這個微支付網路能通過多重簽名的方式確保價值網路安全的單向流動。

最重要的一點是閃電網路實際通過微支付的通道,將交易剝離出比特幣區塊鏈來進行,而且剝離主鏈的交易次數是無限的,這從根本上解決了大量交易都放在比特幣主鏈上進行,從而造成比特幣效能嚴重降低的問題[1]

閃電網路的本質其實就是智慧合約的應用,具體來說是RSMC(Revocable Sequence Maturity Contract,序列到期可撤銷合約)以及HTLC(Hashed Timelock Contract,雜湊時間鎖定合約),基於智慧合約建立一系列相互連線的雙向支付通道。從這個層面來說,閃電網路的應用並不僅限於比特幣網路,它可以是 任意加密數字貨幣網路,只要這些網路能支援需要的智慧合約即可,包括上述介紹的側鏈。只要有需要,也可以建立面向側鏈的閃電網路支付通道,我們看以下示意 圖:

image.png

如圖所示,閃電網路的物件導向是不限制的,只要雙方能建立起支付通道就沒有問題,由於需要智慧合約的支援,因此對於比 特幣這種自定義指令碼程式設計能力有限的系統,需要增加一些必要的操作指令,同時由於閃電網路在配合使用的時候,需要經常開啟和關閉支付通道,這會加劇原本就擁 堵的比特幣網路,因此如果比特幣系統能夠良好地實現隔離見證或擴容,那對於閃電網路的真正落地使用能起到很好的促進作用。大家在查閱一些資料的時候,會經 常看到閃電網路與隔離見證的字眼,需要注意的是,隔離見證並不是閃電網路實現的必要條件,只不過一定程度上可以簡化閃電網路的設計。

我們現在解釋一下RSMC的機制。“序列到期可撤銷合約”,這個名詞初看起來,很難明白是什麼意思,我們來舉個例 子,閃電網路是通過支付通道來進行收支業務的,在通道建立的初期會記錄一個初始的資金分配方案,這個資金從哪來呢?比如Alice與Bob之間由於雙方的 業務關係需要長期頻繁轉賬,而且每次轉賬也都是小額,為了方便,他們打算平時先不進行實際的轉賬,而是先記個賬,到一個時間後再來算個總賬。於是他們共同 拿出一筆錢開設一個基金賬戶,假設Alice和Bob都拿出50,則初始的分配方案就是Alice為50,Bob也為50,這個通道的設立會記錄在比特幣 區塊鏈上。隨著業務的發展,分配開始發生變化了,Alice支付了10給Bob,此時最新的分配方案就變成了Alice是40而Bob是60,雙方共同籤 名作廢了之前的分配方案,更新了最新的餘額分配,不過這份新的分配方案並不會立即更新到比特幣的區塊鏈上,因為後續還有雙方的日常業務發生,因此只是記錄 在閃電網路區塊鏈上,果然不久,Bob又支付了30給Alice,此時新的分配方案變成了Alice是70而Bob是30,依此類推,在一段時間內,雙方 都只是在比特幣的鏈下(閃電網路中)頻繁地記錄著每一次新的餘額分配方案。這種方式其實跟我們平常在一家飯店訂餐或者訂購鮮花等都很類似,我們為了方便往 往也會先預交一部分基金,為了信用保障,可能會委託一個第三方(比如某個支付平臺、預訂平臺等)託管這個基金,一段時間後,大家簽字認可發生的交易,然後 一次性做一個真正的結算。

那麼,如果到一個點上,Alice需要用錢了怎麼辦?她可以向比特幣主鏈提交目前最新的分配方案要求結算,在一段 時間內如果Bob沒有反對,則比特幣區塊鏈就會終止通道,並且按照合約規則自動轉賬分配。如果在這個時間內Bob反對並且提交了一個證明,表明Alice 作弊,使用了一個雙方已經作廢的分配方案,則Alice會受到懲罰,資金將會罰沒給Bob。

再來看HTLC,也就是雜湊時間鎖定合約,這個其實是在RSMC的基礎上更復雜了一層,RSMC的做法相對簡單, 中間沒有太多的邏輯,就是一個簡單的餘額分配,只要滿足條件就沒什麼可說的,直接就是轉賬分配,而HTLC增加了更多的條件支付,比如Alice如果能在 2天內向Bob給出一個正確的口令R,則Bob就會支付0.2比特幣到Alice,逾期則自動退還到Bob賬戶。其實就是玩法更多了,當然實現也就更復雜 了。

微支付通道允許交易(支付)雙方反覆無限次地更新交易過程,並且不將中間交易資料寫到公有鏈上,而是將最後的結果上鍊,這樣允許交易對手雙方不需要建立信任關係,降低交易對手風險。中間的交易流程走的也還是真實的比特幣,各種換手交易和中間結果不真正上鍊。

一般情況下,交易過程是指交易雙方的餘額表從交易前狀態更新為交易後狀態。最核心的問題就是雙方對交易後狀態的共 同確認。一旦有交易一方反悔或不認賬,交易後雙方款項的餘額是處於不確認狀態的。微支付通道通過建立一個基於時間序列的類似多簽名智慧合約的交易方式來解 決這個彼此不信任的問題:

1)Alice和Bob同意建立一筆交易,但是暫時不在鏈上公告廣播;

2)雙方把幣打到一個地址上,並提供雙重簽名,同時一致同意交易前的餘額狀態並上鏈;

3)雙方同時也建立一筆退款交易,各自拿回自己的幣,同時這個退款交易也不上鍊,這樣雙方事後都可以修改餘額狀態;

4)當真正發生交易需要更新餘額表的時候,雙方都生成一個需要提交更新的餘額狀態表;

5)這樣微支付通道里的雙方交易餘額表無論在誰手上,都只能有兩種狀態,維繫舊的餘額狀態或承認新的餘額狀態;

6)任何一方反悔或者不承認新的交易狀態,對手方可以提交證據證明,並通過罰沒機制拿走雙方共同簽名的所有的幣;

7)交易一方通過提走交易之前共同簽名提供的幣,來懲罰反悔或不承認的一方以確保新的交易餘額狀態得到認可;

8)雙方都沒有爭議之後,在等待一段時間並獲得網路認可之後的餘額狀態上鍊存證,交易完成。

下面讓我們來看具體的交易例子和過程以充分理解閃電網路:Alice需要通過閃電網路給Bob和別的交易對手支付比特幣資產。

步驟1:建立微支付交易通道(雙向)

雙方同意共同建立一個微支付通道(Micropayment Channel),並往裡面放一部分訂金,我們假設Alice打算給Bob支付5個比特幣,而且Alice還想通過這個支付通道經常給Bob支付比特幣。 這樣雙方協商建立一個彼此對等的單向微支付通道,從而構成一個雙路微支付通道(就是說,Bob對比Alice做的事情,自己參照對應反向也做一個同樣的動 作來建立另一個單向通道)。

為了建立這個通道,Alice和Bob分別往一個2/2雙人簽名的地址傳送5個比特幣,我們暫時叫這個賬戶“訂金 交易”,未來所有的後續交易只能從這個“訂金交易”裡支付。兩個人都必須共同簽名,同時都生成一對自己掌握的針對這個“訂金交易”地址的密碼和私鑰,各自 保留自己的密碼,但是將自己的私鑰交給對方,算是各簽一半。這個時候的餘額狀態是:

·Address#1:0-Alice&Bob(5BTC);1-Bob(5BTC)

·Address#2:0-Alice(5BTC);1-Alice&Bob(5BTC)

Alice現在需要花錢,然後馬上就在“訂金交易”的基礎上建立一筆交易,這個交易我們暫時叫“承諾交易”,在這 筆“承諾交易”中,Alice把4個比特幣劃給自己,另外6個比特幣劃給Bob,然後這個交易發到新的兩人簽名的地址#3。Alice傳送“承諾交易”的 地址#3有點“詭異”,那就是Bob可以自己獨自解鎖拿走無論誰確認都是屬於自己的6BTC,但是前提條件是必須等待當前交易所在區塊鏈區塊之後的第 1000個區塊被開挖出來,因為這個區塊被加上了一把“時間鎖”。而對於Alice而言,她也可以獨自開啟地址#3的鎖,條件是Bob必須將自己的地 址#3的密碼和私鑰都交給Alice才行。(由於這個時候Alice拿不到Bob的密碼,所以無法動用地址#3的資金,哪怕是她共同簽名的4BTC。)

Alice對“承諾交易”簽名,但是她沒有廣播出去,而是將簽名後的交易交給Bob。與此同時,Bob也在做同樣的事情,在地址#4建立自己的“承諾交易”並簽名交給Alice不做廣播。這個時候的餘額狀態是:

·Address#3:0-Alice&Bob(4BTC);1-Bob(6BTC)

·Address#4:0-Alice(4BTC);1-Alice&Bob(6BTC)

在交換完所有的“承諾交易”以及各自的私鑰之後,各自簽名並將自己建立的“承諾交易”廣播並確保交易被廣播到區塊 鏈上,至此雙通道微支付通道正式開啟。由於“承諾交易”帶有時間鎖,當正常提交的“承諾交易”經過自己提交地址之後的第1000個區塊被開挖出來之後。交 易由閃電網路確認,最終#3的交易結果是:0-Alice(4BTC);1-Bob(6BTC)。#4的交易結果是:0-Alice(4BTC);1- Bob(6BTC)。

而這個時候任何一方都可以將對手私下交給自己已經“一半簽名”的交易進行簽名,並由自己廣播出去,這樣兩個“承諾交易”可能發生的情況是:

·#3:如果Bob拿到後提供自己簽名並廣播出去,需要等1000個區塊鏈才能開鎖拿到6BTC;

·#4:如果Alice拿到後提供自己簽名並廣播出去,也需要等1000個區塊鏈才能開鎖拿到4BTC。

以上一切正常,然後我們考慮一種情況,就是當Bob想再支付Alice一個比特幣的時候,雙方都想在原來的微支付通道上更新交易狀態,使得交易雙方的狀態達到5-5分成。然後雙方做如下幾步來達到:

1)雙方都再次建立“承諾交易”,分別是#5和#6,將5BTC簽名分配給自己,然後另外5BTC簽名作為2-2多重簽名的一部分加上時間鎖。雙方產生新的密碼和私鑰對,並保管好自己的密碼,然後完成自己的一半簽名並同私鑰交給對方。

2)Alice和Bob都要求必須將第一個“承諾交易”中產生的原來私藏的密碼交給對方。

在這個時候,雙方都可以將彼此簽了一半的新“承諾交易”簽名並提交確認。任何簽字廣播一方的對手都可以立即得到屬於自己的那一半比特幣。而簽字廣播人則等1000個區塊挖出後得到自己的一半,這樣,微支付通道的新的狀態得到更新。

但是,我們不能防止有人會作惡,那就是:例如Bob是否可以考慮僥倖想拿自己可控的#4的交易狀態再簽名廣播出去,這樣他拿到的將是最初的“承諾交易”#4裡的6BTC,以此獲利。

其實,現實情況是Bob並不能一次獲利,因為他的第一個狀態簽名密碼這個時候已經交到Alice手裡。這時如果 Bob把#4拿出來簽名再合法廣播出去,Alice首先馬上獲得應得的4BTC,Bob自己則需要等1000個區塊鏈後才能申請得到6BTC。可是Bob 如果想這樣欺詐是有風險和問題的,那就是這個時候Alice已經拿到Bob自己的密碼與私鑰,任何時候都可以開鎖獲得本來應該屬於Bob的6BTC,這樣 Bob就會偷雞不成蝕把米。同樣,Bob也擁有Alice的第一個密碼和簽名,Alice如果想造假丟擲之前的交易,Bob都可以一次取走通道里的所有比 特幣。

這樣,閃電網路通過懲罰不誠實的企圖造假方來保證大家彼此不會偷奸耍滑。所有的人都會在最新的當前交易狀態合法簽名併合法流轉廣播。

步驟2:建立微支付交易通道(網路)

我們前面講解了如何建立微支付的雙向交易通道實現兩個人之間的支付,現在如果Alice想要向第三個人Carol支付比特幣該怎麼辦呢?

1)Alice可以跟Bob一樣建立與Carol之間的雙向交易通道向Coral支付(當然建立通道需要成本);

2)如果Bob剛好已經跟Carol建立了雙向交易支付通道,則Alice可以通過已經建立的自己跟Bob的交易通道給Carol支付,走Alice→Bob→Carol通道。

對Alice而言,她的疑慮是怕Bob沒把錢給Carol,同時也怕Carol否認她收到Bob給的錢。

消除Alice顧慮的辦法是:

1)確認Bob將錢給Carol後,才將錢給Bob,然後知會Carol,Bob會轉交錢給她。

2)Alice要求Carol隨機生成一個密碼,將密碼的雜湊函式結果交給Alice,並告知Carol,只有 Bob將錢給她後,才能將這個密碼給Bob。同時,Alice告訴Bob,只有Bob錢給到Carol之後,才能拿到Carol才知道的密碼,之後交給 Alice確認後,Alice才會給Bob錢。因為Bob用比特幣換到了只有Carol才知道的密碼。

而對於Bob而言,他的擔憂是:

1)他需要相信他把錢給Carol之後能拿到密碼;

2)他還需要相信一旦他拿到密碼Alice真會給他錢。

雜湊時間鎖合約(Hashed Time-Locked Contract,HTLC)可以解除Bob的擔憂:Alice建立一個1BTC的多重簽名合約。Case1對於Bob,若合約中有他的簽名以及正確的從 Carol處得到的密碼,即可解鎖。Case2對於Alice,使用CLTV-Timelock時間鎖,確保自己的簽名在一個約定的合同期有效,當Bob 拿到密碼就履行合約將錢給Bob,同時廣播讓公眾都知道,如果合同逾期,Bob拿不到密碼或提供不了自己的簽名,Alice用自己簽名即可解鎖CLTV- Timelock拿回自己的錢1BTC。

讓我們想象一個這樣的網路,不單單是Alice跟Bob之間建立這樣的雜湊時間鎖定合約,Bob-Carol之間也可以建立這樣的HTLC合約,這樣我們可以建立一個:Alice→Bob→Carol→……無數這樣的節點構成了閃電網路[2]

步驟3:完成微支付交易並關閉支付通道

至此,我們看到了閃電網路的巨大的能力,那就是前面我們所分析與描述的發生在閃電網路的交易,都不是必須要一筆對一筆地寫到比特幣區塊鏈主鏈上,從而為比特幣網路節省了很多消耗。

如果這個時候Alice與Bob想靜悄悄地關閉彼此建立起來的支付通道,他們只要在主鏈上產生一筆交易,將交易通道開通直到交易結束,每個參與方拿到自己最後交易狀態的份額,最後又回到主鏈上來。發生在通道里的所有交易隱私性就可以保護起來了。

我們熟悉的Hyperledger Fabric的通道(Channel)就是借鑑閃電網路的原理,並以此來作為保護交易對手的資訊隱私。

其實當交易對手上方決定關閉微支付通道的時候回到比特幣主鏈上,其實只需要告訴主鏈一個開通微支付通道合約交易和 一個關閉微支付通道合約交易。期間交易對手們無論交易過多少次,對主鏈來說都無關緊要。這樣,為比特幣提供了一種不在主鏈上做交易的機制和解決方案。可以 大大減輕比特幣主鏈的效能瓶頸。

[1] The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments. https://lightning.network/lightning-networkpaper.pdf.

[2] http://lightning.network.

來源:我是碼農,轉載請保留出處和連結!

本文連結:http://www.54manong.com/?id=86

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();

相關文章