You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何便捷初始化复制Mainnet-Beta全账户的Solana Localnet集群以测试含大量跨程序调用(CPI)的程序?

批量克隆Mainnet账户到Solana Localnet的简便方案

你问到点子上了——手动逐个添加--clone参数确实太繁琐,尤其是要处理大量CPI依赖的账户时。这里有几个高效的方案帮你批量完成需求:

1. 编写批量克隆脚本

最直接的方式是写个简单的脚本,自动生成包含所有目标账户的solana-test-validator启动命令。

步骤如下:

  • 先创建一个文本文件(比如target_accounts.txt),把你需要克隆的所有账户地址按行列出
  • 用bash脚本读取这个文件,拼接启动命令:
# 初始化基础命令
VALIDATOR_CMD="solana-test-validator"

# 遍历账户列表,逐个添加--clone参数
while read -r ACCOUNT_ADDR; do
  VALIDATOR_CMD="$VALIDATOR_CMD --clone $ACCOUNT_ADDR"
done < target_accounts.txt

# 启动本地验证器
$VALIDATOR_CMD

如果不知道具体要克隆哪些账户,可以通过solana program show <程序地址>查看该程序关联的账户,或者用solana account命令批量查询依赖链上的账户地址。

2. 使用账本快照导入

如果你需要克隆的账户范围比较大,可以利用Solana的账本快照工具,导出Mainnet上的指定账户快照,再导入到Localnet。

步骤:

  1. 先获取Mainnet的轻量账本快照(可以从Solana官方的快照服务器下载,或者同步一小段Mainnet账本)
  2. 用solana-ledger-tool导出目标账户:
solana-ledger-tool export --ledger <你的Mainnet账本路径> --accounts target_accounts.txt --output mainnet_selected_snapshot.tar.gz
  1. 启动本地验证器时加载这个快照:
solana-test-validator --snapshot mainnet_selected_snapshot.tar.gz

这个方法适合需要批量克隆一整套关联账户的场景,不过要注意本地存储占用——只导出你需要的账户,别贪多。

3. 借助测试框架自动克隆

如果你用Anchor框架写测试,可以在测试代码里集成批量克隆逻辑,每次跑测试时自动拉取Mainnet的目标账户。

比如写一个Rust辅助函数:

use anchor_client::Client;
use solana_sdk::pubkey::Pubkey;
use anyhow::Result;

async fn clone_required_accounts(client: &Client, account_list: &[Pubkey]) -> Result<()> {
    for &pubkey in account_list {
        // 克隆指定的Mainnet账户到Localnet
        client.program(pubkey).clone().await?;
        println!("Cloned account: {}", pubkey);
    }
    Ok(())
}

在测试初始化阶段调用这个函数,就能自动完成所有依赖账户的克隆,不用手动处理命令行参数。

注意事项

  • 只克隆必要的依赖账户:克隆大量账户会拖慢Localnet的性能,也会占用大量本地存储,优先选CPI调用涉及的程序账户和关联数据账户
  • 版本兼容:确保你的本地Solana CLI版本和Mainnet的版本一致(或兼容),避免克隆或快照导入时出现版本不匹配的错误
  • 测试环境隔离:克隆后可以在Localnet自由修改账户状态,不会影响Mainnet,放心测试你的CPI逻辑

内容的提问来源于stack exchange,提问作者Ozymandias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 11:12:40