1. 程式人生 > >EOS從入門到精通(四)

EOS從入門到精通(四)

大家好,非常感謝參加《EOS從入門到精通》系列課程,我是王巨,今天是EOS技術白皮書解讀的第四講。我們來解讀EOS白皮書的最後幾部分。今天的內容相對於上一節課會簡單一些,主要講EOS的治理,然後簡單講一下虛擬機器;跨鏈通訊部分我會在高階篇重點解讀

image.pngimage.png

我們先來看治理部分,所謂的治理我的理解就是管理那些沒法完全使用軟體演算法實現的共識。在我們熟悉的區塊鏈產品比特幣和以太坊中是沒有這部分共識的,這樣就造成了一個非常嚴重的問題,社群經常因為一些原因分裂,導致分叉。2017年比特幣已經被分叉無數次了,以太坊也已經出現了數次分叉,而這樣的結果就是沒有管理好非程式碼共識所造成的。

EOS認識到區塊鏈的權力來源應該是Token持有人,而不應該是礦工,Token持有人將自己的權力通過投票的方式委託給區塊生產者,這樣區塊生產者就具備了凍結賬戶、更新有缺陷的應用程式、提出對底層協議硬分叉的改變的權力。當然這種權力是受限的、是被檢查的。可以用下面的結論總結這種權力:
所有的區塊鏈變更都需要區塊生產者同意,如果區塊生產者拒絕Token持有人想要的變更,那麼他將被投票出局,如果區塊生產者的變更沒有經過Token持有人的同意,那麼其他非區塊生產者的全節點會拒絕該改變。

image.png

一個智慧合約可能會出現異常比如說因為bug的原因導致行為不正確或者資源消耗不在一個合理的範圍內,在這種情況下區塊生產者有權力糾正這種情況,糾正的方式就是凍結賬戶,凍結賬戶的概念就是所有與待凍結賬戶有關的變更都不打包。凍結賬戶需要21分之17的區塊生產者同意才行,如果區塊生產者濫用權力,解決方案也很簡單,就是將他投票出局,這樣被凍結的賬戶就會被解凍。

image.png

如果凍結賬戶已經不能解決問題,不可預知的程式碼已經造成了破壞,此時EOS可以支援在不需要硬分叉的前提下修改賬戶程式碼。我的理解這有點類似於交易的回滾。當然與凍結賬戶類似,也需要21箇中的17個區塊生產者同意才行。

image.png

這裡的憲法不知道翻譯的準不準確,我的理解是這樣的,智慧合約也是要遵循法律法規的,很多事情是沒有辦法通過程式碼來進行約束的,同時由於EOS是全球性的,那麼合約遵循哪裡的法律法規就成了一個問題。這塊EOS是怎麼做的呢,就是將這些法規數字化,然後進行Hash簽名,後面所有交易都要選一個憲法來繫結到合約中,這樣就能解決管轄權和法律選擇帶來的爭端。這個理解不一定是對的,因為白皮書上我的感覺也是寫的不太清楚。

image.png

EOS還規定了升級協議和憲法的流程,我們可以看一下,如果要對憲法進行修改,需要區塊生產者提出,並獲得至少17個區塊生產者的批准,並且連續30天保持批准,然後所有使用者都使用新的憲法hash來簽署交易。升級程式碼協議也是類似的流程。按照EOS的預設配置,新增新特性的升級流程大概需要2-3個月,修復一般bug需要1-2個月。對於出現了嚴重的有害bug或安全漏洞,區塊生產者可能會加快修復,當然這一般來說是違反憲法的。具體如何權衡這個白皮書裡面沒有講,我猜這應該需要社群的努力了。治理這部分,對於需要長期穩定執行的區塊鏈產品是非常必要的,如果沒有這部分,那麼就沒法避免分叉帶來的危害。EOS在這方面我認為是當前做的最好的。

image.pngimage.png

好的我們簡單講一下指令碼和虛擬機器,我們從上面可以看到,EOS首先給自己的定位是一個平臺,用於協調向賬戶傳送已認證的訊息。而具體的指令碼語言和虛擬機器的細節都是特定於實現的細節的,這些細節大多數獨立於EOS的技術設計。也就是說,任何具有足夠效能的確定性和正確的沙箱化的語言或虛擬機器都可以與EOS API整合。

image.pngimage.png

模式定義的訊息和模式定義的資料庫,這兩個我們放在一起講,這兩個概念從字面意思上不是很好理解,我的理解是,所有的訊息或資料儲存其實在實現上是使用二進位制的方式傳送或儲存的,但是為了人類可讀,他們都可以被解碼成Json字串。

