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-alpha | 2019年9月27日 |
#30 在 #derivation
每月26次下载
33KB
648 行
mazzaroth-rs-derive
从特质派生mazzaroth合约abi的派生宏。
添加依赖
[dependencies]
mazzaroth-rs-derive = "0.1.0"
许可证
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