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

2024-04-25 12:44
文章标签 语言 智能 测试 合约 edsl

本文主要是介绍智能合约语言(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>

这篇关于智能合约语言(eDSL)—— 测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934716

相关文章

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

基于Python实现智能天气提醒助手

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下... 目录项目概述核心功能技术实现1. 天气API集成2. AI建议生成3. 消息推送环境配置使用方法完整代码项目特点

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态: