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