EOS.IO 技術白皮書 v2

摘要: EOS.IO 軟件採用了一種全新設計的區塊鏈架構,實現了去中心化應用的橫向和縱向擴展。具體方法爲構建一個類操作系統的架構,開發者可以在其中搭建應用程序。EOS.IO 軟件提供跨 CPU 跨集羣的賬戶系統、身份驗證、數據庫、異步通信,並且支持應用程序間的調度。用以實現上述特性的技術是一種特定的區塊鏈架構,在受管控的區塊鏈環境中,可擴展至每秒處理百萬級交易,消除用戶手續費,並且允許快速和輕鬆地部署和維護去中心化應用。

請注意: 本白皮書中提及的加密代幣,是指採用 EOS.IO 軟件所發佈的區塊鏈上的加密代幣,而非在以太坊區塊鏈上分發的與 EOS 代幣發放相關的 ERC-20 兼容代幣。

背景

伴隨着比特幣的誕生,區塊鏈技術在 2008 年問世,從那之後,企業家和開發者不斷地試圖將區塊鏈技術通用化,以期在單一區塊鏈平臺上實現對去中心化應用更廣泛的支持。

在衆多爭相實現支持可實用的去中心化應用的區塊鏈平臺當中,一些針對特定應用場景的區塊鏈脫穎而出並被廣泛使用,吸引了成千上萬的用戶。例如去中心化交易所 BitShares (2014)和社交媒體平臺 Steem (2016)。類似的項目之所以能被衆多用戶接納,是因爲他們不僅提高了性能使得每秒可處理的交易量達到數千次,還將確認時間縮短至 1.5 s 並且消除了交易費用,同時他們還能提供可與現有的中心化服務相媲美的用戶體驗。

然而更多現有的區塊鏈平臺(的使用)則需要高昂的交易費用,並且計算能力也有限,這些都是阻礙區塊鏈技術被更廣泛地接受與使用的因素。

對區塊鏈應用的要求

要實現更廣泛的應用,區塊鏈上的應用程序需要一個足夠靈活的平臺,該平臺要滿足以下需求:

支持百萬級用戶

與 Ebay、Uber、AirBnB 和 Facebook 這樣的企業競爭,區塊鏈技術要能處理百萬級的日活躍用戶。在某些場景中,除非用戶量達到一個極其龐大的數量級,否則應用並無用武之地。因此,一個可以支持相當龐大的用戶量的平臺是至關重要的。

免費使用

應用開發者需要足夠的靈活性來爲用戶提供免費的服務,用戶不應該因爲使用平臺或從平臺上的服務中獲益而支付費用。可免費使用的區塊鏈平臺會更受歡迎,開發者和商家也可以從中創造更多有效的盈利策略。

易於升級和 Bug 修復

基於商用區塊鏈之上的應用需要有一定的靈活性來支持新特性的增加,因此平臺本身必須支持軟件和智能合約的升級。

軟件只要達到一定規模,就必定會出現 bug,即便是通過了再嚴格的驗證也不例外。因此平臺必須足夠魯棒(Robust)並支持修復不可避免的 bug。

低延時

好的用戶體驗要求在數秒內就能收到可靠的反饋。高延時不僅會讓用戶心煩,還會導致建立在區塊鏈之上的應用競爭力不如現有的中心化應用。因此,平臺需要支持低延時交易。

時序性能

由於執行步驟的順序依賴關係,一些應用不能使用併發算法來實現。例如,交易所就需要足夠的時序性能來處理高交易量。因此,平臺需要具備高時序性能。

併發性能

大規模的應用需要將工作量分配到多臺 CPU 和計算機之上,因此,平臺需要內建對併發的支持。

共識算法(BFT-DPOS)

EOS.IO 軟件採用授權委託證明(DPOS)的算法,在目前已知的去中心化共識算法中,只有該算法經證明可以滿足區塊鏈上應用程序的性能要求。根據這種算法,EOS 區塊鏈上所有代幣持有者可以都通過一個持續的投票系統選擇區塊生產者。想參與區塊生產,只要能說服代幣持有人給自己投票,最終(得票最高的那些節點)被選爲區塊生產者。

