時間:2023-06-17|瀏覽:279
BVM是什么? VM全稱為VirtualMachine,在區塊鏈語境下更可以理解為是智能合約的運行環境。在區塊鏈系統中,合約代碼會被編譯成字節碼的形式,這些字節碼不能直接在操作系統上運行,需要一個執行器來執行這些合約,在軟件體系中,可以把這些執行器視為一個抽象的「機器」,BVM就是這樣一個執行器。
以太坊完成了區塊鏈系統中首個系統的智能合約支持,也成為了早期智能合約開發者或是開發公司的主流開發環境,但是EVM有其局限性,虛擬機效率相對成熟的虛擬機系統來說極其低下,難以支持更加復雜的應用和環境。而成熟的虛擬機系統需要一系列龐大的項目構成作為支撐,在目前的環境下,使用一個全新的編程語言(Solidity)并不是一個明智的做法,過高的學習門檻使得社區承受了大量的兼容和學習成本,而Bottos則基于現有成熟的虛擬機標準來開發區塊虛擬機,從而降低開發者門檻,擴大共贏生態圈,提高安全性。
Bot-coding架構: Bot-coding是Bottos獨立編寫的編譯器,它提供了介于高級編程語言和機器語言之間的IR中間語言。Bcode本身也可以作為多種語言的后端,提供與語言本身無關的優化和對多種CPU的代碼生成功能。比較一下傳統的編譯器和Bot-coding,傳統的靜態編譯器,如gcc,一般是由三個組件完成,分別為前端、優化器和后端。而Bot-coding雖然也分為三部分,但針對不同語言的前端,對應生成不同平臺的機器碼。源碼被編譯成Bcode格式的文件,然后使用Bot-codingLinker鏈接,并進行優化,得到的Bcoding最終被翻譯成特定平臺的機器碼,另外Bot-coding支持JIT,會在代碼生成過程中插入一些輕量級的操作指令來運行的信息,調整nativecode以適應特定的架構。
Bot-codingJIT: JIT是將原本編譯器要生成機器碼的部分直接寫入當前內存,通過函數指針的轉換,找到相應機器碼并執行,常用于處理內存管理,符號重定向,處理外部符號等問題上。
WebAssembly: BVM選用wasm作為智能合約的實現格式。對于BVM,一直打算做一個輕量化的虛擬機,以滿足我們未來可移動,可物聯的愿景。最初選用的是Wren,后來在測試階段,用空合約跑轉賬的時候,發現轉賬次數很慢,完全達不到要求,于是替換了wasm,轉賬次數是使用wren的數倍之多。
WebAssembly是一種新的字節碼格式。它的縮寫就是".wasm",.wasm為文件名后綴,是一種新的底層安全的二進制語法。WebAssembly到機器語言雖說也需要一個“翻譯”過程,但是屬于機器語言到機器語言的翻譯,所以速度非常接近機器語言,所以速度很快。
WASM允許C/C++等語言編寫運行在WEB中的程序,WASM其實是一種字節碼格式,是底層二進制語法,加載時間段以及高速執行,是為WEB多語言編程設計的目標文件格式。所以BVM選用wasm作為技術解決方案,有以下幾個優勢:
- 增加目前BVM生態軍的力量,由于支持多種語言,很容易從傳統語言遷移過來,傳統Web領域的基礎支持也可以嫁接。 - 網頁應用向區塊鏈Dapp應用的移植成為可能。 - WebAssembly可以允許任何語言編譯到它制定的ASTtree,相當于使用其他高級語言寫的代碼可以直接在區塊鏈智能合約上運行。
如果說EVM是一個區塊鏈虛擬機的話,那么BVM則會是一個可以專業服務于區塊鏈商業體系的虛擬機。
參考文獻: - EOSDevelopmentForBeginners:WebAssembly - WebAssembly-Wikipedia - Google,Microsoft,MozillaAndOthersTeamUpToLaunchWebAssembly,ANewBinaryFormatForTheWeb - Introduction·C/C++面向WebAssembly編程 - AcartoonintrotoWebAssembly–MozillaHacks-theWebdeveloperblog - Javascript誕生記-阮一峰的網絡日志 - Popularity-BrendanEich - WebAssemblyonEOS-50,000TransfersPerSecond - js(=>)箭頭函數詳細解說案例大全 - EOSDevelopmentForBeginners:WebAssembly - Javascript的10個設計缺陷-阮一峰的網絡日志 - 羅志宇:如何評論瀏覽器最新的WebAssembly字節碼技術? - 悄悄掀起WebAssembly的神秘面紗 - asm.js和Emscripten入門教程 - Javascript-HowPrototypalInheritancereallyworks - (
熱點:區塊鏈