EOS Dawn 3.0上線,可開發百萬吞吐量DApp

4月6日,BM在Medium宣佈EOSIO DAWN 3.0正式發佈,這是EOSIO正式發佈之前的一個的里程碑式的版本,也是DAWN3.0版本的第一個功能完整的預發佈。BM提到,雖然這次發佈的版本在最初的EOS白皮中沒有提到,但是在開發過程中實現了新的功能。EOSIO已經比我們一年前想象的更加強大且更容易開發。

EOS Dawn 3.0上線,可開發百萬吞吐量DApp

以下為BM在Medium上發佈的文章中文版:

Block.one很高興地宣佈EOSIO第一個功能完備的預發行版--Dawn 3.0正式發佈。 這是EOSIO1.0在2018年6月份發佈之前的一個重大里程碑。為了使EOSIO成為構建區塊鏈應用程序的最強大平臺,我們的全球開發團隊一直在全天候工作。 距離我們發佈EOSIO Dawn 2.0以來已經過去四個月了,這次我們有很多要展示的東西。

構建最先進的區塊鏈架構是一個隨著我們開發進度不斷調整的過程。 我們在Dawn 3.0中完成的許多功能在最初的EOSIO白皮書中都沒有涉及,但是在構建高性能、靈活且易於開發的平臺的過程中,我們擴展了這些功能。

可擴展性

可擴展性意味著通過擴展來不斷滿足市場需求。 我們的團隊在每一步都將未來擴展需求納入設計中。 也就是說,Dawn 3.0只實現了一小部分潛在的優化,可以讓EOSIO進行擴展。 我們設計了EOSIO,以便將來的實現可以利用並行計算來加速吞吐量,不需要通過硬分叉就能繼續升級。

跨鏈通訊

跨鏈通訊是終極的可擴展性功能, 業界一直在尋找諸如側鏈,plasma和分片等技術實現跨鏈通訊。跨鏈通訊使一個區塊鏈能夠以可證實的安全方式驗證另一個區塊鏈上的事件的真實性。 目標是讓區塊鏈之間的通訊像智能合約之間的內部鏈式溝通一樣安全,我們認為我們已經實現了這一目標。

我們認為,跨鏈通訊只不過是具備將輕客戶端作為智能合約的能力。 輕客戶端可以驗證區塊鏈中的交易,而無需處理整個區塊鏈。 這反過來意味著需要建立一個具備高效安全的輕客戶端驗證機制的POS區塊鏈。 因此,輕客戶端驗證必須納入協議設計中,否則,跨鏈通訊幾乎不可能實現。

稀疏區塊頭驗證

傳統的輕客戶端需要處理每個區塊頭並且驗證區塊頭的特徵值。 EOSIO每秒生成兩個區塊,區塊頭的處理至少需要2tps。 這不適用於相對罕見的跨鏈通訊。 為了解決這個問題,我們創建了第一個帶拜占庭容錯稀疏區塊頭驗證的區塊鏈。 具體而言,至少需要三分之二(比如21箇中的15個)的生產節點叛變,才能矇騙輕客戶端。 此外,輕客戶端只需處理兩種區塊的頭部:活躍生產節點變化以及包含相關跨鏈通訊的區塊 。 這大大減少了輕客戶端維護拜占庭容錯的開銷,並大大提高了跨鏈通訊的效率。

“上下文無關”Action

“上下文無關”Action是實現高效跨鏈通訊的關鍵功能之一。 它們是特殊的Action,因為它們可以包含在交易中,但不依賴於區塊鏈狀態,因此它們是“上下文無關(context-free)”的。 “上下文無關”的一個例子是驗證merkle值。 由於這些計算是“上下文無關”的,因此可以並行進行簡單驗證,並且可以省去那些重複計算。

每個“上下文無關”Action也可以引用一個交易的特殊可刪減數據片段。這意味著可以刪減龐大的Merkle證明,並且在區塊鏈重複時跳過複雜的計算。

上下文無關的行為使我們能夠並行化與跨鏈通訊相關的絕大部分算力承載。 它們還使我們能夠平行處理並修剪昂貴的計算隱私技術,如機密交易,Bullet proofs和zkSNARK等。

為了激勵"上下文無關"行為, 當計算作為“上下文無關”的一部分而不是作為傳統交易的一部分執行時,區塊生產者僅僅只向用戶收取部分CPU使用費。

上下文無關的內聯方式生成事件

