TypeScript
学习如何使用 Anchor 的 TypeScript 客户端库与 Solana 程序交互
Anchor 提供了一个 TypeScript 客户端库 (@coral-xyz/anchor) 简化了在 JavaScript 或 TypeScript 中与 Solana 程序交互的过程。
@coral-xyz/anchor
库仅与 @solana/web3.js
和 @solana/spl-token
的旧版本 (v1) 兼容。与 @solana/web3.js
的新版本 (v2) 不兼容。
客户端程序
要使用 @coral-xyz/anchor
与 Anchor 程序交互,您需要使用程序的 IDL 文件 创建一个
Program
实例。
创建 Program
实例需要程序的 IDL 和一个 AnchorProvider
。
AnchorProvider
是一个结合了以下两项的抽象:
Connection
- 连接到 Solana 集群(如 localhost、devnet、mainnet)Wallet
- (可选)用于支付和签署交易的默认钱包
在使用 Solana wallet adapter 进行前端集成时,您需要
设置 AnchorProvider
和 Program
。
在上面的代码片段中:
idl.json
是 Anchor 生成的 IDL 文件,位于 Anchor 项目的/target/idl/<program-name>.json
中。idlType.ts
是 IDL 类型(用于 TypeScript),位于 Anchor 项目的/target/types/<program-name>.ts
中。
或者,您可以仅使用 IDL 和到 Solana 集群的 Connection
创建 Program
实例。这意味着没有默认的 Wallet
,但允许您使用 Program
获取账户或构建指令而无需连接的钱包。
调用指令
一旦使用程序的 IDL 文件设置了 Program
,您可以使用 Anchor 的 MethodsBuilder
来:
- 构建单独的指令
- 构建交易
- 构建并发送交易
基本格式如下所示:
program.methods
- 这是从程序的 IDL 创建指令调用的构建器 API
Anchor 提供了多种构建程序指令的方法:
获取账户
Program
客户端简化了获取和反序列化由您的 Anchor 程序创建的账户的过程。
使用 program.account
后跟 IDL 中定义的账户类型的名称。Anchor 提供多种获取账户的方法。
使用 all()
获取特定账户类型的所有现有账户。
示例
下面的示例演示了如何使用 @coral-xyz/anchor
与一个简单的 Anchor 程序进行了交互。该程序有两个指令:
initialize
– 创建并初始化一个计数器账户以存储一个值increment
– 增加计数器账户上存储的值
下面是一个与 Anchor 程序交互的 TypeScript 客户端的示例文件结构:
示例中的 /idl
目录包含两个文件:
example.json
: 程序的 IDL 文件example.ts
: 为 IDL 生成的 TypeScript 类型定义文件
下面的选项卡包含 example.json
和 example.ts
文件作为参考,展示这些文件的样子。
当您在 Anchor 项目中运行 anchor build
时,Anchor CLI 会自动生成:
-
IDL 文件(
.json
)在target/idl
文件夹中(例如:target/idl/example.json
) -
TypeScript 类型定义文件(
.ts
)在target/types
文件夹中(例如:target/types/example.ts
)
下面的 example.ts
文件包含与程序交互的脚本。