EOSIO Dawn3.0 發(fā)布!
閱讀字數(shù): 5923
閱讀所需時間:10分鐘左右
英文發(fā)布-原文地址:https://medium.com/eosio/eosio-dawn-3-0-now-available-49a3b99242d7(需要梯子,翻了墻才能看)
Block.one 宣布第一個功能完善的EOS.IO,Dawn 3.0正式發(fā)布。
(Github 查看地址為:https://github.com/EOSIO/eos/releases/tag/dawn-v3.0.0)

這個預先版是今年2018年6月 EOSIO 1.0 正式上線的重要里程碑。我們遍布全球的開發(fā)者正在爭分奪秒地工作,已確保EOSIO能夠成為Dapp應用所依賴的最強區(qū)塊鏈平臺。距離上一次發(fā)布EOS Dawn 2.0已經(jīng)過去4個月了,針對這4個月的工作成果,我們將有許許多多的內(nèi)容要告訴大家。
藝術般的區(qū)塊鏈架構建造過程,其實就是一個我們不斷學習不斷改變,優(yōu)化設計的過程。我們發(fā)布的EOSIO,Dawn 3.0預先版中,絕大多數(shù)特性事實上并沒有出現(xiàn)在我們最初的 EOSIO 白皮書中,但是,這些特性依然是創(chuàng)建高性能,可拓展以及易開發(fā)的區(qū)塊鏈平臺過程中的一部分。
可拓展性
可拓展性意味著規(guī)?;瘽M足市場需求的能力。我們團隊每一步都已經(jīng)將未來規(guī)?;枨罂紤]到設計里了。也就是說,Dawn 3.0 僅僅實現(xiàn)了未來EOSIO自身規(guī)?;瘯r,潛在優(yōu)化內(nèi)容的一小部分。我們已經(jīng)將EOSIO設計成為可利用并行計算的方式來加速處理吞吐量,并且沒有硬分叉的變化。
跨鏈通訊
跨鏈通訊是一個終極的可拓展特性-類似“圣杯”的感覺-整個行業(yè)都一直在尋找這樣的協(xié)議解決方案,如側鏈,Plasma方案和分片方案等等。跨鏈通訊支持鏈與鏈之間以一種可證明的安全方式進行區(qū)塊事件的真實性驗證。我們最終目標就是跨鏈通訊會和鏈內(nèi)基于智能合約的通訊一樣安全,并且我們已經(jīng)達成了這個目標。
以我們的角度來看,跨鏈通訊無非是作為一個智能合約,并且擁有了執(zhí)行輕客戶端的能力。輕客戶端是可以不同步整個區(qū)塊鏈而進行區(qū)塊交易驗證的。這樣反過來就是使用高效的,安全的輕客戶端驗證方式來構建了一種權益證明機制的區(qū)塊鏈。因此輕客戶端必須考慮到協(xié)議層的設計中,盡管依據(jù)之前的事實,很難去落實。
極簡區(qū)塊頭驗證
傳統(tǒng)的輕客戶端是期望通過獲取每個區(qū)塊頭以及驗證和這個區(qū)塊頭相關的區(qū)塊頭來驗證的。如今,EOSIO 可以實現(xiàn)每秒生成2個區(qū)塊,并且一個區(qū)塊鏈獲取每個區(qū)塊頭需要至少每秒2筆交易的速度。但是,這個不適用于相對較少的跨鏈通訊場景。為了解決這個問題,我們創(chuàng)造了創(chuàng)世塊容錯機制的極簡區(qū)塊頭驗證。具體來說,就是系統(tǒng)需要超過三分之二的區(qū)塊生產(chǎn)者都變壞了,然后他們統(tǒng)一意見去嘗試欺騙一個輕客戶端,才有可能造成系統(tǒng)交易被篡改。(舉例,當前EOSIO 是 21個節(jié)點,然后超過15個就可能發(fā)生以上描述情況)。更近一步地說,輕客戶端只需要活躍區(qū)塊生產(chǎn)者變化帶來的區(qū)塊頭就可以,并且也包含了相關的跨鏈信息。這樣就大大地減少了維護一個拜占庭容錯輕客戶端的開支,以及大大增加了跨鏈通訊的效率。
語境自由 Action
語境自由Action是保障跨鏈通訊高效運行的關鍵特性之一。他們是一種特殊的Action,主要是因為他們可以被包含到一個交易里,但不依賴區(qū)塊鏈的狀態(tài),因此,他們是“自由語境”的。舉個例子,就是默克爾樹根或簽名的驗證。因為這些計算是自由語境的,他們可以被平行地驗證,并且這個計算是可以通過回滾修改的。
每個自由語境Action也都與交易中特殊的可修改數(shù)據(jù)區(qū)域相關聯(lián)。這就意味著大量默克爾樹根可以被修改,并且他們昂貴的計算在區(qū)塊回滾中跳過了。
語境自由Action使得我們可以并行與跨鏈通訊相關的大多數(shù)開支。也使得我們能夠并行和修改一些計算上比較昂貴隱私技術的經(jīng)常性費用,如保密交易,“防彈技術”,零知識證明等
為了激發(fā)語境自由Action的使用,區(qū)塊生產(chǎn)者只會向用戶收取一小部分CPU使用的費用,收取費用的情況: 當且僅當一次計算是作為一次語境自由Action執(zhí)行了,而不是一次傳統(tǒng)的交易過程。
自由語境一致性Action事件(Events)
EOS柚子-黎明2.0(EOSIO Dawn 2.0)開發(fā)團隊一直在尋找的一種方式,就是借助外部資源來推進Events事件的生成。在以太坊中這些Events事件是用來表明一個合約內(nèi)部操作的結構化信息。由于自由語境actions的加入,我們也有潛力完成自由語境一致性actions. 一個一致性action是由合約代碼產(chǎn)生,并作為當前交易的一部分被執(zhí)行。一個一致性action 可以被廉價,以及平行的方式進行。因為所有的actions 都被包含默克爾樹根,所以是有可能來使用這些actions作為驗證的通知來傳遞給其他區(qū)塊鏈和外界服務的。
交易壓縮
有許多交易是有很多可壓縮的數(shù)據(jù)的。其中一個不可避免的例子是,合約的WebAssembly碼。其他的,例如ABI標準規(guī)格以及和一個賬戶或合約相關聯(lián)的Ricardian 合約。有些應用,如社交媒體,也同樣期望在區(qū)塊鏈上壓縮用戶產(chǎn)生的內(nèi)容數(shù)據(jù)。
利用交易壓縮,區(qū)塊鏈可以更高效地儲存以及發(fā)送大量交易,最后還可以讓壓縮數(shù)據(jù)的用戶為發(fā)送交易支付更少的費用。
Interpreter和JIT編譯
來自Dawn 2.0的最大的變化是WebAssembly運行環(huán)境的抽象化。Dawn 3.0現(xiàn)在默認使用Binaryen WebAssembly (https://github.com/WebAssembly/binaryen)而不是更快的JIT編譯器(https://github.co)。這個決定事實上減弱了性能但卻增加了穩(wěn)定性和標準一致性,當然還是支持在必要的時候切換到性能更高的JIT編譯器。Interpreter也解決了我們在Dawn2.0 時面對的一個重大挑戰(zhàn):由于編譯合約造成的延遲。未來,我們在編譯和最優(yōu)化合約的場景下,用起Interpreter會變慢,但可以縮短等待時間,和立刻執(zhí)行部署合約。這樣的雙重執(zhí)行下意味著,我們所有的單元測試都可以運用到編譯和解碼過程中。所以我們發(fā)現(xiàn)了,在我們能部署混合方法前,是有潛在的非確定性或者非標準化規(guī)則行為存在的。
資源測量率限制
這個發(fā)布的Dawn 3.0 已經(jīng)擁有一個完整的新資源率限制系統(tǒng)。最大的變化可能是客觀的指令計數(shù)算法。當我們著手去打造EOSIO時,我們有一個目標就是使用完全主觀的資源速度限制和壓力。后來,我們發(fā)現(xiàn),主觀壓力的限制幾乎和一個更客觀的方式是相同的效果。當用戶要求為客觀的使用而付費時,我們現(xiàn)在使用一個混合的解決方式來處理。但區(qū)塊生產(chǎn)者也會在合約中布置主觀的“掛鐘”時間限制。
我們采納這種方式的原因之一是允許個人交易,相比以前,可以執(zhí)行更多的計算。現(xiàn)在是,理論上包含單個交易的一個區(qū)塊,需要100ms去運行,然而在舊模式下,每個交易必須在1ms以下去運行。
速度限制的另一個改變是,定義一種代幣的需求從原先的限制中拿走。這就允許EOSIO可以被應用于私有,聯(lián)盟鏈(不需要代幣的場景下)。公有鏈則可以接受一個系統(tǒng)合約,這個系統(tǒng)合約可通過股權的形式來執(zhí)行限制。并且社區(qū)可以動態(tài)地升級,自己考慮如何根據(jù)強加的分配任務來單獨地分配資源。
每0.5秒出一次塊 & BFT DPOS 共識機制
在Dawn 3.0 中,我們把出塊時間從3s改到了0.5s。這個大大減少了區(qū)塊確認前的延遲。通過混合的BFT DPOS 共識機制,交易可以不可逆轉地在1s被確認。不可逆轉前的延遲對于跨鏈通訊有比較嚴重的負作用,原因是另一個區(qū)塊鏈必須在與另一條陌生的鏈結合前 等待這個不可逆轉的結果。兩個基于EOSIO的區(qū)塊鏈可以在3s內(nèi)完成一次往返的通訊。這樣一個類似的通過過程在以太坊上要花費9分鐘,在比特幣上要話費3小時。
BFT DPOS 共識機制還沒有被實踐,因為它是一個非硬分叉的優(yōu)化。我們會在發(fā)布EOSIO 1.0 之前將 BFT DPOS 共識嵌入。
BIOS 架構
BIOS架構是EOSIO Dawn 2.0 到 Dawn 3.0 最大的變化之一。在 EOSIO Dawn3.0 下,大多數(shù)的區(qū)塊鏈商業(yè)邏輯可以轉移到智能合約中,最終社區(qū)可以在沒有硬分叉的前提下,進行動態(tài)地升級。一個“裸露骨頭(最初形態(tài)的)” EOSIO 區(qū)塊鏈是一個單生產(chǎn)者,并且沒有任何代幣,投票以及DPOS共識機制的區(qū)塊鏈。唯一嵌入到核心區(qū)塊鏈代碼層的是許可系統(tǒng),這個許可系統(tǒng)具備了創(chuàng)建賬戶,部署合約和強制執(zhí)行資源配置的能力。關于區(qū)塊鏈DPOS,以及 代幣,投票,股權和資源配置的 所有一切都是基于系統(tǒng)合約,由Web Assembly 來定義的。
借助新的架構,我們已經(jīng)可以聚焦在靜態(tài)的,非Web Assembly的區(qū)塊鏈開發(fā)了。這些部分對于區(qū)塊鏈的穩(wěn)定性十分重要,也是最難去升級的。在Dawn 3.0 至 EOSIO 1.0之間,我們會制定出系統(tǒng)合約,股權,投票的最終細節(jié)。
安全特性
對于任何計算機系統(tǒng)而言,安全始終是至關重要的。我們已將EOSIO 設計成為市場上最安全的區(qū)塊鏈。安全是個多維的,綜合的考慮,包括黑客攻擊,硬件損壞,硬件丟失以及忘記密碼。硬件錢包擅長保護不被黑客攻擊,但如果他們自己壞了,你的資產(chǎn)將永久被鎖住。還有,硬件錢包的紙質備份可能被偷或丟失。
安全延遲交易
EOSIO Dawn 3.0 最重要的功能之一就是添加了 用戶自定義的延遲功能。有了這個延遲,一個交易可以被設置成數(shù)小時,或數(shù)天才能執(zhí)行。在這個延遲階段,用戶可以采取措施,利用高級權限來重置他們的賬戶,然后取消這個交易。這是一個區(qū)別于其他區(qū)塊鏈的重要提升,這樣的也就讓你在不知不覺被黑客攻擊的情況下,免得什么挽救措施都做不了。
丟失密碼的恢復
任何賬戶都有至少2個權限等級:“所有者”和“激活”。所有者授權級別應該是一個N/M 的多方簽名機制,當沒有達到N的時候,是沒有所有者鑰匙的。當激活鑰匙被偷或丟失時,所有者權限級別可以在任何時候 重置 激活權限。
如果你丟失了所有者鑰匙或者你的多方簽名伙伴不合作了,這個賬戶的激活權限可以在所有者權限不活躍30天后,請求一次所有者權限的重置。然后,所有者有7天時間可以通過升級活躍權限來挑戰(zhàn)這個請求。
在這個模型下,一個賬戶所有者的權限被一個或多個硬件錢包控制,會使它對于黑客攻擊和設備損壞是安全可靠的。如果此時設備是臺iphone, 并且有硬件,指紋,人臉識別來確保私鑰安全,那這個黑客需要說通你的多方簽名伙伴,盜取你的手機,偷走你的指紋或人臉。理想狀況下,你的多方簽名伙伴也正在使用生物識別地方式來確保硬件設備安全。
交易提案系統(tǒng)
在用戶可以自由地添加或刪除他們的多方簽名權限的情況下,多方簽名就變得容易多了,而不是像以前傳統(tǒng)交易那樣,要在有限的到期時間窗口收集到所有簽名。利用提案系統(tǒng),任何人都可以提出一個交易,然后和交易相關的成員可以簡單地同意通過。任何時候,在添加你的同意和獲取閾值之間,你的同意是可以被刪除的。
為了執(zhí)行這個系統(tǒng), 我們添加了新的api,這些api是允許合同來評估一套賬戶的權限是否足夠充分來授權一個交易。這就可以讓我們通過部署新的WebAssembly這樣的方式來升級多方簽名進程,而不是硬分叉。
簡化的合約開發(fā)
EOSIO的目標之一就是將合約開發(fā)過程盡量簡化和輕松。如果一個開發(fā)者知道怎么用C++,那他們也能夠參考略微有點復雜樣板來寫智能合約。
我們很高興能夠將“hello world”的智能合約實現(xiàn)代碼演示出來。我們的工具鏈已經(jīng)可以自動化生成合約ABI,并且根據(jù)你的class將用戶的actions發(fā)送到methods。正在開發(fā)中的合約從未如此簡單。

浮點支持
簡化智能合約開發(fā)部分目的是,使得開發(fā)者需要的數(shù)學算法更容易實現(xiàn)。區(qū)塊鏈開發(fā)最難之處在于缺少服點算法和相關的power,root 以及 三角函數(shù)。很多算法, 如Bancor, 就浮點而言,是更容易去實踐的,而不是投入所有的計算到內(nèi)存密集固定點和容易出錯的地方。
我們通過在WebAssembly 合約中集成一個軟件浮點,解決了硬件浮點的非確定性。利用軟件浮點支持,我們可以獲得確定性的好處,并且相比于處理復雜情況下的固定點,開發(fā)成本下降了好多。在很多情況下,相比于確定性的浮點支持,固定點不是容易出錯,就是以更加內(nèi)存固定點形式出現(xiàn)。
C++ 標準模版庫支持
對于EOSIO Dawn 3.0, 我們花了很大精力來支持C++標準模版庫。這就意味著,開發(fā)者可以使用他們熟悉的工具,庫和算法來開發(fā)。同時,也避免了由于非標準化執(zhí)行算法所帶來的潛在bug。
計劃交易
通過計劃交易開發(fā)者模式,現(xiàn)在可以提供合約永久運行-主要是提供了合同足夠多的寬帶。其他平臺要求鏈下的解決方案在一個恰當?shù)臅r間觸發(fā)合同。通過計劃交易,我們可以讓開發(fā)者無需自己的服務器即可充分,自由地使用合同,并保持合約的運行。
自動化范圍檢測
在EOSIO Dawn 2.0這個版本下,每筆交易都必須說明它用到的數(shù)據(jù)范圍。這對于開發(fā)者而言,是個容易出錯的,冗長的地方。而在EOSIO Dawn 3.0 下,區(qū)塊生產(chǎn)者是需要對使用數(shù)據(jù)范圍負責的,并且需要排解他們。這樣就使得交易更小,并且把計劃性的開支轉移到了區(qū)塊生產(chǎn)者,而不是用戶,開發(fā)者或所有節(jié)點。
多線程數(shù)據(jù)庫API
EOSIO Dawn 3.0 引入了一個新的數(shù)據(jù)庫api來監(jiān)控增長::multi_index_container。使用這個api就很容易支持數(shù)據(jù)庫表了,一般這個復雜的數(shù)據(jù)庫表包含了多重鑰匙,查找項目,使用性能的更低,或更高上限,以及在數(shù)據(jù)庫上來回進程。這個新的api使用了迭代器接口,可以通過掃描表的方式,大幅提升性能。
性能表現(xiàn)
我們團隊密切關注著實際測試中的性能表現(xiàn),事實上,我們此刻對實際性能表現(xiàn)很滿意。我們將EOSIO Dawn 3.0 這個版本放到不同配置中,來檢測性能的最低和上限表現(xiàn)。所有的測試都是基于蘋果設備和蘋果設備之間的代幣交易轉賬,并可與 比特幣或 以太坊ERC20代幣的復雜性計算相對比。
最差情況-1000 TPS(TPS:每秒交易筆數(shù))
這是我們沒有任何優(yōu)化的最低表現(xiàn)。我們可以使用多節(jié)點網(wǎng)絡來解釋單線程簽名驗證,并維持超過1000 TPS 的性能。
平均情況-3000 TPS(TPS:每秒交易筆數(shù))
只要我們打開了JIT編譯器,我們可以使用多節(jié)點網(wǎng)絡來解釋單線程簽名驗證,并維持超過3000 TPS 的性能。
最好情況-6000 TPS(TPS:每秒交易筆數(shù))
一旦我們實踐了并行簽名驗證,我們可以假設隨著并行和簽名數(shù)的增加,每個簽名的“掛鐘時間”將為0。我們可以通過禁用簽名驗證的方式,來模擬這個環(huán)境。在這樣的模型下,我們可以使用JIT編譯器在多節(jié)點網(wǎng)絡上,達到6000 TPS 的情況
理論情況-8000 TPS(TPS:每秒交易筆數(shù))
如果我們從equation中去除網(wǎng)絡節(jié)點,只關注于關閉簽名驗證的CPU性能,并且使用JIT編譯器,我么可以達到每秒單線程的8000 TPS。如果在單鏈上,還想達到更高的TPS,則需要WebAssembly 的多線程執(zhí)行,即一個更高級的Scheduler調(diào)度。在這樣的場景下,使用Interpreter,而不是JIT,我們可以看到2700 TPS的效。這就暗示著,僅僅是使用JIT編譯器這樣的簡單變化,就可以造成交易性能3倍的變化。這些測試的執(zhí)行環(huán)境是 MacBook 2.8Ghz i7。
每秒無限交易量
“每秒交易筆數(shù)”經(jīng)常被定義為 蘋果和橘子的對比?;阪渻?nèi)通訊,我們可以將工作量拆分許多區(qū)塊鏈,只要我們愿意。代幣可以安全地,可信任地在不同鏈之間流轉。在同一或不同區(qū)塊生產(chǎn)者產(chǎn)生的1000條鏈并行情況下,我們可以看到,百萬級別的TPS是可以實現(xiàn)的。這就代表著之前理論范圍的目標已在真實環(huán)境中實現(xiàn)。
我們強烈建議EOSIO的區(qū)塊生產(chǎn)者可以運行越來越多的鏈,最終以達到滿足用戶需求的目的。所有的鏈都是可以使用同一個代幣作為股權和資源配置的基礎。這就會基于單個代幣產(chǎn)生網(wǎng)絡最大化效應,并且賦予了高級市場中的資本化代幣 信任和安全的經(jīng)濟刺激。
類似于交易所,貨幣以及社交類的應用可以在多個平行的鏈中平衡他們的發(fā)展路徑。
前方的路
EOSIO Dawn 3.0是專注于核心平臺的穩(wěn)定性。下個月,我們將會對最終系統(tǒng)合約的股權,投票以及治理機制做實踐準備。我們也會最終確定我們的代幣標準。
一旦系統(tǒng)合約達到我們滿意的程度,我們會發(fā)布一個新的公有測試網(wǎng)絡。到那時,我們已經(jīng)大大簡化了開發(fā)者啟動他們自己測試網(wǎng)絡,以及開發(fā)自己應用的流程。接下來幾周, 我們將會關閉當前公有測試網(wǎng)絡,主要原因是我們將開始準備新的測試網(wǎng)絡來盡量減少開發(fā)者疑惑。
總結
EOSIO Dawn 3.0 是一個 擁有穩(wěn)定APIs 服務,“功能完善”的 開發(fā)者版本。我們相信這個平臺目前已經(jīng)足夠穩(wěn)定,已經(jīng)可以滿足一些真正的Dapp應用開發(fā)者開始在EOS上構建他們自己的應用了。相比于一年前,EOSIO已經(jīng)成為了一個更加強大和更易上手的開發(fā)平臺!
我們的團隊在成長,開發(fā)工作也在以創(chuàng)紀錄地速度進行。在過去的一個月中,我們EOSIO的repository在所有Github活躍的C++ repository 中是居于前10。一切的工作都在為今年6月份 EOSIO 1.0 高質量地公開發(fā)布而進行著!
小丁翻譯
2018.4.7