2019 年 6 月 29 日,由 CSDN、靈鈦科技主辦的「2019 第二屆以太坊技術及應用大會」在北京·長城飯店舉行。本次大會圍繞以太坊生態全景、以太坊未來發展、以太坊開發實戰、優質項目案例等多方面展開,邀請以太坊創始人 Vitalik Buterin 及核心技術開發者齊聚於此,共同助力中國以太坊技術深度交流和社區發展。

以太坊創始人 Vitalik Buterin 在上午的演講中分享了題爲《以太坊 2.0 之跨分片交易》的主題演講。在演講中, Vitalik Buterin 分別從異步和同步交易,並結合「火車票和酒店」問題這一實例,詳細介紹了以太坊 2.0 的分片交易。區塊鏈大本營在不改變演講內容大意的情況下,做了一些的整理,以下爲 Vitalik Buterin 的演講實錄。

原文標題:《獨家 | Vitalik Buterin:以太坊 2.0 之跨分片交易》
作者:Vitalik Buterin
來源:區塊鏈大本營
責編:佩奇

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易以太坊創始人 Vitalik Buterin

中國的朋友們,大家好!現在我們要把以太坊進化到 2.0 版本,有更多分片。現在在研究信標鏈相關話題,在這方面仍有很多努力要做。這可能對區塊鏈交易非常有用,可以增加它的可擴展性,從每秒 10 個交易,發展到以後可能的每秒 1 萬個交易,它會增加信息吞吐量的速度,也能夠有更多區塊鏈的應用。

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易

但是開發者也會面臨一些挑戰,區塊鏈現在的運作方式是每個計算機要驗證所有交易,每個節點都要進行驗證,這樣安全性是好了,但是它難以進行擴展,因爲我們交易的數量非常多,因爲交易速度是由一個計算機決定的,所以我們想要去改善這個過程,我們要提高它的拓展性。這樣每個計算機只需要驗證一小部分的交易,這樣並不是所有節點都需要進行驗證了,每個計算機只需要去處理 1000 個節點當中的千分之一的交易。

當前我們要處理的問題是,如果我們看到現在的應用運作的方式就會發現,在這個理論上建立其他的東西是很容易的,比如智能合約和其他進行交流時,可能需要 5 個應用的參與,所有的帳戶、智能合約都儲存在一臺計算機上,所以它們相互交流非常方便。但是如果我們在更短的一個區塊鏈中就做不到了,因爲這個區塊鏈中智能合約、帳戶、交流速率非常高,我們很難讓一個應用都能夠進行對話,難以進行立即的對話和交流。

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易

所以以太坊 2.0 的設計並不是讓每個節點都去處理所有的交易和信息,我們有 1024 個分片,每個分片都相當於是一個短的鏈,每個分片都有自己共識的算法,不同分片中交流進行管理,每個分片會跟其他分片進行交流,有合約進行交流,每 6 分鐘會發生一次,所以每 6 分鐘每個分片都有機會了解哈希值以及最近發生的事情等等。

另外,之前這個鏈的可擴展性受到了限制的,所以我們可以選擇,要麼這個鏈的交流速度變慢,要麼拓展性受到限制,我們還是要二選一。另外,這些基礎層主要關注數據和計算力等等,不同的分片交流和溝通的能力、它們是否受限,我們可以創建一個機制讓它們的性能更好、使用效率非常高,這樣用戶不同的智能合約能夠相互交流,而且速度非常快。

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易

首先,我們是異步交流的流程,這是我之前設計的,已經有了幾年的設計過程,如果讀相關文章,比如 2016 年就有文章談到異步交易。它的理念是,如果我們有幾個分片的話,如何去促進這個分片之間的交易。

比如說我有 5 個 coins,然後我想要把這 5 個 coins 轉移給 Bob,Bob 有一個帳戶,它的帳戶在底端,我的 coins 在頂端,首先我要在頂端做一個交易的請求,這個交易會進行第一個分片處理,然後它會有一個哈希值產生,當然,它並不會立即完成,但是之後我們就能夠把它放到底部的分片當中,它能夠在底部的分片進行驗證。驗證之後交易就能夠進行處理了。