EOS.IO 軟件能夠精確地每 0.5 秒產生一個區塊,並且在任一時間僅有一個生產者獲權生產區塊。如果在預定時間內沒有區塊生成,則跳過該塊。相應的,當跳過一個或多個塊時,區塊鏈中會存在一個大於等於 0.5 秒的時間間隔。

使用 EOS.IO 軟件,每一輪產生 126 個區塊(共 21 個區塊生產者,每一輪都有一個特定的生產者負責產生 6 個塊,即一輪的時間爲 63 秒)。在每輪開始時,根據代幣持有者的投票選出 21 個不同的區塊生產者。獲選的生產者的生產順序由 15 個或更多生產者一致同意決定。

如果一個生產者錯過了一個塊,並且在過去 24 小時均未產生任何塊,則會被從生產者的名單中剔除,直至他通知區塊鏈表明他打算再次開始生產區塊。這種方式可以排除不可靠的生產者來最小化錯過的區塊數量,從而確保網絡的順暢運行。

正常情況下, DPOS 區塊鏈不會產生任何分叉,因爲生產者生產區塊的方式是合作而非競爭。如果出現分叉,那麼共識的處理方式是自動切換到最長的鏈上。其工作原理是,一個區塊鏈的分叉上新區塊的添加速度與在這個分叉上達成共識的生產者的多寡直接相關。換言之,生產者數量多的分叉,其增長速度要比生產者較少的分叉的增長速度更快,這是因爲生產者數量多的分叉錯過的區塊數往往會更少。

此外,任何區塊生產者都不應該在同一時刻在兩個分叉上競爭出塊。如果有塊生產者被發現這麼做,可能會被投票出局。這種雙重生產會留下密碼學證據,因此識別並自動清除這類區塊生產者是可行的。

添加了拜占庭容錯機制的 DPOS 算法需要所有生產者簽名所有區塊,但禁止同一個生產者簽名兩個時間戳或高度相同的區塊。一個區塊一旦被 15 個生產者簽名,那麼這個區塊就可以被視爲不可逆了。

任何生產者一旦簽名兩個相同時間戳或相同區塊高度的區塊,這種不誠信行爲就會留下密碼學證據。在這一模型下,不可逆的共識將在 1 秒內達成。

交易確認

典型的基於 DPOS 共識算法的區塊鏈中,區塊生產者會有 100% 的參與度。一筆交易在廣播後的平均 0.25 秒之後,就可以 99.9% 確定這筆交易不可逆了。

而 EOS.IO 軟件除了 DPOS 共識算法,還引入了了異步拜占庭容錯 (aBFT),可讓交易的更快達到不可逆轉狀態,可在 1 秒內 100% 確定交易達到了不可逆狀態。

交易作爲權益證明(TaPoS)

EOS.IO 軟件要求每一筆交易必須包括最近的一個區塊頭的部分哈希值。這個哈希值有兩個目的:

  1. 防止一個交易在另一個未包含該交易的分叉上被重新廣播。

  2. 通知整個網絡,某個特定用戶和他的權益存在於某個特定的分叉上。

如此一來,僞造假冒鏈將變得非常困難,因爲僞造者無法將合法鏈中的交易遷移到假冒鏈上。

賬戶系統

EOS.IO 軟件規定所有的賬戶都由一個唯一名稱來標識,名稱的最大長度爲 12 個字符。該名稱由帳戶的創建者指定。帳戶創建者必須使用 EOS 代幣預留 RAM 用來存儲新帳戶,直至新帳戶質押自己的代幣來預留自己的 RAM。

在去中心化的背景下,應用程序開發人員在新用戶註冊時,會象徵性地支付賬戶創建費用。傳統企業爲獲取客戶,已經以廣告、免費服務等形式爲每個用戶花費了大量資金。相比之下,創建新的區塊鏈賬戶所需的資金成本微不足道。不過好在如果用戶在註冊另一個應用程序時已經創建了帳戶,那就沒有必要再次創建了。

操作(Actions)和處理程序

每個帳戶可以發送結構化的操作(Actions)到其他帳戶,並且可以定義程序代碼來處理收到後的操作。EOS.IO 軟件爲每個帳戶提供自己的私有數據庫,只能由該賬戶的操作處理程序(Action Handler)訪問。操作處理程序還可以發送操作到其他賬戶。操作和自動化的操作處理程序的結合合是 EOS.IO 定義智能合約的方式。

