Skip to content
DEMO

Vaults and claims are simulated.

What is real?

Docs · Security

Security model

What protects a streamer's vault, what we can and cannot do, and what you have to trust us for. Written for people who will check.

  1. 01

    Verify with Reclaimexplicit proof · method 4

    You log in to Twitch or Kick inside Reclaim's flow. We receive only a zero-knowledge proof of your user ID. No access is granted to us.

    Twitch · Kick

  2. 02

    Sign in with Solanaexplicit proof · method 5

    You sign a free, readable message with the wallet that owns your pump.fun profile. The message names your payout wallet. No transaction, no funds move.

    pump.fun

  3. 03

    Public payout addresspassive evidence · method 2

    A Solana address you already show in your Twitch or Kick channel description (or a tip page it links to), or the wallet shown on your pump.fun profile.

    All three

  4. 04

    Channel codeexplicit proof · method 3

    A short code (like STK-7K3F) you or your manager put in the stream title or channel bio for a moment.

    Twitch · Kick

  5. 05

    Loginexplicit proof · method 1

    Log in with Twitch or Kick. We read your user ID once and revoke the token.

    Twitch · Kick

  • Attestor key in KMS

    On mainnet the Ed25519 attestor key lives in a cloud KMS and never leaves the HSM. Rotating it takes a public proposal and a 48-hour timelock.

    Planned before mainnet
  • Upgrade authority: multisig with timelock

    The program's upgrade authority is a Squads multisig behind a timelock, so no single key can change the code and every upgrade is visible in advance. The plan is to make the program immutable after audits.

    Planned before mainnet
  • Per-vault rate limits

    Withdrawals and auto-forwards are capped per vault per rolling 24 hours, with a minimum interval, so even a bug or a compromised key cannot drain a vault at once.

    In the program spec
  • Public event log

    Every attestation and every binding change (bound, pending, frozen, unfrozen, rebind) is published with its hash and time, and emitted as an on-chain event.

    Site log live (DEMO)
  • Open source, verifiable build

    The program's source will be public, built reproducibly with solana-verify, and the build hash published here so anyone can check that the deployed bytecode matches the code.

    Planned before mainnet
Attestation message fields
FieldOffsetBytesMeaning
domain_tag016ASCII "STRMFEES:ATTEST\0"
version161layout version = 2
kind1711 claim, 2 rebind, 3 bind_payout, 4 freeze_payout
cluster1810 = mainnet, 1 = devnet, 2 = localnet
program_id1932vault program
platform5111 twitch, 2 kick, 3 pump.fun
user_id_len5211..32
user_id5332ASCII, right-padded 0x00 (decimal; pump.fun: 32-hex UUID)
vault8532streamer vault PDA
recipient11732payout wallet (rebind: new wallet)
quote_mint14932System Program id = native SOL
nonce1818u64 LE, must equal vault.claim_nonce
expires_at1898i64 LE unix seconds (issued + 300)
issued_at1978i64 LE unix seconds
method20511 oauth, 2 public_address, 3 channel_code, 4 reclaim_zktls, 5 wallet_signature
evidence_hash20632sha256 of the canonical evidence record (zeros for oauth)
reserved2386zeros
total244244 bytes, signed as-is with Ed25519
Security contact: coming soon. Please do not test against real users' vaults or disclose publicly before a fix ships.