5 stable releases
2.0.5 | Jun 21, 2024 |
---|---|
2.0.4 | May 7, 2024 |
2.0.3 | Oct 24, 2023 |
2.0.2 | Oct 9, 2023 |
2.0.1 | Sep 11, 2023 |
#2 in #gum
251 downloads per month
11KB
167 lines
GPL Session
Manage sessions in your Solana Anchor Programs.
Installation
cargo add session-keys --features no-entrypoint
Usage
- Import the dependencies
use session_keys::{SessionError, SessionToken, session_auth_or, Session};
- Derive the
Session
trait on your instruction struct
#[derive(Accounts, Session)]
pub struct Instruction<'info> {
.....
pub user: Account<'info, User>,
#[session(
// The ephemeral keypair signing the transaction
signer = signer,
// The authority of the user account which must have created the session
authority = user.authority.key()
)]
// Session Tokens are passed as optional accounts
pub session_token: Option<Account<'info, SessionToken>>,
#[account(mut)]
pub signer: Signer<'info>,
.....
}
- Add the
session_auth_or
macro to your instruction handler with fallback logic on who the instruction should validate the signer when sessions are not present and an appropirate ErrorCode. If you've usedrequire*!
macros in anchor_lang you already know how this works.
#[session_auth_or(
ctx.accounts.user.authority.key() == ctx.accounts.authority.key(),
ErrorCode
)]
pub fn ix_handler(ctx: Context<Instruction>,) -> Result<()> {
.....
}
Example
See KamikazeJoe for an example of a game using session-keys.
Dependencies
~18–27MB
~461K SLoC