爲支持併發執行操作,每個賬戶可以在其數據庫內定義任意多個作用域。區塊生產者通過這種方式安排事務,使得事務執行時對作用域的內存訪問沒有衝突,因此事務可以併發執行。

基於角色的權限管理

權限管理包括確認某項操作是否被正確授權。最簡單的權限管理是檢查交易是否具有所需的簽名,這也意味着所需的簽名是已知的。一般而言,授權涉及個人或羣體,並且往往是分類的。EOS.IO 軟件提供了一個聲明式權限管理系統,可以對帳戶進行細粒度、高級別的控制,以確定誰在何時可以做什麼。

身份驗證和權限管理必須標準化,並與應用程序的業務邏輯分開,這是至關重要的。這樣使得開發工具能夠以通用方式管理權限,併爲優化性能提供巨大空間。

每個帳戶都可以通過其他帳戶和私鑰的組合來控制。這就創建了一個分層的權限結構,真實反映了現實中權限的組織方式,並使得多用戶的賬戶控制比以往更容易。多用戶控制對提升安全性的作用是最大的。如果使用得當,會極大降低黑客攻擊而造成的盜竊風險。

EOS.IO 軟件允許帳戶定義什麼樣的賬戶和密鑰的組合可以把特定的操作發送到另一個賬戶。例如,可以使用一個密鑰訪問用戶的社交媒體帳戶,另一個密鑰用於訪問交易所。甚至可以授權其他帳戶來代表本賬戶進行操作,而無需爲其他賬戶分配密鑰。

命名的權限級別

帳戶通過使用 EOS.IO 軟件,可以定義命名的權限的級別,每個權限級別可以從更高級別的命名權限中派生。每個命名權限級別定義一個權限。權限是一個多簽名的閾值檢查,由其他帳戶的密鑰和 / 或命名權限級別組成。例如,可以爲一個帳戶的某個操作設置 \” 朋友 \” 權限級別,該帳戶的朋友對該操作具有相同等級的控制權限。

另一個例子是 Steem 區域鏈,它具有三個硬編碼的命名的權限級別:owner, active 和 posting。posting 權限只能執行諸如投票和發佈等社交操作,而 active 權限可以執行除更改所有者的所有操作。owner 權限應該被冷存儲起來,它可以執行一切操作。EOS.IO 推廣了這一理念,允許每個賬戶所有者自定義權限級別以及操作的分組。

權限映射

EOS.IO 軟件允許每個帳戶定義從合約 / 操作或其他賬戶的合約到其自己的命名的權限級別之間的映射。例如,賬戶持有人可將其社交媒體應用程序映射到賬戶所有者的 \” 朋友 \” 權限組。通過此映射,該賬戶的任何朋友都可以作爲賬戶所有者在社交媒體發佈信息。儘管這些朋友可以作爲帳戶所有者發佈信息,但他們仍然會使用自己的密鑰來簽名。這就意味着,哪些朋友以何種方式使用了該帳戶,始終是可以確定的。

權限評估

當從賬戶 @alice 發送類型爲 \” Action \” 的操作到 @bob 時,EOS.IO 軟件將首先檢查 @alice 是否爲 @bob.groupa.subgroup.Action 定義了權限映射。如果沒有發現任何結果,那麼將會檢查 @bob.groupa.subgroup,然後檢查 @bob.groupa,最後檢查 @bob。如果沒有找到進一步的匹配,則假定映射的命名權限組是 @alice.active。

一旦確定了映射的命名權限,則使用多簽名閾值來驗證簽名,並獲取命名權限相關聯的權限。如果失敗,那麼它會遍歷父類權限,最後遍歷 owner 的權限,即 @alice.owner。

默認權限組

EOS.IO 軟件給所有賬戶指定了兩個默認權限組。一個是 \”owner\” 權限組 , 可以執行任何操作。還有一個“active”權限組,除了更改“owner”權限組之外,可以執行所有操作。所有其他權限組均由“active”組派生。

併發評估權限

