什麼是比特幣的閃電網路?


閃電網路(Lightning Network)是一個去中心化的系統。閃電網路的卓越之處在於,無需信任對方以及第三方即可實現實時的、海量的交易網路。

閃電網路起源於比特幣的擴容問題,詳見:比特幣擴容為什麼選擇2MB?

閃電網路是基於微支付通道演進而來,創造性的設計出了兩種類型的交易合約:序列到期可撤銷合約RSMC(Revocable Sequence Maturity Contract,哈希時間鎖定合約HTLC(Hashed Timelock Contract)。

RSMC解決了通道中幣單向流動問題,HTLC解決了幣跨節點傳遞的問題。這兩個類型的交易組合構成了閃電網路。

RSMC 創建

我們先來創建一個序列到期可撤銷合約(RSMC),愛麗絲和鮑伯是合作方,經常有比特幣往來,所以他們決定各拿出0.5BTC放入通道中,便於業務往來。

解釋一下下方RSMC交易的結構(圖X),左側為愛麗絲的視角,右側為鮑伯的視角。中間Funding Tx為共同可見,C1a和RD1a為愛麗絲持有,C1b和RD1b為鮑伯持有。交易圖中帶有尖括弧的簽名表示待填入。

RSMC交易的結構圖

1、雙方各拿出0.5BTC,構建Funding Tx,輸出為愛麗絲和鮑伯的2/2多重簽名。此時, Funding Tx未簽名,更不廣播。

2、愛麗絲構造Commitment Tx:C1a和RD1a,並交給鮑伯簽名。C1a的第一個輸出為多重簽名地址,愛麗絲的另一把私鑰愛麗絲2和鮑伯的2/2多重簽名,第二個輸出為鮑伯 0.5BTC。

3、RD1a為C1a第一個輸出的花費交易,輸出給愛麗絲0.5BTC,但此類型交易帶有sequence,作用是阻止當前交易進塊,只有前向交易有sequence個確認時才能進塊。

4、鮑伯構造Commitment Tx:C1b和RD1b,並交給愛麗絲簽名。結構與C1a、RD1a是對稱關係。

5、鮑伯對C1a和RD1a進行簽名,並將簽名給愛麗絲;同理,愛麗絲對C1b和RD1b簽名,完成後給鮑伯。此時,由於並未對Funding Tx進行簽名,任何一方均無法作惡,任何一方也不會有任何損失。

6、雙方均完成對commitment Tx的簽名並交換後,各自再對Funding Tx進行簽名,並交換。此時,Funding Tx是完整的交易,廣播之。

上述過程以及結構圖的描述,就是創建RSMC的全部過程。

C1a, C1b兩筆交易花費的是同一個輸出,故他們兩個交易只有一個能進塊。若愛麗絲廣播C1a,則鮑伯立即拿到0.5BTC(C1a的第二個輸出),而愛麗絲需要等C1a得到1000個確認,才能通過RD1a的輸出拿到0.5BTC。另一方,若鮑伯廣播C1b,則愛麗絲立即拿到0.5BTC,鮑伯等待C1b得到1000個確認,才能通過RD1b拿到0.5BTC。也就是說,單方廣播交易終止合約的那一方會延遲拿到幣,而另一放則立即拿幣。

交易更新

愛麗絲和鮑伯各自0.5BTC的餘額,此時愛麗絲從鮑伯處購買了一件商品,價格為0.1BTC,那麼餘額應該變為愛麗絲 0.4BTC,鮑伯 0.6BTC。於是創建新的Commitment Tx,對於愛麗絲來說是C2a 和RD2a,對於鮑伯來說是C2b和RD2b,過程與上面類似。

交易更新時的交易結構

此時兩個狀態均是有效的,那麼最核心的問題來了,如何才能徹底廢棄掉C1a和C1b呢?

RSMC採用了一個非常巧妙的方法,在C1a的第一個輸出中,採用了愛麗絲2和鮑伯的多重簽名,愛麗絲將愛麗絲2 的私鑰交給鮑伯,即表示愛麗絲放棄C1a,承認C2a。

交易更新時的多重簽名

愛麗絲交出愛麗絲2的私鑰給鮑伯,那麼鮑伯就可以修改RD1a的輸出給他自己,形成新的交易BR1a。若愛麗絲破壞合約存在C2a的情況下依然廣播出C1a,那麼愛麗絲的懲罰就是失去她全部的幣。愛麗絲交出愛麗絲2的私鑰,或者對交易BR1a進行簽名,兩者是等同的,都是對C1a的放棄。

反之亦然,鮑伯交出鮑伯2的私鑰給愛麗絲即意味放棄C1b,而僅能認可C2b。

引入sequence的目的是,阻止後續交易進塊(RD1a),給出一個實施懲罰窗口期,當發現對方破壞合約時,可以有1000個塊確認的時間去實施懲罰交易,即廣播BR1a代替RD1a。若錯過

1000個塊時間窗口,則無法再實施懲罰了(RD1a進塊了)。

交易關閉

關閉RSMC,直接按照最終的餘額構造出一個Commitment TX即可,例如輸出為愛麗絲0.1BTC,鮑伯0.9BTC,無需再設置多重簽名,構造懲罰交易等。

中轉交易

愛麗絲想要支付0.5BTC給鮑勃,但她並沒有一個渠道來和他進行交易。幸運的是,她和查理有一個交易渠道,而查理正好和鮑勃有一個交易渠道。這樣愛麗絲就能藉助查理的交易渠道,通過哈希時間鎖定合約(HTLC)來和鮑勃進行交易了。

中轉交易示意圖

為了完成這次交易,愛麗絲就會給鮑勃發簡訊說:「嘿!我要給你付筆款。」這時鮑勃自己將收到一個隨機數字(R),接著鮑勃便會回一個被哈希的數字(H)(你可以認為被哈希的數字R是隨機數字的一種加密形式)給愛麗絲。然後愛麗絲的錢包緊接著就會聯繫查理說:「嘿,查理。如果你給我生成(H)的未加密值(R),那麼我就同意更新我們渠道的支付分配,這樣你就可以得到的就會比0.5BTC多一點,我得的比0.5少一點。」儘管查理並不知道R,但他也會同意。之後查理便會去找鮑勃說:「嘿,鮑勃。如果你給我那個能生成H的未加密的值R,我將同意更新我們渠道的支付分配,這樣你就可以得到的會比0.5BTC多一點,我得到的比0.5少一點。」

因為R就是從鮑勃這裡生成的,所以他肯定知道。接著他馬上將R告訴查理,並更新了其渠道的支付分配。然後查理將R告訴給了愛麗絲之後也更新他們的渠道,最後交易完成,愛麗絲以脫鏈的形式付給鮑勃0.5BTC。

總結

RSMC通過巧妙的設置Commitment TX的多重簽名輸出,以及sequence的延遲進塊形成懲罰窗口期,解決了在微支付通道中的幣單向流動問題。

以上節選自——《區塊鏈:從數字貨幣到信用社會》(中信出版社)

還可參考該文:詳解最近大熱的閃電網路、雷電網路和CORDA


閃電網路的目的是實現安全地進行鏈下交易,其本質上是使用了哈希時間鎖定智能合約來安全地進行0確認交易的一種機制,通過設置巧妙的『智能合約』,使得用戶在閃電網路上進行未確認的交易和黃金一樣安全(或者和比特幣一樣安全)。閃電網路


簡單說就是智能合約,規定交易者可以在某個時刻獲得或者失去某個權益。在鏈下的交易雙方通過鎖定自己的coin到閃電網路的交易通道之上,如果交易方有直接的通道就直接交易,如果沒有直接網路通道,可以間接的通過其它已連接的通道進行轉移。了解更多:閃電網路、雷電網路和CORDA詳解


之前在 Taipei meetup 分享的 slide

https://pan.baidu.com/s/1c9lohK

進階部分

  1. 路由: Flare: An Approach to Routing in Lightning Network

  2. 隱私: Bolt: Anonymous Payment Channels for Decentralized Currencies

  3. PoC: raiden-network/raiden Wiki


對 Bitcoin 了解不多,但最近正好看了 Thaddeus Dryja 在 Youtube 上的視頻,覺得這個東西很有趣。(PS: 而會去看這個視頻,是因為 Raiden. )

於是,來寫下這麼一個答案, 圖說 Lightning Networks,這個答案不會再更新,如果有問題,應該會有大牛在評論處指正:

--------

Alice 會把自己的 1BTC 放到一個 MultiSig 地址裡面,這個 MultiSig 需要 Alice 和 Bob 一同 sign

才會執行具體的操作(即這 1BTC 要還給 Alice 多少,多少要轉到 Bob 的賬戶裡面去),在 Alice 轉錢到這個 MultiSig 之前,Bob 會首先簽名一條消息,這條消息裡面說: 把 MultiSig 裡面的 1BTC 退還給 Alice,但是,這裡還有一個 Time Lock,下面圖裡用的 Time Lock 用的是 30 天,Alice 只有 30 天之後才能 sign,執行退錢的操作。這個部分的操作還需要在區塊鏈 上進行操作。

Alice 要轉賬 0.1 BTC 給 Bob,那麼她 sign 一條消息,裡面說,這 1BTC 有 0.9 要還給自己,0.1 給 Bob.

Bob 如果這個時候也 sign 了這個 message,那麼就可以 broadcast 到 blockchain,使得上面的 MultiSig 執行操作,實現了轉賬。

但 Bob 也可以不 sign,因為之後 Alice 可能還要轉賬。比如,這裡Alice 又 sign 了一條新的 meassage,如果 Bob 也 sign 了這條,那麼他會得到更多的 bitCoin,因此在這條和上面那條舊的 message 中,他肯定更加傾向於選擇這一條。當然,同樣的,Bob 可以不考慮 sign 了然後 Broadcast 出去,而是等待 Alice 可能會再次向他轉賬,比如這裡 Alice 又轉了 0.1 BTC 給 Bob:

那麼,假如現在 Bob 想要還 0.1 BTC 給 Alice 呢?當然,你可以說 Bob 也去創建一個 MultiSig,那麼就是對等的了。但其實 Bob 可以不那麼做,他只需要把 Alice 給他的 0.2BTC 中的 0.1 BTC 退回去就可以了。

如果要實現這一點,那麼一開始 Alice 在 sign 消息的時候,還需要給一個 lock time。

我們來重新看這個過程:

Alice sign message 說,0.8 BTC 留給自己, 0.2 給 Bob,這條消息 Bob 只有在 第 29 天的時候才能 sign:

而 Bob 想要還 0.1 個 BTC 給 Alice,於是他 sign 了一條新的消息,這條消息在第 28 天才是有效的,接下來,他們之間還可以有更多的轉賬操作,直到 lock time 變成了當天,一方為了自己的利益,必須馬上 sign,並且把 消息 broadcast 到 blockchain,完成在 Blockchain 上的轉賬 :

如果每兩個人之間轉賬,都需要先建立一個 MultiSig,這似乎對 Blockchain 的壓力也不小。

於是,假如存在的第三個人,他或許不是一個個人,而是某個交易所,他收取一點點的手續費。

根據上面的描述,現在你已經知道 Alice 和 Bob 之間,可以建立一種關係來互相轉賬,在接下來的描述中,我們不再關注 Alice 和 Bob ,以及即將加入的 Carol 和 Bob 之間的轉賬細節了。我們只需要抽象地知道,他們之間是可以互相轉賬的,且不需要每一筆都經過 區塊鏈。

那麼,我們現在要讓 Carol 加入,Alice 要轉賬給 Carol:

Carol 會首先會構造一個 R,不告訴別人。同時會計算出 R 的 hash H.

Carol 把 H 給 Alice:

Alice 轉賬 0.01 BTC 給 Bob,Bob 要拿到這 0.01 BTC 的話,他還需要提供 R :

於是 Bob 就轉賬給 Carol,同樣的,Carol 要拿到錢需要提供 R 給 Bob:

轉賬似乎就可以順利完成了。

上面的設計叫做 「Hash Lock」,這個設計是有問題的:

如果 Alice 和 Bob 之間的轉賬先失效了,那麼 Alice 的 0.01 BTC 會退回,Bob 就拿不到了;而 Bob 和 Carol 之間的轉賬要是後失效,那麼 Carol 從 Bob 那裡拿到 0.01BTC 之後,Bob 就損失掉了 0.0.1 BTC.

所以,我們需要 "Hash Time Lock",其實就是保證 Carol 和 Bob 之間的轉賬一定要比 Alice 和 Bob 之間的先過期。

這樣的話,我們就得到了閃電網路:

This Doc is Written By EtherWell


快速支付網路,支付和結算分離


推薦閱讀:

如果全世界的貨幣都被比特幣取代,會對經濟造成怎樣的影響?經濟模型會是怎樣的?
比特幣改變了我的三觀,請問這正常嗎?
區塊鏈(Blockchain)和比特幣(Bitcoin)是什麼關係?
區塊鏈的物理存儲形式?
既然比特幣數量恆定,作為貨幣的比特幣如何實現信用的派生?

TAG:互聯網 | 虛擬貨幣 | 貨幣 | 比特幣Bitcoin | 區塊鏈Blockchain |