EOSIO/eos 目前在github的項目活躍度方面排名第一,release版本更新的速度讓人應接不暇。今天EOS的大版本1.1發布,我也有幸參與了貢獻,本篇文章重點介紹1.1版本的重大功能升級。
關鍵字:eos, eos 1.1, MongoDB,Read-Mode: HEAD,sync,優雅退出,keosd的硬件支持
MongoDB plugin
我們知道目前eos的本地存儲結構是簡單的文件存儲,對於備份和數據查詢等管理角度,略顯尷尬。新版本推出了MongoDB插件eosio::mongo_db_plugin,
eosio::mongo_db_plugin 將區塊鏈數據歸檔至MongoDB數據庫中。
這份區塊鏈的數據是只讀的,支持高可擴展以及方便的數據查詢工作。
支持部署和訪問一個MongoDB集群。
通過對源碼的瀏覽,可以查看到該插件支持的主要函數功能:
void consume_blocks(); // 消費區塊
void accepted_block( const chain::block_state_ptr& );
void applied_irreversible_block(const chain::block_state_ptr&);
void accepted_transaction(const chain::transaction_metadata_ptr&);
void applied_transaction(const chain::transaction_trace_ptr&);
這些功能有消費區塊、接收區塊、應用不可逆區塊、接收交易、應用交易,在這些功能函數的實現中,也看到隊列的使用,很可能我們未來不必自己引入第三方隊列而直接使用這些新特性即可。這些功能從字面上就能感受到背后的潛力,未來會單獨介紹這個插件。
Read-Mode: HEAD
配置nodeos為“只讀頭區塊”模式,意味着所有RPC請求都會返回頭區塊的數據,頭區塊就是最新的一個區塊。
它的含義主旨要抓住:就是它不會讀取未確認的,或者花費在p2p網絡中延遲的交易。
這個模式也跟我們之前討論的交易確認的方案分析形成互動。我們可以通過這個模式下的請求判斷出某個交易是至少被一個生產者確認的,但可能還沒有最終定局。
nodeos的性能提升
一、同步速度加快
之前,一個新節點加入區塊鏈時,需要嘗試保持一個良好的網絡狀態,然后驗證以及轉播它接收到的交易。如果鏈數據有很大一部分需要同步到新節點,數據的驗證准確度會降低,驗證的耗費也會增多。所以新版本中:
新節點不轉播交易,在它沒完成數據同步之前。這樣可以提高新節點同步的速度。
二、數據庫大小警衛
EOSIO是通過兩個內存數據庫存儲數據:一個是state DB,一個是reversible block DB。現在使用警衛保護:
- 允許運行的實例nodeos檢測即將到來的限制
- 優雅退出,防止可怕的BAD_ALLOC異常引發的數據庫臟數據,必須要replay整條鏈進行修復。這是一個從dawn3.0就困擾我的問題。
- 現在恢復一個數據庫的操作,就像修改單個配置一樣容易
- 重新啟動的這個過程,再也不需要replay或resync的操作了。
Alpha:keosd的硬件支持
我們都知道,區塊鏈的賬戶的私鑰的保管是一個問題,登陸驗證身份的過程也很容易涉及安全的風險,從1.1開始,正式引入了對keosd的硬件支持,當前目前仍舊是測試版本,還未成為生產版本。
Apple's Secure Enclave
使用蘋果電腦的人們目前可通過Secure Enclave提供的基於硬件的秘鑰保護他們的EOSIO賬戶。通過命令
cleos wallet create_key -n SecureEnclave
使用Secure Enclave wallet來創建key,不需要import操作。另外,mac中你要訪問Secure Enclave的行為必須被簽名。
YubiHSM 2
YubiHSM 2是一個外部硬件安全模塊,可添加到任何用戶的電腦通過USB端口。keosd現在允許任何使用Linux發行版和MacOS的用戶保護他們的EOSIO賬戶,通過YUbiHSM 2提供的基於硬件的秘鑰。這個手段可能會被生產者大量使用。
login 插件
登錄插件是第一個支持基於EOSIO blockchain的應用驗證概念的組件。插件API允許您來驗證一個用戶是否能夠簽名滿足指定的權限。
目前login插件只是初步的設計,並無法上生產環境,就像存在了好幾個版本的MongoDB插件在當前這個版本才被正式推出一樣,login插件日后還會迎來大量修改。
其他的重要改變
- cleos以及rpc可通過二級索引讀取table數據
- 多簽名合約eosio.msig可以提案一個包含多個actions的transaction
- 添加系統賬戶eosio.sudo,這個賬戶只有超過三分之二絕對多數的active 區塊生產者才能使用,它的子命令exec可以繞過所有的權限檢查
- 發行原子的delegatebw / buyram事務,解決了賬戶余額足夠卻無法購買內存的和抵押cpu資源。
- 使用KiB 來購買內存,buyram
- 改進了錯誤提示,這些錯誤一般都是在校驗環節,原來的錯誤日志很模糊不清晰
- RPC可以獲取定時事務
- nodeos提供灰名單賬戶,阻止其訪問資源在一個無人認領的擁堵鏈
- nodeos更好的控制塊傳輸的時間,來彌補生產者之間的網絡延遲,使用參數produce_time_offset_us
- nodeos檢查點(通過signal emit的方式)可以在同步期間,執行確權塊上鏈,共識相關。
- 支持導入導出可逆塊數據庫作為便攜式文件格式,這個特性可以在數據備份設計中使用
- 提高生產者水印追蹤,解決生產者出塊后落選再次選中出塊以后造成confirmed值延續很高的bug
- 日志更新使用ISO國際標准化時間戳