科普 | 菜鳥學習狀態通道,Part-4:賬本通道和虛擬通道
在開始讀本博文之前,我建議你先讀 ofollow,noindex">中心輻射支付通道 (譯者注:即同系列 Part-3),因為我們要用到其中的知識。
讀了這篇博文後,你會理解如何在中心輻射拓撲的兩個節點之間建立一個虛擬通道,然後兩個節點就能獨立於這個拓撲結構進行通訊。下圖紅色虛線就是虛擬通道的例子。
賬本通道
虛擬通道的實現有賴於賬本通道。賬本通道是雙向支付通道的另一種說法。在下面的例子中,我們有一個 Alice 和 Bob 之間的賬本通道,通道中 Alice 持有 5ETH,Bob 持有 3ETH。
開啟一個虛擬通道
要開啟一個虛擬通道,兩個節點必須都與同一個連線點(中心)開通賬本通道。(下圖中)Ingrid 就是這個共同連線/中心,他分別和 Alice、Bob j建立了賬本通道 y 和 z。下面我們展示了 Alice 和 Bob 之間的虛擬通道 X 會有的樣子—— Alice 將持有 5ETH,Bob 將持有 3ETH(校對注:注意:紅色的虛線代表尚未建立的虛擬通道,灰色的實線表示已經建立的賬本通道;另請注意 Ingrid 在兩邊的餘額)。
為了開啟這個通道,Alice 和 Bob 都會給 Ingrid 發一個簽過名的請求。當 Ingrid 收到雙方簽署的請求後,Ingrid 會同意這種變更,並更新與雙方的賬本通道。這個更新過程會將虛擬通道兩端所需餘額在每一個賬本通道的對應端扣減——如下圖所示:
為了支援虛擬通道的建立,每一個現有的通道都從左邊扣減了 5ETH,右邊扣減 3ETH。到這兒,我們就不再需要 Ingrid 了,更新虛擬通道和更新賬本通道是一樣的(雙方簽署交換序列化的資訊)。
現在我們已經開啟了一個虛擬通道,並且基於通道做了交易,下一部分就是設定關閉通道。
關閉虛擬通道
理想情況
為了關閉上面的虛擬通道,Bob 和 Alice 就要向 Ingrid 提交最新雙方簽名的資訊。Ingrid 根據提交的資訊更新雙方各自的賬本通道。注意,在 Alice 和 Bob 利用虛擬通道互動時,Ingrid 和 Alice、Bob 的賬本通道是開著的,這就意味著,所有訊息互動都不是在鏈上完成的。
離線/惡意破壞
假設 Bob 決定作惡,嘗試騙取 Alice 的 ETH,他發了之前他們雙方都簽過名的訊息給 Ingrid。當收到 Bob 發來的訊息時,Ingrid 將會驗證為這確實是 Alice 最新確認的訊息。在 Alice 離線的情況下,Ingrid 將會開啟一個爭論期,在爭論期內,她會提供虛擬通道確實開啟的證明(即 Alice 簽署的請求),以及虛擬通道中 Bob 提供給她的最新訊息,(訊息是由 Alice 和 Bob 共同簽署的)。如果 Alice 在爭論期內仍然不能上線,她和 Ingrid 之間的賬本通道將會根據 Bob 提供的較早訊息而更新,然後關閉。
監控服務
假如 Alice 預料到了自己會離線,因此把最終和 Bob 簽署的訊息發給了她的朋友 Carl,Carl 代表 Alice 把這個最終狀態發給了 Ingrid ——那麼 Carl 實際上就成為了一個提供監控服務的節點。這樣雖然不能阻止 Alice 的賬本通道被關閉,但可以強制讓 Bob 提供一個更新的訊息,或者同意 Carl 提交的狀態。
這種提供收費監管服務(就像 Carl)的策略在社群裡很常見。不過我個人並不太喜歡這種方式,因為沒有第三方服務也能達到這種效果——下一篇將會介紹。說到這,如果你想了解更多這種第三方的解決方式,我在下一節列出了幾個相關文件。
誰在做虛擬通道?
本篇博文是由 Perun Channels 啟發而來——他們做的真的是太棒了,並且基於他們的工作,已經產生了很多版本的類似通道。我最熟悉的一個就是“中心支付通道”, SpankChain 、 Nathan Ginnever ( Finality Labs )還有 Arjun Bhuptani ( Connext )就在做這些。