權限評估過程是 \” 只讀 \” 的,並且,對權限的更新交易直到被打包進區塊後纔會生效。這意味着一切交易的所有密鑰和權限評估都可以併發執行。此外,這還說明快速權限驗證是可行的,而且不需要啓動昂貴的應用程序邏輯(並且在驗證失敗時會回滾應用邏輯)。最後,這意味着交易權限可以在接收到待處理的交易時進行評估,而在待處理的交易被處理時無需重新評估。

從整體來看,權限驗證佔交易驗證中所需計算的很大一部分。讓權限驗證過程只讀,並且可併發執行,可以顯著提升性能。

當我們重放區塊鏈的歷史,試圖從操作日誌重新生成確定性狀態時,不需要再次評估權限。交易包含在一個已知的不可逆的區塊中這一客觀事實,足以讓其跳過權限評估的不周步驟。這極大減少了重放不斷增長的區塊鏈時消耗的計算量。

帶強制延遲的操作

時間是關乎安全的關鍵因素。通常情況下,只有在私鑰被盜竊者使用了之後,私鑰的所有者才能知道它被盜了。當人們的應用軟件需要在連網的計算機上保存密鑰以供日常使用時,基於時間的安全性就顯得更爲重要了。EOS.IO 軟件使得開發者可以指定某些操作 (Actions) 在記錄到一個區塊後必須至少等待一小段時間後才被應用。在此期間,操作可以取消。

當一個操作廣播後,用戶可以通過電子郵件或短信來接收其通知。如果他們沒有給這個操作授權,那就可以使用賬戶恢復流程來恢復賬戶並撤銷操作。

上述所需的操作確認延遲取決於操作的敏感程度。支付咖啡錢時可以沒有任何延遲,在幾秒鐘內就達到不可逆,而購房時可能就需要 72 小時的結算期。轉讓整個帳戶到新的控制權可能需要長達 30 天的時間。確切的延遲時間是由應用開發者和用戶共同決定的。

密鑰被盜後的恢復

EOS.IO 軟件爲用戶提供了一種在密鑰被盜後恢復帳戶控制權的方法。帳戶所有者 (owner) 可以通過過去 30 天內處於活躍狀態的任何 owner 密鑰,以及來自其指定的帳戶恢復合作伙伴的批准來重置其帳戶的 owner 密鑰。沒有帳戶所有者的幫助,帳戶恢復合作伙伴無法單獨重置帳戶的控制權。

黑客嘗試完成恢復流程是沒有意義的,因爲他們已經 \” 控制 \” 了帳戶。此外,如果他們萬一真要走這個流程,恢復夥伴也會要求身份識別和多重認證(電話和電子郵件)。這會讓黑客的身份受到懷疑,或讓他在該流程中一無所獲。

該流程與簡單的多重簽名協議很不一樣。多重簽名交易中,另一方會成爲每筆交易的參與者。相比之下,在恢復流程中,合作伙伴只是參與了恢復流程,無權干預日常交易。這大大降低了所有相關人員的操作成本和法律責任。

應用的確定性並行執行

區塊鏈共識取決於確定性 (可重複) 行爲,這意味着所有並行執行必須避免使用互斥鎖或者其他鎖原語。如果沒有鎖,那麼必須要有方法來保證可能被並行執行的交易不會產生非確定性結果。

EOS.IO 軟件在 2018 年 6 月的發行版將會是單線程的,但是它會包含將來多線程、並行執行所需的數據結構。

在基於 EOS.IO 軟件的區塊鏈中,一旦啓用並行操作,區塊生產者的工作就是將操作 (Action) 投遞到獨立的分片 (shard)
中,以便可以進行並行評估。區塊生產者的產出是將被確定性地執行的計劃表,但是生成計劃表的過程不需要是確定性的。這意味着區塊生產者可以利用並行算法來調度交易。

部分的並行執行是說,當一個腳本生成一個新的操作時,它可能不會被立即投遞,而是被安排在下一個循環中投遞。無法立即分配的原因是接收者可能正在活躍地修改自己在其他分片中的狀態。

最小化通信延遲

延遲時間是指一個帳戶向另一個帳戶發送操作並接收響應所需的時間。我們的目標是使兩個賬戶能夠在一個區塊內來回交換操作,而不必爲每次操作都等待 0.5 秒。爲了實現這一點,EOS.IO 軟件將每個區塊分成多個循環 (Cycle),每個循環又被分成多個分片,每個分片包含一組交易。每筆交易都包含一組要投遞的操作。這個結構可以被可視化爲一棵樹,其中不同層交替地按順序及並行地處理。

