以太坊第2層擴容方案:State Channels、Plasma和Truebit
編者按:本文來自編者按:本文來自,譯者JohnJiangLA,校對者foxxnuaa Zheaoli;原文來自medium,作者Josh Stark;Odaily經授權轉載。

;Odaily經授權轉載。
;Odaily經授權轉載。
;Odaily經授權轉載。
賓夕法尼亞州Tunkhannock 地區鐵路高架橋(cc)。古羅馬的建築理念在新時代的使用。
對於以太坊來說2018 年是著力基礎建設的一年。今年是初期用戶來測試網絡極限的一年,並將重新關註一些擴展以太坊的技術。
以太坊至今仍處於成長初期。現今,它還不是安全的或者可擴展的。技術人員能夠很清楚的認識到這一點。但是在去年,大量ICO 所導致的炒作已經開始誇大目前的網絡能力。構建一個安全,易於使用的去中心化互聯網,受約於一套通用經濟規範並被無數人使用,以太坊和web3 提出的這一美好承諾就在眼前,但只有在建立關鍵基礎設施的前提下才能夠實現。
致力於構建這種基礎架構和擴展以太坊性能的項目通常被稱為擴展方案(scaling solutions) 。這些項目有著不同的形式,並且通常相互兼容或互補。
在這篇長帖中,我想要深入講解一種擴展方案:“off-chain” 或“第二層(layer 2)” 方案。
首先,我們會全面的討論下以太坊(以及所有公有的區塊鏈)的擴展難題。
其次,我們將介紹解決擴展難題的不同方法,區分“layer 1” 和“layer 2” 解決方案。
最後,我們會深入了解第二層(layer 2)解決方案並詳細解釋它是怎樣運作的,我們會談及狀態通道(state channels),Plasma 和Truebit。
本文的重點在於給讀者全面而詳細的講解第二層(layer 2)解決方案的概念與工作原理。但我們不會深入研究代碼或特定實現。相反,我們專注理解用於構建這些系統的經濟機制以及所有第二層技術之間共同的思維模式。
1. 公有區塊鏈的擴展難題
首先,你要知道“擴展”不是一個單一的、特定的問題,它涉及了一系列難題,必須解決這些難題才能使以太坊對全球無數用戶可用。
最常討論的擴展難題是交易通量。目前,以太坊每秒可以處理大約15 筆交易,而Visa 的處理能力則大約在45,000/tps。在去年,一些應用程序(比如Cryptokitties 或偶爾的ICO)已經足夠流行以至於“放緩了”網絡速度並提升了挖礦費用(gas) 的價格。
公有區塊鏈(比如以太坊)最核心的缺陷是要求每一筆交易要被網絡中的每一個節點處理。一筆支付,Cryptokitty 的誕生,部署新的ERC20 合約,每一個以太坊區塊鏈上發生的操作都必須由網絡中的每個節點並行執行。這是設計理念所決定的,也正是由於這種設計理念才使得公有區塊鏈具有權威性。節點不需要依賴其他節點來告訴他們當前區塊鏈的當前狀態,它們會自己計算出來。
這給以太坊的交易通量帶來了根本性的限制:它不能超過我們對於單個節點的設計要求。 。
我們可以要求每個節點做更多的工作,如果我們將塊大小加倍(例如,區塊gas 限制),這意味著每個節點處理每個區塊的工作量大致是之前的兩倍。但是這樣就減弱了系統的分散化理念:節點要做更多的工作意味著性能較差的計算機(比如用戶設備)可能會從網絡中退出,並且挖礦也會更向性能強大的節點運營者集中。
相反,我們需要一種方式使區塊鏈做更多有用的事,但並不是增加單個節點的工作量。
從概念上來說,有兩種可能解決這個問題的方法:
一. 如果每個節點不必並行處理每個操作,會怎樣?
第一種方法是拋棄我們的前提,如果我們可以構建一個每個節點不必處理每個操作的區塊鏈,會怎樣?如果網絡分為兩個部分代替原有網絡,每一個部分都可以獨立運行,會怎樣?
A 部分可以處理一批交易,而同時B 部分可以處理另一批。這實際上會使區塊鏈的交易通量翻倍。因為我們的限制現在能夠被兩個節點同時處理。如果我們可以將區塊鏈分為許多不同的部分,那麼我們可以將區塊鏈的通量提高很多倍。
這是分片(sharding)的思維模式,也是Vitalik 的以太坊研究小組(Ethereum Research group) 和其他社群正在研究的一種擴展方案。一個區塊鏈被分割成叫做shards 的不同部分,每一個部分都可以獨立處理交易。因為分片是在以太坊的基礎級協議中實現的,所以通常被也稱為第一層(layer 1)擴展解決方案,如果你想了解更多有關分片的內容,請查看extensive FAQ 和這篇博文。
二. 如果我們能夠從以太坊現有能力中壓榨出更多有用的業務操作
第二種選擇的方向則相反:不是增加以太坊區塊鏈本身的容量,如果我們可以通過我們已經擁有的能力來做更多的事情,會怎樣?在基礎級別以太坊區塊鏈的生產力都是相同的,但是實際上,我們可以做更多對人和應用程序有用的操作,比如交易,遊戲中的狀態更新,或者簡單的計算。
這是“鏈下(off-chain)” 技術背後的思維邏輯,比如狀態通道(state channels),Plasma 和Truebit。雖然其中每個解決方案都在解決一個不同的問題,它們都通過執行“鏈下”操作而且能夠不在以太坊區塊鏈上運行的同時,仍然保證足夠的安全性和權威性。
這些也被稱為第二層(layer 2) 解決方案,因為它們建立在以太坊主鏈“之上”。他們不需要更改基本級別的協議,相反,它們只是作為作為以太坊上的智能合約,用於與鏈下軟件進行交互。
2. 第二層(layer 2)解決方案是加密經濟解決方案
在深入了解第二層解決方案的細節之前,了解下使其可行的潛在細節是非常重要的。
公有區塊鏈的動力源泉在於加密經濟合約。通過調整激勵措施並用軟件和加密措施保護激勵,我們可以創建一個就內部狀態達成一致的穩定計算機網絡。這是中本聰的白皮書的關鍵內容,現已應用於許多不同的公有區塊鏈(包括比特幣和以太坊)的設計中。
除了一些極端的情況下(比如51% 攻擊),加密經濟合約給了我們一個穩固的核心。我們知道鏈上(on-chain)操作(比如支付,智能合約)可以被看做是寫入去執行。
第二層(layer 2)解決方案背後的關鍵是我們可以將這個穩固的內核用作錨點,一個可以附加其他經濟機制的固定點。這種第二層經濟機制可以擴展公有區塊鏈的可用性。讓我們脫離區塊鏈進行交互操作,並且在需要的情況下仍能可靠地重歸到核心鏈上。
這些構建在以太坊“之上”的層並不總是與鏈上操作具有相同的保障。但是,它們仍然具備足夠的權威性,安全性以及可用性,特別是在終端略微減少時,我們能夠更快的執行操作或維持更低的日常成本。
加密經濟並不是隨著中本聰的白皮書而開始或結束,它是最適合我們去學習與應用的技術主體。不僅存在於核心協議的設計中,也存在於第二層系統的設計中,它們擴展了底層區塊鏈的功能性。
一. 狀態通道(State channels)
狀態通道(State Channel)是一種用於執行交易和其他狀態更新的“off-chain”技術。可是,一個狀態通道“中”發生的事務仍保持了很高的安全性和權威性。如果出現任何問題,我們仍然可以選擇重歸到“穩固內核”上,它的權威性是建立在鏈上交易基礎上。
大部分讀者會熟悉存在多年的概念——支付通道(payment channel),它最近通過在比特幣上借助閃電網絡(lightning network)實現了。狀態通道是支付通道泛化出來的形式,它不僅可用於支付,還可用於區塊鏈上任意的“狀態更新”,比如智能合約中的更改。在2015 年,Jeff Coleman 第一次詳細介紹了狀態通道。
解釋狀態通道的運作方式的最佳方法就是來看一個樣例。請記住這是一個概念性的解釋,也就是說我們不會牽涉到具體實現的技術細節。
現在試想一下,愛麗絲和鮑勃想玩一場井字遊戲,贏家可以獲得一個以太幣。實現這一目的的最簡單方法就是在以太坊上創建一個智能合約,實現井字遊戲規則並跟踪每個玩家的動作。每次玩家想要移動時,他們都會向合約發送一個交易。當一名玩家獲勝時,根據規則,合約會付給贏家一個以太幣。
這樣是可行的,但是效率低下且速度慢。愛麗絲和鮑勃正在使用整個以太網絡處理他們的遊戲過程,這對於他們的需求來說有點不合時宜。他們每一步都需要支付挖礦費用(gas),並且還要在進行遊戲的下一步之前都要等待挖礦完成。
不過,我們可以設計一個新的系統,它能使愛麗絲和鮑勃在井字遊戲的過程中產生盡可能少的鏈上操作。愛麗絲和鮑勃能夠以鏈下的方式更新遊戲狀態,同時在需要時仍能將其重歸到以太坊主鏈上。我們將這樣一個系統稱之為“狀態通道”。
首先,我們在以太坊主鏈上創建一個能夠理解井字遊戲規則的智能合約“Judge”,同時它也能夠認定愛麗絲和鮑勃是我們遊戲中的兩位玩家。該合約持有一個以太的獎勵。
然後,愛麗絲和鮑勃開始玩遊戲。愛麗絲創建並簽署一個交易,它描述了她遊戲的第一步,然後將其發送給鮑勃,鮑勃也簽署了它,再將簽名後的版本發回並保留一份副本。然後鮑勃也創建並簽署一個描述他遊戲中第一步的交易,並發送給愛麗絲,她也會簽署它,再將其返回,並保留一份副本,他們每一次都會這樣互相更新遊戲的當前狀態。每一筆交易都包含一個“隨機數”,這樣我們就可以直接知道遊戲中走棋的順序。"到目前為止,還沒有發生任何鏈上的操作。愛麗絲和鮑勃只是通過互聯網向彼此發送交易,但沒有任何事情涉及到區塊鏈。但是,所有交易都可以發送給Judge 合約,也就是說,它們是有效的以太坊交易。你可以把這看做兩人在彼此來回填寫了一系列經過區塊鏈認證的支票。實際上,並沒有錢從銀行中存入或取出,但是他倆都有一堆可以隨時存入的支票。"
當愛麗絲和鮑勃結束遊戲時(可能是因為愛麗絲贏了),他們可以通過向Judge 合約提交最終狀態(比如,交易列表)來關閉該通道,這樣就只用付一次交易費用。 Judge 會確定雙方都簽署了這個“最終狀態”,並等待一段時間來確保沒人會對結果提出合理質疑,然後向愛麗絲支付一個以太幣的獎勵。
為什麼我們需要設置一個讓Judge 合約等待一下的
假設,鮑勃並沒有給Judge 發送一份真實的最終狀態,而是發送一份之前他贏了愛麗絲的狀態。這時如果Judge 是一個非智能合約,它自己根本無法得知這個狀態是否是最近的狀態。
特性和限制
而質疑時間給了愛麗絲一個機會能夠證明鮑勃提交了虛假的遊戲最終狀態。如果有更近期的狀態,她就會有一份已簽名交易的副本,並可以將其提供給Judge。 Judge 可以通過檢查隨機數來判斷愛麗絲的版本是否更新,然後鮑勃盜取勝利的企圖就能被駁回了。
特性和限制
狀態通道在許多應用中都很有用,它們對於在鏈上執行操作是一種嚴密的改進。但在決定應用程序是否適合被通道化時,請特別注意需要做出的一些特定折中:
狀態通道依賴於可靠性。如果愛麗絲在質疑時間內掉線了(也許是鮑勃不顧一切地想要贏下獎品,而破壞了她家的互聯網連接),她可能無法在質疑時間內做出回應。但是,愛麗絲可以付款給其他人,讓其保存一份她的狀態副本,並作為她的權益代表,以保持系統的可靠性。
狀態通道在需要長期交換大量狀態更新的情況下非常有用。這是因為部署Judge 合約時創建一個通道會產生初始成本。但是一旦部署完成,該通道內每一個狀態更新的成本都會很低。
狀態通道最適於有一組明確參與者的應用程序。這是因為Judge 合約必須始終知曉所有參與到給定通道的實體(比如,地址)。我們可以增加或刪除用戶,但是每次都需要更改合約。
狀態通道有很強的隱私屬性。因為一切都發生在參與者之間的通道“內”,而不是公共廣播並記錄在鏈上。只有開啟和關閉交易必須公開。
正文
正文
二. Plasma
正文
二. Plasma

