在過去的文章裏,我們看到了太多關於區塊鏈的內容,卻如水中月鏡中花,讀完依舊迷茫。於是我們本能的反省,是不是區塊鏈真的只有技術人員能懂?其實不然 … 除去市面上故弄玄虛的小衆人羣,其實區塊鏈涵蓋的加密技術、分佈式存儲等,早已經不是什麼新鮮事。有太深入淺出的文章我們沒有讀過,以至於覺得這個領域過於神祕。

今天這篇文章來自 Josh Stark 雖然有 7000 字,看似很長,但通篇沒有廢話沒有故作高深,是爲數不多能將區塊鏈技術原理講的通俗易懂的文章,如果你能耐心讀完,一定會對以太坊、對 layer2 有個全新的認識,可能也會重燃起你對以太坊的信仰。

2018 年是以太坊建設基礎設施的一年。在這一年內,大家對網絡侷限性進行了測試,重新把精力集中到擴容技術上。

以太坊仍然是非常稚嫩的,如今還不夠安全,無法擴展。這是每個熟悉以太坊的人的共識。但是在過去一年裏,由投機驅動的炒作,過分誇大了區塊鏈的能力。

以太坊與 web3——一個安全、易於使用的分佈式網絡,受一套共識機制約束,併爲數十億人使用——仍處於即將到來的狀態,在關鍵基礎設施完善之前,都很難實現。

構建這一基礎設施、擴展以太坊容量的項目,都被稱作擴容方案。有許多不同形式的方案,但往往都是相互兼容或互補的。

在這篇文章中,我將深入探討一種擴容方案:「鏈下」或者「layer2」。

首先,我將討論以太坊(以及所有區塊鏈)擴容需要面臨的挑戰。

其次,我將談到解決擴容問題的不同方案,並闡述「layer1」和「layer2」的不同之處。

第三,我將介紹 layer2,並分析它是如何工作的,特別是狀態通道(state channels)、Plasma、和 Truebit。

本文的重點是讓讀者對 layer2 的工作原理有個全面而詳細的理解。但我不會深入到代碼研究和特定的使用場景。相反,我們專注於讓讀者理解構建這種系統的經濟機制,以及所有 layer2 技術的原理。

01 公有鏈的擴容挑戰

首先,必須要有這樣的概念——「擴容」不是單一的、具體的問題,它是一系列問題,如果以太坊想要爲全球幾十億用戶提供服務,就必須克服這些阻礙。

最普遍的問題就是交易吞吐量。目前,以太坊每秒可以處理 15 筆交易,相較而言,Visa 處理速度可以達到 45000 筆 / 秒。在過去一年裏,因爲類似 Cryptokitties 這樣的應用程序太過流行,導致整個網絡運行速度也開始放緩,交易價格增加。

類似以太坊這樣的公鏈,要求網絡中每一個節點參與處理每一筆交易,這也正是其主要侷限所在。再以太坊上的每個操作——轉賬,Cryptokitty 的誕生,ERC20 合約的生成——都必須由網絡中的每個節點一起執行。這是設計時決定的,也是公鏈權威的保證。節點不需要從外部得知區塊鏈的狀態,它們自己可以解決。

這意味着以太坊的交易吞吐量存在基本限制:不能高於從單個節點獲得的數據的速度。

我們可以要求每個節點做更多的工作。如果我們將區塊大小加倍(不考慮 gas 的限制),這將意味着每個節點所做的工作量大約是現在工作量的兩倍。但這是以犧牲去中心化爲代價的:需要每個節點完成更多的工作,那麼功能較弱的計算機 (如消費者的設備) 就可能會退出網絡,而挖礦的權利將集中到強大的運營商手上。

因此我們需要一種方案,既能不增加單個節點的負荷,又能處理更多交易。

從概念上講,我們可以採取兩種方法來解決這個問題:

1) 如果每個節點不必並行處理每個操作呢?

第一種方法,改變前提:我們是否可以構建一個區塊鏈,鏈內節點都不必參與處理每筆交易呢?是否可以將網絡分成兩個部分,半獨立地運作呢?

