{
"version": "0.3.15",
"name": "streak",
"instructions": [
{
"accounts": [
{
"docs": [
"Admin wallet; pays for account rent."
],
"isMut": true,
"isSigner": true,
"name": "payer"
},
{
"docs": [
"Treasury PDA (seeds: [b\"treasury\"])."
],
"isMut": true,
"isSigner": false,
"name": "treasury"
},
{
"docs": [
"USDC mint."
],
"isMut": false,
"isSigner": false,
"name": "mint"
},
{
"docs": [
"Treasury USDC ATA (created if missing)."
],
"isMut": true,
"isSigner": false,
"name": "treasuryAta"
},
{
"address": "11111111111111111111111111111111",
"isMut": false,
"isSigner": false,
"name": "systemProgram"
},
{
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"isMut": false,
"isSigner": false,
"name": "tokenProgram"
},
{
"address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
"isMut": false,
"isSigner": false,
"name": "ataProgram"
}
],
"args": [],
"discriminant": {
"type": "u8",
"value": 0
},
"docs": [
"One-time setup: creates Treasury PDA + treasury USDC ATA.",
"Caller must be ADMIN_ADDRESS."
],
"name": "initialize"
},
{
"accounts": [
{
"docs": [
"Wallet paying for tickets."
],
"isMut": true,
"isSigner": true,
"name": "user"
},
{
"docs": [
"User's USDC ATA (source of funds)."
],
"isMut": true,
"isSigner": false,
"name": "userAta"
},
{
"docs": [
"Treasury PDA — jackpot counters updated here."
],
"isMut": true,
"isSigner": false,
"name": "treasury"
},
{
"docs": [
"Treasury USDC ATA (destination of deposit)."
],
"isMut": true,
"isSigner": false,
"name": "treasuryAta"
},
{
"docs": [
"User PDA (seeds: [b\"ticket\", user_pubkey]); created on first purchase."
],
"isMut": true,
"isSigner": false,
"name": "credits"
},
{
"docs": [
"FEE_COLLECTOR USDC ATA — receives 5% team share."
],
"isMut": true,
"isSigner": false,
"name": "feeCollectorAta"
},
{
"docs": [
"USDC mint."
],
"isMut": false,
"isSigner": false,
"name": "mint"
},
{
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"isMut": false,
"isSigner": false,
"name": "tokenProgram"
},
{
"address": "11111111111111111111111111111111",
"isMut": false,
"isSigner": false,
"name": "systemProgram"
}
],
"args": [
{
"docs": [
"µUSDC to spend (6 decimals)."
],
"name": "amount",
"type": "u64"
}
],
"discriminant": {
"type": "u8",
"value": 1
},
"docs": [
"Purchase gaming credits (tickets) with USDC.",
"Transfers `amount` µUSDC from user ATA → treasury ATA; splits revenue on-chain;",
"emits TicketPurchased. The indexer reads that event to credit user_balances."
],
"name": "buyTicket"
},
{
"accounts": [
{
"docs": [
"Must be EXECUTOR_ADDRESS."
],
"isMut": true,
"isSigner": true,
"name": "executor"
},
{
"docs": [
"Executor's USDC ATA (source)."
],
"isMut": true,
"isSigner": false,
"name": "executorAta"
},
{
"isMut": true,
"isSigner": false,
"name": "treasury"
},
{
"isMut": true,
"isSigner": false,
"name": "treasuryAta"
},
{
"isMut": true,
"isSigner": false,
"name": "feeCollectorAta"
},
{
"isMut": false,
"isSigner": false,
"name": "mint"
},
{
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"isMut": false,
"isSigner": false,
"name": "tokenProgram"
}
],
"args": [
{
"docs": [
"µUSDC to route."
],
"name": "amount",
"type": "u64"
}
],
"discriminant": {
"type": "u8",
"value": 2
},
"docs": [
"Route trading-fee proceeds into the treasury and split on-chain.",
"Only EXECUTOR_ADDRESS may sign.",
"Transfers `amount` µUSDC executor_ata → treasury_ata; updates Treasury counters;",
"emits FeesRouted."
],
"name": "adminRouteFees"
},
{
"accounts": [
{
"docs": [
"Must be EXECUTOR_ADDRESS."
],
"isMut": true,
"isSigner": true,
"name": "executor"
},
{
"isMut": true,
"isSigner": false,
"name": "treasury"
},
{
"isMut": true,
"isSigner": false,
"name": "treasuryAta"
},
{
"docs": [
"Winner's USDC ATA."
],
"isMut": true,
"isSigner": false,
"name": "recipientAta"
},
{
"isMut": false,
"isSigner": false,
"name": "mint"
},
{
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"isMut": false,
"isSigner": false,
"name": "tokenProgram"
}
],
"args": [
{
"docs": [
"µUSDC to pay out."
],
"name": "amount",
"type": "u64"
},
{
"docs": [
"Market series (0 = BTC/USD)."
],
"name": "seriesId",
"type": "u16"
},
{
"docs": [
"5-min period: floor(unix_ts / 300)."
],
"name": "period",
"type": "u64"
}
],
"discriminant": {
"type": "u8",
"value": 3
},
"docs": [
"Pay `amount` µUSDC from treasury ATA → recipient_ata.",
"Used for winner payouts and jackpot distributions.",
"Only EXECUTOR_ADDRESS may sign. Emits Paid."
],
"name": "adminPayout"
},
{
"accounts": [
{
"isMut": true,
"isSigner": true,
"name": "executor"
},
{
"isMut": true,
"isSigner": false,
"name": "treasury"
},
{
"isMut": false,
"isSigner": false,
"name": "treasuryAta"
},
{
"isMut": false,
"isSigner": false,
"name": "mint"
},
{
"address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"isMut": false,
"isSigner": false,
"name": "tokenProgram"
},
{
"address": "11111111111111111111111111111111",
"isMut": false,
"isSigner": false,
"name": "systemProgram"
}
],
"args": [
{
"name": "dailyJackpot",
"type": "u64"
},
{
"name": "weeklyJackpot",
"type": "u64"
},
{
"name": "buyback",
"type": "u64"
},
{
"name": "stabilityReserve",
"type": "u64"
}
],
"discriminant": {
"type": "u8",
"value": 5
},
"docs": [
"Executor-only: set treasury pool counters (reconcile / weekly settlement).",
"Enforces daily + weekly + buyback + stability <= vault USDC."
],
"name": "adminSetTreasuryPools"
}
],
"accounts": [
{
"discriminator": [
1,
0,
0,
0,
0,
0,
0,
0
],
"docs": [
"Protocol USDC custodian and jackpot counters; one global PDA.",
"PDA seeds: [b\"treasury\"]"
],
"name": "Treasury",
"type": {
"fields": [
{
"docs": [
"Daily jackpot pool in µUSDC."
],
"name": "dailyJackpot",
"type": "u64"
},
{
"docs": [
"Weekly jackpot pool in µUSDC."
],
"name": "weeklyJackpot",
"type": "u64"
},
{
"docs": [
"Buyback reserve in µUSDC."
],
"name": "buyback",
"type": "u64"
},
{
"docs": [
"Pyth BTC/USD price mantissa at last settlement (raw, apply expo)."
],
"name": "lastClosePrice",
"type": "i64"
},
{
"docs": [
"Pyth exponent for lastClosePrice (typically -8 for BTC/USD)."
],
"name": "lastCloseExpo",
"type": "i32"
},
{
"docs": [
"Alignment padding."
],
"name": "padClose",
"type": {
"array": [
"u8",
4
]
}
},
{
"docs": [
"publish_time from Pyth feed at last settlement."
],
"name": "lastClosePublishTime",
"type": "i64"
},
{
"docs": [
"Excess weekly accrual + trading-fee slice."
],
"name": "stabilityReserve",
"type": "u64"
}
],
"kind": "struct"
}
},
{
"discriminator": [
2,
0,
0,
0,
0,
0,
0,
0
],
"docs": [
"Per-wallet gaming credit account; created on first BuyTicket.",
"PDA seeds: [b\"ticket\", user_pubkey]"
],
"name": "User",
"type": {
"fields": [
{
"docs": [
"Wallet that owns this account."
],
"name": "user",
"type": "publicKey"
},
{
"docs": [
"On-chain ticket credits from BuyTicket."
],
"name": "balance",
"type": "u64"
},
{
"docs": [
"Lifetime µUSDC spent on tickets (never decreases)."
],
"name": "totalPurchased",
"type": "u64"
},
{
"docs": [
"Legacy field — unused (bets are server-authoritative)."
],
"name": "lastBetPeriod",
"type": "u64"
}
],
"kind": "struct"
}
}
],
"types": [],
"events": [
{
"docs": [
"Emitted once by Initialize."
],
"fields": [
{
"docs": [
"Admin wallet that called Initialize."
],
"index": false,
"name": "admin",
"type": "publicKey"
}
],
"name": "Initialized"
},
{
"docs": [
"Emitted by BuyTicket.",
"Indexer reads this to credit the user's off-chain spendable balance."
],
"fields": [
{
"docs": [
"Wallet that purchased credits."
],
"index": true,
"name": "user",
"type": "publicKey"
},
{
"docs": [
"µUSDC spent (gross, before revenue split)."
],
"index": false,
"name": "amount",
"type": "u64"
}
],
"name": "TicketPurchased"
},
{
"docs": [
"Emitted by AdminRouteFees."
],
"fields": [
{
"docs": [
"Total µUSDC routed."
],
"index": false,
"name": "amount",
"type": "u64"
},
{
"index": false,
"name": "dailyShare",
"type": "u64"
},
{
"index": false,
"name": "weeklyShare",
"type": "u64"
},
{
"index": false,
"name": "buybackShare",
"type": "u64"
},
{
"index": false,
"name": "teamShare",
"type": "u64"
}
],
"name": "FeesRouted"
},
{
"docs": [
"Emitted by AdminPayout. Bot reads this to confirm payouts in DB."
],
"fields": [
{
"docs": [
"Winner's wallet."
],
"index": true,
"name": "recipient",
"type": "publicKey"
},
{
"docs": [
"µUSDC paid out."
],
"index": false,
"name": "amount",
"type": "u64"
},
{
"index": false,
"name": "seriesId",
"type": "u16"
},
{
"index": false,
"name": "period",
"type": "u64"
}
],
"name": "Paid"
}
],
"errors": [
{
"code": 0,
"msg": "Invalid instruction data",
"name": "InvalidInstruction"
},
{
"code": 1,
"msg": "Program already initialized",
"name": "AlreadyInitialized"
},
{
"code": 2,
"msg": "Signer is not authorized for this instruction",
"name": "Unauthorized"
},
{
"code": 3,
"msg": "Account does not match expected PDA",
"name": "BadPda"
},
{
"code": 4,
"msg": "Program not initialized — call Initialize first",
"name": "NotInitialized"
},
{
"code": 5,
"msg": "Arithmetic overflow",
"name": "Overflow"
},
{
"code": 6,
"msg": "Mint mismatch",
"name": "BadMint"
},
{
"code": 9,
"msg": "Treasury balance insufficient for payout",
"name": "InsufficientTreasury"
},
{
"code": 10,
"msg": "Deposit amount must be > 0",
"name": "ZeroAmount"
},
{
"code": 21,
"msg": "Price account owner is not the Pyth program",
"name": "PythBadOwner"
},
{
"code": 22,
"msg": "Could not parse Pyth price account",
"name": "PythInvalidAccount"
},
{
"code": 23,
"msg": "Pyth price is stale (exceeds PYTH_MAX_PRICE_AGE_SECS)",
"name": "OraclePriceStale"
},
{
"code": 24,
"msg": "Could not normalize oracle prices for comparison",
"name": "OracleNormalize"
},
{
"code": 47,
"msg": "Genesis price not set — call Initialize to seed the treasury price chain",
"name": "GenesisNotSet"
}
],
"metadata": {
"address": "9s4fFVusCVuuNQpfrmVp6H9z2E5ykqPiDBZvTFWhedzz",
"bpfUpgradeableLoader": "BPFLoaderUpgradeab1e11111111111111111111111",
"origin": "steel"
}
}