解讀《EOS.IO技術白皮書》

https://www.jianshu.com/p/bc489db794ce

要點

1、這是一個區塊鏈操作系統
2、提供帳戶,身份驗證,數據庫,異步通信以及在數以百計的CPU或羣集上的程序調度

當前區塊鏈平臺存在的問題

1、能否支撐百萬級用戶訪問量
2、是否免費服務,找到增值服務收費點
3、平滑升級避免bug
4、低延時的用戶體驗
5、串行能力
6、並行能力

委託權益證明機制(DPOS)共識算法

插播一段BTS的DPOS

DPOS是由Dan Larimer發明的。
首先搞清楚兩個概念:權益所有人就是股東,授權代表(就是委派見證人)就是董事會成員,創造區塊是委派見證人的事情,跟股東沒關係。
1、選舉機制
在BTS網絡中,存在一個24小時不停工作的股東大會。每個股東選舉一名授權代表,代表自己行使生產區塊的權利(股東可以在在自己的錢包的狀態指示器看到授權代表的狀態)。授權代表需要盡職盡責,否則股東可以取消授權,轉而授權其他代表。
2、生產區塊
票數最多的前100名代表有生產區塊的權利。生產區塊的排序是按照之前確定的一張表輪流進行。每名代表分配到一個時間段開始生產。代表沒有修改交易詳細內容的權利,比如發起人、接收人、或者餘額。如果在自己的時間段內,該名代表因爲各種原因比如網絡無法生產區塊或者把交易信息放入區塊,那麼下一位代表創造出的區塊,將會變成兩倍大的區塊,包括前一位代表遺漏的交易信息,而確認時間將會延長至20秒而不是10秒。出錯的代表就會被投不信任票,被從生產狀態中清除出去。100名代表的數量是可以進行變化的,這樣可以調整網絡開銷。
3、避免分叉
作爲代表爲了避免損失挖礦費,一定會力爭100%在線的,如果發生上面提到的代表錯過自己時間段的情況,交易確認時間就會變長,如果發現交易者發現10個區塊中有5個錯過了生產時間段,基本可以確定自己是處於分叉區塊鏈上,應該停止交易,等待分叉迴歸。
還有一種機制避免分叉,就是相鄰區塊的生產代表之間是有直接連接的,這種連接是和生成區塊的報酬有關係的。
4、去中心化的懷疑
有人懷疑挖礦權集中於100人是否還是去中心化?(v神2017.7.28在深圳的發言就提到EOS不屬於去中心化)實際上這100百人是權利平等的,無法將手中權利集中於更少的節點。多名代表可以聯合作惡,但是51名代表聯合作惡的可能性還是非常小的(比起比特幣挖礦權的集中要好很多了)。退一步即使他們能夠聯合作惡,但是造成的影響也不大,因爲很快就會被其他代表識別糾正進行分叉並無視作惡攻擊者的區塊鏈。

EOS中的DPOS

基本相同的是,代幣擁有者選舉代理,不同的是每一輪是前21名代表當選挖礦者,前20名是系統自動排序,第21名是按所得投票數目對應概率選出。所選擇的生產者會根據從塊時間導出的僞隨機數進行混合。以便保證出塊者之間的連接儘量平衡。
同一時間,只有一個生產者,頻率是每3秒一個區塊,就是63秒一輪。
如果某代表錯過出塊時間,而且24小時內也沒有出塊,系統認爲此代表已失聯,會取消挖礦代表權利。
1、交易確認
一般情況下,交易確認完成是需要15個確認,最多就是45秒。假如一個節點觀察網絡中出現連續2個區塊丟失,則認爲自己95%可能性在區塊鏈的分叉分支上。如果出現3個連續的丟塊以後,則有99%的可能性在一條分叉出來的區塊鏈上。爲避免分叉出現,可以生成一個預測模型,將節點丟失的信息,最近的參與率以及其他因素形成策略,快速地警告用戶。處理分叉15/21確認是比較簡單有效的方法。
2、交易證明(TaPoS)
基於交易的權益證明,要求每個交易都包括最近的區塊頭的哈希。這個可以防止分叉鏈上出現大量交易,系統能夠感知用戶在分叉鏈上。

賬戶

賬戶應該是DAPP的所有者,2-32個字符可作爲選擇,賬戶應該預留代幣支付管理費,帳戶名稱還支持命名空間,因此帳戶@domain的所有者是唯一可以創建帳戶@user.domain的用戶。
1、消息處理
每個賬戶可以發送結構化消息給其他賬戶,並且可以定義接受處理腳本,也可以進行轉發消息。每個賬戶有自己的數據庫,而且只能被自己的程序訪問。
2、基於角色的權限管理
權限管理就是檢查事物的簽名。