分開後,A 部分可以處理一批交易,B 部分也可以處理一部分,這樣區塊鏈交易吞吐量就提高一倍,因爲我們現在設定每兩個節點可以同時工作。如果我們把區塊鏈分成許許多多不同區域,那吞吐量會提高許多倍。

這就是「分片(sharding)」背後的理念,是由以太坊 V 神和其他科研人員提出來的。將一個區塊鏈分成許多不同的「片」,每個「片」都可以獨立處理交易。分片一般是指 layer1 的擴容方案,因爲它是在以太坊的基層協議上實現的。

2) 如果爲以太坊建立協議層網絡呢?

第二種選擇和第一種恰恰相反:與其增加以太坊自身的處理能力,不如在現有的基礎之上採取措施。在以太坊區塊鏈基本層的吞吐量不變的基礎上,嘗試執行更多操作,比如交易、狀態更新或簡單的計算。

這就是「鏈下」技術背後的原理,具體的技術包括狀態通道,Plasma,Truebit。雖然每一種技術旨在解決不同問題,但它們都需要在保證安全性的前提下,進行「鏈下」操作。

這也被稱作 layer2,因爲它們是建立在以太坊主鏈之上的,不需要在基礎層上進行改變,相反,只是作爲與鏈下軟件交互的智能合約存在的。

02 Layer2 是加密經濟學解決方案

在深入解釋 layer2 解決方案前,我們先來了解一下其背後的原理。

公鏈的基本力量在於加密經濟共識。

通過仔細調整激勵措施,並將其與軟件和密碼學結合,我們能夠通過網絡對系統內部達成共識。這也是中本聰白皮書中提到的重點,這點現在已經被應用到許多不同的公鏈中,包括比特幣和以太坊。

加密經濟共識給了我們一個確定性內核——除非發生像 51% 攻擊這樣極端事件,否則所有操作(包括支付,或者智能合約)都將按書寫程序執行。

Layer2 背後的原理是,我們可以將這個確定性內核作爲一個錨——在此基礎之上附加其他經濟機制。Layer2 可以將公有鏈的效用擴展到鏈外,讓我們在鏈外互動成爲可能,在需要的時候,這些互動仍然可以返回到主鏈。

這些 layer 都是建立在以太坊主鏈之上的,所以它並不能持續保證與鏈上操作同樣的安全性。但是仍然可以確保它們是最終地、安全地、實用地——尤其是隻需要犧牲一點操作權限,就可以提高運作效率,降低手續費用。

加密經濟學的起源並不是中本聰的白皮書,但這同樣不是終點——這是我們正在嘗試應用的技術。不僅在覈心協議的設計上,也體現在旨在擴展底層鏈功能的 layer2 的設計中。

03 通道狀態特點和限制

狀態通道(State channels)

狀態通道指的是「鏈下」處理交易和其他操作的一種技術。然而,發生在狀態通道內事物仍然保持着很高的安全性和終結性:如果出了什麼問題,我們仍然可以選擇回到鏈上交易。

很多讀者對支付通道都很熟悉,這個同店已經出現了許多年,最近也在通過閃電網絡(lightning network)在比特幣上實施。狀態通道是支付通道更爲普遍的形式——它們不僅可以處理支付,也可以處理區塊鏈的「狀態更新」——就像智能合約的更改。狀態通道於 2015 年由 Jeff Coleman 率先提出。

通過一個案例我們可以更好理解狀態通道的工作方法。這依然是一個概念性的解釋,我們不會進入特定的技術細節。

比如說 Alice 和 Bob 正在玩三子棋遊戲(tic tac toe),贏家可以獲得 1ETH 作爲獎勵。最簡單的辦法,就是在以太坊上創建一個智能合約,將三子棋遊戲的規則寫入智能合約內,並追蹤每一名玩家棋子的移動軌跡。每次玩家移動棋子時,就發送給合約一次。當一個玩家勝出時,合約將支付 1ETH 給勝出者。

這種做法雖然可行,但是弊端很明顯,效率低、速度慢。整個以太坊網絡都在爲這個遊戲運行,造成資源的浪費。玩家每移動一步棋,都要支付一筆費用,並且,他們還要等礦工完成驗證,才能進行下一步。