plasma.io/plasma.pdf
2017 年8 月11 日,Vitalik Buterin 和Joseph Poon 發表了一篇題為Plasma: Autonomous Smart Contracts的文檔。這份文檔介紹了一種新技術,它能使以太坊每秒可以處理的遠比現在更多的事務。
和狀態通道一樣,Plasma 是一種用於管理鏈下交易的技術,同時依靠底層的以太坊區塊鏈來實現其安全性。但是Plasma 採用了一種新思路,它是通過創建依附於“主”以太坊區塊鏈的“子”區塊鏈。這些子鏈又可以循序產生它們自己的子鏈,並能依次循環往復。
其結果是我們可以在子鏈層級中執行許多複雜的操作,在與以太坊主鏈保持最低限度交互的情況下,運行擁有數千名用戶的完整應用程序。 Plasma 子鏈可以更快遷移,並承擔更低的交易費用,因為其上的操作無需在整個以太坊區塊鏈上進行重複。
為了弄清楚Plasma 的運行原理,我們來看一個其如何被運用的樣例。
試想你正在創建一個基於以太坊的卡牌交換遊戲。這些卡牌是一些ERC 721 不可替代的令牌(比如Cryptokitties),但是擁有一些可以讓玩家相互對戰的特徵和屬性,這有點像爐石傳說或者萬智牌。這些類型的複雜操作在鏈上執行代價非常大,所以你決定在你的應用程序中使用Plasma 作為替代方案。
首先,我們在以太坊主鏈上創建一系列的智能合約,它們可作為Plasma 子鏈的“根節點”。 Plasma 根節點包含了子鏈的一些基本“狀態交易規則”(諸如“交易無法消費已消費過的資產”),也記錄了子鏈狀態的哈希值,並建立一種允許用戶在以太坊主鏈和子鏈間轉移資產的“橋接”服務。
然後,創建我們的子鏈。子鏈可以擁有自己的共識算法,在這個例子中,我們假設它使用了Proof of Authority (PoA),這是一種依賴可信區塊生產者(比如,驗證者)的簡單共識機制。在“工作量證明”系統中,區塊生產者和礦工的功能類似,它們接收交易,形成區塊並收取交易費用的節點。為了讓樣例簡單點,我們假設你(也就是創建遊戲的公司)是創建區塊的唯一實體,即你的公司運營幾個節點,這些節點就是子鏈的區塊生產者。
一旦子鏈創建好並生效後,區塊生產者會週期性的向根節點合約發出提交。也就是他們實際上在說“我提交的X 是子鏈中當前最新的區塊”。這些提交被當做子鏈中事務的證明,記錄在鏈上的Plasma 根節點裡。
現在子鏈也準備好了,我們可以創建卡牌交換遊戲的基本組件。這些卡片遵循ERC721,在以太坊主鏈上初始化,然後由Plasma 根節點轉移到子鏈上。這裡引入了一個關鍵點:Plasma 可以擴展我們與基於區塊鏈的數字資產之間的交互,但是這些資產應當是首先由以太坊主鏈創建的。然後,我們將實際的遊戲應用程序以智能合約的方式部署到子鏈上,這樣子鏈就包含了遊戲所有的邏輯和規則。
當用戶想要玩遊戲時,他們只需要和子鏈進行交互。他們可以持有財產(ERC721 卡牌),為了以太幣購買並交換它們,與其他用戶對戰,以及其他遊戲中允許的行為,而這些過程都不需要與主鏈進行交互。因為只有很少的節點(比如,區塊生產者)才需要處理交易,這樣費用就會降低很多,操作也能更快。
但是這種模式安全嗎?
通過將操作從主鏈遷移到子鏈上的方式,我們明顯可以執行更多的操作了。但是這樣安全嗎?發生在子鏈上的交易是否具備權威性?畢竟,我們方才描述的系統只有一個中心實體控制著子鏈的區塊生產。這樣不是中心化嗎?這樣公司不是隨時都能竊取你的資產或者拿走你的收藏卡牌嗎?
簡單來說,即使是在子鏈中完全由一個實體完全控制區塊生產的情景下,Plasma 也能做出你可以隨時將你的資產收回到主鏈上的基本承諾。如果一個區塊生產者開始表現出敵意,最壞的情況也只是強迫你離開這個子鏈。
Plasma 還創建了一種防止利用欺詐的機制。 Plasma 包含了一種任何人(包括你)都可以向根節點合約發布欺詐證明(fraud proof)的機制,這樣就可以證明區塊生產者作弊了。這個欺詐證明會包含之前區塊的信息,並且允許我們根據子鏈中的狀態交易規則,錯誤的區塊並不能正確接上之前的狀態。如果欺詐被證實,則子鏈回滾到前一個區塊。更妙的是,我們還構建了一種簽出錯誤區塊的區塊生產者會被處罰的體系,這些區塊生產者會因此丟失一個鏈上押金。