區塊 區域 循環 (順序) 分片 (並行) 交易 (順序) 操作 (順序) 接收者和被通知賬戶 (並行)

在一個循環內生成的交易可以在任意後續的循環或區塊中被投遞。區塊生產者會持續給區塊增加循環,直到超過最大運行時間,或者沒有新生成的交易要投遞。

對一個區塊使用靜態分析來驗證給定循環內沒有兩個分片包含修改同一帳戶的交易,這種方式是可行的。只要這一點是確定的,那麼一個區塊就可以通過並行運行所有的分片的方式進行處理。

只讀的操作處理程序

有些帳戶可能可以用 \” 通過 / 未通過”的方式來處理操作,而不必修改其內部狀態。如果是這種情況,只要對於特定的賬戶只有只讀的操作處理程序被包含在某一循環內的一個或多個分片中,那麼這些處理程序可以被並行執行。

多帳戶的原子交易

有時候我們希望保證操作投遞給多個賬戶並被接收是原子的。在這種情況下,兩個操作會被放置在同一筆交易裏,這兩個帳戶還會被分配到相同的分片裏並按順序處理操作。

區塊鏈狀態的部分評估

區塊鏈擴容技術要求組件是模塊化的。任何人都不應該處理所有事情,特別是在他們只需要使用一小部分鏈上數據的情況下。

交易所應用的開發者會運行全節點以便給用戶顯示交易狀態。這個交易所應用不需要其他社交媒體應用相關的狀態。EOS.IO
軟件允許任意全節點選擇要運行的任意應用的子集。如果你的應用不依賴於其他合約的狀態,那麼你可以安全地忽略投遞給其他應用的操作。

自主最優調度

EOS.IO 軟件不能強迫區塊生產者投遞任何操作給任何其他帳戶。每個區塊生產者都需要對處理交易所需的計算複雜度和時間做出主觀測量。無論是用戶生成的還是智能合約自動生成的交易,這一點都適用。

在一個基於 EOS.IO 軟件的區塊鏈裏,在網絡層面上,所有交易會根據執行的 WASM 指令數來計算帶寬成本。但是使用 EOS.IO 軟件的每個區塊生產者都可能會使用自己的算法和標準來計算資源的使用情況。當區塊生產者判定某個交易或賬戶會消耗過多的計算能力時,在生產自己的區塊時他們會直接拒絕這個交易;但是如果其他區塊生產者都認爲這個交易有效,他們還是會處理該交易。

一般而言,只要有 1 個區塊生產者認爲某個交易有效且在資源使用限制內,那麼其他所有區塊生產者也會接受這個交易;但是這個交易可能需要多達 1 分鐘才能找到生產者。

在某些情況下,生產者創建的區塊可能包含可接受範圍之外的數量級的交易。遇到這種情況,下一個區塊生產者可以選擇拒絕該區塊,這個僵局將會被第三個生產者打破。這和過大區塊導致網絡傳播延遲沒什麼區別。EOS.IO 社區會注意到這種濫用模式,並最終移除惡意生產者的投票。

這種對計算成本的主觀評估使得區塊鏈不必精確和確定地測量交易需要運行多長時間。有了這個設計就沒必要精確地計算指令數,這可以在不違反共識的情況下顯著增加優化性能的機會。

延遲交易

EOS.IO 軟件支持延遲交易,這是一種被調度到將來執行的交易。這使得計算能夠被分配到不同的分片中,並且能夠創建持續調度執行連續交易並長時間運行的進程。

上下文無關的操作

上下文無關的操作是指包含僅依賴交易數據,而不依賴區塊鏈狀態的計算。比如說,簽名驗證這種計算,只需要交易數據和簽名以確定簽署交易公鑰。在區塊鏈必須執行的單個計算中,這是最昂貴的一種,然而由於這種計算是上下文無關的,所以它可以被並行執行。

上下文無關的操作和用戶的其他操作類似,只是它們無需訪問區塊鏈狀態來執行驗證。這不僅使得 EOS.IO 軟件能夠並行地處理所有上下文無關的操作,比如簽名驗證;更重要的是,還可以實現通用簽名驗證。

