debpf
pump.fun / instructions

Instruction

set_max_curve_depth

DecompiledHidden

Hidden admin instruction (not in the public IDL) that sets a single byte, Global.max_curve_depth, to whatever u8 value the caller passes. Only the authority stored in the Global account can call it, and it must sign. There is no range check, it emits no event, and it moves no SOL or tokens. The new value is stored in the last byte of the Global account (offset 1087), which is currently 1. Its name and the CurveDepthExceeded error suggest it limits how deep curve-related operations can nest, but I did not trace where it is enforced.

Discriminator
0x209a98db8e6cdaa5
Calls in the sample
0
Reproduced, seen by the agent
—
Reproduced, never shown to the agent
—
Bytecodefn_2391e
2391emov64 r6, r5
2391fmov64 r9, r4
23920mov64 r8, r3
23921mov64 r7, r2
23922stxdw [r10-2464], r1
23923lddw r1, 0x1ae26e ; "Instruction: SetMaxCurveDepth"
23925mov64 r2, 0x1d
23926call sol_log_
23927ldxdw r1, [r6-4088]
23928jeq r1, 0x0, +84 ; -> 2397d
23929ldxdw r1, [r6-4096]
2392aldxb r1, [r1+0]
2392bstxdw [r10-2472], r1
2392csth [r10-2402], 0xffff
2392dstxdw [r10-2392], r9
2392estxdw [r10-2400], r8
2392fmov64 r1, r10
23930add64 r1, -0x962
23931stxdw [r10-4088], r1
23932mov64 r1, r10
23933add64 r1, -0x4a8
23934mov64 r3, r10
23935add64 r3, -0x960
23936mov64 r5, r10
23937mov64 r2, r7
23938call fn_2bd2c
23939ldxdw r8, [r10-1184]
2393aldxdw r6, [r10-1192]
2393bldxb r9, [r10-1]
2393cjeq r9, 0x2, +83 ; -> 23990
2393dmov64 r1, r10
2393eadd64 r1, -0x940
2393fmov64 r2, r10
23940add64 r2, -0x498
23941mov64 r3, 0x497
23942call fn_35367
23943stxb [r10-1193], r9
23944stxdw [r10-2376], r8
23945stxdw [r10-2384], r6
23946ldxdw r1, [r10-2472]
23947stxb [r10-1200], r1
23948mov64 r1, r10
23949add64 r1, -0x978
2394amov64 r2, r10
2394badd64 r2, -0x8e8
2394clddw r3, 0x1adff9
2394emov64 r4, r7
2394fcall fn_00e52
23950mov64 r6, 0x2
23951ldxdw r2, [r10-2424]
23952jeq r2, 0x2, +9 ; -> 2395c
23953ldxdw r3, [r10-2416]
23954mov64 r1, r10
23955add64 r1, -0x988
23956lddw r4, 0x1ad940 ; "global"
23958mov64 r5, 0x6
23959call fn_005a9
2395aldxdw r8, [r10-2432]
2395bldxdw r6, [r10-2440]
2395cldxdw r1, [r10-2360]
2395dldxdw r2, [r10-2368]
2395eldxdw r3, [r2+0]
2395fadd64 r3, -0x1
23960stxdw [r2+0], r3
23961jne r3, 0x0, +3 ; -> 23965
23962ldxdw r3, [r2+8]
23963add64 r3, -0x1
23964stxdw [r2+8], r3
23965ldxdw r2, [r1+0]
23966add64 r2, -0x1
23967stxdw [r1+0], r2
23968jne r2, 0x0, +3 ; -> 2396c
23969ldxdw r2, [r1+8]
2396aadd64 r2, -0x1
2396bstxdw [r1+8], r2
2396cldxdw r1, [r10-2312]
2396dldxdw r2, [r10-2320]
2396eldxdw r3, [r2+0]
2396fadd64 r3, -0x1
23970stxdw [r2+0], r3
23971jne r3, 0x0, +3 ; -> 23975
23972ldxdw r3, [r2+8]
23973add64 r3, -0x1
23974stxdw [r2+8], r3
23975ldxdw r2, [r1+0]
23976add64 r2, -0x1
23977stxdw [r1+0], r2
23978jne r2, 0x0, +23 ; -> 23990
23979ldxdw r2, [r1+8]
2397aadd64 r2, -0x1
2397bstxdw [r1+8], r2
2397cja +19 ; -> 23990
2397dlddw r1, 0x1b3c60
2397fcall fn_33e71
23980mov64 r1, r0
23981and64 r1, 0x3
23982mov64 r2, r1
23983add64 r2, -0x2
23984jlt r2, 0x2, +5 ; -> 2398a
23985jeq r1, 0x0, +4 ; -> 2398a
23986ldxdw r1, [r0-1]
23987ldxdw r2, [r0+7]
23988ldxdw r2, [r2+0]
23989callx r2
2398amov64 r1, r10
2398badd64 r1, -0x998
2398cmov64 r2, 0x66
2398dcall fn_32b09
2398eldxdw r8, [r10-2448]
2398fldxdw r6, [r10-2456]
23990ldxdw r1, [r10-2464]
23991stxdw [r1+8], r8
23992stxdw [r1+0], r6
23993exit
Reconstructedset_max_curve_depth
// discriminator 209a98db8e6cdaa5 (not in the published IDL)
#[derive(Accounts)] // fn_2bd2c (shared with 9 other admin ixs)
pub struct SetMaxCurveDepth<'info> {
#[account(mut, seeds = [b"global"], bump)] // 2000 ConstraintMut / 2006 ConstraintSeeds
pub global: Account<'info, Global>, // owner + discriminator checked on load (fn_026ea)
#[account(mut, address = global.authority @ PumpError::NotAuthorized)] // pc 2be41 -> 6000; pc 2bea0 mut check -> 2000
pub authority: Signer<'info>, // fn_02590
#[account(seeds = [b"__event_authority"], bump)] // pc 2bec3 -> 2006
pub event_authority: AccountInfo<'info>,
pub program: Program<'info, Pump>,
}
pub fn set_max_curve_depth(ctx: Context<SetMaxCurveDepth>, max_curve_depth: u8) -> Result<()> {
msg!("Instruction: SetMaxCurveDepth");
// pc 23928: instruction data after discriminator must hold >= 1 byte, else 102 InstructionDidNotDeserialize
// no range check on the value
ctx.accounts.global.max_curve_depth = max_curve_depth; // struct +0x438, on-chain byte offset 1087 (last byte of 1088)
// no event emitted, no CPI, no lamport/token movement
Ok(()) // exit: fn_00e52 re-serializes the whole Global struct
}

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