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日

#30#derivation

每月26次下载

MIT 许可证

33KB
648

mazzaroth-rs-derive

从特质派生mazzaroth合约abi的派生宏。

添加依赖

[dependencies]
mazzaroth-rs-derive = "0.1.0"

许可证

MIT


lib.rs:

Mazzaroth派生库

Mazzaroth派生库是一个Rust库,它定义了用于编译Mazzaroth智能合约并生成JSON ABI的宏。

如何使用

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

mazzaroth-rs mazzaroth-rs-derive mazzaroth-xdr

每个合约都将具有类似的主函数和合约特质定义的基线布局。《tt class="src-rs">main()用作入口点并具有几个重要功能。它将实例化合约,调用宿主函数以检索函数输入,执行函数并返回响应。

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

// must include the ContractInterface and mazzaroth_abi for compiling the macro
extern crate mazzaroth_rs;
extern crate mazzaroth_rs_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).unwrap();

    // 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
    }
}

依赖项

~2.5MB
~57K SLoC