狀態通道
頁面最後更新時間: 2025年10月21日
狀態通道允許參與者安全地進行鏈下交易,同時將與以太坊主網的互動保持在最低水平。 通道對等方可進行任意數量的鏈下交易,同時只需提交兩個鏈上交易來開啟和關閉通道。 這允許極高的交易吞吐量並降低使用者的成本。
先決條件
什麼是通道?
以太坊等公共區塊鏈因其分散式架構,即鏈上交易必須由所有節點執行,而面臨可擴展性挑戰。 節點必須能夠使用普通硬體來處理區塊中的交易量,為了保持網路去中心化而限制了交易吞吐量。 區塊鏈通道透過讓使用者在鏈下互動,同時仍然依賴主鏈的安全性進行最終結算,解決了這個問題。
通道是簡單的點對點協定,它讓雙方可以在彼此之間進行多筆交易,然後只將最終結果發佈到區塊鏈。 通道使用密碼學證明產生的摘要資料確實是一組有效中間交易的結果。 「多簽」 智能合約確保交易由正確的各方簽署。
透過通道,狀態變更由相關各方執行和驗證,最大限度地減少了以太坊執行層上的計算。 這減少了以太坊的擁堵並提高了使用者的交易處理速度。
每個通道都由運行在以太坊上的多重簽名智能合約管理。 要開啟通道,參與者在鏈上部署通道合約並向其中存入資金。 雙方共同簽署狀態更新來初始化通道的狀態,之後他們可以快速及自由地進行鏈下交易。
若要關閉通道,參與者會在鏈上提交最後商定的通道狀態。 之後,智慧型合約會根據每位參與者在通道最終狀態的餘額來分配鎖定的資金。
對於一些預先定義的參與者希望以高頻率進行交易而不產生可見開銷的情況,點對點通道特別適用。 區塊鏈通道分為兩類:支付通道和狀態通道。
支付通道
將支付通道描述成由兩個使用者共同維護的「雙向帳本」最為恰當。 帳本的初始餘額是通道開放階段鎖定到鏈上合約的存款總和。 支付通道轉帳可以立刻執行,除了最初建立一次性鏈上通道以及通道的最終關閉外,其餘部分無需區塊鏈實際參與。
帳本餘額的更新(即支付通道的狀態)需要通道中所有方批准。 通道更新在所有通道參與者簽署后被視爲最終確定,這和以太坊上的交易非常相似。
支付通道是最早的擴容解決方案之一,用於最大限度減少因簡單使用者互動所產生的高成本鏈上活動(例如,ETH 傳送、原子交換、小額支付)。 通道參與者彼此之間可以進行不限數額的即時、無費用交易,只要他們傳送的净總和不超過存入的代幣。
狀態通道
除了支援鏈下支付以外,支付通道尚未被證明可用於處理通用狀態轉換邏輯。 建立狀態通道是爲了解決該問題,並使通道可用於擴張通用計算。
狀態通道與支付通道仍有許多共同點。 例如,當使用者透過交換加密簽名的訊息(交易)進行互動時,其他通道參與者也必須簽署訊息。 如果提議的狀態更新沒有獲得所有參與者的簽名,則被認爲無效。
但是,除了保存使用者的餘額之外,通道還會追蹤合約存儲的目前狀態(即合約變數的值)。
這使得兩個使用者之間可以在鏈下執行智能合約。 在這種情況下,智慧型合約内部狀態的更新只需由建立通道的對等方進行批准。
儘管這解決了先前描述的可擴展性問題,但它會影響安全性。 在以太坊上,狀態轉換的有效性由網路的共識協定强制執行。 因此,不可能對智慧型合約的狀態提議無效的更新,或修改智慧型合約的執行。
狀態通道沒有同樣的安全保證。 在某種程度上,狀態通道是主網的縮小版。 由於執行規則的參與者有限,發生惡意行爲(例如,提議無效狀態更新)的可能性就會增加。 狀態通道的安全性來自基於的爭議仲裁系統。
狀態通道如何運作
狀態通道中的活動基本上都是一系列涉及使用者和區塊鏈系統的互動。 使用者大多數情況下在鏈下相互交流,只在開啟通道、關閉通道或解決參與者之間的潛在爭議時才與底層區塊鏈互動。
以下部分概述了狀態通道的基本工作流程:
開啓通道
開啟通道需要參與者將資金存入主網上的智慧型合約。 存款還可以用作虛擬標簽,因此參與者可以自由交易,而無需立即結算付款。 只有當通道在鏈上最終確定時,各方才會相互結算並提取標簽的餘額。
該存款還可以作爲一種保證金,保證每個參與者誠實行事。 如果在爭議解決階段判定存款者有惡意行爲,合約將罰沒其存款。
通道對等方必須簽署一個他們一致同意的初始狀態。 初始狀態充當通道的創世塊,之後使用者可以開始交易。
使用通道
在初始化通道的狀態后,對等方進行互動,他們簽署交易並互相發送交易進行批准。 參與者使用這些交易發起狀態更新,並簽署來自其他人的狀態更新。 每筆交易都包含以下内容:
-
一個 nonce,充當交易的獨特 ID 並防止回放攻擊。 它還標識狀態更新發生的順序(這對於爭議解決很重要)
-
通道的原有狀態
-
通道的新狀態
-
觸發狀態轉換的交易(例如,Alice 向 Bob 發送 5 枚以太幣)
通道中的狀態更新不會像使用者在主網上互動時那樣廣播到鏈上,這與狀態通道最大限度減少鏈上足跡的目標相符。 只要參與者一致同意狀態更新,它們就與以太坊交易一樣被最終確定。 如果出現爭議,參與者只需要依賴主網的共識。
關閉通道
關閉狀態通道需要將通道的各方一致同意的最終狀態提交到鏈上智能合約。 狀態更新中引用的詳情包括每個參與者的移動次數和批准交易的清單。
在驗證狀態更新有效(即由各方簽署)之後,智慧型合約最終確定通道狀態並根據通道的結果分發鎖定的資金。 鏈下支付套用至以太坊狀態,每個參與者都會收到其剩餘的鎖定資金部分。
上述場景表示了成功用例下的情況。 有時,使用者可能無法達成一致並最終確定通道狀態(失敗用例)。 以下任何一種情況都可能導致失敗:
-
參與者離綫且未能提議狀態轉換
-
參與者拒絕共同簽署有效的狀態更新
-
參與者試圖透過向鏈上合約提議舊狀態更新來最終確定通道
-
參與者提議無效的狀態轉換供其他人簽署
每當通道中的參與者之間無法達成共識時,最後的選擇都是依靠主網的共識來執行通道的最終有效狀態。 在這情況下,關閉狀態通道就需要在鏈上解決爭議。
解決爭議
通常,通道中的各方事先同意關閉通道並共同簽署最新的狀態轉換,然後將其提交到智慧型合約。 一旦更新在鏈上獲得批准,鏈下智能合約的執行就會結束,參與者會帶著他們的錢退出通道。
然而,一方可以提交鏈上請求以結束智能合約的執行,並最終確定通道 - 而無需等待對方的批准。 如果出現上述任何破壞共識的情況,任何一方都可以觸發鏈上合約以關閉通道並分發資金。 這樣就實現了去信任性,確保誠實的參與者可以隨時退出他們的存款,不論另一方的行為如何。
要處理通道退出,使用者必須將應用程式的最後有效狀態更新提交給鏈上合約。 如果狀態更新得到證實(即帶有所有各方的簽名),那麼資金就會按照有利於他們的方式重新分發。
但是,執行單一使用者退出請求時會有延遲。 如果關閉通道的請求獲得一致批准,則立即執行鏈上退出交易。
由於存在詐欺行為的可能性,延遲會在單一使用者退出中發揮作用。 例如,通道參與者可能嘗試透過在鏈上提交較早的狀態更新來最終確定以太坊上的通道。
作爲一種對策,狀態通道讓誠實的使用者可以透過在鏈上提交最新的有效通道狀態,來挑戰無效的狀態更新。 狀態通道的設計讓一致同意的較新狀態更新優先於較早的狀態更新。
一旦一個對等方觸發了鏈上的爭議解決系統,另一方需要在一段限制時間(稱爲挑戰窗口)内做出響應。 這樣使用者就可以挑戰退出交易,尤其是在另一方套用過時更新的情況下。
無論是哪種情況,通道使用者總是擁有可靠的最終性保證:如果他們擁有的狀態轉換由所有成員簽署,並且為最近的更新,它就與常規鏈上交易具有相同的最終性。 他們仍必須在鏈上挑戰另一方,但唯一可能的結果是最終確定他們擁有的最後一個有效狀態。
狀態通道如何與以太坊互動?
儘管狀態通道作爲鏈外協定存在,但其具有一個鏈上部分:開啟通道時部署在以太坊上的智慧型合約。 該合約控制存入通道的資產,驗證狀態更新,及仲裁參與者之間的爭議。
跟二層網路擴張解決方案不同,狀態通道不會向主網發佈交易資料或狀態承諾。 但是,它們與主網的連接比側鏈更緊密,這讓它們更安全。
狀態通道仰賴主要以太坊協定來實現以下功能:
1. 活躍性
開啟通道時部署的鏈上合約負責通道的功能。 如果合約在以太坊上運行,則該通道始終可供使用。 相反地,即使主網正常運作,側鏈也可能隨時失效,讓使用者的資金面臨風險。
2. 安全性
某程度上,狀態通道依賴以太坊來提供安全性,並保護使用者不受惡意對等方的侵害。 如後面部分所討論的,通道使用詐欺證明機制,允許使用者挑戰使用無效或過時更新最終確定通道狀態的嘗試。
在此情況下,誠實參與者將通道的最新有效狀態作為詐欺證明,提供給鏈上合約進行驗證。 詐欺證明使相互不信任的各方能夠進行鏈外交易,而不會讓他們的資金在此過程中面臨風險。
3 最終性
由通道使用者集體簽署的狀態更新被認為與鏈上交易一樣的好。 不過,所有通道內的活動只有在以太坊上的通道關閉時,才能達到真正的最終性。
在樂觀情況下,雙方可以合作、簽署最終狀態更新並在鏈上提交以關閉通道,然後根據通道的最終狀態分發資金。 在悲觀情況下,有人試圖透過在鏈上發佈不正確的狀態更新來進行欺騙,他們的交易在挑戰窗口結束之前不會最終確定。
虛擬狀態通道
狀態通道的簡單實作是,在兩個使用者希望於鏈外執行應用程式時部署新合約。 這不僅不可行,而且還否定了狀態通道的成本效益(鏈上交易成本會迅速增加)。
為了解決此問題,「虛擬通道」應運而生。 與需要鏈上交易才能開啟和終止的常規通道不同,虛擬通道可以在不與主鏈互動的情況下開啟、執行並最終確定。 甚至可以使用這種方法在鏈外解決爭端。
此系統依賴已在鏈上獲得資金的所謂「帳本通道」的存在。 雙方之間的虛擬通道可以建立在現有的帳本通道之上,並由帳本通道的所有者充當中間人。
每條虛擬通道的使用者透過新的合約執行個體交互,帳本通道能夠支援多個合約執行個體。 帳本通道的狀態還包含多個合約存儲狀態,允許在鏈外不同使用者之間平行執行應用程式。
就像常規通道一樣,使用者交換狀態更新以推進狀態機器。 除非出現爭議,只需在開啟或終止通道時聯繫中介機構。
虛擬支付通道
虛擬支付通道的運作原理與狀態通道相同:連線到同一網路的參與者可以傳送訊息,而無需在鏈上開啟新通道。 在虛擬支付通道中,價值傳送透過一個或多個中間人執行,並保證只有預期的接收者能夠接收傳送的資金。
狀態通道的應用
支付
早期的區塊鏈通道是簡單的協定,允許兩個參與者在鏈外進行快速、低費用的傳送,而無需在主網上支付高額交易費。 如今,支付通道對於為以太幣和代幣的交換和存款而設計的應用程式仍然有用。
基於通道的支付具有以下優點:
-
吞吐量:每條通道的鏈下交易數量與以太坊的吞吐量無關,而是受各種因素所影響,尤其是區塊大小和出塊時間。 透過在鏈下執行交易,區塊鏈通道可以達到更高吞吐量。
-
“”隱私“”:因爲通道存在於鏈下,參與者之間的互動細節不會記錄在以太坊的公共區塊鏈上。 通道使用者只需在向通道中存入資金和關閉通道或解決爭議時才作鏈上交互。 因此,通道適用於希望進行更多私密交易的個人。
-
延遲:如果雙方合作,通道參與者之間進行的鏈下交易可以即時結算,這減少了延遲。 相反,在主網上發送交易需要等待節點進行處理,產生一個包含該交易的新區塊,並達成共識。 使用者也可能需要等待更多的區塊確認,交易才能視為最終確定。
-
成本:當一組參與者需要長時間交換大量狀態更新時,狀態通道尤其有用。 唯一出現的費用是開啟和關閉狀態通道智慧型合約;在通道開啟和關閉之間的每個狀態變更的成本都比上一個更低,因爲結算成本是相應分配的。
在二層網路解決方案(例如卷軸)上實作狀態通道,可能會讓它們在支付方面更具吸引力。 儘管通道可以提供便宜的支付,但在通道開啟階段在主網上建立鏈上合約的成本可能會非常昂貴 - 尤其是當燃料費用飆升時。 基於以太坊的卷軸提供較低的交易費opens in a new tab ,並且可以透過降低設定費用來減少通道參與者的開銷。
微交易
微交易是指低價值的付款(例如遠低於一美元),企業無法在不造成損失的情況下處理這些交易。 這些實體必須向支付服務提供者付款,但若客戶付款的利潤太低而無法獲利,支付服務提供者就無法處理付款。
支付通道透過減少與微交易相關的開銷來解決這個問題。 例如,網際網路提供者 (ISP) 可以為客戶開啟支付通道,允許他們在每次使用該服務時逐一進行小額支付。
除了開啟和關閉通道的成本外,參與者不會在微交易上產生進一步的成本(無燃料費用)。 這是一種雙贏局面,因爲客戶在爲服務支付多少費用方面擁有更多靈活性,並且企業也不會失去有利可圖的小額交易。
去中心化應用程式
跟支付通道一樣,狀態通道可以按狀態機器的最終狀態進行有條件支付。 狀態通道還可以支援任意狀態轉換邏輯,使其可用於執行鏈下通用應用程式。
狀態通道通常僅限於簡單的回合制應用程式,因爲這樣可以更簡單地管理提交到鏈上合約的資金。 此外,由於定期更新鏈下應用程式狀態的參與方數量有限,對不誠實行爲進行懲處相對簡單。
狀態通道應用程式的效率也取決於其設計。 例如,開發者或許可以在鏈上部署一次應用程式通道合約,並允許其他玩家重複使用該應用程式而無需到鏈上。 在這種情況下,初始應用程式通道充當支援多條虛擬通道的帳本通道,每條虛擬通道在鏈下運行應用程式智慧型合約的一個新執行個體。
狀態通道應用程式的一個潛在用例是簡單的雙人遊戲,根據遊戲結果分配資金。 這樣做的好處是,玩家不必互相信任(去信任),鏈上合約而不是玩家控制資金分配和爭議解決(去中心化)。
狀態通道應用程式的其他可能用例包括以太坊名稱服務的名稱所有權、非同質化代幣帳本等等。
原子傳送
早期的支付通道僅限於兩方之間的轉賬,限制了其實用性。 然而,虛擬通道的引入允許個人透過中間人(即多條對等通道)進行傳送,而無需在鏈上開啟新通道。
這種路由支付通常被描述爲「多跳傳送」,屬於原子傳送(即交易的所有部分只能全部成功或者全部失敗)。 原子傳送使用哈希時間鎖定合約 (HTLC)opens in a new tab來確保只有在滿足特定條件時才釋放付款,這降低了另一交易方的風險。
使用狀態通道的缺點
活躍性假設
為確保效率,狀態通道對通道參與者響應爭議的能力設定了時限。 此規則假設對等方將始終在線,以監控通道活動並在必要時應對挑戰。
事實上,使用者可能會因為無法控制的原因而離線(例如網路連線不良、機械故障等)。 如果誠實使用者下線,惡意對等方就可以利用這種情況,將舊的中間狀態提供給裁決者合約並竊取提交的資金。
有些通道會使用「瞭望臺」,這類實體負責代表他人監控鏈上爭議事件並採取必要行動,例如提醒相關方。 然而,這可能會增加使用狀態通道的成本。
資料不可用性
如前述,挑戰無效爭議需要提供狀態通道的最新有效狀態。 這是另一種基於假設的規則,即使用者可以存取通道的最新狀態。
雖然期望通道使用者儲存鏈下應用程式狀態的副本是合理的,但這些資料可能會因錯誤或機械故障而遺失。 如果使用者沒有備份資料,就只能希望另一方不要使用其擁有的舊狀態轉換,最終確定無效的退出請求。
以太坊使用者不必處理這個問題,因為網路會強制執行資料可用性規則。 交易資料會由所有節點儲存和傳播,並在必要時供使用者下載。
流動性問題
要建立區塊鏈通道,參與者需要在通道的整個生命週期將資金鎖定在鏈上智能合約中。 這降低了通道使用者的流動性,也限制通道只能由那些有財力將資金一直鎖定在主網上的人使用。
然而,鏈下服務提供者 (OSP) 營運的帳本通道可以減少使用者的流動性問題。 連線到帳本通道的兩個對等方可以建立一條虛擬通道,他們可以隨時在鏈下完全開啟和最終確定該通道。
鏈下服務提供者還可以開啟包含多個對等方的通道,讓通道可用於路由支付。 當然,使用者必須向鏈外服務提供者支付服務費用,這對某些人來說可能不可取。
悲傷攻擊
悲傷攻擊是基於詐欺證明的系統的常見特徵。 悲傷攻擊不會讓攻擊者直接獲益,但會讓受害者悲傷(即傷害),因而得名。
詐欺證明容易受到悲傷攻擊,因為即使是無效的爭議,誠實的一方必須對每一爭議作出回應,否則會面臨失去資金的風險。 惡意參與者可以決定在鏈上重複發布過時的狀態轉換,迫使誠實方以有效狀態回應。 這類鏈上交易的成本會迅速增加,導致誠實方在過程中受損。
預定義的參與者集合
根據設計,組成狀態通道的參與者數量在通道整個生命週期中固定不變。 這是因為更新參與者集會使通道的運作複雜化,尤其是在向通道存入資金或解決爭議時。 新增或移除參與者還需要進行額外的鏈上活動,這會增加使用者的開銷。
雖然這讓狀態通道更容易推斷,但它將通道設計的實用性局限於應用程式開發者。 這在一定程度上解釋了為何狀態通道已被其他擴張解決方案,例如卷軸所取代。
平行交易處理
狀態通道中的參與者輪流發送狀態更新,這就是為什麼狀態通道最適合「回合制應用程式」(例如兩人棋類遊戲)的原因。 這樣就無需處理同時出現的狀態更新,並減少了鏈上合約為懲罰提出過時更新的發布者而必須完成的工作。 然而,這種設計的副作用是交易相互依賴,增加了延遲並減弱了整體的使用者體驗。
一些狀態通道透過採用「全雙工」設計來解決這個問題,該設計將鏈下狀態分成兩個單向「單工」狀態,允許並發狀態更新。 這種設計提高了鏈下吞吐量並減少了交易延遲。
使用狀態通道
有多項專案提供狀態通道實作,歡迎整合到你的去中心化應用程式:
- Connextopens in a new tab
- Kchannelsopens in a new tab
- Perunopens in a new tab
- Raidenopens in a new tab
- Statechannels.orgopens in a new tab
延伸閱讀
狀態通道
- 理解以太坊的 Layer 2 擴容解決方案:狀態通道、Plasma 和 Truebitopens in a new tab – Josh Stark,2018 年 2 月 12 日
- 狀態通道 - 釋義opens in a new tab 2015 年 11 月 6 日 - Jeff Coleman
- 狀態通道基本概念opens in a new tab District0x
- 區塊鏈狀態通道:前沿技術概覽opens in a new tab
知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!