2018年4月6日,BM發布了EOSIO的全功能體驗版Dawn 3.0。在發布公告[*EOSIO Dawn 3.0 Now Available*](https://medium.com/eosio/eosio-dawn-3-0-now-available-49a3b99242d7)中BM提到Dawn 3.0中甚至實現了一些白皮書中沒有提及的功能,但是卻可以讓這個平臺更高效、更靈活、更便于再次開發。究竟是如何做到更“高效、靈活、便于開發”的呢?只有Hacking一下才能一探究竟。
ps. 小強同學向我要一些區塊鏈學習的資料, 網上資料太多,但作為程序員,看代碼最直接有效。 希望更多的人加入我們一起Hacking(微信:muhaoying)
我們首先列舉一下Dawn 3.0發布公告中的提到的一些特性,以便后續剖析代碼時可以前后照應,更有導向性——**知其然,然后知其所以然**。
### 1 可擴展性
可擴展性的目標是通過使用平行計算來擴大吞吐量,而不是硬分叉。
#### 1.1跨鏈通信Inter-Blockchain communication——可擴展性的終極武器。
其核心在于“輕客戶端”的實現。 首先,該“客戶端”要輕,能驗證交易的有效性,而不需要處理整個區塊鏈的信息。 其次,區塊鏈需要驗證該客戶端的有效性。而且,如何驗證“輕客戶端有效性”的必須體現在最初的協議定義中。
#### 1.2 稀疏頭部驗證Sparse Header Verification——拜占庭容錯稀疏頭部驗證
輕客戶端只需要驗證兩類區塊的頭部。 第一類是當活躍生產節點集合發生變化時所產生的節點,第二類是包含了相關跨鏈信息的區塊的頭部。
#### 1.3 上下文無關Action——Context Free Actions
由于上下文無關的Action不依賴于區塊鏈的狀態,所以可以極大限度的利用并行計算的能力。它是跨鏈通信中的關鍵點之一。
#### 1.4 作為Event的上下文無關的inline Action——Context Free Inline Actions
Inline Action是指由合約代碼產生的并且作為交易的一部分被執行的Action。而上下文無關的Inline Action又可以被并行執行,并且手續費更低。
#### 1.5 交易壓縮技術
交易數據壓縮之后,處理效率、存儲效率會更快,并且手續費會更低。
#### 1.6 解釋器&實時編譯
Dawn 2.0使用了 [Just-in-Time (JIT) ](https://github.com/WebAssembly/wasm-jit-prototype)編譯器。Dawn 3.0 增加了[Binaryen WebAssemb](https://github.com/WebAssembly/binaryen)ly解釋器,并且作為默認配置。也就是說,默認使用解釋器,且可以切換至編譯器。
#### 1.7 資源度量速率限制——Resource Metering Rate Limiting
Dawn 3.0 采用復合計量方式,用戶按照客觀指令數量來付費,而區塊生產者也可以設置合約執行主觀時間限制。一方面可以防止客觀付費機制被濫用,另一方面,一個blcok可以包含更多指令的交易,之前一個交易必須在1ms之內執行完,現在可以放寬到100ms
#### 1.8 提速至500毫秒產出一個塊,并實現了BFT DPOS
跨鏈通訊的情況下, 基于EOSIO的兩個鏈之間的握手通信響應小于3秒,EOSIO鏈和以太坊鏈通信響應約需要9分鐘,而與比特幣鏈這需要超過3小時。(結合1.1,1.2,1.3思考)
但DFT DPOS作為非硬分叉優化功能,并未發布在Dawn 3.0中。它會出現在6月份即將發布的EOSIO 1.0中
#### 1.9 BIOS 架構——BIOS Architecture
BIOS相當于EOSIO的固件,實現EOSIO區塊鏈的權限系統,包括創建賬戶、發布合約、強制資源分配等功能。意味著這些功能無法更新(只能靠硬分叉)。
而實現DPOS,以及為實現DPOS而必須的代幣、投票、權益分配等功能都在基于Web Assembly的系統合約中實現。意味著這些功能可以更新(不要分叉)。
### 2 安全性
被黑客攻擊的風險、硬件失效的風險、硬件丟失的風險、密碼丟失的風險。
#### 2.1交易的安全延遲——Security Delayed Transactions
用戶可以自主設置交易的延遲長度,在延遲期間,可以通過更高權限來取消延遲。
#### 2.2 丟失密碼找回
每個賬戶都有兩種權限:Active 和 Owner。 當Active的密碼丟失時,Owner權限可以重置Active權限;而當Owner權限連續30天沒有任何動作時,Active權限可以請求重置Owner權限。(完備?)
#### 2.3 交易提議系統——Transaction Proposal System
在交易提議系統中,用戶可以提議一個交易,其他參與方來批準。在提議之后及收到足夠的批準之前,用戶可以把交易撤回。
#### 2.4 對浮點運算的支持
#### 2.5 對C++ 標準模版庫的支持
#### 2.6 定時交易
#### 2.7 作用域自動檢測——Automatic Scope Detection
在Dawn3.0 中,生產節點有責任來檢查交易對某個數據作用域是否有訪問權限。而不是把這項任務交給用戶、開發者或者其他節點。
#### 2.8 多重索引的數據庫API
### 3 性能
#### 3.1 最差1000TPS
#### 3.2 平均3000TPS
#### 3.3 最優8000TPS
#### 3.4 無限TPS——共享區塊生產者的鏈越多,tps可達數百萬。
以上為Dawn 3.0的特性,針對每個特性都請提一個問題:如何做到的?自己試著回答一下。