image.png

分離授權與應用,這段出現在白皮書的這個地方我認為有點怪,我理解這部分應該出現在效能和平行計算部分。不管怎麼說我們將這部分再講一下:

為了最大限度的實現平行計算,並最大限度的減少與事物日誌中重新生成應用程式狀態相關的計算債務,EOS將驗證邏輯分成三部分:1、驗證訊息是否內部一致;2、驗證所有先決條件都是有效的;第三步才是修改應用程式狀態。驗證訊息的內部一致性是隻讀的,而且不需要訪問區塊鏈狀態,這意味著它可以以最大的並行度來執行;驗證先決條件也是隻讀的,因此也可以從並行性中受益;修改應用程式狀態才需要寫許可權,並且必須順序處理每個應該程式。身份認證是一個驗證訊息可被使用的只讀過程。 應用程式實際上在發揮作用。 實時計算時兩者都需要被計算,然而一旦訊息被包含進區塊它就不再需要進行訊息驗證的操作了。

image.png

我們再來看一下虛擬機器獨立架構,上面的簡介我們說了,理論上只要符合效能、確定性、正確性和沙箱化這幾個條件的任何虛擬機器都可以跟EOS進行對接,也就是說EOS的架構是獨立於虛擬機器的,所以叫虛擬機器獨立機構。白皮書上沒有任何虛擬機器的技術細節,就講了兩個虛擬機器Web Assembly和以太坊虛擬機器。Web Assembly是一個新興的、高效能的虛擬機器,它擁有llvm的編譯後端,因此理論上可以支援所有支援llvm編譯的眾多程式語言,包括c和c++等。當前EOS的測試網路僅支援Web Assembly,也僅支援C和C++程式語言開發智慧合約。EOS規劃中也會支援以太坊虛擬機器,以太坊虛擬機器其實跟Web Assembly有點像,移植起來比較容易。當然支援以太坊虛擬機器的重點不在於技術上的難易程度。試想一下,如果以太坊上的智慧合約只要稍作修改就能在EOS上執行,那原來很多在以太坊上的專案就可以比較平滑的遷移到效能更高的EOS上。這對EOS的生態建設會有很大助力,當然以太坊也是一個不小的打擊。

image.png

關於跨鏈通訊,我今天不準備跟大家講細節,白皮書上的內容其實遠遠不夠,只是跟大家同步一下,通過Merkle證明可以實現輕量級客戶端,並且還能比較容易的實現跨鏈通訊。我會在高階篇重點講解跨鏈通訊技術。

好了今天就講到這裡,經過四節課程我們終於將EOS的白皮書講完了,非常感謝大家的參與。關於EOS白皮書的任何問題大家都可以提問了,我會挑選我能回答的問題回答。

相關推薦

EOS入門精通

大家好,非常感謝參加《EOS從入門到精通》系列課程,我是王巨,今天是EOS技術白皮書解讀的第四講。我們來解讀EOS白皮書的最後幾部分。今天的內容相對於上一節課會簡單一些,主要講EOS的治理,然後簡單講一下虛擬機器;跨鏈通訊部分我會在高階篇重點解讀image.pngimage.png我們先來看治理部分,所謂的治

Matlab入門精通

MatLab結構體變數的定義與使用 1、直接輸入法輸入結構體變數 >> student.test=[99 56 96 87 67 69 87 76 92]; >> student.name='Wu Qing'; >> student.weight=

JavaWeb入門精通-會話管理

1 課程回顧 Servlet程式設計           1)Servlet生命週期(重點)                    構造方法:建立servlet物件。預設情況下,第一次訪問servlet物件時。只調用1次。                    init方法

CoreData 入門精通併發操作

通常情況下,CoreData 的增刪改查操作都在主執行緒上執行,那麼對資料庫的操作就會影響到 UI 操作,這在操作的資料量比較小的時候,執行的速度很快,我們也不會察覺到對 UI 的影響,但是當資料量特別大的時候,再把 CoreData 的操作放到主執行緒中就會影

GPU 程式設計入門精通之 GPU 程式優化

博主由於工作當中的需要,開始學習 GPU 上面的程式設計,主要涉及到的是基於 GPU 的深度學習方面的知識,鑑於之前沒有接觸過 GPU 程式設計,因此在這裡特地學習一下 GPU 上面的程式設計。有志同道合的小夥伴,歡迎一起交流和學習,我的郵箱: [email protected] 。使用的是自

Unreal Engine 4虛幻UE4GameplayAbilities 插件入門教程技能屏蔽和簡單的Buff等