EOSIO Dawn 2.0開發人員 一直在尋找一種有效的方式來生成由外部來源處理的事件。 在以太坊,這些事件用於通知關於合同內部運作的結構化信息。 通過增加上下文無關的行為,我們也有可能實現上下文無關的內聯方式。 內聯方式是由合同代碼生成並作為當前交易的一部分執行的行為。 一個“上下文無關”的內聯行為可以廉價且平行地處理。 由於所有內聯操作都包含在Merkle根目錄中,因此可以將這些操作用作可證明的通知給外部服務和其他區塊鏈。

交易壓縮

有很多交易存在大量的可壓縮數據。 其中最不可避免的例子是合約WebAssembly代碼本身。 其他例子包括ABI規範和與賬戶/合約相關的李嘉圖合約。 某些應用程序(如社交媒體)可能還希望可以壓縮用戶在區塊鏈生成的內容。

利用交易壓縮,區塊鏈可以更有效地存儲和傳輸大量交易,並且對於記賬用戶來說,擁有可壓縮數據的交易 少於 不可壓縮數據的交易。

解釋器 & 即時編譯器

Dawn 2.0最大的變化之一就是WebAssembly運行時環境的抽象。 Dawn 3.0現在默認使用Binaryen WebAssembly解釋器,而不是更快的Just-in-Time(JIT)編譯器。 這個決定會降低性能,但會增加穩定性和標準一致性,同時允許我們在需要時輕鬆交換更高性能的JIT環境。 解釋器也解決了我們面對Dawn 2.0所面臨的最大挑戰之一:因編制合約所造成的延誤。 將來,我們可以使用解釋器來實現新部署合約更低延遲的執行,與此同時,我們可以在後臺撰寫和優化智能合約。 這種雙重實現意味著我們所有的單元測試都針對編譯和解釋代碼進行了測試,因此在部署混合方法之前,我們便可以發現潛在的非確定性或非標準符合性行為。

資源計量速率限制

隨著Dawn3.0,我們現在有一個全新的資源速率限制系統。 也許最大的改變是引入了客觀指令計數算法。 當我們著手構建EOSIO時,我們的目標是完全採用主觀限速和強制執行。 我們發現,主觀執法的成本幾乎與更加客觀的方法相同。 我們現在使用混合解決方案,其中用戶按客觀使用收費,但區塊生產者也會在合約中部署主觀掛鐘時間限制。 這些主觀限制防止了目標計費方式的濫用。

我們採用這種方法的主要原因之一是允許單個交易執行比以前更多的計算。 從理論上講,區塊可以包含一個需要100 ms運行的事務,而在舊模型下,每個事務必須在1 ms以內運行。

限速的另一個變化是將限制與定義令牌的需求分開。 這使得EOSIO可以在沒有使用令牌的情況下,應用於私人的、經過許可的區塊鏈上。 公鏈可以採用系統合約----通過放樣來實現限制,社區可以動態地升級如何分配資源而這與分配的實施方式無關。

500 ms出塊間隔 & BFT-DPOS混合共識

隨著Dawn3.0我們已經從3秒的塊間隔縮短到0.5秒的間隔。 這大大縮短了確認之前的等待時間。 當BFT DPOS結合使用時,交易可在1秒內不可逆轉地得到確認。 直到不可逆轉之前的延遲對跨鏈通訊有重要影響,因為另一個區塊鏈必須等到不可逆轉的確認時,才能與來自外部鏈的證據合作。 兩個基於EOSIO的區塊鏈應該能夠在3秒內執行往返通信。 以太坊的類似交互模式需要9分鐘,比特幣需要3個多小時。

BFT-DPOS尚未實施,因為它是非硬分叉優化。 我們將在發佈EOSIO 1.0之前實施BFT-DPOS混合共識算法。

BIOS架構

BIOS架構是EOSIO Dawn 2.0最大的架構變化之一。 在EOSIO Dawn 3.0下,絕大多數區塊鏈業務邏輯已經轉變為智能合約,可以由社區動態更新而不需要硬分叉。 一個簡單的EOSIO區塊鏈現在是一個單一的生產者,沒有任何代幣,投票或委託權益證明。 核心區塊鏈代碼中唯一實現的是權限系統,它包括創建帳戶,部署合約和強制執行資源配額的功能。 一切構成區塊鏈的DPOS機制(包括代幣,投票,權益和資源分配)現在由基於Web Assembly的系統合同定義。

