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

server/2024/10/21 23:26:25/

1、准备合约

如何写合约,与编译之前的文章已经写过了,准备好.wasm文件。

2、测试程序

xwasm/wasm/tests at main · XuHugo/xwasm · GitHub

2.1 读取合约
rust">let modules = fs::read("./tests/wasmfile/contract.wasm").unwrap();
2.2预编译合约
rust">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准备链的上下文
rust">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; 

rust">let ret = WasmtimeRuntime::execute("init_xq", ctx, &aot_bytes, 0);match ret {Ok(r) => println!("{:?}", r),Err(e) => println!("{:?}", e),}

init_xq这个函数可以看一下合约里,虽然没有这个名字的函数,但是却可以正常调用,这是因为我们用宏修改了名字,让每个合约的初始化函数,都统一为init_xxx.

rust">#[init(contract = "xq", payable)]
fn init<C: Context + Copy>(ctx: C, _amoun3: u64) -> CResult<RetValue>


http://www.ppmy.cn/server/13403.html

相关文章

Unity类银河恶魔城学习记录14-3,4 p150 EndScreen,p151 Checkpoint源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Checkpoint.cs using System.Collections; using System.Collections.Gener…

JVM(java虚拟机 详解三个主要的话题:1.JVM 中的内存区域划分2.JVM 的类加载机制3.JVM 中的垃圾回收算法)

jdk java开发工具包 jre java运行时环境 jvm java虚拟机 JDK、JRE、JVM之间的关系&#xff1f; JDK(Java Development Kit):Java开发工具包&#xff0c;提供给Java程序员使用&#xff0c;包含了JRE&#xff0c;同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。…

Flask Web框架入门教程

一、Flask简介 Flask是一个轻量级的Web应用框架&#xff0c;使用Python编写。相比于Django等其他大型框架&#xff0c;Flask更加灵活和轻量&#xff0c;非常适合小型到中型的应用开发。它有一个强大的扩展库&#xff0c;可以方便地添加各种功能。 二、安装Flask 你可以使用p…

Uniswap丨justswap丨pancakeswap去中心化薄饼交易所系统开发

开发去中心化薄饼交易所系统&#xff08;如Uniswap、JustSwap、PancakeSwap&#xff09;是一个复杂而有挑战性的任务&#xff0c;需要综合考虑技术、安全、用户体验和合规等方面。以下是开发这样一个系统时需要考虑的关键方面&#xff1a; 1. 技术架构 智能合约开发&#xff1…

使用spring-ai快速对接ChatGpt

什么是spring-ai 该Spring AI项目旨在简化包含人工智能功能的应用程序的开发&#xff0c;避免不必要的复杂性。 该项目从著名的 Python 项目&#xff08;例如 LangChain 和 LlamaIndex&#xff09;中汲取灵感&#xff0c;但 Spring AI 并不是这些项目的直接移植。该项目的成立…

json格式详解

JSON JSON&#xff08;JavaScript Object Notation&#xff09;文件格式是一种轻量级的数据交换格式&#xff0c;用于存储和传输结构化的数据。它基于JavaScript的语法&#xff0c;但是可以被多种编程语言所支持和解析&#xff0c;因此被广泛应用于各种场景。 1. 语法结构 J…

【智能算法】指数分布优化算法(EDO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2023年&#xff0c;M Abdel-Basset等人受到指数分布理论启发&#xff0c;提出了指数分布优化算法&#xff08;Exponential Distribution Optimizer, EDO&#xff09;。 2.算法原理 2.1算法思想 ED…

Window + Ubuntu 双系统无Ubuntu Bios 启动项

文章目录 安装硬盘位置不重要&#xff01;&#xff01;&#xff01;&#xff08;但是我安装在了第二张HDD&#xff09;问题是多盘分位置会导致磁盘主分区变成了简单卷 Bios Ubuntu 启动项修复参考Ubuntu安装U盘进入Try Ubuntu 使用Terminal修复完提示Disable Secure Boot进入Te…