24个版本

新版本 0.1.24 2024年8月22日
0.1.22 2024年6月25日
0.1.20 2024年3月21日
0.1.16 2023年10月30日
0.1.5 2022年7月21日

#60 in WebAssembly

Download history 6100/week @ 2024-05-03 6697/week @ 2024-05-10 5823/week @ 2024-05-17 4864/week @ 2024-05-24 5216/week @ 2024-05-31 4926/week @ 2024-06-07 3891/week @ 2024-06-14 4682/week @ 2024-06-21 4279/week @ 2024-06-28 3162/week @ 2024-07-05 3804/week @ 2024-07-12 3289/week @ 2024-07-19 2667/week @ 2024-07-26 491/week @ 2024-08-02 658/week @ 2024-08-09 830/week @ 2024-08-16

5,118每月下载量

Apache-2.0 WITH LLVM-exception

8KB
76

确定性-wasi-ctx

关于此仓库

这是一个Rust包,用于创建一个完全确定性的wasi-common WASI上下文实现。

确定性指的是提供的WASI函数对于同一系列调用始终返回相同的系列结果。例如,对系统时钟调用clock_time_get将始终返回相同的时间戳。或者调用random_get将始终在第一次调用时返回155,然后在第二次调用时始终返回111

这可以在各种环境中非常有用。例如,缓存调用Wasm模块中函数的结果。

用法

let wasi = deterministic_wasi_ctx::build_wasi_ctx();
let engine = Engine::default();
let mut linker = Linker::new(&engine);
wasmtime_wasi::add_to_linker(&mut linker, |s| s).unwrap();
let module_path = ...; // path to a Wasm module
let module = Module::from_file(&engine, module_path).unwrap();
let mut store = Store::new(&engine, wasi);
linker.module(&mut store, "", &module).unwrap();
let instance = linker.instantiate(&mut store, &module).unwrap();
... // invoke functions on `instance`

贡献

确定性-wasi-ctx是一个测试项目,将进行重大开发。我们欢迎反馈、错误报告和错误修复。我们也很乐意讨论功能开发,但在贡献之前请先在问题中讨论功能。

构建依赖

  • rustup
  • 稳定通道上Rust的最新版本
  • wasm32-wasi目标,可以通过运行rustup target add wasm32-wasi来安装

构建

在安装所有依赖项之后,运行make build-deterministic-wasi-ctx来构建包。

测试

运行make test以运行集成测试。

结构

确定性-wasi-ctx-test-programs包用于构建一组Wasm文件,这些文件调用WASI函数,这些函数在确定性-wasi-ctx包中的集成测试中使用,以验证这些Wasm文件的输出是否具有确定性。

发布

  1. 根据上一个版本的变化,创建并合并一个PR,按照SemVer规则增加crates的版本
  2. Github上创建一个新版本,名称如v0.1.0,其中版本与crates的版本一致
  3. 通过运行make publish发布crates的新版本

依赖

~14–25MB
~386K SLoC