Rust区块链开发库tonlib-core的使用,TON区块链轻量级客户端库tonlib-core实现高效交互与智能合约操作
Rust区块链开发库tonlib-core的使用,TON区块链轻量级客户端库tonlib-core实现高效交互与智能合约操作
特性
- 支持Cell和BagOfCell的解析与生成,便于与数据结构交互
- 支持现有钱包版本
- 生成钱包地址
- 支持TON助记词
- NaCl兼容的Ed25519交易签名
使用方式
在Cargo.toml中添加依赖:
[dependencies]
tonlib-core = "0.26.1"
然后在Rust代码中导入:
use tonlib_core;
包内容
Cell
用于构建和解析Cell及Bag of Cells的数据结构和辅助工具。
Message
用于Message的数据结构、构建器和解析器,包括Jetton、NFT和Soulbound NFT的标准消息。
Mnemonic
存储助记词的数据结构。
Types
用于TON智能合约地址和TON交易ID的存储和转换的数据结构。
Wallet
用于生成钱包地址的数据结构。
使用示例
Cell操作
创建Cell并写入数据:
use anyhow::anyhow;
use tonlib_core::TonAddress;
use tonlib_core::cell::CellBuilder;
fn write_cell() -> anyhow::Result<()> {
let mut writer = CellBuilder::new();
let addr = TonAddress::from_base64_url("EQDk2VTvn04SUKJrW7rXahzdF8_Qi6utb0wj43InCu9vdjrR")?;
let cell = writer
.store_u32(32, 0xFAD45AADu32)?
.store_bit(true)?
.store_u8(8, 234u8)?
.store_slice(&[0xFA, 0xD4, 0x5A, 0xAD, 0xAA, 0x12, 0xFF, 0x45])?
.store_address(&addr)?
.store_string("Hello, TON")?
.build()?;
Ok(())
}
从Cell读取数据:
use tonlib_core::cell::Cell;
fn read_cell(cell: Cell) -> anyhow::Result<()> {
let mut reader = cell.parser();
let u32_value = reader.load_u32(32)?;
let bit_value = reader.load_bit()?;
let u8_value = reader.load_u8(8)?;
let bytes_value = reader.load_bytes(8)?;
let address_value = reader.load_address()?;
let str_value = reader.ensure_empty()?;
Ok(())
}
完整示例
以下是使用tonlib-core与TON区块链交互的完整示例:
use anyhow::Result;
use tonlib_core::{
cell::CellBuilder,
mnemonic::Mnemonic,
wallet::{Wallet, WalletVersion},
TonAddress,
};
async fn interact_with_ton() -> Result<()> {
// 1. 创建助记词
let mnemonic = Mnemonic::generate(24)?;
println!("Generated mnemonic: {}", mnemonic);
// 2. 从助记词创建钱包
let wallet = Wallet::from_mnemonic(WalletVersion::V4R2, &mnemonic, None)?;
println!("Wallet address: {}", wallet.address()?.to_base64_url());
// 3. 构建交易消息
let mut builder = CellBuilder::new();
let message_cell = builder
.store_u32(32, 0x6E73744F)? // "nstO"操作码
.store_u64(64, 1_000_000_000)? // 1 TON
.build()?;
// 4. 签名消息
let signed_message = wallet.create_signed_message(message_cell, 60)?;
// 5. 发送交易(需要TON节点连接)
// let client = TonClient::new();
// client.send_message(&signed_message).await?;
Ok(())
}
#[tokio::main]
async fn main() {
if let Err(e) = interact_with_ton().await {
eprintln!("Error: {}", e);
}
}
这个示例展示了:
- 生成24个单词的助记词
- 从助记词创建V4R2版本的钱包
- 构建包含1 TON转账的消息
- 对消息进行签名
- 注释掉的发送交易部分(需要实际TON节点连接)
注意:实际使用时需要配置TON节点连接并处理异步操作。
1 回复
Rust区块链开发库tonlib-core的使用指南
介绍
tonlib-core是一个用于与TON(The Open Network)区块链交互的轻量级客户端库,专为Rust开发者设计。它提供了高效、安全的方式来与TON区块链网络交互,包括查询区块链状态、发送交易以及与智能合约交互等功能。
主要特性
- 轻量级设计,资源占用低
- 异步支持,高性能网络交互
- 完整的TON区块链API覆盖
- 智能合约操作支持
- 本地密钥管理
- 可配置的网络连接
安装方法
在Cargo.toml中添加依赖:
[dependencies]
tonlib-core = "0.5" # 请检查最新版本
基本使用方法
1. 初始化客户端
use tonlib::client::TonClient;
use tonlib::config::MAINNET_CONFIG;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建TON客户端
let client = TonClient::with_config(MAINNET_CONFIG).await?;
// 获取最新区块信息
let master_block = client.get_masterchain_info().await?;
println!("Latest block: {:?}", master_block);
Ok(())
}
2. 查询账户余额
use tonlib::address::TonAddress;
async fn get_balance(client: &TonClient, address: &str) -> Result<(), Box<dyn std::error::Error>> {
let address = TonAddress::from_base64_url(address)?;
let account = client.get_account_state(&address).await?;
println!("Account balance: {} nanoton", account.balance);
Ok(())
}
3. 发送简单交易
use tonlib::contract::WalletContract;
use tonlib::mnemonic::Mnemonic;
async fn send_transaction(
client: &TonClient,
mnemonic: &str,
to_address: &str,
amount: u64
) -> Result<(), Box<dyn std::error::Error>> {
// 从助记词恢复钱包
let mnemonic = Mnemonic::from_phrase(mnemonic)?;
let wallet = WalletContract::from_mnemonic(&client, mnemonic, 极客时间,洞见科技未来