1个不稳定版本
0.2.2 | 2024年7月30日 |
---|
#5 in #tezos
115 每月下载量
370KB
7.5K SLoC
Mavryk智能Rollups的SDK。
要了解Mavryk中智能Rollups是如何工作的,请参阅智能Rollup文档。
此SDK的目的是使在Rust中编写智能Rollup内核变得简单。
要了解SDK当前版本的更改,请参阅更改日志。
智能Rollup内核
内核是一个在智能Rollup上运行的32位 WebAssembly 程序。它决定Rollup如何处理输入消息,更新Rollup状态,并在何时输出针对第1层的消息。
虽然任何具有WebAssembly编译支持的编程语言 都可以 用于编写Rollup内核,但由于Rust提供了第一级的WASM支持、确定性的运行时和安全的内存管理,因此Rust是一个非常好的选择。
Rust设置
rustup 是获取Rust的标准方式。一旦 rustup
安装,可以使用以下命令启用WASM作为编译目标:
rustup target add wasm32-unknown-unknown
Rust还有一个 wasm64-unknown-unknown
编译目标。这个目标 不兼容 Mavryk智能Rollups,因为它们只提供一个32位地址空间。
安装Clang
为了构建Rust SDK,除了Rust外,还需要 clang >= 11
。这可以通过您最喜欢的软件包管理器安装。
在MacOS上,可以通过homebrew安装LLVM和WebAssembly二进制工具包(WABT)
brew install llvm
brew install wabt
LLVM_PATH=$(brew --prefix llvm)
export AR="${LLVM_PATH}/bin/llvm-ar"
export CC="${LLVM_PATH}/bin/clang"
在Linux上,默认的 CC
often 是gcc,它不支持内核构建。确保使用clang
export CC=clang
功能
功能 | 默认? | 启用 | 关于 |
---|---|---|---|
std |
✅ | alloc |
禁用以进行 #![no_std] 集成 |
alloc |
✅ | 启用需要 alloc 包的方法/类型 |
|
panic-hook |
✅ | 将panic打印到调试日志并中止 | |
dlmalloc |
✅ | 启用 dlmalloc 作为默认分配器 |
|
crypto |
✅ | mavryk_crypto_rs |
与 mavryk_crypto_rs 类型的集成 |
bls |
✅ | mavryk_crypto_rs/bls |
Dac证书签名验证 |
data-encoding |
✅ | mavryk_data_encoding |
与 mavryk_data_encoding 特性集成 |
测试 |
❌ | crypto ,mavryk_smart_rollup_mock |
启用 MockHost 以编写测试 |
用法
以下 Cargo.toml
文件可用于设置与 Kernel SDK 的开发
[package]
name = "kernel"
version = "0.1.0"
edition = "2021"
rust-version = "1.71.1"
[lib]
crate-type = ["cdylib", "rlib"]
[dependencies]
mavryk-smart-rollup = "0.2.2"
mavryk_data_encoding = "0.5"
mavryk_crypto_rs = { version = "0.5", default-features = false }
nom = "7.1"
[dev-dependencies]
mavryk-smart-rollup = { version = "0.2.0", features = ["testing"] }
请注意,需要 cdylib
crate 类型才能启用编译为 wasm。
以下 lib.rs
文件可用于开始使用 'hello kernel'。此内核将在每个 inbox 级别运行一次。
use mavryk_smart_rollup::prelude::*;
use mavryk_smart_rollup::kernel_entry;
kernel_entry!(hello_kernel);
fn hello_kernel(host: &mut impl Runtime) {
debug_msg!(host, "Hello, kernel!\n");
}
将这两个文件保存到 Cargo.toml
和 src/lib.rs
,您可以编译内核
cargo build --release --target wasm32-unknown-unknown
cp target/wasm32-unknown-unknown/release/kernel.wasm .
通常,会产生大的 .wasm
文件。使用 wasm-strip 可以显著减小这些文件的大小,它将移除调试符号和元数据等不需要在 Smart Rollups 上执行的二进制文件
wasm-strip kernel.wasm
您可以使用 mavkit-smart-rollup-wasm-debugger
测试此内核。
# Create an empty inputs.json file - the 'hello world' kernel does not read inputs.
echo '[[], []]' > inputs.json
# Run the kernel:
mavkit-smart-rollup-wasm-debugger --kernel kernel.wasm --inputs inputs.json
一旦进入调试器,您可以使用以下命令测试内核
> load inputs
Loaded 0 inputs at level 0
> step kernel_run
Hello, kernel!
Evaluation took 11000000000 ticks so far
Status: Waiting for input
Internal_status: Collect
> load inputs
Loaded 0 inputs at level 1
> step kernel_run
Hello, kernel!
Evaluation took 11000000000 ticks so far
Status: Waiting for input
Internal_status: Collect
如您所见,在每个级别,内核都会将 Hello, kernel!
打印到调试日志中。
单元测试
有关编写针对内核的单元测试的信息,请参阅 MockHost
。
依赖项
~0.8–12MB
~132K SLoC