所以有一個信息,是 5 個 coins 去進到 Bob,底部的 Bob 就能夠得到 5 個 coins,它不會立即發生,原因是我們要驗證,不僅僅接收方需要進行驗證,還有其他的哈希值、數據、信標鏈等等都需要進行驗證。我們發現接收方也是分片的一部分,不同的分片交流需要 5 分鐘的時間,所以第一步我們就需要發送這個交易,第二步是等幾分鐘,第三步是要進一步去處理這個交易,然後才能夠讓底部的 Bob 接收到這個 coin,這樣 Bob 帳戶就增加了。

現在有各種加密貨幣,包括比特幣等等,對於這些數字資產有不同的平臺,我們發現這樣一個交易,它其實非常強大的,有很多有趣的理論、複雜的理論都可以來驗證這個交易。我們發現,我們理解這些機制,跟客戶交流是非常難的,我們還是有很多可以做的,但是會有相關溝通方面的限制。

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易

另外一個是「火車票和酒店」的問題,如果你使用數據庫工作就會了解相應的問題,它跟我們非常相似,我們有不同的方式可以解決相關的問題。你想要去一個地方旅遊,我們要買火車票,同時也要訂酒店,如果訂一個不行,要兩個一起訂,所以我們要確保:要麼都不訂,要麼酒店和火車票一起訂。如果僅僅有火車票而沒有酒店,或僅僅酒店而沒有火車票,這對我來說沒有任何意義,是浪費錢。

所以我們想象兩個智能合約,一個合約是用來訂火車票的,另外一個是用來訂酒店的。當前體系解決這個非常簡單,首先,我們給賣火車票的地方打電話,比如我們在火車票上訂了一個座位,這個合約會回覆你成功或失敗,然後我們再給訂酒店的地方打電話,這個地方也回覆你成功或失敗,如果其中一個失敗了,那在我們交易過程中就無法讓這個交易進行下去,整個交易會被撤回。今天我們也是這樣做的,不管是訂火車票還是訂酒店,其中一項失敗了,我們就可以把交易撤回。但是在更短的鏈中,訂酒店和訂火車票是不同的分鏈中,確保一致性更難,原因是因爲發現在一致的環境中已經訂了火車票了,我們就不能再撤消了。

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易

其中的一個解決方案是我們有一個新的機制叫「猛拉」,它看起來是全新的想法,但是有很多類似之處,跟我們之前的數據庫很像。所以我們會有非常多樣化的做法,並不是用一個合約訂酒店,一個合約訂火車票,現在我們把它分開,每個火車座位都有一個合約,每個房間都有一個合約,這樣每個合約都能夠代表我們訂座位或者訂房間的能力。

現在我們能做什麼?在「猛拉」中發一個合約,它的功能是一次用一個合約,我們拿掉這個合約之後就獲得一個座位,然後我們再把合約放到另外一個位置上。

如何解決「酒店和火車票」的問題?第一步,猛拉,從酒店分片拉一個合約,從火車票再拉一個合約,兩個分片同時預定,現在酒店合約和火車票合約在一個地方,跟之前的交易一樣,就可以一起訂了,但其中如果任何一個操作失敗,我們就什麼都不訂了。或者其他人想要訂火車或訂酒店,去之前你去的那個分片,可以用這個合約進行「猛拉」的操作,不會有任何阻礙,兩個一起訂,它是自動的過程,就是要麼兩個都訂,要麼兩個都不訂。所以在區塊鏈的運用當中有很多都是類似的,包括去中心化資產的交流等例子,對我們來說非常有用,能夠提高用戶以及區塊鏈應用的操作性。

