哈爾濱工程大學 區塊鏈討論課
2018201125 陳曉龍
2018201204 魏金龍
參考博客/視頻:
https://www.bilibili.com/video/BV1yW411B7F5?t=16
https://www.bilibili.com/video/BV1et411d7m9?t=553
https://www.8btc.com/article/92887
https://www.zhihu.com/question/46515457
歡迎指正!
區塊鏈可擴展性技術:閃電網路
區塊鏈技術的瓶頸
區塊鏈技術發展到現在遇到一個瓶頸,就是交易吞吐量和交易速度的問題,位元幣在目前區塊大小是1MB的情況下,處理交易的能力是7筆每秒,而VISA支付處理量大約是4000筆每秒,平時我們使用的支付寶、微信等工具交易處理量也遠大于位元幣網路,交易的緩慢,會造成網路的擁堵,這樣用戶之間就會就手續費這個問題產生競爭,從而能夠盡早被礦工處理,進一步會使轉賬的手續費變的更加昂貴,這是非常不利于位元幣的普及使用的,
閃電網路
閃電網路使小額的、經常發生的在兩個用戶之間的交易可以快速地完成,不需要很長的交易確認時間,
閃電網路的核心思想
閃電網路的核心思想是,小額的和日常經常發生的交易無需發生在鏈上,這就避免了每秒處理7個交易的限制,可以很快地處理交易,所以閃電網路被稱為線下方案,
閃電網路的關鍵技術有兩個:序列到期可撤銷合約RSMC(Revocable Sequence Maturity Contract)、哈希時間鎖定合約HTLC(Hashed Timelock Contract),
RSMC
下面通過一個簡單的例子來闡述一下閃電網路的整個作業程序,
每天早上上課的時候我都會從宿舍旁邊買早餐,假設我使用位元幣付款,想象一下我會遇到什么麻煩,第一個是我需要等待很長的時間,讓位元幣網路確認我的交易,這樣我買一個早餐都要等上一個小時或更長時間,我就也不用上課了,可以直接吃午飯了,第二個是,我買一個早餐可能只需要0.00005 BTC,對于這種小額付款,手續費都可能比付款高,
那怎么解決呢?
我想向買早餐的大媽賒賬,每個月結一次帳,這樣我所有交易的處理時間都集中在一次交易上,手續費也只需要付一次交易的手續費,
大媽卻是想讓我直接預付,將一整個月的帳在月初提前支付,
其實我們都是無法相信彼此的,大媽怕我突然某天不來了賴賬,我怕大媽哪天拿著我的錢跑路了,所以我們都無法說服對方讓對方來使用我們的方案,
RSMC的解決方案是:
借助閃電網路,我與大媽之間可以建立一個支付通道,要實作這個通道,我們都要把一些位元幣發送到一個多重簽名地址,這個通道需要我們雙方的共同的簽名才能建立,同時建立一個賬單,這個支付通道是建立在主鏈之上的,所有人都可以看到,
比如我發送了0.001 BTC、大媽發送了0 BTC(可以發送0,因為大媽不需要付款)到這個多重簽名地址,如下圖所示,

當我每天消費的時候,我只要對賬單進行修改即可,如下圖所示,

需要注意的是,修改賬單之后,前面的賬單應該是被舍棄的,應用的永遠都是最新的賬單,
我們兩個人應該都是有權力去結束這個通道的,這個通道被結束的時候,最后的賬單會被上傳到多重簽名地址中,然后主鏈會將我們兩個之間的賬單進行處理,
我們發現整個程序只會有兩次在主鏈上的交易,
在這個程序中,我們可以發現兩個安全性問題,以下面賬單為例,