網絡 important any time sim sed exe triggers 進入 本節內容繼續上一節教程的內容(如果沒有看過前面的教程,請前往學習),不會講太難的新東西,而是繼續探究技能標簽(Abiilty Tags)的內容。先來一道開胃菜。 第1.1步: 將

C語言入門參考

函數聲明 c語言 block http 返回 以及 height 頭文件 ges 四、解析hello,world C語言是面向過程編程的計算機語言, 主要采取函數調用的方式來進行流程控制。面向過程編程講究模塊化。把需要解決的問題進行分析,尋出解決問題所需要的步

【ASP.NET Core快速入門在CentOS上安裝.NET Core運行時、部署到CentOS

ati libunwind serve code api cal 之前 prompt conn 下載.NET Core SDK 下載地址:https://www.microsoft.com/net/download/windows 第一步:Add the dotne

Python入門之字符串、字典、集合

Python 字典 1、字符串操作 字符串是無法修改的,只能作為查詢.在python中,加了引號的字符就是字符串類型,python並沒有字符類型。定義:name=‘kim‘ #name=str(‘kim‘) 用於標識:描述性的內容,如姓名,性別,國籍,種族那單引號、雙引號、多引號有什麽區別呢? 讓我

DAY57-前端入門-javascript面向對象

面向對象 ear 提示 lis sta set interval 構造器 obj 面向對象 一、屬性與方法 //創建一個對象 var obj = {}; | var obj = new Object(); // 屬性 obj[‘name‘] = ‘大毛‘; | obj.na

NS2入門學習之Otcl知識點

面向物件的Tcl語言,物件和類的概念同C++類似。 1.類和物件的定義 % Class  Animal #定義類名 % Animal animal_1#產生類的物件 animal info class =>Animal

Docker入門教程Docker Registry

【編者的話】DockerOne組織翻譯了Flux7的Docker入門教程,本文是系列入門教程的第四篇,介紹了Docker Registry,它是Docker中的重要元件。本文通過情景演繹的方式對其進行了介紹,圖文並茂,強烈推薦讀者閱讀。 在Docker系列教程的上一篇文章中,我們討論了Docke

Docker入門實戰——基於jenkins部署微服務

一、部署前端Vue專案 第一步、編寫構建指令碼xxx-build.sh port=xxx #根據埠號查詢對應的pid pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }'); #殺掉對應

【PP生產訂單】入門介紹

如何選擇訂單的工藝路線: 選擇的流程圖: 首先去看後臺配置訂單型別中的“順序標識”: 其次再去看MRP4檢視中的“選擇方法”欄位:  如何確定訂單的BOM: 選擇的流程圖: 如果BOM中的專案類別

Flutter入門系列---Flutter圖片快取

Flutter圖片快取 | Image.network原始碼分析 原創: 郭海生 京東技術   原文地址:https://mp.weixin.qq.com/s/W5iu3VsNuvIygFbKM-giqA 隨著手機裝置硬體水平的飛速發展,使用者對於

Java程式設計入門筆記

你若安好——類和物件 萬物皆物件 屬性——物件具有的各種特徵 每個物件的每個屬性都擁有特定值 例如:每個學生的姓名、體重都不一樣 方法——物件執行的操作 物件:用來描述客觀事物的一個實體,由一組屬性

Android入門筆記

 四、fragment argument 和 頁面資料更新 4.1 為什麼要使用 fragment argument        當 fragment 和 activity 間的資料進行傳遞時,如果只是簡單的使用 intent 的 extra 來進行傳遞資訊,不僅破

爬蟲入門系列:HTML文字解析庫BeautifulSoup

爬蟲入門系列目錄: 系列文章的第3篇介紹了網路請求庫神器 Requests ,請求把資料返回來之後就要提取目標資料,不同的網站返回的內容通常有多種不同的格式,一種是 json 格式,這類資料對開發者來說最友好。另一種 XML 格式的,還有一種最常見格式的是 HTML 文件,今天就來講講

Elastic Job 入門教程— 事件追蹤

Elastic-Job提供了事件追蹤功能,用於查詢、統計和監控作業執行歷史和執行狀態。Elastic-Job-Lite在配置中提供了JobEventConfiguration,目前支援資料庫方式配置。事

演算法入門總結—— 引數傳遞

函式在演算法競賽中是不可避免的一部分,使用函式必然存在引數傳遞的問題,在C語言中,引數傳遞有傳值、傳地址、傳陣列、傳函式等方式。 傳值 直接在引數表將變數傳入即可,不會改變該變數的值 傳地址 將