BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

【虛擬機專欄】三分鐘了解Rust智能合約的應用

趣链科技 QTech
特邀专栏作者
2021-09-02 09:44
本文約2655字,閱讀全文需要約4分鐘
雖然HVM相比於EVM,性能已經有了很大的提升,但是由於其字節碼數量很大,在解釋執行的場景下執行性能十分受限。為了解決這個迫切的問題,我們引入了wasm虛擬機FVM,以及Rust合約編寫框架。
AI總結
展開
雖然HVM相比於EVM,性能已經有了很大的提升,但是由於其字節碼數量很大,在解釋執行的場景下執行性能十分受限。為了解決這個迫切的問題,我們引入了wasm虛擬機FVM,以及Rust合約編寫框架。

【導讀】

往期“智能合約執行引擎的前世今生”、“熟悉的新朋友- 鏈上JVM”中,我們介紹了智能合約的起源,以及自研的可以執行Java智能合約的執行引擎HVM。雖然HVM相比於EVM,性能已經有了很大的提升,但是由於其字節碼數量很大,在解釋執行的場景下執行性能十分受限。另一方面,合約漏洞(不考慮業務邏輯漏洞)引發的安全問題,每年都在發生,所造成的經濟損失都十分嚴重,那麼有沒有一種方案能讓使用者拋開個人因素,盡量寫出安全的合約?

【安全性】

人"人",往往會帶來量子學的色彩,最好是有另外一套機制來確保合約的正確性。

Rust作為高效、可靠的通用語言毫無疑問是現有的最好解決方案。

Rust語言的可靠性依託於豐富的類型系統和所有權模型,以及強大的編譯器,在編譯期就能捕獲經典錯誤。這迫使開發者在編寫合約過程中,思考自己所寫的每行代碼是否準確,並通過編譯器來確認,保證通過編譯器檢查的合約代碼一定是安全的,極大的提高了合約的安全性以及可靠性。

此外,我們自研的合約框架提供了一個運行時的測試框架,讓開發者能模擬合約運行,無需部署就能在鏈下找到合約中存在的問題。這無疑是給上鍊的合約增加了一重保險。

另外,我們的合約框架利用rust的宏展開技術,將操作放在宏註解裡面。這樣能讓開發者在使用過程中更多的關注自己合約的業務邏輯,從某種程度上保證了合約邏輯安全,畢竟只需要專註一個部分而沒有其他因素的干擾,能讓開發者更加投入的去打磨邏輯的細節。

【執行效率】

EVM在本質上是腳本程序,是基於棧的虛擬機,需要由編譯程序翻譯成指令後執行,即解釋執行,這導致EVM的執行效率非常低。與之相對,wasm使用了編譯執行的方式,採用了虛擬機/字節碼技術, 並定義了緊湊的二進制格式, 擁有更高更快的智能合約執行速度。因此我們引入wasm極大的提高了整個合約的運行效率。

WASM(WebAssembly) 按照字面意思就是web彙編,是為web瀏覽器定制的彙編語言。這裡雖然說是定制,但隨著靈性的發展,它不僅僅只適用於web,其《核心規範》更是與平台無關。既然號稱彙編,那它顯然具有彙編語言的特點:

1)層次低,接近於機器語言,提高運行效率;

2)適合作為目標代碼,由其他高級語言(C/C++/Rust/Go等)編譯器生成,擴大適用性;

另外模塊是wasm程序編譯、傳輸和加載的單位。 wasm定義了兩種模塊格式:

二進制格式:是wasm模塊的主要編碼格式,文件以.wasm為後綴。由於其格式設計的非常緊湊,可以縮小二進制體積,擁有更快的傳輸和執行效率。

文本格式:文件以.wat為後綴,此處不詳細展開。

模塊的劃分使得wasm的組織結構更加清晰,解析更為方便,極大地提升了解析的效率。

【FVM詳解】

那麼除了使用Rust來編寫合約,以及將合約編譯成wasm字節碼,真正要將合約運行起來,依然需要為wasm提供一個運行環境,也就是FVM做的事。

從語義上講,一個wasm模塊從二進制格式到最終被執行可以分為3個階段:解碼,驗證,執行。解碼階段把二進制模塊解碼為內存格式;驗證階段對模塊進行靜態分析,確保模塊的結構滿足規範要求,且函數的字節碼沒有不良行為;執行階段又可以分為實例化和函數調用兩個部分。

(1) FVM組成

正文

正文

正文

(3)整體流程

整個介紹下來,相信大家對Rust智能合約的使用有了個大概的印象。這裡對整個流程做個梳理:

step1: 用戶通過Rust合約框架編寫智能合約(一定要測試)

step2:編譯合約為wasm文件

step3: 將wasm合約文件部署到FVM

正文

正文

目前的合約都只是針對相對簡單的業務,在我們的規劃中,FVM既能應用在現有的合約場景,又能應用在業務複雜以及對合約執行速度有較高要求的場景。同時給了非區塊鏈行業技術人員一種“零學習成本”的上鍊方法——使用他們熟悉的編程語言來編寫合約。擴大了區塊鏈技術的應用場景以及影響範圍,以便探尋更多的區塊鏈技術落地方案。

目前FVM在性能上的表現已經很好的達到了預期,但是我們不會滿足於眼前的現狀停滯不前。在後續的規劃中,我們將繼續探尋一些優化方案,比如:

1) 虛擬機緩存的優化;

2) 引入AOT(Ahead-of-Time), 即預先編譯的方式,替換現有的字節碼解釋執行,將wasm模塊直接編譯成go代碼,利用go的插件機制直接加載運行,得到極致的性能體驗。

技術在不斷的推陳出新,優化工作將一直持續下去,“保持先進”是我們的目標。

作者簡介

作者簡介

作者簡介

參考文獻

參考文獻

參考文獻

[1] rust程序設計語言

[2]《WebAssembly原理與核心技術》


智能合約
歡迎加入Odaily官方社群