LogoAnchor 中文文档

Anchor CLI

Anchor CLI 参考文档

提供了 CLI 工具来支持构建和管理 Anchor 工作区。有关命令和选项的完整列表,可以在以下任何子命令上运行 anchor -h


anchor-cli
 
用法:
    anchor <子命>
 
标志:
    -h, --help       打印帮助信息
    -V, --version    打印版本信息
 
子命令:
    account    使用提供的 IDL 获取并反序列化账户
    build      构建工作区
    cluster    集群命令
    deploy     部署工作区中的每个程序
    expand     展开程序或工作区的宏
    help       打印此消息或给定子命令的帮助信息
    idl        用于与接口定义交互的命令
    init       初始化工作区
    keys       程序密钥对命令
    migrate    运行部署迁移脚本
    new        创建一个新程序
    shell      启动一个 node shell,其中根据本地配置设置了 Anchor 客户端
    test       针对本地网络运行集成测试
    upgrade    升级单个程序。配置的钱包必须是升级授权者
    verify     验证链上字节码是否与本地编译的工件匹配。在程序子目录中运行此命令,即在包含程序 Cargo.toml 的目录中

Account

anchor account <program-name>.<AccountTypeName> <account_pubkey>

使用给定的公钥获取账户,并使用提供的类型名称将数据反序列化为 JSON。如果在工作区内运行此命令,将使用工作区的 IDL 文件来获取数据类型。否则,必须提供 IDL 文件的路径。

program-name 是账户结构体所在的程序的名称,通常在 programs/<program-name> 下。program-name 应以区分大小写的方式提供,与文件夹名称完全相同,通常是 kebab-case。

AccountTypeName 是账户结构体的名称,通常是 PascalCase。

account_pubkey 指的是要反序列化的账户的 Pubkey,以 Base58 表示。

示例用法: anchor account anchor-escrow.EscrowAccount 3PNkzWKXCsbjijbasnx55NEpJe8DFXvEEbJKdRKpDcfK,使用 anchor-escrow 程序中定义的 EscrowAccount 账户结构体反序列化给定公钥中的账户。

anchor account <program-name>.<AccountTypeName> <account_pubkey> --idl <path/to/idl.json>

即使在工作区内,也使用给定 IDL 文件中提供的数据类型反序列化账户。

Build

anchor build

构建工作区中的程序,目标是 Solana 的 BPF 运行时,并在 target/idl 目录中生成 IDL。

anchor build --verifiable

在 docker 镜像内运行构建,以便输出二进制文件是确定性的(假设使用了 Cargo.lock 文件)。此命令必须在工作区内的单个 crate 子目录中运行。例如,programs/<my-program>/

提示

可以通过 -- <ARGS> 向底层的 cargo build-sbf 命令传递参数。例如:

anchor build -- --features my-feature

Cluster

Cluster list

anchor cluster list

列出集群端点:

集群端点:
 
* Mainnet - https://api.mainnet-beta.solana.com
* Devnet  - https://api.devnet.solana.com
* Testnet - https://api.testnet.solana.com

Deploy

anchor deploy

将工作区中的所有程序部署到配置的集群。

提示

这与 solana program deploy 命令不同,因为每次运行它都会生成一个新的程序地址。

Expand

anchor expand

如果在程序文件夹内运行,则将展开该程序的宏。

如果在工作区内但没有在程序文件夹内运行,则将展开工作区的宏。

如果使用 --program-name 选项运行,则仅展开给定的程序。

Idl

idl 子命令提供了用于与接口定义文件交互的命令。建议使用这些命令在链上存储 IDL,并将其存储在由程序 ID 唯一决定的确定性地址。这使我们能够仅使用程序 ID 生成客户端。

Idl Build

anchor idl build

使用编译方法生成程序的 IDL。

Idl Init

anchor idl init -f <target/idl/program.json> <program-id>

创建一个 idl 账户,并将给定的 <target/idl/program.json> 文件写入程序拥有的账户中。默认情况下,账户的大小是 IDL 大小的两倍,为将来升级 IDL 留出了空间。

Idl Fetch

anchor idl fetch -o <out-file.json> <program-id>

从配置的区块链中获取 IDL。例如,确保你的 Anchor.toml 指向 mainnet 集群并运行

anchor idl fetch GrAkKfEpTKQuVHG2Y97Y2FF4i7y7Q5AHLK94JBy7Y5yv

Idl Authority

anchor idl authority <program-id>

输出 IDL 账户的授权者。这是可以更新 IDL 的钱包。

Idl Erase Authority

anchor idl erase-authority -p <program-id>

擦除 IDL 账户的授权者,以便不再进行升级。配置的钱包必须是当前授权者。

Idl Upgrade

anchor idl upgrade <program-id> -f <target/idl/program.json>

将链上的 IDL 文件升级为新的 target/idl/program.json IDL。配置的钱包必须是当前授权者。

anchor idl set-authority -n <new-authority> -p <program-id>

在 IDL 账户上设置新的授权者。new-authorityprogram-id 都必须以 base58 编码。

Init

anchor init

初始化一个项目工作区,结构如下。

  • Anchor.toml: Anchor 配置文件。
  • Cargo.toml: Rust 工作区配置文件。
  • package.json: JavaScript 依赖文件。
  • programs/: Solana 程序的目录。
  • app/: 应用程序前端的目录。
  • tests/: JavaScript 集成测试的目录。
  • migrations/deploy.js: 部署脚本。

Keys

程序密钥对命令。

Keys List

anchor keys list

列出所有程序密钥。

Keys Sync

anchor keys sync

将程序 declare_id! 的 pubkey 与程序的实际 pubkey 同步。

Migrate

anchor migrate

运行位于 migrations/deploy.js 的部署脚本,注入一个根据工作区的 Anchor.toml 配置的提供者。例如,

// 文件:migrations/deploys.js
 
const anchor = require("@coral-xyz/anchor");
 
module.exports = async function (provider) {
  anchor.setProvider(provider);
 
  // 在这里添加你的部署脚本。
};

迁移是一个新功能,目前仅支持这种简单的部署脚本。

New

anchor new <program-name>

在工作区的 programs/ 目录中创建一个新程序,并初始化模板代码。

Shell

anchor shell

启动一个 node js shell,其中根据本地配置设置了 Anchor 客户端。该客户端可用于与工作区中部署的 Solana 程序进行交互。

Test

anchor test

针对配置的集群运行集成测试套件,部署工作区中所有程序的新版本。

如果配置的网络是 localnet,则会自动启动本地网络并运行测试。

注意

确保关闭其他本地验证器,否则 anchor test 将无法运行。

如果你希望针对本地验证器运行程序,请使用 anchor test --skip-local-validator

运行测试时,我们会将程序日志流式传输到 .anchor/program-logs/<address>.<program-name>.log

Upgrade

anchor upgrade <target/deploy/program.so> --program-id <program-id>

使用 Solana 的可升级 BPF 加载程序来升级链上程序代码。

Verify

anchor verify <program-id>

验证链上字节码是否与本地编译的工件匹配。

On this page

在GitHub上编辑