圖片描述
在這種情況下,這個方案就是為了讓愛麗絲收回資產並脫離子鏈而準備的。根本上來說,愛麗絲向根節點合約提交了一份“欺詐證明”。在一段任何人都可以質疑證明(比如,顯示一些後面的合法區塊證明實際上她消費了這些資產)的延遲時段後,愛麗絲的資產將會被移回到以太坊主鏈上。

圖片描述
圖片描述
圖片描述
最後,區塊生產者可以監察子鏈中的用戶。如果區塊生成者願意,他們可以直接不在其區塊中不包含實際事務,從而有效阻止用戶在子鏈上執行任何操作。如上所述,這個解決方案再一次的直接將我們所有的資產收回到以太坊主鏈上。
但是,取出資產本身也會帶來風險。其中一個憂慮就是如果所有使用這一子鏈的用戶在同一時刻都要取出資產會怎樣。在這樣一個大量取出的情況下,以太坊主鍊主鏈上可能沒有足夠的能力處理每個人在質疑期內的交易,也就意味著用戶可能會失去資金。雖然有許多可行的技術能夠防止這種情況發生,例如,通過延長質疑時間來適應取出資產的需求。
值得注意的是,所有區塊生產者都是由一個實體控制這種情況並不是必定的,這只是我們案例中的極端個例。我們可以創建創建區塊生產者分佈在不同實體間的子鏈,即像公有區塊一樣真正地去中心化。在這些情況下,區塊鏈生產者按照上述方式交互的風險更小,而且用戶必須將資產轉移回以太坊主鏈的風險也更小。
現在我們已經介紹了狀態通道和Plasma,有幾點值得比較下。
III. Truebit
它們之間一個不同之處在於,當狀態通道中所有利益方都一致同意提現,它可以立即提現。如果愛麗絲和鮑勃同意關閉通道並撤回它們的資金。只要他們都認同最終狀態,他們就可以立即取得他們的資產。這在Plasma 上並不可能實現,如上所述,用戶在取出資產的過程中必須包含一個質疑時間。
與Plasma 相比,狀態通道在每筆交易上更便宜,而且速度更快。這意味著我們可以在Plasma 子鏈上建立狀態通道。例如,一個應用程序中兩個用戶在進行一系列的小型交易。在子鏈上建立一個狀態通道應該會比直接在子鏈上執行每個交易更加便宜和迅速。
最後,需要注意的是這部分講解缺失了大量細節。 Plasma 本身還處於非常起始的階段。如果你有興趣了解Plasma 現在的情況,請查看Vitalik 最近的一個關於“Minimal Viable plasma” 的提議(即抽離出plasma 的實現過程)。一個台灣的團隊正在進行這項工作,可以在這個分支中查看。 OmiseGo 正在研究他們的分佈式交易的實現,他們在這裡發布了最近更新進展信息。
Truebit 是一種幫助以太坊在鏈下進行繁重或者復雜運算的技術。它對於提高以太坊區塊鏈的總交易通量更有效,這使得它與狀態通道和Plasma 不一樣。正如我們在開篇部分討論的那樣,擴展是一個多方面的難題,需要的不僅僅是更高的交易通量。 Truebit 不會讓我們做更多的交易,但是它可以讓基於以太坊的應用程序處理更複雜的事務並仍能被主鏈驗證。
這就讓我們能夠對以太坊應用程序做一些有用的操作,這些操作的計算成本太高,無法在鏈上執行。例如,驗證來自其他區塊鏈的簡單支付驗證(SPV)證明,以太坊智能合約可以通過這個驗證“檢查”交易是否發生在另一個鏈上(比如比特幣或者狗幣)。
我們來看一個例子。試想你有一些高代價計算(比如SPV 證明)需要作為一個以太坊應用程序的一部分執行。因為SPV 證明的計算成本太高了,你不能簡單地將其作為以太坊主鏈上的智能合約的一部分。請牢記,因為每個節點必須並行執行該操作,所以在以太坊上執行任何計算的成本都非常高。以太坊中的區塊都有最大費用(gas)限制,它用於限制該區塊中所有事務組合在一起能夠完成的計算總量。但是,SPV 證明的計算量實在太大,即使它只是其中僅有的交易,仍需要許多倍單個區塊的全部費用限制。
由於驗證遊戲是在鏈上執行的,因此它不能簡單地計算結果(這會推翻整個系統的設計初衷,如果可以在鏈上執行計算,我們也就不需要Truebit 了)。相反,我們要求解算機和挑戰者確定他們意見不一致的特定操作。實際上,我們支持雙方到一個角落,找出導致它們對結果不一致的具體代碼行。

