Instruction
set_quote_control_mint_reserves
Hidden admin instruction (absent from the public IDL) that overwrites the stored "reserves" number for one quote mint listed in pump.fun's QuoteControl PDA (seeds "quote-control"). Only the QuoteControl reserves admin, the QuoteControl admin, or the global pump.fun authority (Global.authority) can sign it; anyone else gets custom error 6000, and a mint that isn't already on the list fails with error 6068. Any u64 value is accepted with no checks. It emits an event with the old and new values and moves no SOL or tokens. This handler does not show how the stored reserves value is used later.
- Discriminator
- 0x74dc6b53bf2c2049
- Calls in the sample
- 0
- Reproduced, seen by the agent
- —
- Reproduced, never shown to the agent
- —
25ba1mov64 r6, r525ba2mov64 r8, r425ba3mov64 r9, r325ba4mov64 r7, r225ba5stxdw [r10-2768], r125ba6lddw r1, 0x1ae7b8 ; "Instruction: SetQuoteControlMintReserves"25ba8mov64 r2, 0x2825ba9call sol_log_25baaldxdw r3, [r6-4088]25babjlt r3, 0x20, +127 ; -> 25c2b25bacldxdw r2, [r6-4096]25badldxdw r1, [r2+6]25baeldxb r4, [r2+14]25bafstxb [r10-1344], r425bb0stxdw [r10-1352], r125bb1and64 r3, -0x825bb2jeq r3, 0x20, +120 ; -> 25c2b25bb3ldxdw r3, [r10-1351]25bb4ldxdw r4, [r2+32]25bb5stxdw [r10-2776], r425bb6ldxh r4, [r2+4]25bb7stxh [r10-2684], r425bb8ldxw r5, [r2+0]25bb9stxw [r10-2688], r525bbaldxb r0, [r2+31]25bbbldxdw r6, [r2+23]25bbcldxdw r2, [r2+15]25bbdstxw [r10-32], r525bbestxh [r10-28], r425bbfstxdw [r10-25], r325bc0stxb [r10-26], r125bc1stxdw [r10-17], r225bc2stxdw [r10-9], r625bc3stxb [r10-1336], r025bc4stxb [r10-1], r025bc5stb [r10-2689], 0xff25bc6sth [r10-2691], 0xffff25bc7stxdw [r10-2680], r825bc8stxdw [r10-2688], r925bc9mov64 r1, r1025bcaadd64 r1, -0xa8325bcbstxdw [r10-4088], r125bccmov64 r1, r1025bcdadd64 r1, -0x54825bcemov64 r3, r1025bcfadd64 r3, -0xa8025bd0mov64 r5, r1025bd1mov64 r2, r725bd2call fn_1b71f25bd3ldxdw r8, [r10-1336]25bd4ldxdw r6, [r10-1344]25bd5ldxdw r9, [r10-1352]25bd6lddw r1, 0x800000000000000025bd8jeq r9, r1, +101 ; -> 25c3e25bd9mov64 r1, r1025bdaadd64 r1, -0xa5825bdbmov64 r2, r1025bdcadd64 r2, -0x53025bddmov64 r3, 0x51025bdecall fn_3536725bdfstxdw [r10-2656], r825be0stxdw [r10-2664], r625be1stxdw [r10-2672], r925be2ldxh r1, [r10-2691]25be3stxh [r10-1320], r125be4ldxb r1, [r10-2689]25be5stxb [r10-1318], r125be6ldxdw r1, [r10-2680]25be7stxdw [r10-1328], r125be8ldxdw r1, [r10-2688]25be9stxdw [r10-1336], r125beamov64 r1, r1025bebadd64 r1, -0xa7025becstxdw [r10-1344], r125bedstxdw [r10-1352], r725beemov64 r1, r1025befadd64 r1, -0xa9825bf0mov64 r2, r1025bf1add64 r2, -0x54825bf2mov64 r3, r1025bf3add64 r3, -0x2025bf4ldxdw r4, [r10-2776]25bf5call fn_0c6d625bf6ldxdw r6, [r10-2712]25bf7jeq r6, 0x2, +1 ; -> 25bf925bf8ja +73 ; -> 25c4225bf9mov64 r1, r1025bfaadd64 r1, -0xaa825bfbmov64 r2, r1025bfcadd64 r2, -0xa7025bfdlddw r3, 0x1adff925bffmov64 r4, r725c00call fn_00d6125c01mov64 r6, 0x225c02ldxdw r2, [r10-2728]25c03jeq r2, 0x2, +9 ; -> 25c0d25c04ldxdw r3, [r10-2720]25c05mov64 r1, r1025c06add64 r1, -0xab825c07lddw r4, 0x1adefd ; "quote_control"25c09mov64 r5, 0xd25c0acall fn_005a925c0bldxdw r8, [r10-2736]25c0cldxdw r6, [r10-2744]25c0dldxdw r1, [r10-2528]25c0eldxdw r2, [r10-2536]25c0fldxdw r3, [r2+0]25c10add64 r3, -0x125c11stxdw [r2+0], r325c12jne r3, 0x0, +3 ; -> 25c1625c13ldxdw r3, [r2+8]25c14add64 r3, -0x125c15stxdw [r2+8], r325c16ldxdw r2, [r1+0]25c17add64 r2, -0x125c18stxdw [r1+0], r225c19jne r2, 0x0, +3 ; -> 25c1d25c1aldxdw r2, [r1+8]25c1badd64 r2, -0x125c1cstxdw [r1+8], r225c1dldxdw r1, [r10-2480]25c1eldxdw r2, [r10-2488]25c1fldxdw r3, [r2+0]25c20add64 r3, -0x125c21stxdw [r2+0], r325c22jne r3, 0x0, +3 ; -> 25c2625c23ldxdw r3, [r2+8]25c24add64 r3, -0x125c25stxdw [r2+8], r325c26ldxdw r2, [r1+0]25c27add64 r2, -0x125c28stxdw [r1+0], r225c29jne r2, 0x0, +20 ; -> 25c3e25c2aja +53 ; -> 25c6025c2blddw r1, 0x1b3c6025c2dcall fn_33e7125c2emov64 r1, r025c2fand64 r1, 0x325c30mov64 r2, r125c31add64 r2, -0x225c32jlt r2, 0x2, +5 ; -> 25c3825c33jeq r1, 0x0, +4 ; -> 25c3825c34ldxdw r1, [r0-1]25c35ldxdw r2, [r0+7]25c36ldxdw r2, [r2+0]25c37callx r225c38mov64 r1, r1025c39add64 r1, -0xac825c3amov64 r2, 0x6625c3bcall fn_32b0925c3cldxdw r8, [r10-2752]25c3dldxdw r6, [r10-2760]25c3eldxdw r1, [r10-2768]25c3fstxdw [r1+8], r825c40stxdw [r1+0], r625c41exit25c42ldxdw r8, [r10-2704]25c43ldxdw r1, [r10-2528]25c44ldxdw r2, [r10-2536]25c45ldxdw r3, [r2+0]25c46add64 r3, -0x125c47stxdw [r2+0], r325c48jne r3, 0x0, +3 ; -> 25c4c25c49ldxdw r3, [r2+8]25c4aadd64 r3, -0x125c4bstxdw [r2+8], r325c4cldxdw r2, [r1+0]25c4dadd64 r2, -0x125c4estxdw [r1+0], r225c4fjne r2, 0x0, +3 ; -> 25c5325c50ldxdw r2, [r1+8]25c51add64 r2, -0x125c52stxdw [r1+8], r225c53ldxdw r1, [r10-2480]25c54ldxdw r2, [r10-2488]25c55ldxdw r3, [r2+0]25c56add64 r3, -0x125c57stxdw [r2+0], r325c58jne r3, 0x0, +3 ; -> 25c5c25c59ldxdw r3, [r2+8]25c5aadd64 r3, -0x125c5bstxdw [r2+8], r325c5cldxdw r2, [r1+0]25c5dadd64 r2, -0x125c5estxdw [r1+0], r225c5fjne r2, 0x0, -34 ; -> 25c3e25c60ldxdw r2, [r1+8]25c61add64 r2, -0x125c62stxdw [r1+8], r225c63ja -38 ; -> 25c3e
// discriminator 74dc6b53bf2c2049 (NOT in the public IDL)// args (borsh): mint: Pubkey (data[8..40]), reserves: u64 (data[40..48])// pc 25bab / 25bb2: data shorter than 32 / 40 bytes -> InstructionDidNotDeserialize (102)#[derive(Accounts)] // fn_1b71f, declaration order as consumedpub struct SetQuoteControlMintReserves<'info> {pub authority: Signer<'info>, // fn_02590 -> 3010 AccountNotSigner#[account(seeds = [b"global"], bump)] // Account<Global>, pc 1b84f -> 2006 ConstraintSeeds "global"pub global: Account<'info, Global>,#[account(mut, seeds = [b"quote-control"], bump)] // pc 1b873 -> 2006 "quote_control"; pc 1b902 !is_writable -> 2000 ConstraintMutpub quote_control: Account<'info, QuoteControl>,/// CHECK: seeds = [b"__event_authority"] // pc 1b923 -> 2006 "event_authority"pub event_authority: AccountInfo<'info>,pub program: Program<'info, Pump>, // 3008-ish "program" if missing/wrong}// QuoteControl on-chain layout (borsh, after 8-byte discriminator):// [8..40) admin (Pubkey) -- names inferred from sibling instructions// [40..72) reserves_admin (Pubkey)// [72..104) <third pubkey> (not used here)// [104..) mints: Vec<(mint: Pubkey, reserves: u64)> (u32 len, 40-byte entries)pub fn set_quote_control_mint_reserves(ctx, mint: Pubkey, reserves: u64) -> Result<()> {msg!("Instruction: SetQuoteControlMintReserves");// access control (inside try_accounts, pc 1b7d3..1b806)let a = ctx.accounts.authority.key();require!(a == quote_control.reserves_admin // memcmp #1 (bytes 40..72)|| a == quote_control.admin // memcmp #2 (bytes 8..40)|| a == global.authority, // memcmp #3 (Global field)ErrorCode(6000) /* "authority" */);// fn_0ccc6 (quote_control/state.rs)let entry = quote_control.mints.iter_mut().find(|e| e.mint == mint).ok_or(ErrorCode(6068))?; // 0x17b4, state.rs line 113let old_reserves = entry.reserves;entry.reserves = reserves; // no bounds / sanity check on the value// emit_cpi! (fn_0c6d6)let ts = Clock::get()?.unix_timestamp;let event = QuoteControlMintReservesSet { // discriminator a9 43 27 6d 66 86 b6 e8quote_control: quote_control.key(),authority: a,mint,old_reserves,new_reserves: reserves,timestamp: ts,}; // 128 bytesinvoke_signed(Instruction { program_id: crate::ID,accounts: [event_authority (signer, read-only)],data: [0xe4,0x45,0xa5,0x2e,0x51,0xcb,0x9a,0x1d] ++ event }, // 136 bytes&[&[b"__event_authority", &[bump]]]);// exit: quote_control re-serialized (fn_00d61). No SOL or token movement.Ok(())}
Replay model
The executable model the agent wrote. Every tally above comes from running it against mainnet.
// no model entered yet
Accounts
Not published. The accounts and arguments were recovered from the bytecode; see the reconstruction.
program 6EF8rr…BEwF6P