Addresses

Reference for address derivation helpers.

Overview

The sdk.addresses object provides helpers to derive Program Derived Addresses (PDAs) for all protocol accounts.

Protocol Address

sdk.addresses.protocol.get()

Gets the protocol configuration account address.

typescript
const protocolAddress = sdk.addresses.protocol.get();
console.log("Protocol:", protocolAddress.toBase58());

Returns: PublicKey

User Address

sdk.addresses.user.get()

Gets the program user account address for a wallet.

typescript
const userAddress = sdk.addresses.user.get(wallet.publicKey);
console.log("User PDA:", userAddress.toBase58());

Parameters:

NameTypeDescription
payerPublicKeyWallet public key

Returns: PublicKey

Bet Addresses

sdk.addresses.bet.get()

Gets a V1 bet account address.

typescript
const betAddress = sdk.addresses.bet.get(wagerId, creator);

Parameters:

NameTypeDescription
wagerIdnumberBet ID (sequential per user)
creatorPublicKeyBet creator's wallet

Returns: PublicKey

sdk.addresses.betV2.get()

Gets a V2 bet account address.

typescript
const betAddress = sdk.addresses.betV2.get(wagerId, creator);
console.log("Bet:", betAddress.toBase58());

Parameters:

NameTypeDescription
wagerIdnumberBet ID (sequential per user)
creatorPublicKeyBet creator's wallet

Returns: PublicKey

Pool Address

sdk.addresses.poolAuthority.get()

Gets the escrow pool authority address for a bet.

typescript
const poolAddress = sdk.addresses.poolAuthority.get(wagerId, creator);
console.log("Pool:", poolAddress.toBase58());

Parameters:

NameTypeDescription
wagerIdnumberBet ID
creatorPublicKeyBet creator's wallet

Returns: PublicKey

Token Account

sdk.addresses.tokenAccount.get()

Gets an associated token account address.

typescript
const tokenAccount = sdk.addresses.tokenAccount.get(
  usdcMint,
  wallet.publicKey,
  false // allowOwnerOffCurve
);

Parameters:

NameTypeDescription
mintPublicKeyToken mint address
authorityPublicKeyToken account owner
offTheCurvebooleanAllow PDA owners

Returns: PublicKey

Game Addresses

sdk.addresses.game.get()

Gets a game account address.

typescript
const gameAddress = sdk.addresses.game.get(gameId, creator);

Parameters:

NameTypeDescription
gameIdnumberGame ID
creatorPublicKeyGame creator's wallet

Returns: PublicKey

sdk.addresses.gamePoolAuthority.get()

Gets the game escrow pool authority address.

typescript
const gamePool = sdk.addresses.gamePoolAuthority.get(gameId, creator);

Update Authority

sdk.addresses.updateAuthority.get()

Gets the protocol update authority address.

typescript
const updateAuth = sdk.addresses.updateAuthority.get();

Returns: PublicKey

PDA Seeds Reference

AccountSeeds
Protocol["protocol"]
Update Authority["update_authority"]
User["user", owner_pubkey]
Bet (V1)["bet", wager_id, creator]
Bet (V2)["bet_v2", wager_id, creator]
Pool["pool", wager_id, creator]
Game["game", game_id, creator]
Game Pool["game_pool", game_id, creator]

Manual Derivation

You can also derive addresses manually:

typescript
import { PublicKey } from "@solana/web3.js";
import * as anchor from "@coral-xyz/anchor";

const [userAddress] = PublicKey.findProgramAddressSync(
  [Buffer.from("user"), wallet.publicKey.toBuffer()],
  programId
);

const [betAddress] = PublicKey.findProgramAddressSync(
  [
    Buffer.from("bet_v2"),
    new anchor.BN(wagerId).toArrayLike(Buffer, "le", 8),
    creator.toBuffer(),
  ],
  programId
);