Deployed Addresses

All addresses below are on Solana Devnet. Mainnet has its own deployment with different program IDs and a hardware-wallet upgrade authority controlled by a multisig.

Quick Reference

prism_core

GGb2hHKW…26BKpCredit engine — vault, tranches, loans, NAV, waterfall, default cascade, IKA collateral.

prism_amm

6xu3TJub…1S5M6QConstant-product AMM for tranche tokens vs USDC. Independent of prism_core.

USDC (devnet)

4zMMC9sr…JDncDUCircle’s official devnet USDC mint. 6 decimals.

Vault #1

8TDuRCL3…28UPYHThe live demo vault on devnet (vault_id = 1).

Programs

ProgramAddressPurpose
prism_coreGGb2hHKWGxFT72wFDMtyLrqCj9yQaE8etpPTw1p26BKpCredit engine
prism_amm6xu3TJubMGdepBDoyKN4dC8rHytK35FRbG2fdZ1S5M6QSecondary market AMM
The two programs are intentionally separated. prism_amm only depends on the SPL mints exposed by prism_core — it never reads or writes vault state. This blast-radius isolation means a bug in the AMM can’t compromise vault accounting, and each program can be audited and upgraded independently.

Tokens

TokenAddressDecimals
Devnet USDC4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU6
The protocol is denominated in USDC. All tranche mints (pPRIME, pCORE, pALPHA) and AMM LP mints also use 6 decimals so NAV math stays integer-clean at NAV = 1.0.

Vault #1 — Live Demo

The current devnet demo runs against vault_id = 1. The protocol-level singletons and the vault top-level account: All other vault-scoped accounts (tranche state, tranche mints, USDC reserve, loss bucket, loan, credit events, AMM pools) derive deterministically from the vault PDA.

IKA Test Oracle

For local development, the project ships a fixed-keypair test oracle that signs the 81-byte attestation message. The pubkey is constant across runs:
AccountAddress
Test oracle pubkey5nmEq5cNc9yXpK1ySrb4XH65zccBvRK2hwKnEJePjcrf
Use this as oracle_pubkey when calling attach_ika_collateral against a locally-served oracle endpoint. Never use this key on mainnet — the secret is checked into the repo.

PDA Seed Reference

PRISM uses Program-Derived Addresses for every protocol-controlled account. Use the SDK helpers (recommended) or derive locally with these seeds:
PDASeedsOwner programSDK helper
GlobalConfig["config2"]prism_coregetConfigPda()
Vault["vault", vault_id_le_bytes]prism_coregetVaultPda(id)
Tranche["tranche", vault, [kind]]prism_coregetTranchePda(vault, kind)
Tranche Mint["mint", vault, [kind]]prism_coregetTrancheMintPda(vault, kind)
Vault USDC reserve["reserve", vault]prism_coregetVaultReservePda(vault)
Loss bucket["loss_bucket", vault]prism_coregetLossBucketPda(vault)
Loan["loan", vault, loan_id_le_bytes]prism_coregetLoanPda(vault, id)
CreditEvent["credit_event", vault, seq_le_bytes]prism_coregetCreditEventPda(vault, seq)
IkaCollateral["ika_collateral_v2", loan]prism_coregetIkaCollateralPda(loan)
EncryptHealth["encrypt_health", loan]prism_coregetEncryptHealthPda(loan)
CloakPayout["cloak_payout", vault]prism_coregetCloakPayoutPda(vault)
AmmPool["amm", tranche_mint]prism_ammgetPoolPda(trancheMint)
AMM Tranche reserve["amm_tranche", tranche_mint]prism_ammgetPoolTrancheReservePda(trancheMint)
AMM Quote reserve["amm_quote", tranche_mint]prism_ammgetPoolQuoteReservePda(trancheMint)
AMM LP mint["amm_lp", tranche_mint]prism_ammgetLpMintPda(trancheMint)
kind byte: 0 = Prime, 1 = Core, 2 = Alpha. All multi-byte integer seeds are little-endian.

Derive Every PDA in TypeScript

The full set for a single vault, in one snippet you can paste into a script:
import {
  PRISM_CORE_PROGRAM_ID,
  PRISM_AMM_PROGRAM_ID,
  TrancheKind,
  USDC_MINT,
  getConfigPda,
  getVaultPda,
  getTranchePda,
  getTrancheMintPda,
  getVaultReservePda,
  getLossBucketPda,
  getLoanPda,
  getCreditEventPda,
  getIkaCollateralPda,
  getPoolPda,
  getPoolTrancheReservePda,
  getPoolQuoteReservePda,
  getLpMintPda,
} from 'prismprotocol-sdk';

const VAULT_ID = 1;
const LOAN_ID = 0;
const CREDIT_EVENT_SEQ = 0;