EOS.IO軟件提供了一個聲明式權限管理系統,可以讓帳戶細粒度和高級別地控制誰在何時能夠做什麼。

特別的,身份認證和權限管理是和賬戶的應用程序邏輯分離的,這樣能夠更方便進行開發。賬戶還支持多級管理,就是實現附加其他賬戶私鑰。滿足現實環境中的組織情況的層次化權限結構。還支持同一賬戶的權限分離,比如無需提供私鑰,讓賬戶實現其他功能,比如社交等。
命名權限級別
使用賬戶進行命名權限級別,進行分權管理。每個命名權限級別定義一個權力,這個權力可以是其他帳戶的密鑰和(/或)命名權限級別組成的多簽名檢查的閾值。

命名權限級別

所有帳戶都有一個可以做所有事情的“owner”權限組,和一個除了更改所有者組之外可以執行所有操作的“active”權限組。所有其他權限組均派生自“active”權限組。
命名消息處理程序組:每個帳戶將自己的消息處理程序以命名嵌套的方式予以組織。這些命名的消息處理程序組可以通過配置其權限級別被其他帳戶引用。
權限映射:系統還允許每個帳戶定義任何帳戶的命名消息處理程序組與其自己的命名權限級別之間的映射。
權限評估的只讀屬性:權限評估過程中對權限是隻讀的,這就意味着權限評估可以並行,也意味着可以快速驗證權限,而不需要考慮啓動可能回滾的昂貴的應用程序邏輯。最後,這意味着當掛起的事務繼續執行時,事務權限的評估可以繼續執行,而無需從頭重新執行。
系統中的強制延遲:事物應用之前必須等待一段比較小的時間段。在此期間,這些消息可以被取消,這就是強制延遲。強制延遲時間長短取決於操作的重要程度,越重要時間越長。

EOS.IO軟件爲用戶提供了一種在密鑰被盜時恢復其帳戶控制的方法。
帳戶所有者可以使用在過去30天內活動的任何其批准的帳戶恢復合作伙伴的密鑰,在其帳戶恢復合作伙伴的允許後,重置其帳戶上的所有者密鑰。在沒有帳戶所有者的配合情況下,帳戶恢復合作伙伴無法重置其帳戶的控制權。
對於攻擊帳戶的黑客而言,由於其已經“控制”該帳戶,因此嘗試執行恢復過程沒有任何收穫。此外,如果他們的確進行恢復的過程,那麼恢復合作伙伴可能需要身份認證和多因素認證(如電話和電子郵件)。這或者會暴露黑客的身份,或者黑客在恢復過程中毫無所得。

應用程序的確定性並行執行

1、通信延遲優化

延遲時間是一個帳戶將消息發送到另一個帳戶並收到響應所需的時間。EOS.IO軟件的目標是使兩個帳戶能夠在單個區塊內來回交換消息,而不必在每個消息之間等待3秒。爲了實現這一點,EOS.IO軟件將每個區塊分爲週期(cycle)。每個週期分爲線程(thread),每個線程包含事務列表。每個事務包含一組要傳遞的消息。該結構可以被可視化爲樹,其中各層依據其特性被順序或者並行地進行處理。
在一個週期中生成的交易可以在任何後續週期或區塊中傳送。區塊生成器將不斷把週期添加到區塊中,直到最長的區塊時間間隔達到,或者沒有新的可傳送交易生成。

2、區塊鏈技術組件是模塊化的,也就是每個應用只調用自己使用的模塊。
3、自主最優任務安排:每個區塊的生產者對交易的複雜度都有一個自己主觀的判斷。具體到網絡層,每一個區塊生產者使用自己的算法和度量衡量交易佔用的網絡資源,有人認爲該筆交易消耗大量資源可以選擇在自己的塊中拒絕該筆交易,也會有人不認可這種觀點,會收錄該筆交易到自己的塊中。因此只要被任意區塊收錄的交易最終就會被全網認可,不過這種情況下需要花費1分鐘才能將交易廣播出去。

令牌(代幣)模型和資源使用

資源限制:

保持系統可靠運行的資源,包括以下三方面
1.帶寬和日誌存儲(磁盤);
2.計算和計算積壓(CPU);
3.狀態存儲器(RAM)。
日誌存在於全節點中,主要用於重構所有應用程序的狀態。

可計債務(The computational debt)是指通過對消息日誌重新生成狀態的計算消耗。如果可技債務增長太大,就有必要對區塊鏈的當前狀態進行拍照,並拋棄區塊鏈的歷史狀態。如果計算債務增長過快,區塊鏈將使用6個月的時間來重放1年的交易。因此,對可計債務進行精心管理是至關重要的。

存儲狀態是從應用程序邏輯訪問的數據,比如交易信息。

