Skip to content
COMING SOON

Figures here are a preview.

What is real?

Verify

Check our math. In your own browser.

Everything on this page runs in your browser. It derives addresses with the same code the program uses and reads them from a public Solana RPC, not from our API.

01Streamer vaultDEMO

A streamer's vault is a program-derived address from three seeds: "streamer", the platform byte and their numeric user ID. Same inputs, same address, on any machine.

Platform
  1. 01Build the seeds

    seed 0"streamer"73 74 72 65 61 6d 65 72
    seed 1platform u8 = 2 (kick)02
    seed 2user_id "70000106"37 30 30 30 30 31 30 36
    const seeds = [
      utf8("streamer"),
      Uint8Array.of(2),  // kick
      utf8("70000106"),  // decimal ASCII
    ];
  2. 02Take the program id

    program idMockVau1t1111111111111111111111111111111111
    32 bytes05 54 53 53 21 5f c8 89 c9 1e ac c4 9c 54 4f 49 b9 f5 7c a0 52 c4 fa 65 91 58 5e 8c 00 00 00 00

    DEMO Placeholder program id until the vault program is deployed.

    const programId = bs58.decode(
      "MockVau1t1111111111111111111111111111111111"
    ); // 32 bytes
  3. 03Search the bump from 255 down

    A PDA must be off the ed25519 curve, so nobody can hold a private key for it. Bump 255 landed on the curve and was skipped.

    bump254 (try 2)
    sha256 input · 71 bytes

    73 74 72 65 61 6d 65 72 02 37 30 30 30 30 31 30 36 fe 05 54 53 53 21 5f c8 89 c9 1e ac c4 9c 54 4f 49 b9 f5 7c a0 52 c4 fa 65 91 58 5e 8c 00 00 00 00 50 72 6f 67 72 61 6d 44 65 72 69 76 65 64 41 64 64 72 65 73 73

    for (let bump = 255; bump >= 0; bump--) {
      const h = sha256(concat(...seeds, [bump],
        programId, utf8("ProgramDerivedAddress")));
      if (!isOnEd25519Curve(h)) return { pda: h, bump };
    }
  4. 04Result: the vault address

    CyxwzLS3mseedXb3qU21XkU4TWdZANsLXURpAfZuEx6L

    Matches the vault we list for EmberCourier.

    // = findProgramAddressSync(seeds, programId)
    pda === "CyxwzLS3mseedXb3qU21Xk…"
  5. 05Read it from a public RPC

    Cluster

    solana-rpc.publicnode.com

    await fetch("https://solana-rpc.publicnode.com", {
      method: "POST",
      body: JSON.stringify({ jsonrpc: "2.0", id: 1,
        method: "getAccountInfo",
        params: [pda, { encoding: "base64" }] }),
    });

02Real-chain check: pump.fun fee tiersLIVE DATA

The same technique on an account that exists today. Your browser derives pump.fun's fee_config address, reads it from solana-rpc.publicnode.com and decodes the creator-fee tiers.

Fee config of
  1. 01Derive pump.fun's fee_config address

    seed 0"fee_config"66 65 65 5f 63 6f 6e 66 69 67
    seed 1pump_amm program pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA
    programpfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
    result5PHirr8joyTMp9JMm6nW7hNDVyEYdkzDqazxPD7RaTjx (bump 255)
    findProgramAddressSync(
      [utf8("fee_config"), bs58.decode(PUMP_AMM_PROGRAM)],
      PUMP_FEES_PROGRAM,
    );
  2. 02Read it from the public mainnet RPC

    Reading the public mainnet RPC…

    getAccountInfo("5PHirr8j…",
      { encoding: "base64" })
    // check: owner === pump_fees program
  3. 03Decode the creator-fee tiers

    Waiting for the account data.

    let o = 8 + 1 + 32 + 24;   // disc, bump, admin, flat fees
    const n = view.getUint32(o, true); o += 4;
    for (let i = 0; i < n; i++) {
      const threshold = u128(o);      // market cap, lamports
      const [lp, protocol, creator] = u64x3(o + 16);  // bps
      o += 40;
    }

03Attestation decoder

A claim or payout binding needs a 244-byte message (layout v2) signed by our attestor key. Paste one to see every field and check the signature, or generate a sample.

import { ed25519 } from "@noble/curves/ed25519";
const ok = ed25519.verify(signature, message, attestorPubkey);

Paste a message, or generate a sample, to see its fields.