跳到主要内容

Rust SDK

Rust SDK 面向后端、原生移动客户端、嵌入式系统,以及任何需要 Rust 性能与安全保证的应用。它同时提供对 OXN 协议的低层控制和常见场景的高层人体工学。

安装

加到 Cargo.toml

[dependencies]
oasis-runtime-sdk = "0.13"
tokio = { version = "1", features = ["full"] }

Rust SDK 是异步的;用 tokio 或其他异步运行时。

基本连接

use oasis_runtime_sdk::client::EvmClient;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = EvmClient::new("https://rpc.bout.network")?;
let chain_id = client.chain_id().await?;
println!("Chain ID: {}", chain_id);
Ok(())
}

发送加密交易

Rust SDK 提供自动加密的 signer 类型:

use oasis_runtime_sdk::client::{EvmClient, EncryptedSigner};

let client = EvmClient::new("https://rpc.bout.network")?;
let signer = EncryptedSigner::from_private_key(&private_key_hex, &client)?;

let tx = signer
.send_transaction()
.to(recipient_address)
.value(1_000_000_000_000_000_000u128) // 1 TBLUAI(测试网显示)
.gas_limit(100_000)
.submit()
.await?;

println!("Transaction: {}", tx.hash);

具体类型名与 API 表面随 SDK 版本变化。安装后跑 cargo doc --open 查看。

合约交互

从 ABI 生成的 Rust 绑定用 alloyethers-rs 约定。结合 OXN 加密 signer:

// 假设生成的 MyToken 绑定
let token = MyToken::new(token_address, signer.clone());
let tx = token.transfer(recipient, amount).gas_limit(500_000).send().await?;
tx.wait().await?;

用例

高性能索引器。 Rust 的零成本 async 使其适合并行读取大量区块。

高负载后端服务。 Rust 服务每个 core 能处理的并发请求数超过等价的 Go 或 Node.js。

嵌入式 / 边缘设备。 小内存占用、无 GC,Rust 适合受限环境。

密码学后端。 如果你的应用有大量链下密码学工作,Rust 的密码学生态(curve25519-dalek、rustcrypto 等)成熟。

地址处理

use oasis_runtime_sdk::types::address::{Address, PublicKey};

// 从公钥得到 EVM 地址
let evm_address = evm_address_from_pubkey(&pubkey);

// 从公钥得到原生 oxn1... 地址
let native_address = Address::from_pk(&PublicKey::Ed25519(pubkey));
println!("{}", native_address); // "oxn1..."

测试

用标准 #[tokio::test] 做异步测试:

#[tokio::test]
async fn test_encrypted_transfer() {
let client = EvmClient::new("https://rpc.bout.network").unwrap();
// ...
}

需要测试网的集成测试用 #[ignore]

#[tokio::test]
#[ignore]
async fn test_against_testnet() { /* ... */ }

cargo test -- --ignored 跑。

下一步