通過支持上下文無關的操作,Sharding,Raiden,Plasma,State Channels 等擴容技術變得更加可並行和實用。這項技術的開發可以實現高效的區塊鏈間通信和潛在的無限可擴展性。

治理(Governance)

治理是指人們在社區中的一系列管理流程,藉此人們可以:

  1. 就那些軟件算法無法完全捕獲的集體行動的主觀問題達成共識
  2. 執行他們做好的決定
  3. 通過章程修正案來修改治理規則

基於 EOS.IO 程序的區塊鏈實現的治理過程,可以有效指導區塊生產者的現有影響。先前的區塊鏈由於缺少明確的治理過程,而依賴於臨時的、不正式的治理過程,常引起爭議,最終導致結果不可預測。

基於 EOS.IO 程序的區塊鏈所認可的是權利來源於將那些權利委託給區塊生產者的代幣持有者。區塊生產者被賦予了受限且經過驗證的權限,他們可以利用這些權限,完成賬戶凍結,更新有缺陷的程序,或者提議對基本協議的硬分叉更改。

區塊生產者選舉是集成於 EOS.IO 程序之中的。在對區塊鏈做任何更改之前,這些改動都必須經過這些區塊生產者的批准。如果塊生產者拒絕執行代幣持有者所希望的改變,那麼塊生產者可能會被投票出局。如果區塊生產者在未經代幣持有者允許的情況下做了更改,那麼所有的其他非生產性全節點驗證器(交易所等)則能夠拒絕掉這些更改。

凍結賬戶

有時,智能合約的行爲會發生異常或者變得不可預測,不再按預期執行;或有時,應用程序或賬戶會發現某個行爲會導致其過度消耗資源,當這些問題不可避免地發生時,區塊生產者有權去糾正這些問題。

區塊鏈上的所有區塊生產者都有權去確定哪些交易會被包含進塊中,這使得他們有能力凍結賬戶。只要 EOS.IO 軟件中 21 個活躍生產者中的 15 個投票達成一致,即可授權凍結賬戶。如果生產者濫用該權力,那麼他們則會被投票出局,被凍結的賬戶也將得以解凍。

更改賬戶代碼

當所有其他辦法都失效且有一個 \” 無法停止的程序 \” 以不可預知的方式在運行時,使用 EOS.IO 軟件允許區塊生產者在不使用硬分叉的情況下替換這些賬戶的代碼。這種替換代碼的的請求類似於凍結賬戶的過程,需要至少 15 個區塊生產者投票通過。

章程(Constitution)

EOS.IO 程序允許區塊鏈建立點對點的服務條款,或是在簽署該協議的用戶之間綁定合約,我們稱之爲 \” 章程 \”。該章程規定,用戶之間不能完全由代碼來規定執行的義務,而是應該通過建立管轄權和法律法規以及其他相互接受的規則來幫助解決出現的爭議。網絡上每筆交易的廣播都必須包含章程的哈希來作爲簽名的一部分,從而明確地將簽署人綁定到合約中。

該章程還規定應考慮源代碼協議的可讀性。該功能用於明確區分漏洞和功能,同時引導社區界定哪些修復是合適的,哪些是不合適的。

升級協議和章程

協議的正規源代碼以及章程規定,協議可以進行更新。EOS.IO 程序規定更新過程如下:

  1. 區塊生產者提議對章程作出修改,並獲取到 15/21 的認可。
  2. 區塊生產者在連續的 30 天保持並擁有對新章程的 15/21 的認可。
  3. 所有用戶都必須表明接受新章程,並以此作爲對未來交易處理的條件。
  4. 區塊生產者根據章程所發生的變化對源代碼進行修改,並使用新章程的哈希將其提交至區塊鏈。
  5. 區塊生產者在連續的 30 天保持並擁有對新代碼的 15/21 的認可。
  6. 對代碼所做的更改在 7 天后生效,當源代碼得到正式批准後,給予所有非生產完整節點 1 周的時間進行升級。
  7. 所有未升級到新代碼的節點會自動關閉。

默認情況下,針對 EOS.IO 程序所做的配置,以及通過更新區塊鏈來添加新功能的過程需要 2 到 3 個月的時間,而針對不需要對章程做更改的非關鍵性漏洞的修復更新可能需要 1 到 2 個月的時間。