這時候,我們就可以設計一個系統,讓 Alice 和 Bob 的互動儘量在鏈下進行。Alice 和 Bob 可以在鏈下更新狀態,並在需要的時候,回到鏈上交易。我們把這種系統稱之爲「狀態通道」。

首先,我們在以太坊主鏈上創建一種智能合約作爲「法官」,並將遊戲規則寫入合約,並識別出 Alice 和 Bob 是本次遊戲的兩個玩家。再給這個合約設置 1ETH 的獎勵。

隨後,Alice 和 Bob 開始互動。Alice 開始走第一步,簽名後發送給 Bob,Bob 也會簽名,並將自己簽名後的版本發回,自己保存一份副本。然後往復操作,每次他們都會更新自己的狀態。每次互動都會包含一次「nonce」,以便於按時間給每次互動排序。

至此,所有操作都不是在鏈上發生。Alice 和 Bob 只是在互聯網中發生了交易,但是所有交易都可以上傳至合約——換句話說,它們依然是有效的以太坊交易。你可以理解成,這兩個人是在來回寫着區塊鏈認證的支票。事實上銀行內並沒有存款或者取款業務,但是每張支票都可以隨時存入。

如果 Alice 和 Bob 的遊戲結束,比如說 Alice 贏了,他們可以上傳最終狀態(交易清單)並關閉通道。這樣,只用支付一次交易費用就可以了。合約可以確保「最終狀態」有雙方簽名,並等待一段時間,以確保結果可靠,最後把 1ETH 的獎金支付給 Alice。

爲什麼需要這個等待時間?

假設 Bob 上傳的不是最終版本,而是他勝利那個版本。但是合約只會執行指令,無法知道哪一個是最終版本。這個時候,設置一段等待時間,可以讓 Alice 提供證據證明自己提供的是最終版本。

Alice 提交雙方簽名的交易副本,合約通過的 nonce 確定 Alice 提交的纔是最終版本,駁回 Bob 的請求。

特點和限制

狀態通道可以適用於很多應用程序,並對傳統的鏈上操作進行了許多升級。但是,在引入狀態通道之前,還必須考慮其他因素:

l 狀態通道依賴可用性。如果 Alice 在過程中斷網了(假設是由於 Bob 迫切想要獲得獎金,而破壞了 Alice 家的網),那麼她可能無法及時提交狀態信息。但儘管如此,Alice 可以付錢讓其他人保存她的交易狀態,並作爲她的代表,維持數據的可用性。

l 如果用戶要進行許多次狀態更新,並且持續時間很長,那麼這種狀態通道就特別適合。因爲雖然在創建狀態通道時需要一筆費用,但是之後維護成本就會特別低。

l 狀態通道適用於那些擁有固定用戶的應用程序。因爲合約必須知道通道內的所有實體(地址)。雖然可以對人員進行增加或者移除,但這都需要在合同上進行更改。

l 狀態通道具有很強的隱私屬性。因爲所有操作都發生在「內部」通道中和參與者之間,而不會在鏈上公佈,也不會記錄在鏈。只有交易的開始和結束狀態是公開的。

l 狀態通道具有即時的終結性。也就是說,一旦雙方對狀態簽名了,就可以認爲是最終的。必要的話,也可以「強制」在鏈上執行。

在 L4,我們正在構建一個 Counterfactual:一個基於以太坊的狀態通道框架。我們通用的、模塊化的模板將允許開發人員在其應用程序中使用狀態通道,不需要自己去研究狀態通道。

另一個值得關注的狀態通道項目是 Raiden,該項目的目標是建立一個支付渠道,使用與閃電網絡類似的模式。這意味着,不僅僅只能與特定人員開設通道,你還可以與一個較大的頻道網絡開設通道,使你可以與同一頻道內的所有成員交易,並無需手續費。

除了 Counterfactual,Raiden 之外,還有幾個基於以太坊的的應用程序。例如,Funfair 爲了它們的去中心化平臺建立的狀態通道(「Fate channels」),Spankchain 爲成年演員建立了單向支付通道(他們也爲 ICO 創建狀態通道),Horizon Gamesis 爲他們的第一款以太坊遊戲創建了狀態通道。

04 Plasma—創造子鏈擴大吞吐量

