2个版本
0.1.5 | 2024年3月27日 |
---|---|
0.1.4 | 2024年3月26日 |
0.1.3 |
|
0.1.2 |
|
0.1.1 |
|
#179 in 魔法豆
4MB
74K SLoC
包含 (晦涩的autoconf代码,7KB) configure.ac,(晦涩的autoconf代码,1KB) configure.ac,(晦涩的autoconf代码,3KB) configure.ac
Rust Abieos
API 文档
rs_abieos
是一个Rust库,为 abieos
C++ 库提供了一个包装器。它允许您通过提供在ABI文件之间转换二进制和JSON格式、在本地名称和字符串名称之间转换等功能来处理Antelope区块链的数据。
此包装器目前基于 AntelopeIO/abieos 的纯版本。
测试用例正在用Rust完全重写。它们可以在 tests
目录中找到。
要求
- Linux
- C++ 工具链。您可以使用其他编译器来构建库。我们建议使用Clang 18来构建
abieos
C++ 库。
确保您已经在系统上安装了Clang 18
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 18
设置说明
要在您的Rust项目中使用 rs_abieos
,您需要在 Cargo.toml
文件中将其添加为依赖项
cargo add rs_abieos
然后,运行以下命令以下载和编译 rs_abieos
库
cargo build
# or if you have another default compiler, use clang-18 to build the library
CXX=clang++-18 CC=clang-18 cargo build
快速使用示例
如何在新的Rust二进制项目中使用库的简短示例
// Step 1 - Bring rs_abieos into scope
use rs_abieos::Abieos;
fn main() {
// Step 2 - Create an instance of Abieos
let abieos = Abieos::new();
// Let's try to convert a string to u64 name
let name = "alice";
let name_u64 = abieos.string_to_name(name).unwrap();
println!("Name: {}, Name_u64: {}", name, name_u64);
}
详细示例
为此示例,下载 eosio.system abi文件 并将其复制到您的项目根目录作为 eosio.abi.json
use rs_abieos::{AbiLike, Abieos, NameLike};
fn main() {
let abieos = Abieos::new();
let path = "eosio.abi.json";
// Read the ABI file
let abi_content = match std::fs::read_to_string(path) {
Ok(content) => content,
Err(e) => {
eprintln!("Failed to read ABI file: {}", e);
return;
}
};
// define the NameLike enum to hold the account name using either a string (String) or a reference (StringRef) or an u64 (U64)
let account_name = "eosio";
let eosio = NameLike::StringRef(&account_name);
// create a eosio contract instance using the NameLike enum
let mut eosio_contract = abieos.contract(eosio);
// load the abi using the contract instance
// load_abi method takes an AbiLike enum which can be either a Json (String), Hex (String) or Bin (Vec<u8>)
let load_status = eosio_contract.load_abi(AbiLike::Json(abi_content));
// check if the abi was loaded successfully
match load_status {
Ok(_) => println!("ABI loaded successfully"),
Err(e) => eprintln!("Failed to load ABI: {}", e),
}
// Let's serialize an action using the eosio contract instance
// define the action data (example eosio::buyram)
let action_data = r#"{
"payer":"alice",
"receiver":"bob",
"quant":"100.0000 SYS"
}"#;
// retrieve the datatype for the action
let datatype = match eosio_contract.get_type_for_action("buyram") {
Ok(datatype) => datatype,
Err(e) => {
eprintln!("Failed to get datatype for action: {}", e);
return;
}
};
// serialize the action data
let serialized_action = eosio_contract.json_to_hex(datatype.as_str(), action_data.to_string());
let hex_action = match serialized_action {
Ok(hex_data) => {
println!("Serialized action data: {}", hex_data);
hex_data
}
Err(e) => {
eprintln!("Failed to serialize action data: {}", e);
return;
},
};
// Let's deserialize the serialized action data
let json_action = eosio_contract.hex_to_json(datatype.as_str(), hex_action);
match json_action {
Ok(json_data) => println!("Deserialized action data: {}", json_data),
Err(e) => eprintln!("Failed to deserialize action data: {}", e),
}
}
bin-src/main.rs
包含一个更详细的可执行示例,演示了库的多个用例。
请参阅库的API文档以获取每个函数的详细信息。
库开发
测试
要运行测试用例,请使用以下命令
cargo test
# or
CXX=clang++-18 CC=clang-18 cargo test