緊急變更

如果軟件出現了會對用戶產生影響的漏洞或是安全問題,急需作出修復,則區塊生產者可能會因此加快此過程。但是需要加速升級的方式,來引入新功能或者修復無害漏洞可能會與章程的規定相違背。

腳本和虛擬機

EOS.IO 軟件將會是賬戶間傳遞可信消息(稱之爲 \” 操作 \”)的最重要的平臺。腳本語言和虛擬機屬於具體實現,與 EOS.IO
的技術設計幾乎是相互獨立的。任何確定性的語言或者虛擬機,只要性能足夠好,並支持沙盒運行機制,都可以和 EOS.IO 的 API 整合起來。

範式定義的操作(Actions)

任何賬戶間的操作都滿足一定的範式,該範式也是區塊鏈共識狀態的組成部分。這一範式支持二進制格式和 JSON 格式間的無縫轉換。

範式定義的數據庫

數據庫狀態也由類似的範式定義。這一範式使得所有應用儲存的數據都遵循特定的格式,既能轉換爲可讀性很強的 JSON 格式,又能以高效的二進制格式存儲與操作。

通用多索引數據庫 API

開發智能合約需要一個事先定義好的數據庫來追蹤、存儲和查詢數據。開發者們普遍需要支持數據排序或多字段索引的數據庫,來保證數據的一致性。

將認證從從應用中抽離

爲了最大化並行運算能力和最小化算力債(計算應用狀態需要在交易日誌中從頭運算),EOS.IO 軟件將驗證邏輯分成了三部分:

  1. 驗證一個操作在內部是一致的。
  2. 驗證所有的前置條件是有效的。
  3. 修改應用狀態。

驗證操作的內部一致性是隻讀操作,且不需要區塊鏈狀態信息。這意味着這一操作可以最大程度地並行進行。驗證前置條件的有效性(比如必要的餘額)也是隻讀操作,因此也可以利用並行機制。只有修改應用狀態這一步需要寫操作,並且對每個應用必須嚴格按照順序執行。

認證是用來驗證操作是否可以被執行的一個只讀過程。而(操作涉及的)真正的業務則是應用程序來完成的。當一個操作發生的時候,這兩部分工作都需要實時計算。好消息是,一旦(包含該操作的)交易被打包進了區塊鏈,認證操作也就不再需要重複進行了。

跨鏈通信

EOS.IO 的設計能促進跨鏈通信,實現方式是簡化生成操作存在證明和順序證明。這些證明和圍繞操作傳遞設計的應用架構一起,使得跨鏈通信的細節和驗證工作對應用開發者不可見,開發者看到的只是更高層次的抽象。

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

如果客戶端不需要處理全部交易的話,和其他區塊鏈的結合將變得非常容易。畢竟類似交易所這樣的客戶端,它只關心資產的轉入和轉出。理想情況下,交易所的鏈可以用轉賬交易的輕量默克爾證明(來完成交易所業務),而不是完全信任某個區塊生產者。每條鏈的區塊生產者都希望和其他鏈同步的開銷儘可能地小。

輕量客戶端驗證(LCV)的目標是生成相對輕量的存在證明,這些證明可以被任何關心一個輕量的數據集的客戶端用來驗證。在上述例子中,LCV 的目的就是爲了用來證明某筆交易已經被包含進某一特定區塊,而這一區塊已經被某條特定的鏈所收錄。

比特幣支持交易驗證的功能,這一功能基於一個假設,那就是所有的節點都可以訪問到全部的區塊頭歷史數據(區塊頭數據每年增加 4 MB)。在每秒 10 筆交易的吞吐下,一個驗證用到的存儲空間約爲 512 個字節。對於 10 分鐘一個區塊的比特幣來說,這是可行的。但對於擁有 0.5 秒的出塊速度的 EOS.IO 軟件來說,這個機制顯然不夠輕量。

任何有不可逆區塊頭數據的用戶在交易被區塊記錄後,都可以使用 EOS.IO 提供的輕量證明。輕量證明的哈希連接(hash-linked)結構表明,最多隻要 1024 個字節,即可驗證任何一筆交易的存在與否。

