智能合约语言(eDSL)—— 测试

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(contract="xq")]

    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 init<C: Context + Copy>(ctx: C, _amoun3: u64) -> CResult<RetValue>

相关推荐

  1. 智能合约语言eDSL)—— 测试

    2024-04-25 13:44:04       47 阅读
  2. 智能合约语言eDSL)—— 并行化方案

    2024-04-25 13:44:04       28 阅读
  3. 智能合约测试例子

    2024-04-25 13:44:04       50 阅读
  4. 区块链智能合约测试框架Foundry技术指南

    2024-04-25 13:44:04       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 13:44:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 13:44:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 13:44:04       82 阅读
  4. Python语言-面向对象

    2024-04-25 13:44:04       91 阅读

热门阅读

  1. YOLOv3的算法原理是怎么样的

    2024-04-25 13:44:04       38 阅读
  2. jadx反编译apk

    2024-04-25 13:44:04       40 阅读
  3. Git和SVN有什么区别?

    2024-04-25 13:44:04       43 阅读
  4. idea一些常用的快捷键

    2024-04-25 13:44:04       32 阅读
  5. Ribbon饥饿加载

    2024-04-25 13:44:04       42 阅读
  6. C语言如何⽤指针为函数传递数组?

    2024-04-25 13:44:04       33 阅读
  7. 答疑(蓝桥杯)

    2024-04-25 13:44:04       37 阅读
  8. 【校招VIP】25届一本备战策略

    2024-04-25 13:44:04       34 阅读
  9. Source Insight 4.0

    2024-04-25 13:44:04       152 阅读
  10. 汽车诊断仪算法保护芯片——LKT4305-GM

    2024-04-25 13:44:04       100 阅读
  11. MySQL数据库SSL连接测试

    2024-04-25 13:44:04       34 阅读
  12. 第28章 招聘

    2024-04-25 13:44:04       32 阅读
  13. leetcode145--二叉树的后序遍历

    2024-04-25 13:44:04       38 阅读