圖片描述
圖片描述
如果你想了解更多關於Truebit 的信息,你可以查看這份文檔,或者Simon de la Rouviere 寫的這篇博文。
結論
結論
結論
結論
第二層解決方案有著共同的遠見。一旦我們得到由公有區塊鏈提供的穩定內核,就可以將其作為加密經濟的錨點,擴展出無限的區塊鏈應用。
現在我們已經對一些樣例進行了調查,這樣就可以更具體地了解第二層解決方案怎麼實現這種遠見。第二層解決方案中運用的經濟機制通常是交互遊戲:它們通過為各方創造激勵以使其相互競爭或彼此“檢查”工作。由於我們激發了另一方出示證實錯誤信息的強烈動機,因此區塊鏈應用程序可以假定某個給定的聲明是正確的。
在狀態通道方案中,就是通過給各方一個“反駁”對方的機會,來確定通道的最終狀態。在Plasma 方案中,就是如何管理欺詐證明和提現。在Truebit 方案中,就是通過激勵挑戰者證明解算機是錯誤的,從而保證解算機給出正確結果。
這些系統將有助於解決將以太坊擴展到全球用戶群過程中所涉及的一系列挑戰。一些系統,像狀態通道和Plasma ,將會增加平台的交易通量。其他系統,像Truebit,將能夠作為智能合約的一部分進行更多的複雜計算,創建出新的使用案例。
這三個例子只能代表加密經濟擴展方案可能性設計的一小部分。我們甚至還沒有談到像Cosmos 或Polkadot 這樣的“區塊鏈間協議”(儘管這是“第二層”解決方案或另一篇博文的內容)。我們還是應該期待能夠發明出意想不到的新型第二層系統,來改進現有模型或在速度,終端和開銷做出新的權衡。
比任何獨特的第二層解決方案更重要的是進一步發展潛在的技術和機制,使這些加密經濟設計成為可能。
這些第二層擴展方案有力證明了像以太坊這樣的可編程區塊鏈的長期價值。只有在程序化區塊鏈上才有可能建立基於第二層解決方案的經濟機制:你需要用腳本語言實現執行交互式遊戲的程序。因為比特幣等區塊鏈只提供了有限的腳本功能,這對於它們來說很困難(或者有些情況下,比如Plasma,這是完全不可能實現的)。
以太坊第二層方案的出現讓我們能在速度、終端和開銷間做出新的權衡。這是底層區塊鏈能夠適用於更多種類的應用程序。因此面對不同威脅模型的不同類型應用程序會自然的選擇不同的權衡模式。對於需要保障區域性(乃至國家性的)範圍內的大規模交易時,我們使用主鏈。對於更偏重速度的數字資產交易,我們可以使用Plasma。第二層方案讓我們能夠在不損害底層區塊鏈的前提下做出這些折中措施,並保持去中心化和權威性。


