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提供了以下功能:

  1. 启动本地Solana测试集群
  2. 模拟多个验证节点
  3. 提供RPC接口进行交互
  4. 支持智能合约部署和测试
  5. 支持分布式应用测试

许可证

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

调试技巧

  1. 查看集群日志:
tail -f /tmp/solana-local-cluster.log
  1. 监控集群状态:
solana cluster-version
solana validators
  1. 重置集群状态:
solana-local-cluster --reset
回到顶部