這是另外一個例子,也是我們可以做的一個應用。現在我們想象一下,我們用一個更短的區塊鏈,比如它需要 5 分鐘時間讓一個分片知道另外一個分片的數據或者哈希值,但是我們希望這個應用變得更加快捷,所以我們的做法是在上面分片有一個 coin,然後我們想把這個 coin 轉移到下面,我希望 coin 可以在底部立馬進行應用,那我們就不用等了。

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易

具體怎麼操作呢?看起來是挺難的,我們是這樣做的。比如說,就像我們之前的程序一樣,首先,我想給 Bob 發 5 個 coin,就必須在上面的分片進行交易,然後上面就會給我個這樣的證明,它還包含一個區域性的分片,然後我再把它放到下面的分片中,下面的分片就會記錄這個交易。而且它已經瞭解上面分片當中的根值了,所以下面的分片根本不知道上面跟它是否合法,但是不管怎樣,它把相關數據融到自己的數據包中了。如果記錄另外一個信息,也可能沒辦法讓下面的分片知道。

我們這裏想陳述的是,最開始 Alice 有 10 個,Bob 有 20,charlie 有 52 個,我們把這些進行壓縮之後進行存儲。有兩種情況,一種情況是 bob 有 20 個 coin,還有一種情況是 Bob 之後有 25 個 coin。如果我們的錢包上面看到上面的根是 R,下面的分片就可以做個推測,就是 Bob 有 25 個 coin,就可以取 25 個 coin 給其他人。

即使在這樣的狀態下,我們的計算也並沒有最終化,看起來這個交易已經完成了,那麼你可能會問:看起來好像 Bob 有了這些 coins,但是他還沒有花這些 coins。我們假設 Bob 要把 25 個 coins 發給 Charlie,他會做什麼?把 22 個 coins 發給 Charlie 會是什麼?現在這種情況下,你只能把兩個情況進行評估和對比,這種情況下 Alice 還是有 10 個 coins,如果合法的話,Bob 之前有 25 個 coins,現在 25 減 22,它只剩 3 個幣了,如果不算根是不夠的,所以 Bob 還是有 200 個。C 如果根是對的,就會從 30 多上升到 52。

這個交易結束後,上面的分片和下面的分片信息可以連接,下面的分片可以記錄上面分片的信息了,我們就不用去思考到底 R 是真實的還是假的,我們知道 R 一定是真實的 Charlie 現在有 52 個 coins 了。這個邏輯是在後臺進行的,邏輯效應是通過 Bob、Charlie 的錢包分析,我們至少先知道發生了這樣的交易。非常有意思的一點是,對於這個技術,你可以用通信的方式在跨區塊鏈中進行交易,還可以讓它創造應用程序,讓不同的區塊鏈進行跨鏈的交易。

比如我們假想有這樣一種應用,上面的分片是以太坊區塊鏈,下面的分片是另外一種區塊鏈,它們兩個如果是相碰撞、相沖突的話,我們會用同樣的機制保證它們交易,讓它們進行及時的通訊、及時的去中心化的交易。這在以太坊和跨以太坊的區塊鏈交易中是非常重要的,可以讓跨鏈的通訊變得更加方便。

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易

我們還可以實現其他的目標,比如我們目前已經做了一些工作,比如通過 Plasma 方法做同步的交易,我們的目的是首先 Plasma 已經建立了,希望 data 把這些數據公佈到分片上,所有這些數據並不一定都能夠公佈到區塊鏈上,但是最終發生的一件事情是,我們還是會用類似 Plasma 的方法去實現同樣的目的,我們不會馬上去數狀態的總數是多少。我們至少要知道現在以太幣的所有者的目的是什麼,是在任何分片發交易,還是要等一段時間才能出資產。所以如果發生衝突的話,他有可能想上傳證據,還有所有者可以對 coin 進行再構造。

通過這個方法可以保證如果我們收到了 coin,從來沒有進行非法支付的話,我們的交易就會同步到整個區塊鏈上進行廣播。這些交易出現了,我們有兩個資產,X 和 Y,另外一個交易是 X,是 A 到 C,我們的分片有自己的輕重緩急,可能先進行某一次交易再進行下一次交易,還有 B 到 G、F 到 M 等等交易。之後還有很多交易,有些是合法的,有些是不合法的,M 到 M 是不合法的,因爲時間上它是不能實現的。

