程序派生地址 PDA
学习如何在 Anchor 程序中使用 Program Derived Addresses (PDA) 来创建确定性账户地址。
Program Derived Addresses (PDA) 是 Solana 开发中的一项功能,它允许你从预定义的输入(种子)和程序 ID 确定性地生成一个唯一的地址。
本节将介绍如何在 Anchor 程序中使用 PDA 的基本示例。
Anchor PDA 约束
在 Anchor 程序中使用 PDA 时,通常使用 Anchor 的账户约束来定义生成 PDA 的种子。这些约束充当安全检查,以确保生成正确的地址。
用于定义 PDA 种子的约束包括:
seeds
:用于生成 PDA 的可选种子数组。种子可以是静态值或对账户数据的动态引用。bump
:用于生成 PDA 的 bump seed。用于确保地址远离 Ed25519 曲线,并且是一个有效的 PDA。seeds::program
-(可选)用于生成 PDA 地址的程序 ID。此约束仅在程序 ID 不是当前程序时使用。
seeds
和 bump
约束必须一起使用。
使用示例
以下是演示如何在 Anchor 程序中使用 PDA 约束的示例。
IDL 中的 PDA 种子
在 seeds
约束中定义的 Program Derived Address (PDA) 种子包含在程序的 IDL 文件中。这使得 Anchor 客户端在构建指令时能够自动使用这些种子解析账户地址。
下面的示例展示了程序、IDL 和客户端之间的关系。
下面的程序使用静态种子 (b"hello_world"
) 和签名者的公钥作为动态种子来定义 pda_account
。