Vitalik Buterin:以太坊2.0之跨分片交易

買賣虛擬貨幣

作者 | Vitalik Buterin

責編 | 佩奇

出品 | 區塊鏈大本營(blockchain_camp)

2019年6月29日,由CSDN、靈鈦科技主辦,區塊鏈大本營、Unitimes、ETHPLANET、以太坊愛好者社羣、火星財經協辦的“2019第二屆以太坊技術及應用大會”在北京·長城飯店隆重舉行。

本次大會圍繞以太坊生態全景、以太坊未來發展、以太坊開發實戰、優質專案案例等多方面展開,邀請以太坊創始人 Vitalik Buterin 及核心技術開發者、海內外知名專案負責人、行業領軍人物及以太坊生態精英專家齊聚於此,共同助力中國以太坊技術深度交流和社羣發展。

作為本屆大會的重要嘉賓之一,以太坊創始人 Vitalik Buterin 在上午的演講中分享了題為《以太坊2.0之跨分片交易》的主題演講。 

以太坊創始人 Vitalik Buterin

在演講中,Vitalik Buterin 分別從非同步和同步交易,並結合“火車票和酒店”問題這一例項詳細介紹了以太坊2.0的分片交易。

區塊鏈大本營(blockchain_camp)在不改變演講內容大意的情況下,做了精心的整理。以下為 Vitalik Buterin 的演講實錄:

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

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

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

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

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

首先,我們是非同步交流的流程,這是我之前設計的,已經有了幾年的設計過程,如果讀相關文章,比如2016年就有文章談到非同步交易。它的理念是,如果我們有幾個分片的話,如何去促進這個分片之間的交易。比如說我有5個 coins,然後我想要把這5個coins轉移給Bob,Bob有一個帳戶,它的帳戶在底端,我的coins在頂端,首先我要在頂端做一個交易的請求,這個交易會進行第一個分片處理,然後它會有一個雜湊值產生,當然,它並不會立即完成,但是之後我們就能夠把它放到底部的分片當中,它能夠在底部的分片進行驗證。驗證之後交易就能夠進行處理了。

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

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

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

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

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

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

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

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

具體怎麼操作呢?看起來是挺難的,我們是這樣做的。比如說,就像我們之前的程式一樣,首先,我想給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的錢包分析,我們至少先知道發生了這樣的交易。非常有意思的一點是,對於這個技術,你可以用通訊的方式在跨區塊鏈中進行交易,還可以讓它創造應用程式,讓不同的區塊鏈進行跨鏈的交易。

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

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

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

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

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

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

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

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

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

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

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

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

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;