授權能力

系統支持EOS賬戶所有人將自己閒置或者未完全使用的帶寬轉讓或者轉租他人。區塊鏈生產者能夠識別這種行爲執行其決定爲爲其分配帶寬。

EOS.IO系統的主要優點之一是,應用程序可用的帶寬完全獨立於任何令牌價格。

代幣價格的波動與可用帶寬沒有關係,不過代幣價格升高將影響一個區塊生成者能夠購買的帶寬、存儲和計算量,反過來可以利用上升的代幣價值來提高網絡性能。
狀態存儲成本
應用程序的開發者必須一直持有代幣直到帶寬和計算資源被委託狀態被刪除。每個賬戶都需要一定的存儲空間,因此也就必須持有一定數量的代幣。
塊獎勵
每生成一個區塊,系統都會獎勵出塊者一定數量新的代幣,這些新代幣就是發行機制。出塊者獲得的代幣數量由所有區塊生成者所公佈的期望報酬的中位數決定。系統可以通過設置來限制獲得的代幣的上限。

中位數(又稱中值,英語:Median),統計學中的專有名詞,代表一個樣本、種羣或概率分佈中的一個數值,其可將數值集合劃分爲相等的上下兩部分。對於有限的數集,可以通過把所有觀察值高低排序後找出正中間的一個作爲中位數。如果觀察值有偶數個,通常取最中間的兩個數值的平均數作爲中位數。(百度百科)

社區福利應用

除了成爲挖礦者之外,還可以選擇成爲3個智能合約(應用程序)的投票支持者。系統爲這些智能合約設置一定比例收益(需要減去挖礦獎勵),換句話說,這些智能合約根據自己從股東獲得的選票數獲得代幣。如果不能獲得信任,就會被新當選的智能合約替換掉。

治理

治理的權利歸代幣所有者,就是股東。所有對區塊鏈的修改必須得到股東投票同意,挖礦者具有執行和監督權限,比如凍結賬戶,更新程序,提出對底層協議的變更。如果挖礦者拒不執行投票結果,那麼,非挖礦節點(非生產的全節點驗證器(交換器等))將會否定挖礦者的決議。

凍結賬戶

爲了防止智能合約的異常行爲或不可預知行爲,區塊生成者有權選擇生成的區塊中包括哪些交易,從而使他們有凍結帳戶的能力。系統通過對一個賬戶17 / 21活躍區塊生成者的投票實現授權這種能力。如果生成者濫用權力,他們可以被淘汰,賬戶將被解凍。

改變帳戶代碼

應用程序發生異常而且不可阻止時,經過投票授權的挖礦者(17 / 21被選中的區塊生成者的投票)有權直接修改應用程序的代碼。

憲法

憲法是EOS中的大法,主要定義當代碼無法執行的用戶之間的義務,制定了一些公認的準則,確立了法律和司法權的界限。每一筆在網絡中廣播的交易都必須在其簽名信息中包含憲法的哈希值,以明確約束合約簽名者。憲法還定義代碼之外的人類的意圖,當系統出現錯誤時,這個意圖可以分清楚是bug還是系統特性,並且判斷社區對此的修復措施是否正確。

升級協議和憲法

對憲法或協議進行變更,需要完成以下步驟:
1.區塊生產者(原文miner/delegate/witness,因此沒有譯作礦工)提交一個憲法變更動議,並獲得17/21以上的贊成票;
2.區塊生產者將17/21以上的贊成票維持連續30天;
3.要求所有用戶都使用新憲法的哈希值確認交易;
4.區塊生產者採用修改源代碼的方式反映憲法變更,使用git提交的哈希值將變更提交到區塊鏈上;
5.區塊生產者繼續將17/21以上的贊成票維持連續30天;
6.變更的代碼7天后生效,源代碼修改通過後,將有1周的時間來對所有節點的進行升級;
7.所有沒有升級爲新代碼的節點將自動關閉。
根據EOS操作系統的默認配置,更新區塊鏈來添加新功能這一進程需要2到3個月時間,而修復那些不需要更改憲法的非關鍵性漏洞需要1到2個月時間。

特殊情況,當出現損害用戶利益的有害漏洞或安全漏洞時,區塊生產者可以加速憲法變更過程。

腳本&虛擬機

EOS支持任何語言開發的腳本和虛擬機都可以通過api進行集成。

模式定義的消息

賬戶之間發送的消息都是由共識狀態的模式定義的。這種架構允許消息在二進制和JSON格式之間的無縫轉換。

模式定義的數據庫

數據庫狀態也是類似上面模式的定義。

將身份驗證與應用程序分離

