技術(shù)開發(fā)合同樣例—技術(shù)開發(fā)合同法律規(guī)定
PDX Utopia區(qū)塊鏈協(xié)議棧,支持WASM合約與Solidity合約互相調(diào)用。具體請見:
https://github.com/PDXbaap/ewasm-rust-demo/blob/master/README-SOL.md
是Solidity?
以太坊Solidity是一種面向智能合約的高級語言,其語法與JavaScript類似。Solidity是用于生成在EVM上執(zhí)行的機(jī)器級代碼的工具。Solidity編譯器獲取高級代碼并將其分解為更簡單的指令。Solidity代碼封裝在Contracts中。
以太坊合約中的Solidity
合約是以太坊去中心化應(yīng)用程序的基本構(gòu)建模塊。所有變量和函數(shù)都是合約的一部分,這是所有項(xiàng)目的起點(diǎn)。一個名為MyFirst的空合約看起來像這樣:
Solidity文件的布局
源文件可以包含任意數(shù)量的合約定義,包括指令和Pragma指令。
Version Pragma
Version Pragma是定義代碼使用的Solidity編譯器版本的聲明。
往期鏈接:PDX Utopia區(qū)塊鏈協(xié)議棧已正式支持eWASM智能合約
Solidity智能合約在區(qū)塊鏈的價(jià)值
信任
創(chuàng)建久的、安全的、不可篡改的可追溯的記錄
價(jià)值
獨(dú)一無二的資產(chǎn)轉(zhuǎn)移,不需要第三方的組織
可靠
分布式、穩(wěn)定性
支持WASM合約與Solidity合約互相調(diào)用
數(shù)據(jù)類型
禁止使浮點(diǎn)數(shù),兼容evm中規(guī)定的數(shù)據(jù)類型,例如:
- bytes:不定長字節(jié)數(shù)組
- 地址:160 bit數(shù)字,在內(nèi)存中以20字節(jié)小字節(jié)無符號整型表示
- u128:128位數(shù)字,在內(nèi)存中以16字節(jié)小字節(jié)無符號整型表示
- u256:256位數(shù)字,在內(nèi)存中以32字節(jié)小字節(jié)無符號整型表示
格式
每個合約必存儲為wasm字節(jié)碼。
導(dǎo)入模塊
合約規(guī)定iport的范圍僅限于EEI提供的模塊,ethereum名稱空間以外的包只允許使用debug,生產(chǎn)在環(huán)境中debug也應(yīng)被禁止使用。
導(dǎo)出函數(shù)
每個合約必須導(dǎo)兩個函數(shù)(只能導(dǎo)出兩個函數(shù))
- 記憶:可供EEI寫入的共享內(nèi)存
- main:一個入口函數(shù),沒有參數(shù)也沒有返回值,將被VM執(zhí)行
關(guān)閉要wasm的start function功能,它開啟會影響ewasm在啟動前電子雜志合約內(nèi)存地址指針的功能。
HELLO-WASM-ABI定義ABI
建議通過以下三步來生成ABI:
1.使用Solidity關(guān)系編寫contract interface;
2.使用remix編譯contract interface得到對應(yīng)的ABI描述;
3.參照ABI描述文件關(guān)系編寫pdxabi::Contract;
部署wasm合約后可以使用合約地址和合同接口在remix里對對約進(jìn)行實(shí)例化,方便測試。
Solidity調(diào)用Wasm合約
用sol合約來調(diào)合約wasm,與sol調(diào)用sol方式相同,假設(shè)已經(jīng)部署過hello-wasm-abi這個合約,并得到合約地址0xda3ce11d916ffba4a1289cef66a7f142ec5a0f74,通過hello-wasm-abi合約接口和地址,即可實(shí)例化這個合約,之后用法與sol調(diào)用sol一致。
關(guān)于ABI