2017 年 8 月 11 日,Vitalik Buterin 和 Joseph Poon 發表了名爲《Plasma:自主智能合約》的論文。這篇文章介紹了一項全新的,可以提高以太坊的處理效率的技術。

與狀態通道一樣,Plasma 是一種處理鏈下交易的技術,需要依賴以太坊底層技術去對其安全性進行保障。但 Plasma 的切入點不一樣,它是通過在以太坊主鏈上創建「子鏈」(「child」blockchain)。這些「子鏈」,反過來,也可以創建它們自己的「子鏈」,以此類推。

結果便是,我們可以在子鏈級執行許多複雜的操作,運行包含數千名用戶的應用程序,但與以太坊主鏈只需要進行很少的交互。Plasma 子鏈的運行速度能夠非常快,並至收取較低的交易費用,因爲整個過程不需要在以太坊主鏈上發生。

同樣的,我們通過一個例子來理解 Plasma 是如何運作的。

比如說,你在以太坊上製作了一款卡片交易的遊戲。這些卡片就是 ERC721 資產(與 Cryptokitties 類似),但它們具有某些特性和屬性,讓用戶可以通過其對戰和博弈——類似《爐石傳說》(Hearthstone)。在鏈上執行這些複雜的操作是很昂貴的,所以使用 Plasma 是很好的選擇。

首先,我們在以太坊主鏈創建一套智能合約,作爲服務於我們 Plasma 子鏈的「Root」。Plasma Root 包含我們子鏈的「狀態轉換規則」(比如資產只能交易一次),記錄子鏈狀態的哈希,並充當一種「橋樑」,允許用戶在以太坊主鏈和子鏈之間進行互動。

然後,我們創造我們的子鏈。子鏈可以有自己的一套共識機制——在這個案例中就是授權證明(PoA),這是一種依賴可信任的區塊生產者的共識機制。區塊生產者類似於工作量證明中的礦工——它們是接受交易、生成區塊、收取交易費的節點。打個簡單的比方,假設你(即製作遊戲的公司)是生成區塊的唯一實體——也就是說,你的公司運行幾個節點,這些節點是我們子鏈的區塊生產者。

一旦子鏈被創建或者激活,區塊生產者就對 Root 合約做出承諾。意味着他們實際在說「我作證,子鏈中的最新區塊是 X。」這些承諾都被記錄在 Plasma root,以證明子鏈中發生的交易。

現在,子鏈已經準備好了,我們可以創建卡牌交易遊戲的基本部分。卡片是基於以太坊主鏈創造的 ERC 721 資產,通過 Plasma Root 轉移到子鏈。這就引入了一個關鍵點:Plasma 允許我們與基於以太坊的數字資產進行大規模交互。然後,我們再在子鏈上部署遊戲應用的智能合約,把遊戲邏輯和規則都寫進合約裏。

在遊戲過程中,遊戲用戶其實只是與我們的子鏈交互。他們可以持有資產(ERC 721 token),與以太交易,與其他用戶遊戲,但完全不用與主鏈直接互動。因爲只有少量節點需要處理交易,交易費用會低很多,操作速度也會更快。

但這怎麼確保安全呢?

很明顯,將更多主鏈上的操作轉移到子鏈上,整個區塊鏈網絡可以處理更多交易。但是要怎麼保障它的安全呢?在子鏈上發生的交易是最終的嗎?畢竟,我們剛剛還說,會有一個實體公司控制區塊的生成。這不就是中心化嗎?這個公司能隨時盜走你的資金或者遊戲卡嗎?

簡單地說,即使一個公司擁有子鏈區塊生成 100% 的控制權,Plasma 也爲你提供了一個基本保證,你可以隨時將你的資金和資產取出,放回主鏈。如果一個區塊生產者出現惡意行爲,最壞的結果就是,它強迫你離開子鏈。

讓我們看看區塊鏈生產者會有怎樣的惡意行爲,再看 Plasma 會做出怎樣的對策。

首先,想象一下,一個區塊生產者會怎樣欺騙你:通過創建一個假的新區塊來控制你的資金。他們是唯一有權力生成區塊的,因而他們可以不按照區塊鏈的法則來創建區塊。與其他區塊一樣,他們也會公佈一份包含該區塊證據的 Plasma Root 契約的承諾。

