狀態通道的現狀

買賣虛擬貨幣
在這篇文章中,我們將瞭解狀態通道如何工作的基礎知識,以及為什麼它們的實現很複雜。我們將討論它們如何用於比特幣的閃電網路的支付,以及在以太坊智慧合約的支援下,如何利用它們來實現更復雜的應用。最後,我們將探討為什麼狀態通道到目前為止還沒有被廣泛採用,以及為什麼這種情況可能會發生變化。狀態通道如何工作

狀態通道的核心前提是出奇的簡單易懂。不再使用鏈上交易,希望定期進行交易的各方可以先在智慧合約中鎖定資金,然後在鏈外交換籤名的訊息,這些訊息用來更新誰擁有哪些資金的狀態。任何數量的交易都可以在鏈外發生,其速度只受限於各方交換籤名資訊的能力。無論何時,任何一方想要退出通道,都可以將最新的簽名狀態提交給鏈上智慧合約,智慧合約會驗證簽名,並按照約定的分配方式分配資金。

我們來看看最簡單的狀態通道的例子:雙方之間的簡單支付。我們請上我們的老朋友,Alice和Bob。我們假設這兩個人有理由定期交換資金exchange funds。他們都向基礎鏈上的智慧合約存入資金 - 在這個例子中,比方每個人存5個ETH。Alice對支付給Bob 1個ETH的訊息進行簽名,這意味著她將自己的餘額更新為4 ETH,Bob的餘額更新為6 ETH。Alice將簽過名的訊息傳送給Bob,Bob對更新後的狀態進行簽名並返回。之後,Bob向Alice支付0.5 ETH,將自己的餘額減為5.5 ETH,將她的餘額增為4.5 ETH。他對這次的支付資訊進行簽名,併傳送給Alice,然後她也對這個資訊簽名並將其傳送回去。

只要Alice和Bob願意,這個過程就會重複。值得注意的是,小額支付在這個系統中是可以的。由於在通道結算之前沒有任何費用,所以傳送1000筆0.001ETH的付款和傳送一筆1ETH的付款從成本上是一樣的。

最終,Alice和Bob的交易告一段落。雙方最後簽了名的餘額是,Alice有7個ETH,Bob有3個ETH。她將這最後一個共同簽名的狀態提交給基礎鏈,基礎鏈首先驗證雙方確實是用私鑰簽名的,然後根據所表明的餘額發放給雙方。簡單又簡潔,對吧?是的,但我們忽略了一些關鍵細節。

細節中的魔鬼

就像區塊鏈世界中的許多事情一樣,當所有各方都按照他們所期望的方式行事時,狀態通道就會順利運作。但如果各方總是以他們所期望的方式行事,我們首先就不需要去中心化的加密貨幣網路了! 區塊鏈存在的全部原因是讓各方以信任最小化的方式進行交易,而這就必須防止在爭議下的惡意行為。

對於狀態通道來說,即使是在我們簡單的雙方支付通道的例子中,對這些爭議性因素的考量也會增加大量的偶然複雜性。考慮一下這個場景。如果Bob付給Alice 2個ETH作為商品或服務的回報, 但當他收到商品後,他使用了一個過時的狀態 - 一個在他最近一次付款前簽了名的狀態 - 來關閉鏈上通道。Alice和Bob都對這個之前的狀態簽了名,而智慧合約並不知道這個狀態是之前的。這將使Bob可以索取Alice認為屬於她的資金。

為了防止這種不良行為,我們的系統可以要求兩個使用者都對一個特殊的 "最終 "狀態進行簽名,這個狀態明確地將通道標記為關閉,並且只有當這樣的狀態被提交時才會進行資金的發放。那麼,如果一方拒絕對這樣的最終狀態簽名,或者乾脆消失或長時間離線,會發生什麼?雙方的資金都會被卡在智慧合約中。

為了避免這樣 "悲催 "的結果,需要讓各方能夠退出通道,用中間狀態提取資金。當雙方沒有明確關閉通道時,大多數的最終操作都會增加一個資金支付的等待期。這使得每一方都有機會透過出示雙方簽過名的較新狀態來對取款提出異議,從而證明另一方試圖作弊。這樣的證明往往伴隨著對惡意者的懲罰。

這是一個可行的解決方案,但我們可以看到它已經增加了多少複雜性。對於一個簡單的雙方支付通道,現在雙方都必須不斷監控這個鏈,以確保另一方沒有試圖作弊。他們必須維護其最新狀態的快取副本,並準備進行鏈上交易以證明發生了作弊行為。此外,如果另一方停止響應,使用者必須準備好等待異議期過後才能拿回自己的資金。

