跳转到主要内容
本指南将通过一个简单的 counter 程序示例,演示如何将 Session Keys 集成到你的 Solana Anchor 程序中。

安装

首先,在 Cargo.toml 中添加 session-keys crate:
或者使用 cargo 命令:

用法

  1. 导入 session-keys
这行代码从 session-keys crate 中导入所需组件。
  1. 派生 Session trait:
Increment 结构体上派生 Session trait 后,就启用了 session 功能。
  1. 定义 session token 账户:
这里定义了一个可选的 SessionToken 账户,并指定了 session 的 signer 和 authority。
  • session_token.authority: 创建 session token 的账户
  • counter.authority.key(): 创建 counter 的账户 authority 条件用于检查 session token 是否由与 counter 相同的用户创建。
  1. 使用 session_auth_or 宏:
这个宏应用在 increment 函数上。 它会检查是否存在有效的 session token;如果没有,则验证 signer 是否为 counter 的 authority。

完整示例

下面是一个使用 session keys 的完整 counter 程序示例。 每个用户都有自己的 counter 账户,因此我们可以展示如何通过 session keys 完成身份验证。

测试

下面是一个使用 session keys 测试 counter 程序的示例:
这组测试演示了如何初始化 counter、在没有 session 的情况下递增、创建 session token,以及通过 session token 递增。 最后一个测试非常重要,因为它确保只有 counter 的所有者才能执行递增。

本地测试

如果你要使用 solana-test-validator 在本地测试,需要在启动时同时带上 session keys program 和对应账户。
  1. 确保你的 Solana CLI 指向 DEVNET:
  1. 将 Session Keys program 导出到本地文件:
  1. 使用 session keys program 和账户启动 solana-test-validator
-r - 将账本重置到 genesis -ud - Solana JSON RPC 的 URL 或 moniker(-ud = DEVNET--clone - 从集群复制一个账户 --bpf-program - 将一个 SBF program 添加到 genesis 配置中