摘要:對于很多沒有中間語言的字節(jié)碼的編程語言來說,根本不存在解釋執(zhí)行與編譯執(zhí)行的選項,比如傳統(tǒng)只能編譯執(zhí)行,直接將代碼編譯成為可執(zhí)行的二進制機器碼,我們電腦上文件就是編譯的成果。
Daniel Larimer 在最近的博客中透露,EOS 新增了官方的 WebAssembly 解釋器,用來解釋執(zhí)行 WebAssembly 智能合約,加上之前的編譯執(zhí)行,EOS 智能合約有了兩種執(zhí)行方式。
對于很多沒有中間語言的(字節(jié)碼)的編程語言來說,根本不存在解釋執(zhí)行與編譯執(zhí)行的選項,比如傳統(tǒng) C/C++ 只能編譯執(zhí)行,直接將代碼編譯成為可執(zhí)行的二進制機器碼,我們電腦上 .exe 文件就是編譯的成果。再比如 python 和 javascript 只能解釋執(zhí)行,用戶拿到的就是原始的代碼,解釋器會像翻譯員一樣,一行一行地執(zhí)行代碼。
為什么 WebAssembly 智能合約有兩種執(zhí)行方式?因為 WebAssembly 類似 java,會生成中間語言:字節(jié)碼,字節(jié)碼既可以編譯成機器碼后執(zhí)行,又可以使用解釋器直接執(zhí)行。中間語言賦予了 WebAssembly 靈活的執(zhí)行方式。這就是為什么 EOS 的智能合約不能直接上傳 c++ 文件,而是需要上傳編譯后的 .wasm 文件,這就是 WebAssembly 的中間語言(字節(jié)碼)。
編譯執(zhí)行的優(yōu)點是執(zhí)行速度快,但缺點是每次智能合約有更新時,見證人的服務器都要重新編譯生成二進制機器碼,對于執(zhí)行次數(shù)不多的智能合約,是不劃算的。解釋執(zhí)行正好相反,不需要提前編譯,但執(zhí)行時速度比編譯執(zhí)行慢很多,Daniel 說速度僅僅是原來的20%,也就是比原來慢5倍,不過 Daniel 還說明,WebAssembly 在整個智能合約執(zhí)行中只占很小的一部分,對于真正系統(tǒng)性能的影響大約在 5%。
所以折騰了半天,效果還沒有原來好嗎?Daniel 說,引入 WebAssembly 的官方解釋器是給智能合約的結果提供了一個權威參考,當各個見證人的編譯執(zhí)行結果不一致時,就可以使用解釋器得到參考結果。而且解釋器也會給編譯執(zhí)行做后補,以防 WASM 編譯器出問題時維持系統(tǒng)穩(wěn)定。
目前來看,不論是 EOS 系統(tǒng),還是 WebAssembly 技術 都還在快速發(fā)展階段,還沒有針對性能做更細致的優(yōu)化,我認為 WebAssembly 可以參考 Java 的 JIT(Just In Time) 技術,對高頻執(zhí)行的代碼進行編譯優(yōu)化,對低頻代碼直接解釋執(zhí)行。不過鑒于 WebAssembly 并不是系統(tǒng)性能的最主要瓶頸,現(xiàn)在看來這方面的需求并不迫切。
參考文獻:
1.EOSIO Development Update
https://medium.com/@bytemaste...
2.WebAssembly/binaryen
https://github.com/WebAssembl...
3.編譯中的一些事兒(講解主流的編譯技術,包括WebAssembly)
http://blog.csdn.net/qq_33280...
4.幾張圖讓你看懂WebAssembly
http://www.sohu.com/a/1415871...
【許曉笛】從零開始運行EOS系統(tǒng)
圓方圓學院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術課程。 在各大平臺都長期有優(yōu)質免費公開課,歡迎報名收看。
公開課地址:https://ke.qq.com/course/345101
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24408.html
摘要:所以最簡單的智能合約只需實現(xiàn)文件。我們看到文件中已經聲明了這個,并說明了這個的李嘉圖合約,大概意思是本合約的輸入為一串字符,本合約意圖是打印輸出,沒有其他效果。 Hello World! 稍微了解 EOS 系統(tǒng),你就會知道 EOS 的智能合約基于 WebAssembly(WASM) 技術,這種技術在性能和跨平臺兼容性之間取得了很好的平衡,通過將原始代碼編譯成字節(jié)碼,使得代碼可以在多種平...
摘要:構造函數(shù)為空,參數(shù)為智能合約賬戶名。每個智能合約類都要繼承類類構造函數(shù)創(chuàng)建代幣函數(shù)聲明函數(shù),這個函數(shù)用來新建一種代幣,并輸入代幣的各種屬性,同時函數(shù)也是一個。 詳解 EOS 智能合約的 hpp 文件 為了幫助大家熟悉 EOS 智能合約,EOS 官方提供了一個代幣(資產)智能合約 Demo —— eosio.token。eosio.token 智能合約目前還不是特別完善,個別功能還沒有完...
摘要:為了解決這個問題,采取了三步用戶賬戶自定義分級權限。用戶權限與智能合約之間的映射。圖中不難看出,權限是賬戶最高權限,可以執(zhí)行權限。如果沒有發(fā)現(xiàn)任何符合的映射,會直接檢查本次執(zhí)行是否滿足了權限,若不足,會檢查。 到底什么叫智能合約? 名詞解釋:本篇文章出現(xiàn)很多 Action 和 Active,Action (動作)為 EOS 中賬戶可以接受的動作,也就是別人可以對你做什么;Active ...
摘要:查詢數(shù)據(jù)使用方法和其他迭代器操作查詢數(shù)據(jù)。數(shù)據(jù)庫服務的對象是維修技師和車主。如果查找成功,迭代器就會指向所需的數(shù)據(jù)對象。 EOS 數(shù)據(jù)庫開發(fā)實戰(zhàn) 上次的文章詳細講解了 EOS 數(shù)據(jù)庫的架構,本文將以官方示例為基礎,詳解 EOS 數(shù)據(jù)庫的開發(fā)實戰(zhàn)。 基本步驟 在智能合約里與 EOS 數(shù)據(jù)庫交互,首先要定義存儲的數(shù)據(jù): 定義對象:具體就是定義一個 C++ 類或者 C++ 結構體,數(shù)據(jù)表...
摘要:說點題外話如果你想提高英語的話,持有一點代幣吧,你會急于搞清楚白皮書在講什么,要是想短時間快速提高英語,持有大量代幣吧,別問我是怎么知道的。 最近發(fā)現(xiàn)很多人投資了EOS,卻并不關心 EOS 目前的開發(fā)進度和技術細節(jié),如果你投資了 EOS, 還有一定的技術基礎,那就更應該關心 EOS 的開發(fā)情況了,下面我們就從 EOS 的源代碼說起: Github 是目前最流行的源碼管理網站,無數(shù)明星項...
閱讀 2431·2021-09-22 15:41
閱讀 1448·2021-08-19 10:54
閱讀 1755·2019-08-23 15:11
閱讀 3402·2019-08-23 10:23
閱讀 1428·2019-08-22 16:28
閱讀 799·2019-08-22 15:11
閱讀 739·2019-08-22 14:53
閱讀 710·2019-08-22 13:49