网站开发 太原,遨游建站,为什么买的网站模版不好用,微信如何开发自己的小程序1、准备合约
如何写合约#xff0c;与编译之前的文章已经写过了#xff0c;准备好.wasm文件。
2、测试程序
xwasm/wasm/tests at main XuHugo/xwasm GitHub
2.1 读取合约
let modules fs::read(./tests/wasmfile/contract.wasm).unwrap();
2.2预编译合约…1、准备合约
如何写合约与编译之前的文章已经写过了准备好.wasm文件。
2、测试程序
xwasm/wasm/tests at main · XuHugo/xwasm · GitHub
2.1 读取合约
let modules fs::read(./tests/wasmfile/contract.wasm).unwrap();
2.2预编译合约
let engine wasmtime::Engine::new(Config::new().epoch_interruption(true)).unwrap();let aot_bytes match engine.precompile_module(wasm_bytes) {Ok(b) b,Err(_e) return,};
预编译需要借助wasmtime生成一个engine的实例。
2.3准备链的上下文
let metadata Metadata {block_time: 111,block_height: 222,tx_hash: String::from(txhash),};#[derive(Serialize, Deserialize, Debug)]//#[state(contractxq)]struct Param {name: String,age: u64,sex: String,}let a: Param Param {name: String::from(xq),age: 18,sex: String::from(man),};let ctx Context::init(String::from(init_xq),String::from(),String::from(serde_json::to_string(a).unwrap()),Address::from(0xf6b02a2d47b84e845b7e3623355f04tbi0000002),Address::from(0xf6b02a2d47b84e845b7e3623355f04tbi0000002),Address::from(0xf6b02a2d47b84e845b7e3623355f04tbi0000002),100,metadata,false,10000,);
大部分参数没有什么特别的这里需要注意的是合约的参数是json格式需要提前转换好
2.4 运行合约
参数依次是函数名上下文合约字节码token;
let ret WasmtimeRuntime::execute(init_xq, ctx, aot_bytes, 0);match ret {Ok(r) println!({:?}, r),Err(e) println!({:?}, e),}
init_xq这个函数可以看一下合约里虽然没有这个名字的函数但是却可以正常调用这是因为我们用宏修改了名字让每个合约的初始化函数都统一为init_xxx.
#[init(contract xq, payable)]
fn initC: Context Copy(ctx: C, _amoun3: u64) - CResultRetValue