Anchor CLI
Anchor CLI 参考文档
提供了 CLI 工具来支持构建和管理 Anchor 工作区。有关命令和选项的完整列表,可以在以下任何子命令上运行 anchor -h
。
Account
使用给定的公钥获取账户,并使用提供的类型名称将数据反序列化为 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
账户结构体反序列化给定公钥中的账户。
即使在工作区内,也使用给定 IDL 文件中提供的数据类型反序列化账户。
Build
构建工作区中的程序,目标是 Solana 的 BPF 运行时,并在 target/idl
目录中生成 IDL。
在 docker 镜像内运行构建,以便输出二进制文件是确定性的(假设使用了 Cargo.lock 文件)。此命令必须在工作区内的单个 crate 子目录中运行。例如,programs/<my-program>/
。
提示
可以通过 -- <ARGS>
向底层的 cargo build-sbf
命令传递参数。例如:
Cluster
Cluster list
列出集群端点:
Deploy
将工作区中的所有程序部署到配置的集群。
提示
这与 solana program deploy
命令不同,因为每次运行它都会生成一个新的程序地址。
Expand
如果在程序文件夹内运行,则将展开该程序的宏。
如果在工作区内但没有在程序文件夹内运行,则将展开工作区的宏。
如果使用 --program-name
选项运行,则仅展开给定的程序。
Idl
idl
子命令提供了用于与接口定义文件交互的命令。建议使用这些命令在链上存储 IDL,并将其存储在由程序 ID 唯一决定的确定性地址。这使我们能够仅使用程序 ID 生成客户端。
Idl Build
使用编译方法生成程序的 IDL。
Idl Init
创建一个 idl 账户,并将给定的 <target/idl/program.json>
文件写入程序拥有的账户中。默认情况下,账户的大小是 IDL 大小的两倍,为将来升级 IDL 留出了空间。
Idl Fetch
从配置的区块链中获取 IDL。例如,确保你的 Anchor.toml
指向 mainnet
集群并运行
Idl Authority
输出 IDL 账户的授权者。这是可以更新 IDL 的钱包。
Idl Erase Authority
擦除 IDL 账户的授权者,以便不再进行升级。配置的钱包必须是当前授权者。
Idl Upgrade
将链上的 IDL 文件升级为新的 target/idl/program.json
IDL。配置的钱包必须是当前授权者。
在 IDL 账户上设置新的授权者。new-authority
和 program-id
都必须以 base58 编码。
Init
初始化一个项目工作区,结构如下。
Anchor.toml
: Anchor 配置文件。Cargo.toml
: Rust 工作区配置文件。package.json
: JavaScript 依赖文件。programs/
: Solana 程序的目录。app/
: 应用程序前端的目录。tests/
: JavaScript 集成测试的目录。migrations/deploy.js
: 部署脚本。
Keys
程序密钥对命令。
Keys List
列出所有程序密钥。
Keys Sync
将程序 declare_id!
的 pubkey 与程序的实际 pubkey 同步。
Migrate
运行位于 migrations/deploy.js
的部署脚本,注入一个根据工作区的 Anchor.toml
配置的提供者。例如,
迁移是一个新功能,目前仅支持这种简单的部署脚本。
New
在工作区的 programs/
目录中创建一个新程序,并初始化模板代码。
Shell
启动一个 node js shell,其中根据本地配置设置了 Anchor 客户端。该客户端可用于与工作区中部署的 Solana 程序进行交互。
Test
针对配置的集群运行集成测试套件,部署工作区中所有程序的新版本。
如果配置的网络是 localnet,则会自动启动本地网络并运行测试。
注意
确保关闭其他本地验证器,否则 anchor test
将无法运行。
如果你希望针对本地验证器运行程序,请使用 anchor test --skip-local-validator
。
运行测试时,我们会将程序日志流式传输到 .anchor/program-logs/<address>.<program-name>.log
Upgrade
使用 Solana 的可升级 BPF 加载程序来升级链上程序代码。
Verify
验证链上字节码是否与本地编译的工件匹配。