藉助這種新架構,我們能夠將開發重點放在區塊鏈的靜態非WebAssembly部分。 這些是穩定性最關鍵的部分 - 最難升級。 在發佈EOSIO Dawn 3.0和EOSIO 1.0之間,我們將制定系統合約的最終細節,權益和投票。

安全特性

安全對於任何計算系統都至關重要,我們設計EOSIO是市場上最安全的區塊鏈。 安全是一個多維問題,必須考慮到黑客攻擊,硬件故障,硬件丟失和密碼丟失的風險。 硬件錢包擅長防範黑客入侵,但如果失敗,可能會將您鎖定在帳戶外。 此外,硬件錢包的紙張備份可能會丟失或被盜。

安全延遲交易

EOSIO Dawn 3.0最重要的功能之一是增加了用戶可配置的延遲以適應不同的操作。 有了這種延遲,交易必須在區塊鏈上廣播幾個小時或幾天,然後才能應用。 在這段延遲期間,用戶可以採取措施重置具有更高權限級別的帳戶,然後取消交易。 這是一個重大改進:在其他區塊鏈平臺上,等你知道你被黑客攻擊時,為時已晚。(注:類似於我們通過延遲到賬以打擊金融詐騙,減少損失。)

丟失密碼可恢復

每個帳戶至少有兩個權限級別:“owner”和“active”。

owner的許可級別應該是多重簽名腳本的 N of M 機制, 其中所有的N都包含owner的私鑰。 任何時候active密鑰丟失或被盜,"owner"的權限級別都可以重置active權限。

如果你失去了“owner”密鑰,或者您的多重簽名合作伙伴不合作,則賬戶的active權限可以在owner權限閒置30天后請求重置owner權限。owner則有7天時間通過更新active權限來抵制請求。

在此模式下,由一個或多個硬件錢包控制的帳戶所有者權限將可以安全地防止黑客攻擊和設備故障。 如果該設備是帶有硬件和指紋/ Face ID安全私鑰的Apple iPhone,則攻擊者需要強迫你的多重簽名合作伙伴,竊取您的手機並竊取指紋或臉部。 理想情況下,您的多重簽名合作伙伴也正在使用生物識別安全硬件設備。

交易的提案系統

用戶可以在他們自己的時間獨立添加或移除他們的權限,而不是在有限期限的傳統交易窗口必須收集所有的簽名,這使得多重簽名更加容易。在交易提案系統內,任何人都可以提出一個交易,並且參與交易的各方都可以簡單的批准它。在獲得你的批准和獲得必須的門檻這段期間內的任何時間,你可以移除你的批准。

簡化合約開發

對於EOSIO,我們的許多目標之一就是讓合約的開發盡一切可能輕鬆。如果開發人員知道如何編寫一個C++類的方法,那麼他們應該能夠編寫一個儘可能不復雜的智能合約。

我們很高興已經簡化我們的“hello world”合約到幾行簡單的代碼。我們的工具鏈已經自動化生成合約ABI的過程,並且調用用戶action到定義於你類目的方法。開發合約從來就不是一件容易的事。

EOS Dawn 3.0上線,可開發百萬吞吐量DApp

Hello World Contract

浮點支持

簡化智能合約開發的一部分,是使其更容易實現數學算法開發人員的需要。區塊鏈發展最困難的方面之一就是缺乏浮點運算和相關能力、根和三角函數。許多算法,例如Bancor,都是更容易實現浮點方面,而不是強迫所有計算指令容易出錯和內存密集定點。

我們用WebAssembly合約集成一個軟件浮點庫,解決了硬件浮點的不確定性。通過軟件浮點,我們可以在複雜的情況下,以不大於固定點的代價獲得確定性和易用性的好處。在許多情況下,定點比確定性浮點表示更容易出錯或內存密集。

對於EOSIO Dawn 3.0,我們付出了巨大的努力來增加對大多數C ++標準模板庫的支持。這意味著開發人員可以使用他們熟悉的工具,庫和算法,同時消除由於這些算法的非標準實現而導致的潛在錯誤。

計劃事務

對於計劃事務開發者,只要合約提供了足夠的帶寬,他們就能夠永久運行合約。其他平臺需要在鏈下才能在適當時間喚醒合約。通過計劃事務,我們無需開發人員託管自己的服務器來維持合約運行就可以提高效率和易用性。

自動示波器檢測

多重索引數據庫API