如上所述,用戶是有保證的,他們可以撤回他們的資產回到主鏈。在這種情況下,用戶 (或者更確切地說是代表他們行事的應用程序) 將檢測到企圖盜竊的行爲,並在區塊生產者嘗試使用他們「竊取」的資產之前退出。

Plasma 還創造了一種機制,以防止欺詐退出主鏈。Plasma 包括一種機制,任何人(包括你)都可以向 Root 合約發佈欺詐證據,證明區塊生產者作弊。此欺詐證明將包含有關前一個塊的信息。根據子鏈的狀態轉換規則,虛假塊不符合以前的狀態。如果欺詐被證實,子鏈將被「退回」到前一個區塊。更令人欣喜的是,我們構建了一個系統——在這個系統下,任何簽下虛假區塊的區塊生產者都會因丟失一張鏈上存款而受到懲罰。

但提交欺詐證明需要獲得基本數據,即用於證明欺詐的塊的實際歷史。如果區塊生產者也沒有分享先前區塊的信息,以阻止 Alice 向 Root 合約提交欺詐證據,該怎麼辦?

在這種情況下,Alice 需要取出她的資金,離開子鏈。實際上,Alice 向 Root 合約提交了一份「資金證明」。在等待一段時間之後,任何人都可以質疑她的證明 (例如,爲了證明她在後來的有效區塊中花了這些錢),Alice 的資金被移回以太坊主鏈。

最後,區塊生產者可以審查子鏈的用戶。如果他們願意,區塊生產者可以有效地阻止用戶在子鏈上執行任何操作。這種情況下的解決辦法同樣很簡單,將我們所有的資產撤回到上面所述的主鏈上。

然而,取款本身也存在風險。如果子鏈上的所有用戶要在同一時間取出自己所有的資產,以太坊主鏈可能沒有辦法實現這一操作,這意味着用戶會有可能失去其資金,不過也有許多技術可以阻止這件事發生,如延長提款的響應時間。

事實是,一個公司掌控 100% 區塊生成權是非常極端的情況,一般不會發生這種情況。也就是說,子鏈和公有鏈一樣,是去中心化的。因而上訴提到的風險會比較小,用戶可以輕易地將資產轉回以太坊主鏈。

我們已經解釋了狀態通道和 Plasma,有必要將兩者做一個比較。

l 一個不同之處是,當同一通道內的所有用戶都同意退出時,狀態通道可以即時退出。比如說,如果 Alice 和 Bob 都同意關閉一個通道,並取回他們的資金,他們就可以立即拿回資產。這在 Plasma 上是不可能的,在 Plasma 中,用戶必須等待一段時間,才能退出。

l 狀態通道也比 Plasma 更便宜,更便捷。這意味着我們可以將兩者結合起來,在 Plasma 子鏈上建立狀態通道。例如,在一個 app 上,兩個用戶可以進行系列小額交易。在子鏈上創建狀態通道,比直接在子鏈上進行交易,會更便宜高效。

l 最後,本文可能遺漏了一些細節。Plasma 還處在早期,你可以看看 V 神最近提出的「最小的可行 Plasma (Minimal Viable plasma)」。還有一個臺灣團隊也正在做這件事。OmiseGo 也試圖將這一技術應用到其交易所上。

05 Truebit—完成繁重鏈下計算

Truebit 是幫助以太坊完成繁重鏈下計算的技術。而狀態通道和 Plasma 是擴大吞吐量的,所以這是 Truebit 的不同之處。正如我們在文章開頭所提到的,以太坊面臨的難題不僅僅 1 擴大吞吐量。Truebit 不會提高交易吞吐量,但是它會讓基於以太坊的應用程序做更復雜的事情。

有些操作計算成本太高,無法在鏈上執行。例如,驗證來自其他區塊鏈的簡單支付驗證 (SPV) 證明,這可以讓以太坊智能合約「檢查」一項交易是否發生在另一條鏈上 (如比特幣)。

舉個例子,你需要在基於以太坊的 app 上執行一些昂貴的計算(比如說 SPV 證明)。你不能把它簡單的作爲以太坊主鏈智能合約的一部分,因爲 SPV 計算的成本太高了。事實上,在以太坊上做所有計算都很貴,因爲總是需要所有節點都要參與到計算中。

