原文標題:《 UNDERSTANDING THE LIGHTNING NETWORK, PART 3: COMPLETING THE PUZZLE AND CLOSING THE CHANNEL 》
原文作者: AARON VAN WIRDUM
原文編譯: 閔敏 & 阿劍
閃電網路
目前,Alice 和 Bob 已經開通了一個雙向支付通道,并分別往通道中存入了 5btc,他們已經來回完成了兩筆交易,在當前通道狀態下,Alice 和 Bob 可以通過終止通道各自取回 5btc,
現在,他們想要在通道中放入一個哈希時間鎖合約(HTLC),以確保 Bob 在用 1btc 交換 Carol 手中的秘密值后,Bob 可以從 Alice 那里取回 1btc,
就像之前的步驟一樣(詳見 Part 1),Alice 和 Bob 先要各自創建一筆新的承諾事務。這兩個承諾事務跟之前創建的承諾事務很像,包含一個普通的輸出、一個帶有 CSV 時間鎖(相對時間鎖)的多簽地址輸出和一個特殊的哈希鎖。接著,像之前的步驟一樣,Alice 和 Bob 交換之前的秘密值來讓之前的通道狀態失效,一旦交換過秘密值后,Alice 和 Bob 就可以簽署各自的承諾事務,并在任何時候將這承諾事務發送到區塊鏈上。
這些步驟與之前的步驟基本相同,除了一點,Alice 和 Bob 新創建的承諾事務包含一個新的輸出,而這個輸出價值 1btc。(因此,支付通道中的 btc 余額變成了 Alice:4;Bob:5;新的輸出:1,)
這個新的輸出本質上是哈希時間鎖合約,而且相比其它輸出更有趣,因為有三種方式可以解鎖它,
第一種方法是,只有當后序事務包含 Bob 的簽名和秘密值時,(包含在 Alice 和 Bob 的承諾事務內的)新的輸出才會釋放 btc。無論 Alice 或 Bob 是否簽署并廣播承諾事務,只有 Bob 可以解鎖該輸出——只要他將秘密值包含在后序事務內。但是,兩個承諾事務存在一處細微差別:如果 Bob 終止通道,會受到 CSV 時間鎖的約束。這時,Bob 必須等待 1000 個區塊才能取回自己的 btc,(如果 Alice 終止通道,Bob 就可以立即取回自己的 btc。)
為什么 Bob 需要等待 1000 個區塊呢?原因跟我們之前解釋的差不多:如果 Bob 試圖簽署并廣播過期的通道狀態,Alice 就可以拿走 1 btc。這就是解鎖輸出的第二種方法。如果 Alice 提供 Bob 的(最新)秘密值,就可以「偷走」通道內的資金。
Alice 和 Bob 可以玩這樣一個游戲:如果 Alice 試圖廣播過期的通道狀態,Bob 可以使用 Alice 的秘密值取走那 1 btc(甚至無需提供秘密值)。
第三種方法是,與其它哈希時間鎖合約一樣,這兩個承諾事務也包含常見的 CLTV 時間鎖(絕對時間鎖)超時退回機制,即,如果 Bob 沒有在限期(比如兩周)內將秘密值包含在后序事務內,Alice 就可以取回自己的 1btc。在這種情況下,終止通道的人是 Alice 還是 Bob 都沒關系。
那么,具體是如何操作的?
Alice 和 Bob 各自持有部分有效的承諾事務,如果 Alice 將自己持有的(也是 Bob 發給她的)承諾事務發送到區塊鏈上,就會立即發送 5btc 給 Bob。Alice 則需要等待 1000 區塊之后才能取回自己的 4btc。另外,Bob 有兩周時間提供秘密值,解鎖「哈希時間鎖合約輸出」對應的 1 btc。(如果他沒有在兩周內提供秘密值,Alice 就可以取回這 1btc,)
與此同時,Bob 隨時都可以將他的承諾事務上鏈,并立即將 4btc 發送給 Alice,接著,他必須等待 1000 區塊過后才能從一個地址那里取走 5 btc,如果他在限期內提供秘密值,還能解鎖「哈希時間鎖合約輸出」對應的 1 btc,(如果他沒有在兩周內提供秘密值,Alice 就可以取回這 1btc。)
當然了,如果 Alice 或 Bob 在將來任何時候試圖作惡,簽署并廣播過期的通道狀態,另一方都可以阻止作惡方,并偷走通道內的所有 btc。
結算狀態
這時,Bob 一定會收到 1btc 來交換他手中的秘密值(假如他有的話),他要做的只是簽署并廣播他從 Alice 那里得到的承諾事務,將秘密值包含在一個后序事務內,然后簽署并廣播該后序事務。
Alice 知道這一點,她沒有辦法騙走 Bob 的 btc,即使她通過其它手段得到了秘密值。
因此,Alice 和 Bob 還不如在支付通道外進行「結算」,Bob 可以將秘密值給 Alice,Alice 可以同意更新通道狀態,這樣就不需要哈希時間鎖合約和截止日期了,
假設 Alice 和 Bob 都想讓通道保持開啟,這也很正常:比起在鏈上終止通道省事多了,
關閉通道
最后才是閃電網路真正強大的地方:
本系列文章中所述內容幾乎都不需要實際上用到比特幣區塊鏈,
如果 Alice 和 Bob 想要和平關閉通道,可以創建一個事務來完全覆蓋掉開啟通道事務之后的所有事務。他們可以根據最新通道狀態中所示的 btc 余額歸屬情況,通過關閉通道事務將自己應得的 btc 余額發送給自己。
具體來說,這意味著如果 Alice 想要關閉通道,她可以創建一個事務向自己支付 4btc,同時向 Bob 支付 6btc,然后讓 Bob 簽署并廣播該事務,Bob 沒有理由不答應這個請求,他大概率會配合 Alice 關閉該通道,
最后,只會有兩筆事務被廣播到比特幣網路并打包進區塊:開啟通道事務和關閉通道事務,哪怕 Alice 和 Bob 之間發生了 100 萬筆交易也是這個結果,因此極大地減輕了區塊鏈的負擔。
格外感謝 Rusty Russell 和 JosephPoon 的資訊和額外的反饋,