爲降低資源消耗,EOS操作系統將身份驗證和應用程序進行分離,驗證邏輯分爲三個階段:
1.確認消息在內部是一致的;內部一致就無需訪問區塊鏈狀態,對外就是隻讀的。可以並行進行。
2.確認所有的前置條件都是有效的;同樣前置條件也是隻讀的,也可以並行。
3.修改應用程序狀態。這裏就是寫入操作,串行對每個程序進行處理。
交易進入區塊之前是需要身份驗證的,但交易一旦被包含在區塊鏈中,就不再需要執行身份驗證操作了。

虛擬機獨立架構

當前正在評估的虛擬機:
1、Wren
Wren(http://wren.io)是一種小型的、快速的、基於類別的編程語言。之所以選擇Wren語言和虛擬機,是因爲它的短小精悍、易於文檔記錄和理解的代碼庫。它還具有非常好的性能,並且可以很容易地嵌入C++應用程序中。
2、Web組件(WASM)
WASM是構建高性能Web應用程序的新興Web標準,通過少量適配就可以被明確定義和沙箱化。WASM的好處在於業界廣泛支持,因此可以用熟悉的語言開發開發智能合約,例如C或C++。
3、以太虛擬機(EVM)
這個虛擬機已經被用於大多數現有的智能合約,並且可以在EOS系統區塊鏈上使用。可以想象,在EOS操作系統區塊鏈上,EVM合約可以在內部沙箱中運行,只需要少量適配就可以與其他EOS應用程序交互。

跨鏈交互

EOS操作系統支持促進區塊鏈間的跨鏈交互,這是通過簡化消息存在證明和消息序列證明來實現的。但是對於開發人員隱藏跨鏈交互和驗證的細節。

 

EOS的跨鏈交互

用於輕客戶端驗證的默克爾證明(LCV)

對於客戶端來說,要輕,也就是說不會關心所有的交易,更多關心與自己相關的交易,同樣對於交易所而言,將輕量級的默克爾存款證明維護在自己的鏈中,也就無需依賴全節點礦工,而後者將會節省更多的資源。
因此,LCV的目標之一就是產生相對輕量級的交易存在證明,目標之二是該證明能被其他人通過跟蹤一個輕量級數據集進行驗證。換句話說,目的就是證明一個特定的交易包括在一個特定的區塊中,並且這個區塊是被包含在已經驗證的特定區塊鏈歷史中。
那麼來看看比特幣怎麼做的。
比特幣的SPV是所有節點讀取區塊頭數據完整記錄,而區塊頭數據每年增長4MB, 假設每秒產生10筆交易,一個有效的證明需要512 bytes,出塊時間爲10分鐘,也就是每個區塊中包括6000個哈希值。對於EOS來說出塊時間爲3秒的區塊鏈來說是很低效的。
EOS操作系統的LCV只需要驗證包含某個交易的區塊頭數據,使用哈希鏈表架構這種方式,數據集大小可以保持在1024 bytes內,即可證明任何一個交易是否存在。這是基於驗證節點保留着前一天的所有區塊頭數據(2 MB大小),然後證明這些交易只需要200 bytes大小的證明數據。
還可以根據應用場合進一步優化,如果需要根據所有區塊頭數據,那麼也只有420 MB/年這樣的數據量。一般情況可以根據使用的區塊頭數據時間和數量之間找到合適的平衡點。同樣的一個區塊鏈可以“懶惰地”只記錄過去數據的哈希值作爲之前數據的證據。

在鏈與鏈之間經過一定密度的相互關聯之後。他們將會變得越來越高效。一條鏈可能會包含另外一條鏈的全部歷史記錄,那麼就不再需要互相證明。從性能的角度來說,這將極大地減少鏈間互相證明操作的頻率。

跨鏈通信延遲和完成證明

跨鏈通信時,礦工必須等待其他區塊鏈不可逆地確認之後纔會接受其爲有效的輸入。但是使用EOS系統軟件,依靠DPOS和17/21,確認時間只有45秒。這樣就會發生某個鏈上的礦工還沒有完全確認完成,EOS只有等待的情況。EOS操作系統通過分配一個順序的標識編號給每一筆到達賬戶的信息來避免這種情況(證明歷史交易數據之間沒有缺失),用戶可以使用這些標號來證明所有給這個賬號的消息已經被處理並且是被按順序處理的。

結論

區塊鏈技術的根本性進步,全球性區塊鏈社會的重要組成,應用程序的孵化器。

參考內容:
1、《EOS.IO技術白皮書》
2、DPOS委託權益證明 vs POW工作量證明
https://zhuanlan.zhihu.com/p/28127511
3、授權股權證明機制 (DPOS)白皮書翻譯修訂版
http://vdisk.weibo.com/s/yUM-q4I09jbOT



作者:喬延宏
鏈接:https://www.jianshu.com/p/bc489db794ce
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章