考慮到區塊鏈中的區塊的 id 和區塊頭都是可信的且不可逆的,因此證明某個區塊被包含在某個區塊鏈中也是可行的。這類證明最多隻需 ceil(log2(N)) 次摘要計算即可完成,其中 N 爲區塊鏈中的區塊個數。就 SHA256 這種摘要算法來說,你只需要 864 個字節就可以在一個有着 1 億個區塊的鏈上驗證某個區塊的存在。

使用合適的哈希連接(hash-linking)機制生產區塊以啓用上述證明,幾乎不會帶來什麼額外開銷,所以這種方式十分可行。

若要在其他鏈上驗證證明,時間、空間和帶寬上都有很多優化空間。追蹤全部的區塊頭(每年 420 MB 遞增)可以將證明維持在比較小的空間佔用。僅追蹤最近的區塊頭會在最小長期存儲和證明大小之間實現平衡。另外也可以採用惰性求值的方式,記錄過去的證明的中間哈希值。新證明只需要包含已知的稀疏樹的連接。具體選取何種方式,取決於默克爾證明引用的帶有交易的外部區塊的比例。

當互聯和耦合程度達到一定的複雜度之後,將兩條鏈的數據合併將更簡單高效,如此一來也就不再需要默克爾證明了。因爲性能的原因,跨鏈證明的頻度當然是越小越好。

跨鏈通信的延遲

當和外部區塊鏈進行通信的時候,區塊生產者必須要 100% 確認一筆交易已經被不可逆轉地寫入到外部區塊鏈之後,纔可以將其當作合法輸入。EOS.IO 的區塊鏈加上 DPOS 算法 0.5 秒的出塊速度,結合拜占庭容錯機制,使得等待上述確認的時間大約爲 0.5 秒。任何區塊生產者若違背上述原則,不等待確認即開始下一步操作,例如交易所在未確認的情況下就將資產衝入用戶賬戶,隨後又將資產取消的行爲,都將影響區塊鏈的共識機制。EOS.IO 軟件使用 DPOS 算法結合拜占庭容錯機制快速實現交易的不可逆性。

完整性證明

當外部的區塊鏈使用默克爾證明的時候,去知曉處理的全部交易全部有效,迥異於去知曉沒有交易被跳過或省略。因爲想要證明 \” 最近全部的交易都已經被知曉 \” 是不可行的,而證明“交易歷史記錄裏沒有被跳過的交易”則很容易。EOS.IO 軟件通過給發送到每個賬戶的每個操作一個順序編號來實現這一點。用戶可以使用這些順序編號來驗證某個特定賬戶的所有操作都已經被處理,並且是嚴格按照順序來處理的。

隔離見證(SegWit)

隔離見證(SegWit)是指一筆交易被打包進不可變更的區塊鏈之後,這筆交易的簽名就與交易無關了。一旦交易變爲不可變更狀態,簽名數據就可以被捨棄,其他人仍然能獲得區塊鏈當前狀態。考慮到簽名數據容量佔據了多數交易的很大部分,隔離見證將能大幅縮減磁盤佔用和數據同步時間。

隔離見證的概念對用於跨鏈通信的默克爾證明同樣適用。一旦一個證明被接受並被不可逆地記錄進區塊鏈,那麼這個證明用到的 2 KB 大小的 sha256 哈希值就可以在不影響區塊鏈狀態的前提下被捨棄。值得一提的是,將隔離見證用於跨鏈通信節省的存儲空間的是常規簽名場景下的 32 倍。

隔離見證應用的另一個場景則是用於(存儲) Steem 的博客文章。利用隔離見證,存儲在區塊鏈上的將只是一篇篇博客內容的 sha256 哈希值,真正的內容則存儲於隔離見證數據中。區塊生產者只需要依靠內容的哈希值就可以驗證文章的存在。要從交易日誌中恢復區塊鏈當前狀態,生產者無需存儲全部的內容。這樣一來,以下的證明方式變得可行:內容只要曾經有人看過即可,無需永久儲存。

結束語

EOS.IO 軟件的設計理念來源於已被證實的概念和最佳實踐,代表了區塊鏈技術的重大進步。作爲未來全球範圍區塊鏈社會的宏偉藍圖的組成部分,EOS.IO 使得去中心化應用(dApp)的開發、部署和管理變得更加容易。

來源鏈接:None