然而,你可以給某個人(我們稱其爲解決者)支付一點費用,讓它完成鏈下計算。

首先,解決者往智能合約存入一筆費用,然後,你把需求告知解決者。他進行計算,然後把結果反饋給你。如果計算結果正確,他的押金會被退回。如果計算出錯(他出錯或作弊),就會損失自己的押金。

那我們怎麼知道結果正不正確呢?Truebit 使用一種叫「驗證遊戲」的經濟機制。從本質上講,我們創造了一種激勵機制,鼓勵「挑戰者」來驗證解決者提交的結果。如果挑戰者能夠通過驗證遊戲,證明解決者提交了一個錯誤的結果,那麼他們就會得到獎勵,而解決者則會失去他們的定金。

因爲驗證遊戲是在鏈上執行的,它不能簡單地計算結果 (這將破壞整個系統的目的,因爲如果我們能夠在鏈上進行計算,我們就不需要 Truebit)。相反,我們強迫解決者和挑戰者確定他們不同意的具體操作。實際上,我們正在努力使雙方對結果產生異議。

一旦操作被認定,就足以在以太坊主鏈上運行。然後,我們通過智能合約來執行細節,該合約一勞永逸地解決了哪一方說實話,哪些是謊言或錯誤的問題。

06 layer2 的共同內核及其他結論

Layer2 有個共同的內核:一旦我們擁有一個公鏈提供的確定性硬核,我們就可以將它用作擴展塊鏈應用程序有效性的數字經濟系統的錨。

我上面提到一些例子,可以讓我們更具體地瞭解 Layer2 的應用場景。Layer2 所使用的經濟機制往往是交互式的遊戲:它們通過爲不同的參與者創造競爭或「檢查」的動機來發揮作用。區塊鏈應用程序可以假定一個給定的聲明可能是真的,因爲我們已經爲另一個方提供證明它是假的信息創造了強大的激勵。

在狀態通道中,我們確認渠道的最終狀態的方式是——讓各方有機會「反駁」對方。在 Plasma 中,它是我們如何管理欺詐證據和取款。在 Truebit 中,它是我們如何確保解題者講真話——通過給驗證者一個激勵來證明解題者是錯的。

這些系統將有助於解決以太坊實現大規模全球用戶羣縮放所涉及到的一些挑戰。一些工具,比如狀態通道和 Plasma,將增加平臺的事務吞吐量。其他的工具,比如 Truebit,將使得有可能將更困難的計算作爲智能契約的一部分,從而打開新的用例。

這三個示例僅代表了用於加密經濟擴容方案的一小部分。我們甚至還沒有涉及到像 Cosmos 或 Polkadot 這樣的「區塊間協議」的工作。我們還應該期望創造新的和意想不到的 layer2 系統,以改進現有的模型,或在速度、終結性和成本之間提供新的權衡點。

比任何特定的 Layer2 更重要的是,進一步開發底層技術和機制—加密經濟設計。

這些 Layer2 解決方案是證明可編程區塊鏈(如以太坊)的長期價值的有力論據。只有當區塊鏈可編程時,才能建立 Layer2 解決方案的經濟機制:你需要一種腳本語言來編寫程序。對於比特幣這樣的區塊鏈,這就困難得多(或者在某些情況下基本不能實現),因爲這些區塊鏈只能提供有限的腳本。

我們可以在以太坊上構建 Layer2,並可以在訪問速度、終結性和成本之間達到平衡。這使得底層區塊鏈對於更廣泛的應用程序來說更加實用。對於高價值、極其重要的交易,我們還是建議使用主鏈。對於交易數字收藏品,速度更重要,我們可以使用 Plasma。Layer2 讓我們在不損害底層塊鏈的情況下進行這些權衡,保持去中心化和終結性。

目前我們還很難預測來擴展需要哪些功能的進步,在設計以太坊的時候,Plasma 和 Truebit 還沒有被髮明出來。但由於以太坊是完全可編程的,它幾乎能夠實現我們發明的任何經濟機制。

來源鏈接:medium.com