Rust区块链开发库solana-local-cluster的使用:本地测试Solana智能合约和分布式应用的高效工具
Rust区块链开发库solana-local-cluster的使用:本地测试Solana智能合约和分布式应用的高效工具
安装
在项目目录中运行以下Cargo命令:
cargo add solana-local-cluster
或者在Cargo.toml中添加以下行:
solana-local-cluster = "2.3.7"
完整示例demo
以下是一个使用solana-local-cluster进行本地测试的完整示例:
use solana_local_cluster::local_cluster::{LocalCluster, ClusterConfig};
use solana_sdk::{
signature::{Keypair, Signer},
transaction::Transaction,
pubkey::Pubkey,
system_instruction,
};
fn main() {
// 创建本地集群配置
let config = ClusterConfig {
node_count: 1, // 节点数量
slots_per_epoch: 100, // 每个epoch的slot数量
..ClusterConfig::default()
};
// 启动本地集群
let cluster = LocalCluster::new(&config).unwrap();
// 获取RPC客户端
let client = cluster.get_client();
// 创建一个测试账户
let from_keypair = Keypair::new();
let from_pubkey = from_keypair.pubkey();
let to_pubkey = Pubkey::new_unique();
// 获取集群最新区块hash
let recent_blockhash = client.get_latest_blockhash().unwrap();
// 创建转账指令
let instruction = system_instruction::transfer(
&from_pubkey,
&to_pubkey,
100_000_000, // 转账金额(lamports)
);
// 创建交易
let transaction = Transaction::new_signed_with_payer(
&[instruction],
Some(&from_pubkey),
&[&from_keypair],
recent_blockhash,
);
// 发送交易
let signature = client.send_and_confirm_transaction(&transaction).unwrap();
println!("Transaction completed with signature: {}", signature);
}
主要功能
solana-local-cluster提供了以下功能:
- 启动本地Solana测试集群
- 模拟多个验证节点
- 提供RPC接口进行交互
- 支持智能合约部署和测试
- 支持分布式应用测试
许可证
Apache-2.0许可证
1 回复
Rust区块链开发库solana-local-cluster的使用指南
介绍
solana-local-cluster是Solana区块链平台提供的一个本地测试工具,允许开发者在本地环境中快速启动一个完整的Solana集群,用于测试智能合约(程序)和分布式应用(DApp)。这个工具特别适合在开发阶段进行快速迭代和调试,避免了使用测试网或主网带来的延迟和成本。
主要特性
- 在本地机器上模拟Solana区块链网络
- 支持多节点集群配置
- 提供与主网相同的RPC接口
- 可配置的验证节点数量
- 内置空投功能方便测试
- 支持快速重置和重启
安装方法
首先确保你已经安装了Rust和Solana CLI工具:
# 安装Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 安装Solana CLI
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
# 安装solana-local-cluster
cargo install solana-local-cluster
基本使用方法
启动本地集群
最简单的启动方式是使用默认配置:
solana-local-cluster --enable-warmup-epochs
这会启动一个单节点的本地Solana集群。
自定义配置启动
solana-local-cluster \
--bootstrap-validator \
--ledger /path/to/ledger \
--rpc-port 8899 \
--faucet-port 9900 \
--num-nodes 3 \
--enable-warmup-epochs
参数说明:
--bootstrap-validator
: 启动一个引导验证节点--ledger
: 指定账本存储路径--rpc-port
: RPC服务端口--faucet-port
: 水龙头服务端口--num-nodes
: 节点数量--enable-warmup-epochs
: 启用热身epochs
完整示例:从创建到交互的全流程
use solana_client::rpc_client::RpcClient;
use solana_sdk::{
pubkey::Pubkey,
signature::{Keypair, Signer},
system_instruction,
transaction::Transaction,
commitment_config::CommitmentConfig,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. 连接到本地集群
let rpc_client = RpcClient::new_with_commitment(
"http://127.0.0.1:8899".to_string(),
CommitmentConfig::confirmed()
);
// 2. 创建新钱包
let wallet = Keypair::new();
println!("新钱包地址: {}", wallet.pubkey());
// 3. 请求空投测试代币
match rpc_client.request_airdrop(&wallet.pubkey(), 100_000_000) {
Ok(sig) => {
println!("空投成功,交易哈希: {}", sig);
// 确认交易
rpc_client.confirm_transaction(&sig)?;
},
Err(e) => eprintln!("空投失败: {}", e),
}
// 4. 检查余额
let balance = rpc_client.get_balance(&wallet.pubkey())?;
println!("钱包余额: {} lamports", balance);
// 5. 创建转账交易
let recipient = Keypair::new().pubkey();
let transfer_amount = 50_000_000; // 0.5 SOL (lamports单位)
let instruction = system_instruction::transfer(
&wallet.pubkey(),
&recipient,
transfer_amount,
);
let mut transaction = Transaction::new_with_payer(
&[instruction],
Some(&wallet.pubkey()),
);
// 6. 签名并发送交易
let recent_blockhash = rpc_client.get_latest_blockhash()?;
transaction.sign(&[&wallet], recent_blockhash);
let signature = rpc_client.send_and_confirm_transaction(&transaction)?;
println!("转账成功,交易哈希: {}", signature);
// 7. 验证转账结果
let recipient_balance = rpc_client.get_balance(&recipient)?;
println!("接收方余额: {} lamports", recipient_balance);
Ok(())
}
高级用法
运行多节点集群
solana-local-cluster \
--num-nodes 4 \
--enable-warmup-epochs \
--bootstrap-validator
使用持久化账本
solana-local-cluster \
--ledger ./my-test-ledger \
--reset-ledger
自定义创世配置
solana-local-cluster \
--genesis-args="--hashes-per-tick sleep" \
--enable-warmup-epochs
调试技巧
- 查看集群日志:
tail -f /tmp/solana-local-cluster.log
- 监控集群状态:
solana cluster-version
solana validators
- 重置集群状态:
solana-local-cluster --reset