-
不合作
我們兩個人應該都有權力去結束這個通道的,因為如果大媽想結束通道,結賬,而我始終拒絕的話,賬單就遲遲不能被主鏈所處理,但是當前的賬單是只有一個賬單,提交賬單必須要兩個人同意才行,我們應該合理地改變資料結構,使我們兩個人都能獨立地結束這個通道,
-
舊版本
我們在解決上面一個問題之后,我們兩個人都能獨立結束通道,但這就會引出一個新的問題,賬單最終的版本應該是4號賬單,我獨立結束通道,提交1號賬單到主鏈上,那就相當于白嫖了所有的早餐,這個問題也必須要解決,舊版本必須在有新版本之后被廢除,
接下來我們來看RSMC是如何解決兩個問題的,
通道建立
通道建立只需要雙方在鏈下準備一套類似上圖的交易結構,完成后僅將funding交易發布到區塊鏈上即可,
交易圖中帶有尖括號的簽名表示待填入,
流程如下:
- 雙方各拿出0.5 BTC構造Funding Tx,Funding Tx需要Alice和Bob的多重簽名,此時,兩個人都未簽名,不廣播,
- Alice構造Commitment Tx,包括C1a和RD1a,并交給Bob簽名,Bob簽名后再發送給Alice,C1a有兩個輸出,第一個輸出為多重簽名地址,第二個輸出為Bob 0.5 BTC,Bob構造Commitment Tx,包括C1b和RD1b,并交給Alice簽名,C1b的結構與C1a類似,
- C1a的第一個輸出為RD1a,這個交易需要Alice2和Bob的同時簽名,會輸出給Alice 0.5 BTC,此型別交易帶有seq,seq=1000表示交易RD1a只能在包含其父交易C1a的區塊得到1000個確認后才能被收錄,
不合作
上面的交易結構其實就可以解決不合作的問題,
這套交易結構是完全準備就緒的一套結構,Funding Tx要提交到區塊鏈上,只需要Alice和Bob的私鑰簽名,
如果Alice想要單方面結束通道:因為C1a中Bob已經簽過名,所以Alice只要在C1a上用自己的私鑰簽名,然后就可以在區塊鏈上發布交易C1a,這時候seq就會起作用,seq=1000,那么Alice必須等C1a被收錄并得到1000個確認之后才能發布交易RD1a,這個輸出的分配是給Alice 0.5 BTC,而第二個輸出則是立即會給Bob分配 0.5 BTC,也就說,單方面結束交易通道的一方會受到延遲提款的懲罰,這個機制也為解決“舊版本”問題提供了基礎,
交易更新
如果Alice從Bob那里買了0.1 BTC的商品,那么通道的余額分配就會發生改變,變成Alice :0.4 BTC,Bob:0.6 BTC,Alice和Bob會構建新的Commitment Tx,分別是上圖的C2a、RD2a,C2b、RD1b,
那么上面提到的**“舊版本”**的問題怎么解決呢?
RSMC采用的方法非常巧妙,
在創建C2a,C2b之后,Alice和Bob會交換Alice2與Bob2的私鑰,就意味著他們都放棄了C1a,C1b,
如果說Alice想要提交舊版本的C1a來賴賬,Alice在C1a上補完自己的簽名,發布到區塊鏈上,因為RD1a需要有1000個確認,也就是大約10000分鐘的時間,7天的時間,才能收到分配給自己的0.5 BTC,但是Bob將會立馬看到被廢除的C1a被發布,而且他已經有了Alice2 的私鑰,那么他就會立馬發布交易塊BR1a,交易塊的內容是把原本分配給Alice的0.5 BTC也分配給自己,那么這1.0 BTC就全是Bob的了,因為BR1a中沒有seq=1000的限制,而且他的父交易已經被放出,這個交易塊會立即執行,Bob會很快收到0.5 BTC,這樣,如果Alice敢這樣干,她會有很大的損失,這個措施也正好照應了RSMC的含義——序列到期可撤銷合約,
需要說明的是,在正常的情況下,如果C1a沒有提交,Bob雖然有Alice2 的私鑰,但是他沒有Alice 的私鑰,所以就無法提交C1a這個賬單,也就無法發布BR1a,所以對雙方來說都是安全的,
HTLC
參考
https://www.8btc.com/article/92887
協議內容
我們還會發現一個問題,這個支付通道是建立在兩個人之間的,那么我每次與一個人交易,都要新建立一個新的交易通道,
在閃電網路中,我們并不需要這樣做,我們可以利用閃電網路來傳遞 BTC,也就是說如果你想與Bob進行一次交易,但是與他之間沒有交易通道,而你和Bob都和Charlie有交易通道,那么你們就可以通過Charlie來進行交易了,如下圖所示

這個中轉交易就要使用哈希時間鎖定合約(HTLC)來實作了,
通過HTLC,Alice和Bob可以達成這樣一個協議:協議將鎖定Alice的0.1 BTC,在時刻T到來之前(T以未來的某個區塊鏈高度表述),如果Bob能夠向Alice出示一個適當的R(稱為秘密),使得R的哈希值等于事先約定的值H(R),Bob就能獲得這0.1 BTC;如果直到時刻T過去Bob仍然未能提供一個正確的R,這0.1 BTC將自動解凍并歸還Alice,
實體
接下來來看一個例子,

Alice想要支付Dave 0.05BTC,但他們之間沒有支付通道,Alice找到了通過Bob、Carol到達Dave的一個通道,
Dave生成一個秘密R并將Hash(R)發送給Alice,Alice不需要知道R,
Alice和Bob商定一個HTLC合約:只要Bob能在3天內向Alice出示哈希正確的R,Alice會支付Bob 0.052 BTC;如果Bob做不到這點,這筆錢3天后自動退還Alice,
同樣地,Bob和Carol商定一個HTLC合約:只要Carol能在2天內向Bob出示哈希正確的R,Bob會支付Carol 0.051 BTC;如果Carol做不到這點,這筆錢到期自動退還Bob,
最后,Carol和Dave商定一個HTLC合約:只要Dave能在1天內向Carol出示哈希正確的R,Carol會支付Dave 0.05 BTC;如果Dave做不到這點,這筆錢到期自動退還Carol,
一切就緒后,Dave及時向Carol披露R并拿到0.05 BTC;現在Carol知道了R,她可以向Bob出示密碼R并拿到0.051 BTC(差額部分的0.001 BTC成了Carol的傭金);Bob知道R后當然會向Alice出示并拿到他的那份0.052 BTC,差額部分的0.001 BTC成了Bob的傭金,

整個程序很容易理解,最終效果是Alice支付了0.052 BTC,Dave安全地拿到0.05 BTC,整個閃電支付網路為此收取的傭金成本是0.002 BTC,上述程序中的全部動作都發生在位元幣區塊鏈之外,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/286444.html
標籤:區塊鏈
上一篇:【swarm測驗極簡指南】如何獲得bzz獎勵?0.6.2版本手動安裝指南
下一篇:go 語言開發環境如何搭建?
