PDX Utopia區(qū)塊鏈協(xié)議棧产场,正式支持eWASM智能合約舱呻。具體請(qǐng)見:
https://github.com/PDXbaap/ewasm-rust-demo/blob/master/README.md
來源:PDX
ewasm (Ethereum)
ewasm 不是一個(gè)智能合約開發(fā)語言胯甩,而是一個(gè)編譯器的生成目標(biāo)往产,它允許以太坊開發(fā)者使用其他語言(例如 Rust呵萨、C++等)開發(fā)智能合約并編譯為以太坊接受的WebAssembly溺蕉。
ewasm 是 WebAssembly 的一個(gè)安全子集伶丐,它是 web 平臺(tái)上相對(duì)新出現(xiàn)的編譯目標(biāo)。方便的是疯特,wams(以及 ewasm) 模塊可以在任何 JavaScript 項(xiàng)目中使用哗魂。對(duì)于大多數(shù)區(qū)塊鏈代碼來說,通常 75% 以上的代碼根本都不是智能合約 —— 而是使用JavaScript 與智能合約進(jìn)行通信的代碼漓雅。ewasm 和 JavaScript 使用同樣的綁定和模塊支持機(jī)制录别。
什么是WebAssembly
wasm是可以在stack-based虛擬機(jī)上運(yùn)行的一種二進(jìn)制指令格式,設(shè)計(jì)的首要目標(biāo)是性能故硅,很適合用在區(qū)塊鏈項(xiàng)目中庶灿。
WebAssembly二進(jìn)制代碼(wasm格式)可以轉(zhuǎn)換成一種中間表示,一種可讀的AST(抽象語法樹吃衅,wast格式)往踢,這種可讀的中間表示方便了編寫和調(diào)試。
對(duì)擴(kuò)展性的改進(jìn):wasm支持module import/export功能徘层,可以將擴(kuò)展部分做成module峻呕,在項(xiàng)目中導(dǎo)入。
WebAssembly的優(yōu)勢(shì)
1.可擴(kuò)展性好
2.32/64位的操作符
3.支持更多的高級(jí)語言(C趣效,Rust瘦癌,Go等)
4.由W3C領(lǐng)導(dǎo),Google跷敬,Apple讯私,MicroSoft等大公司支持,更廣闊的社區(qū)
主流瀏覽器支持,已有項(xiàng)目支持在非瀏覽器環(huán)境運(yùn)行(wabt斤寇,wavm等)
EVM2.0對(duì)比EVM1.0的優(yōu)勢(shì)
1.性能更好
2.可擴(kuò)展性好
3.開發(fā)合約更容易桶癣,支持更多語言和工具
4.合約開發(fā)規(guī)范
ewasm 合約接口規(guī)范由以太坊定制,指定模塊結(jié)構(gòu)等信息娘锁,PDX Utopia 嚴(yán)格遵循此規(guī)范牙寞,具體如下
1.數(shù)據(jù)類型
2.禁止使用浮點(diǎn)數(shù),兼容 evm 中規(guī)定的數(shù)據(jù)類型莫秆,例如:
bytes : 不定長(zhǎng)字節(jié)數(shù)組
address : 160 bit 數(shù)字间雀,在內(nèi)存中以 20字節(jié) 小字節(jié)無符號(hào)整型表示
u128 : 128 bit 數(shù)字,在內(nèi)存中以 16字節(jié) 小字節(jié)無符號(hào)整型表示
u256 : 256 bit 數(shù)字镊屎,在內(nèi)存中以 32字節(jié) 小字節(jié)無符號(hào)整型表示
格式
每個(gè)合約必須存儲(chǔ)為 wasm 字節(jié)碼
導(dǎo)入模塊
規(guī)定合約 import 的范圍僅限于 EEI 提供的模塊惹挟,ethereum 名稱空間以外的包只允許使用 debug ,在生產(chǎn)環(huán)境中 debug 也應(yīng)被禁止使用
導(dǎo)出函數(shù)
每個(gè)合約必須導(dǎo)出兩個(gè)函數(shù)(只能導(dǎo)出兩個(gè)函數(shù))
memory : 可供 EEI 寫入的共享內(nèi)存
main : 一個(gè)入口函數(shù)缝驳,沒有參數(shù)也沒有返回值匪煌,將被 VM 執(zhí)行
要關(guān)閉 wasm 的 start function 功能,開啟它會(huì)影響 ewasm 在啟動(dòng)前獲取合約內(nèi)存地址指針的功能
關(guān)于 ABI
我們看到有關(guān)導(dǎo)出函數(shù)的規(guī)定與 solidity 合約中定義的 ABI 有些不一樣党巾,solidity 合約根據(jù)方法簽名來生成相應(yīng)的 ABI 以便對(duì)合約中的函數(shù)進(jìn)行調(diào)度,這在 ewasm 看來似乎行不通霜医,因?yàn)橹挥幸粋€(gè) main 函數(shù)被導(dǎo)出了齿拂, 如何使用 main 函數(shù)之外的函數(shù)呢?我們很自然就想到了使用合約的 input 來 定義目標(biāo)方法和輸入?yún)?shù)肴敛,事實(shí)上 solidity 也是這么做的署海,只是我們把這個(gè)靈活性 交還給開發(fā)者實(shí)現(xiàn),以統(tǒng)一的 main 函數(shù)作為入口医男,然后自行封裝 input 序列化方案砸狞,solidity 使用了 rlp 序列化 input , 在后面的例子中我們可以看到更加靈活的方式。
PDX Utopia區(qū)塊鏈協(xié)議棧镀梭,正式支持eWASM智能合約刀森。具體請(qǐng)見: https://github.com/PDXbaap/ewasm-rust-demo/blob/master/README.md
Ewasm能提供可執(zhí)行的二進(jìn)制格式、非常類似于傳統(tǒng)計(jì)算機(jī)的體系架構(gòu)报账、高效且支持多種編程語言及開發(fā)者工具研底,還能夠向后兼容EVM,因此Ewasm是以太坊智能合約的未來透罢。