EOSIO Dawn 3.0 引入映射boost::multi_index_container的權限數據庫API。通過這個API,我們可以很簡單的支持數據庫表的多鍵排序、查找項目、使用上下限,以及在數據庫中前後反覆迭代。這個新的API使用迭代器接口,可顯著提高掃表的性能。

現在也可以在64位,128位,256位和512位整數以及64位浮點(雙精度)上使用索引。 在發佈EOSIO 1.0之前,會添加對字符串索引的支持。 這是靈活性和開發簡便性的顯著改進,因為現在可以在同一個表上擁有幾乎無限數量的索引字段。

性能

實際性能是我們團隊一直密切關注的事情,我們現在對結果非常滿意。 我們通過幾種不同的配置對我們的軟件進行了基準測試,以瞭解未來優化時性能的上限和下限。 所有這些測試都假設令牌傳輸在計算複雜度方面與比特幣或Ethereum ERC20令牌傳輸相當。

最糟糕的情況——1000 tps

這是我們未經任何優化的基準性能。我們能夠使用運行具有單線程簽名驗證的解釋器的多節點網絡來支持超過1000 TPS。

正常平均情況——3000 TPS

打開JIT編譯器後,我們可以使用運行具有單線程簽名驗證的解釋器的多節點網絡來維持3000 TPS。

最好的情況——6000 TPS

一旦我們實現了並行簽名驗證,我們可以假設掛壁時鐘每次簽名的時間將接近0,因為並行程度和簽名數量在。 我們可以通過禁用簽名驗證來模擬此環境。 在這個模型下,我們可以用JIT編譯器在多節點網絡上達到6000 TPS。

理想情況——8000 TPS

如果我們從等式中刪除網絡代碼,並只關注CPU在關閉簽名驗證和使用JIT時能夠執行的操作,那麼我們可以在單線程上達到8,000 TPS。 要在單一鏈上走得更高,需要實現WebAssembly的並行執行和更高級的程序調度。 在這種情況下,使用解釋器而不是JIT,我們可以看到,僅達到2700 TPS。 這表明啟用JIT的相對簡單的改變將使我們的轉移性能提高約3倍。 這些測量是在MacBook 2.8Ghz i7上進行的。

無限制每秒事務數

對於TPS的定義就好比比較蘋果與橙子。由於跨鏈通信,我們可以根據需要在不同鏈之間分配工作量。代幣可以可靠並且安全的在不同鏈之間轉移。由於相同(或不同)礦工並行運行1000條鏈,我們可以看到每秒數百萬的交易。這代表了其他區塊鏈提出的理論擴展方案的實際實現。

我們強烈鼓勵基於EOSIO的公開網絡的礦工根據需要運行儘可能多的鏈以滿足用戶需求。所有鏈都可以使用相同的代幣作為權益和資源分配的基礎。這將最大可能的創造單一代幣的網絡效應,並充分利用高市值資本化代幣形成經濟激勵的信任和安全性。

像交易所,貨幣和社交媒體這樣的應用程序可以在許多並行鏈上平衡其負載。

未來之路

EOSIO Dawn 3.0的核心在於平臺的穩定性。在接下來的一個月中我們將準備最終的智能合約,以能夠執行所有的權益、投票和治理機制。我們也將最終確定我們的代幣標準。

一旦系統合約成熟到令我們滿意,我們將啟動一個新的公共測試網絡。在此之間,我們會大大簡化搭建測試網絡和開發應用的過程。在接下來的幾周內我們會逐漸關閉當前的測試網絡,同時會準備新的測試網絡以減少開發人員的困惑。

總結

EOSIO Dawn 3.0是一個擁有穩定API的功能完備的開發者版本。我們認為該平臺現在已經足夠穩定,可供認真的應用程序開發人員開始構建應用程序。EOSIO已經變得比我們一年前想象的更加強大和容易開發。我們的團隊在成長,開發也在以創紀錄的速度向前推進。我們的倉庫在過去的一個月裡一直是github中十大最活躍的C ++倉庫之一。為了EOSIO 1.0在六月份發佈高質量的公開版本,一切都在穩步推進!

參與的社區將驅逐那些只想著租賃的投票買家;並獎勵那些利用選舉出來的廣播權為所有社區成員帶來利益的人,而不是獎勵那些為了給特殊的利益群體(如投票賣家)帶來利益的人。我堅信在市場份額競爭中這樣一個社區遠比選擇投票買家的社區更有競爭力。


分享到:


相關文章: