11 个版本 (6 个破坏性更新)

使用旧的 Rust 2015

0.8.1 2022年5月24日
0.8.0 2022年1月11日
0.7.0 2021年12月14日
0.6.0 2021年11月9日
0.1.0-alpha2019年9月27日

#507 in WebAssembly

每月 27 次下载

MIT 许可证

30KB
492

mazzaroth-rs

CircleCI

mazzaroth-rs 是一个 Rust 库,包括主机绑定以及将 Rust 合同编译成 WebAssembly 所需的一切,兼容 Mazzaroth 虚拟机。在这里,您可以找到用于将参数传递给合同函数以及可用于的主机外部函数的必要的 ABI 编码器和解码器。

使用方法

使用此库的第一步是包含必要的依赖项。
以下 3 个依赖项应包含在您的 Cargo.toml 中

mazzaroth-rs
mazzaroth-rs-derive
mazzaroth-xdr

每个合同都将有一个类似的基本布局,用于主函数和合同特质定义。 main() 作为入口点,具有几个重要功能。它将实例化合同,调用主机函数以检索函数输入,执行函数,并返回响应。

以下是一个基本的 Hello World 合同示例

// must include the ContractInterface and mazzaroth_abi for compiling the macro
extern crate mazzaroth_rs;
extern crate mazzaroth_derive;
use mazzaroth_rs::ContractInterface;
use mazzaroth_rs_derive::mazzaroth_abi;

// using specific external host modules
use mazzaroth_rs::external::{transaction, log};

#[no_mangle]
pub fn main() {
    // panic hook is set to call the host error log function when a panic occurs
    std::panic::set_hook(Box::new(mazzaroth_rs::external::errors::hook));

    // Creates a new instance of the ABI generated around the Contract
    let mut contract = HelloWorld::new(Hello {});

    // Use a host function to get arguments
    let args = transaction::arguments();

    // Execute calls one of the functions defined in the contract
    // Input for the function to call and it's params comes from the Runtime
    let response = contract.execute(&args);

    // Provide return value through host call
    transaction::ret(response);
}

// mazzaroth_abi used to generate the contract from the trait during compilation
#[mazzaroth_abi(HelloWorld)]
pub trait HelloWorldContract {
    // hello() defined as a readonly function
    #[readonly]
    fn hello(&mut self) -> u32;
}

// Struct used to implement the contract trait
pub struct Hello {}

// Actual contract implementation
impl HelloWorldContract for Hello {
    fn hello(&mut self) -> u32 {
        log("Hello World!".to_string());
        14
    }
}

运行测试

cargo test --features host-mock

生成文档

从根目录运行以下命令

cargo doc

可选地提供 --open 标志,在构建后将在浏览器中打开文档。

这将把所有生成的文档放在 /target/doc

许可证

MIT

依赖项

~4MB
~69K SLoC