Instruction
set_quote_control_reserves_admin
Hidden admin instruction (not in the public IDL) that replaces the `reserves_admin` key stored in pump.fun's QuoteControl PDA (seeds "quote-control"). Only the current QuoteControl admin or the global pump.fun authority (Global.authority) can call it; any other signer fails with custom error 6000. It accepts any pubkey as the new value without checking it, emits an event recording the old and new key, and moves no SOL or tokens. The instruction never reads the reserves admin field itself, so what that role controls is not visible here.
- Discriminator
- 0xa1c3dea5e165c03e
- Calls in the sample
- 0
- Reproduced, seen by the agent
- —
- Reproduced, never shown to the agent
- —
25ae0mov64 r6, r525ae1mov64 r9, r425ae2mov64 r8, r325ae3mov64 r7, r225ae4stxdw [r10-2768], r125ae5lddw r1, 0x1ae78f ; "Instruction: SetQuoteControlReservesAdmin"25ae7mov64 r2, 0x2925ae8call sol_log_25ae9ldxdw r1, [r6-4088]25aeajlt r1, 0x20, +125 ; -> 25b6825aebldxdw r1, [r6-4096]25aecldxdw r2, [r1+6]25aedldxb r3, [r1+14]25aeestxb [r10-1344], r325aefldxh r3, [r1+0]25af0stxh [r10-32], r325af1ldxb r3, [r1+2]25af2stxb [r10-30], r325af3ldxh r3, [r1+3]25af4ldxb r4, [r1+5]25af5stxdw [r10-1352], r225af6ldxdw r5, [r10-1351]25af7stxdw [r10-25], r525af8lsh64 r4, 0x1025af9or64 r3, r425afalsh64 r2, 0x1825afbor64 r2, r325afcstxw [r10-29], r225afdldxdw r2, [r1+23]25afestxdw [r10-9], r225affldxdw r2, [r1+15]25b00stxdw [r10-17], r225b01ldxb r1, [r1+31]25b02stxb [r10-1], r125b03stb [r10-2689], 0xff25b04sth [r10-2691], 0xffff25b05stxdw [r10-2680], r925b06stxdw [r10-2688], r825b07mov64 r1, r1025b08add64 r1, -0xa8325b09stxdw [r10-4088], r125b0amov64 r1, r1025b0badd64 r1, -0x54825b0cmov64 r3, r1025b0dadd64 r3, -0xa8025b0emov64 r5, r1025b0fmov64 r2, r725b10call fn_1b98825b11ldxdw r8, [r10-1336]25b12ldxdw r6, [r10-1344]25b13ldxdw r9, [r10-1352]25b14lddw r1, 0x800000000000000025b16jeq r9, r1, +100 ; -> 25b7b25b17mov64 r1, r1025b18add64 r1, -0xa5825b19mov64 r2, r1025b1aadd64 r2, -0x53025b1bmov64 r3, 0x51025b1ccall fn_3536725b1dstxdw [r10-2656], r825b1estxdw [r10-2664], r625b1fstxdw [r10-2672], r925b20ldxh r1, [r10-2691]25b21stxh [r10-1320], r125b22ldxb r1, [r10-2689]25b23stxb [r10-1318], r125b24ldxdw r1, [r10-2680]25b25stxdw [r10-1328], r125b26ldxdw r1, [r10-2688]25b27stxdw [r10-1336], r125b28mov64 r1, r1025b29add64 r1, -0xa7025b2astxdw [r10-1344], r125b2bstxdw [r10-1352], r725b2cmov64 r1, r1025b2dadd64 r1, -0xa9825b2emov64 r2, r1025b2fadd64 r2, -0x54825b30mov64 r3, r1025b31add64 r3, -0x2025b32call fn_0c86825b33ldxdw r6, [r10-2712]25b34jeq r6, 0x2, +1 ; -> 25b3625b35ja +73 ; -> 25b7f25b36mov64 r1, r1025b37add64 r1, -0xaa825b38mov64 r2, r1025b39add64 r2, -0xa7025b3alddw r3, 0x1adff925b3cmov64 r4, r725b3dcall fn_00d6125b3emov64 r6, 0x225b3fldxdw r2, [r10-2728]25b40jeq r2, 0x2, +9 ; -> 25b4a25b41ldxdw r3, [r10-2720]25b42mov64 r1, r1025b43add64 r1, -0xab825b44lddw r4, 0x1adefd ; "quote_control"25b46mov64 r5, 0xd25b47call fn_005a925b48ldxdw r8, [r10-2736]25b49ldxdw r6, [r10-2744]25b4aldxdw r1, [r10-2528]25b4bldxdw r2, [r10-2536]25b4cldxdw r3, [r2+0]25b4dadd64 r3, -0x125b4estxdw [r2+0], r325b4fjne r3, 0x0, +3 ; -> 25b5325b50ldxdw r3, [r2+8]25b51add64 r3, -0x125b52stxdw [r2+8], r325b53ldxdw r2, [r1+0]25b54add64 r2, -0x125b55stxdw [r1+0], r225b56jne r2, 0x0, +3 ; -> 25b5a25b57ldxdw r2, [r1+8]25b58add64 r2, -0x125b59stxdw [r1+8], r225b5aldxdw r1, [r10-2480]25b5bldxdw r2, [r10-2488]25b5cldxdw r3, [r2+0]25b5dadd64 r3, -0x125b5estxdw [r2+0], r325b5fjne r3, 0x0, +3 ; -> 25b6325b60ldxdw r3, [r2+8]25b61add64 r3, -0x125b62stxdw [r2+8], r325b63ldxdw r2, [r1+0]25b64add64 r2, -0x125b65stxdw [r1+0], r225b66jne r2, 0x0, +20 ; -> 25b7b25b67ja +53 ; -> 25b9d25b68lddw r1, 0x1b3c6025b6acall fn_33e7125b6bmov64 r1, r025b6cand64 r1, 0x325b6dmov64 r2, r125b6eadd64 r2, -0x225b6fjlt r2, 0x2, +5 ; -> 25b7525b70jeq r1, 0x0, +4 ; -> 25b7525b71ldxdw r1, [r0-1]25b72ldxdw r2, [r0+7]25b73ldxdw r2, [r2+0]25b74callx r225b75mov64 r1, r1025b76add64 r1, -0xac825b77mov64 r2, 0x6625b78call fn_32b0925b79ldxdw r8, [r10-2752]25b7aldxdw r6, [r10-2760]25b7bldxdw r1, [r10-2768]25b7cstxdw [r1+8], r825b7dstxdw [r1+0], r625b7eexit25b7fldxdw r8, [r10-2704]25b80ldxdw r1, [r10-2528]25b81ldxdw r2, [r10-2536]25b82ldxdw r3, [r2+0]25b83add64 r3, -0x125b84stxdw [r2+0], r325b85jne r3, 0x0, +3 ; -> 25b8925b86ldxdw r3, [r2+8]25b87add64 r3, -0x125b88stxdw [r2+8], r325b89ldxdw r2, [r1+0]25b8aadd64 r2, -0x125b8bstxdw [r1+0], r225b8cjne r2, 0x0, +3 ; -> 25b9025b8dldxdw r2, [r1+8]25b8eadd64 r2, -0x125b8fstxdw [r1+8], r225b90ldxdw r1, [r10-2480]25b91ldxdw r2, [r10-2488]25b92ldxdw r3, [r2+0]25b93add64 r3, -0x125b94stxdw [r2+0], r325b95jne r3, 0x0, +3 ; -> 25b9925b96ldxdw r3, [r2+8]25b97add64 r3, -0x125b98stxdw [r2+8], r325b99ldxdw r2, [r1+0]25b9aadd64 r2, -0x125b9bstxdw [r1+0], r225b9cjne r2, 0x0, -34 ; -> 25b7b25b9dldxdw r2, [r1+8]25b9eadd64 r2, -0x125b9fstxdw [r1+8], r225ba0ja -38 ; -> 25b7b
// discriminator a1c3dea5e165c03e — NOT in the published IDL// args: new_reserves_admin: Pubkey (ix data must be >= 8+32 bytes, else InstructionDidNotDeserialize)#[account(discriminator = c9a2d5c1ee23f438)] // seeds ["quote-control"]pub struct QuoteControl {pub admin: Pubkey, // data[8..40] (checked against signer below)pub reserves_admin: Pubkey, // data[40..72] (field changed by this ix)pub third_key: Pubkey, // data[72..104] (role not seen in this handler)pub entries: Vec<[u8; 40]>, // u32 len @104, 40-byte entries (likely mint + config)}#[event_cpi]#[derive(Accounts)]pub struct SetQuoteControlReservesAdmin<'info> {pub authority: Signer<'info>, // fn_02590, error acct "authority"#[account(seeds = [b"global"], bump)] // ConstraintSeeds(2006) "global"pub global: Account<'info, Global>,#[account(mut, seeds = [b"quote-control"], bump)] // ConstraintMut(2000) / ConstraintSeeds(2006)pub quote_control: Account<'info, QuoteControl>, // owner == program, disc check// event_authority: seeds ["__event_authority"] (ConstraintSeeds), program}// fn_1b988 pc 1ba3c..1ba6arequire!(authority.key() == quote_control.admin // memcmp #1|| authority.key() == global.authority, // memcmp #2 (Global data[9..41])PumpError(6000) /* custom error code 0, account "authority" */);pub fn set_quote_control_reserves_admin(ctx, new_reserves_admin: Pubkey) -> Result<()> {msg!("Instruction: SetQuoteControlReservesAdmin");let qc = &mut ctx.accounts.quote_control;let old_reserves_admin = qc.reserves_admin; // pc c86cqc.reserves_admin = new_reserves_admin; // pc c875 (no validation of the new key)let ts = Clock::get()?.unix_timestamp; // fn_32dcc// event disc 0x21a95c57b6b3fb43 (LE bytes 43fbb3b6575ca921), 144 byteslet ev = QuoteControlReservesAdminSet {quote_control: qc.key(),authority: ctx.accounts.authority.key(),old_reserves_admin,new_reserves_admin,timestamp: ts,};sol_log_data(&[ev.bytes()]); // pc c8fb (emit!)// emit_cpi!: invoke_signed(self program, [event_authority (signer)],// data = e445a52e51cb9a1d || ev, seeds ["__event_authority", bump]) // pc c9cfOk(()) // quote_control re-serialized on exit (fn_00d61)}// No lamports or tokens move.
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