如果我們參加交易過程當中,自己有了資產的話,而且你也希望發送交易信息,就可以把它公佈到任何分片上。如果你是某個資產的所有者,你可以僅僅分析這些分片,就可以評估這些交易的歷史記錄是怎樣的,某些資產並不屬於這樣交易過程的,我們也可以做類似的結論總結。

在區塊鏈中,我們做的工作量還會少一些,比如用戶錢包可以做更多事情,而且它還可以幫助我們考慮什麼樣的交易方式是合理的,就是誰更關注每一個分片,然後每一個分片對應的資產又是怎樣的,這是特別棒的一個想法。

爲了減少複雜性,讓更多用戶用錢包,我們就把區塊鏈便捷性、性能、應用效率大大提升,希望通過用這個方式把中心化更復雜的交易變得便捷和簡單,這個基本的戰略可以讓我們進行更快的交易。不需要之前去中心化的共識層,我們希望通過這些用戶錢包瞭解目前我們的錢包裏是有多少幣的。

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易

這樣一種設計最近被我們叫「積極虛擬機(OVM)」它的結論是你所有權的資產並沒有立即轉移,我們開始一個流程,不需要把這個錢取出來,可能一整週時間纔可以真正到帳,但是如果你是用戶,你可以知道爲什麼不能馬上取出某個資產,而且你有一種感覺,就是這個交易是可以真正到帳的。

我們需要做什麼?10 秒鐘纔可以進行跨分片交易,比如有 20 個分片參與交易,提高交易速度會不會提高區塊速度?我們需要去研究區塊時間,比如最上面分片可能需要 10 秒,那麼下面的分片再往右移,就是 0.5,然後 10.25,然後 11.1,然後 21.5 等等,逐漸的向右移。

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易

這個基本原則是在某個時間點上一定有某個分片去到某個固定的位置,首先我們首先要知道需要在哪個區塊中公開這個分片。這樣做的好處是,如果我們這麼做,就會獲得一種公開交易的能力,而且還可以得到及時確認,可能 0.5 秒的時間就可以立即確認,得到區塊,然後可以進行證明。如果做得很成功的話,用戶體驗會非常好,類似之前中心化服務器提供的這種體驗一樣,如果我們用第二層方法,從不同的分片進行數據的公佈,邏輯會非常複雜,智能合約也會變得很複雜,用戶錢包會進行很高速、很大量的計算,有多少 coins 到哪個用戶手上就需要更長時間進行計算,這是我們更需要研究的一點了。

Vitalik 現身北京,詳解以太坊 2.0 跨分片交易

這裏我得出的結論是什麼?如果我們想要做出一個通用型的區塊鏈,就首先要有一個比較通用的基礎設施,能夠讓我們把數據放在這個鏈上,還可以在這個鏈上做更快的計算。我們利用工具進行應用的過程比較複雜,不同的用戶有不同的實施方式。所以區塊鏈要求我們有一個全球的共識,就是怎樣進行儲存、怎樣對於某個用戶具體所有的 coins 的數量進行準確瞭解,這些都需要我們通過更進一步的應用來實現的;而且我們需要保證整個流程的簡便性,防止這個流程變得複雜;需要對於共識機制進行不斷的提升,創造出有不同應用的底層協議。

這已經成爲一個非常活躍的研究,我們正在研究怎樣設計剛纔所說的這些機制,讓我們創造出擴展區塊鏈以上的不同應用,它擁有很強的性能,可以進行非常快速的交易,甚至是異步的、同步的交易都可以實現,而且還可以實現跨分片的交易,當然,還有其他很多很好的性能,比如其他的加密方式進行進一步擴展。

因此,Layer2 的這個機制是和以太坊 2.0 密切相關的,它可以把區塊鏈更上一層樓。