真正的以太坊,遠比你想象的簡單
在過去的文章裡,我們看到了太多關於區塊鏈的內容,卻如水中月鏡中花,讀完依舊迷茫。於是我們本能的反省,是不是區塊鏈真的只有技術人員能懂?其實不然... 除去市面上故弄玄虛的小眾人群,其實區塊鏈涵蓋的加密技術、分散式儲存等,早已經不是什麼新鮮事。有太多深入淺出的文章我們沒有讀過,以至於覺得這個領域過於神祕。
今天這篇文章來自Josh Stark雖然有7000字,看似很長,但通篇沒有廢話沒有故作高深,是為數不多能將區塊鏈技術原理講的通俗易懂的文章,如果你能耐心讀完,一定會對以太坊、對layer2有個全新的認識,可能也會重燃起你對以太坊的信仰。
未來我們也將帶來更多此類文章。我們想做的,是讓更多人看到、看懂區塊鏈,更多人轉發此類深入淺出的好文章。只有更多人進入這個領域,所謂的區塊鏈「共識」,才會有未來。
—DapDap全體
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是如何運作的。
比如說,你在以太坊上製作了一款卡片交易的遊戲。這些卡片就是ERC 721資產(與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還沒有被髮明出來。但由於以太坊是完全可程式設計的,它幾乎能夠實現我們發明的任何經濟機制。
鄭重宣告:本文版權歸原作者所有,轉載文章僅為傳播更多資訊之目的,如作者資訊標記有誤,請第一時間聯絡我們修改或刪除,多謝。