const [config]      = getConfigPda();
const [vault]       = getVaultPda(VAULT_ID);
const [reserve]     = getVaultReservePda(vault);
const [lossBucket]  = getLossBucketPda(vault);
const [loan]        = getLoanPda(vault, LOAN_ID);
const [creditEvent] = getCreditEventPda(vault, CREDIT_EVENT_SEQ);
const [collateral]  = getIkaCollateralPda(loan);

// Per-tranche
const tranches = [TrancheKind.Prime, TrancheKind.Core, TrancheKind.Alpha].map((kind) => {
  const [pda]     = getTranchePda(vault, kind);
  const [mint]    = getTrancheMintPda(vault, kind);
  const [pool]    = getPoolPda(mint);
  const [pTRsv]   = getPoolTrancheReservePda(mint);
  const [pQRsv]   = getPoolQuoteReservePda(mint);
  const [lpMint]  = getLpMintPda(mint);
  return { kind, pda, mint, pool, trancheReserve: pTRsv, quoteReserve: pQRsv, lpMint };
});

console.log({
  programs: {
    core: PRISM_CORE_PROGRAM_ID.toBase58(),
    amm: PRISM_AMM_PROGRAM_ID.toBase58(),
  },
  tokens: {
    usdc: USDC_MINT.toBase58(),
  },
  vault: {
    config: config.toBase58(),
    vault: vault.toBase58(),
    reserve: reserve.toBase58(),
    lossBucket: lossBucket.toBase58(),
    loan: loan.toBase58(),
    creditEvent: creditEvent.toBase58(),
    collateral: collateral.toBase58(),
  },
  tranches: tranches.map((t) => ({
    kind: TrancheKind[t.kind],
    tranche: t.pda.toBase58(),
    mint: t.mint.toBase58(),
    pool: t.pool.toBase58(),
  })),
});

Account Sizes & Rent

Anchor accounts include an 8-byte discriminator. The on-chain layouts:
AccountSize (bytes)Rent (SOL, devnet)
GlobalConfig350~0.0026
Vault250~0.0019
Tranche132~0.0011
Loan135~0.0011
CreditEvent145~0.0011
IkaCollateral122~0.0010
AmmPool171~0.0014
These are rent-exempt by default (Anchor’s init constraint). The admin pays rent at initialize_* time and the lamports stay locked for the lifetime of the account.

Authority Model

Every signing requirement, in one place:
ResourceAuthorityNotes
initialize_global_configNew admin pubkeySet on first call, immutable thereafter
initialize_vaultconfig.adminEnforced via has_one = admin
initialize_trancheconfig.adminSame
initialize_loanconfig.adminSame
disburse_loanconfig.adminOptional IkaCollateral must be Locked
pause / unpauseconfig.adminEmergency switch
accrue_yieldconfig.admin OR allowlisted oraclePlus borrower co-signs to authorize the USDC pull
trigger_credit_eventconfig.admin OR allowlisted oracle
liquidate_ika_collateralconfig.adminVault must be Defaulted/Resolved
deposit / withdrawUserToken transfer authority is the user’s wallet
repay_loanThe exact loan.borrower pubkey
attach_ika_collateralThe exact loan.borrower pubkey
verify_ika_collateralAnyone (relayer-friendly)Validity proven by ed25519 precompile, not signer
release_ika_collateralAnyone (loan must be Repaid)
Tranche mint authorityTranche PDAOnly prism_core can mint/burn pTokens
Vault USDC reserve authorityVault PDAOnly prism_core can move reserve USDC
AMM pool reserves authorityAmmPool PDAOnly prism_amm can move pool reserves
LP mint authorityAmmPool PDAOnly prism_amm can mint/burn LP shares
oracle_allowlist lives in GlobalConfig.oracle_allowlist — up to 8 pubkeys allowed to call privileged read-only triggers.

Verifying On-Chain

Cross-check any address using the Solana CLI:
# Confirm a program is deployed
solana program show GGb2hHKWGxFT72wFDMtyLrqCj9yQaE8etpPTw1p26BKp --url devnet

# Inspect the GlobalConfig PDA
solana account 5tgMtuBABb6jM4mLVfQuPsJuFJWN82LuvmqeE5ATFgvo --url devnet --output json

# View the vault USDC reserve token balance
spl-token account-info <vault_reserve_pda> --url devnet
Or jump directly to Solana Explorer (devnet) and paste any address from the tables above.
These are devnet program IDs. They will be re-deployed for mainnet with a new upgrade authority. Never assume program IDs are stable across networks — always read them from the SDK constants or your environment configuration. Do not hard-code these into Rust programs that target mainnet.

Mainnet (Coming Soon)

Mainnet program IDs will be published here once:
  1. Programs are re-deployed under a hardware-wallet upgrade authority.
  2. Upgrade authority is rotated to a Squads multisig.
  3. Third-party audit is complete with all findings remediated.
  4. USDC mint references switch to mainnet (EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v).
Track progress in the project’s before-mainnet.md checklist.