多方支付

現在,事情是這樣的 - 只有兩方支付的狀態通道在可用性上是相當有限的。有多少經濟往來涉及到只是雙方之間來來回回地重複支付,而且雙方都會放心地把自己的一大筆錢專門用來與另一方進行支付的目的?大概是相當少的。

為了讓狀態通道更有用,我們需要擴充套件它們的作用。我們有兩種方法可以做到這一點。一是增加可以使用通道的參與方數量。二是擴充套件狀態通道的能力,不僅僅是支付,可以實現更多通用的狀態種類,從而實現更復雜的用例。

我們先來看看參與方的增加。最簡單的方法是有一個大的通道,所有參與者都向同一個合約存款,並對所有的狀態進行簽名。由於顯而易見的原因,這種方法在少量使用者之外無法發揮作用。我們需要的不是一個單一的通道,而是一個通道網路。

閃電網路:支付通道網路

為了讓支付通道真正變得有用,比特幣的閃電網路讓它們變得可按特定的路線跳轉。任何使用者都可能用一個或多個節點開啟通道(任何人都可以操作)。然後,支付在節點之間 "跳轉",每個節點都會將資金轉移到下一個節點,直到到達預定的接收方。對於這樣的跳轉,每個節點都會收取少量費用。

你可以想象,這樣的系統伴隨著複雜性的爆增,而閃電網路花了很長的時間來解決這樣的困難。它仍有一段路要走,在過去的12-18個月裡,閃電網路的採用沒有什麼起色。老實說,我不確定閃電網路是否會獲得大量使用,但已經建立起來的技術還是令人印象深刻。

儘管閃電網路透過使整個參與者之間的支付成為可能而讓狀態通道變得更加有用,但其他人採取了不同的策略:將通道限制在一小部分參與方中,但擴大了它們的功能。

在狀態通道中加入狀態

透過包含關於允許什麼樣的狀態轉換的特定規則 - 在發生爭議時,這些規則可以在鏈上智慧合約中得到驗證和執行 - 狀態通道可以用來構建多方的去中心化應用,達到與傳統應用相同的效能(連結:https://medium.com/blockchannel/state-channel-for-dummies-part-2-2ffef52220eb)。

設想用這種狀態通道可以實現的應用種類,最常見的例子往往是遊戲。想象一下,假如Alice和Bob想玩一局象棋,並投入一些錢。透過一個對國際象棋規則進行編碼的智慧合約,以及一些用於表示棋盤狀態的基本資料結構,Alice和Bob可以下注,並透過交換籤名的資訊,在鏈外下一盤國際象棋。當遊戲結束時,通道可以被關閉,獲勝方可以獲得他的報酬。

如果任何一方試圖作弊,另一方可以透過智慧合約進行“調解“。透過出示最近的狀態,他們可以證明有效的遊戲狀態,並最終關閉通道。不過,在正常情況下,這局棋將以任何基於網頁的棋牌遊戲預期的方式進行。唯一的區別是在遊戲開始和結束時要進行鏈上交易來開啟和關閉通道。

前景如何?

狀態通道作為一個概念的相對簡單性意味著它們是區塊鏈世界中最早提出和研究的擴充套件解決方案之一。不過經過多年的研究,它們仍然沒有以任何有意義的方式被廣泛採用。這是什麼原因呢?

正如我試圖給你留下深刻印象的那樣,狀態通道的概念相對簡單,但實際的實現涉及到相當多的複雜性,特別是當你試圖構建一些實際有用的東西時。事實證明,處理與惡意行為相關的許多情況,同時也要實現人們真正想要的東西,這相當困難。我們還沒有看到太多的採用這一事實是可能的,因為這花了很長時間來研究出強大的、可用的解決方案。

我還不會放棄狀態通道。首先,閃電網路不斷成熟,可能之後有更多的採用。此外,在以太坊生態系統中,有許多團隊在開發通用化的狀態通道,這會使得構建基於狀態通道的應用變得更加容易(連結:https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/state-channels/)。

有個專案Counterfactual(但現在被簡單地命名為 "狀態通道",這讓人困惑)取得的進展給我留下了深刻的印象。透過抽象掉爭議解決等複雜的部分,它讓開發者更容易專注於他們的應用所特有的規則和資料結構。(連結:https://blog.statechannels.org/do-we-still-need-state-channels/)

如果開發者能夠更容易地使用這樣的工具包,那麼我們可能會看到一些真正的創造性應用出現。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;