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