09 / Compiler
One plan, one transaction.
@pump-hooks/transaction-compiler turns operations across engines into a single atomic v0 transaction: dependency order, merged account roles, required signers, exact byte size and a compute budget. A plan that does not fit is refused with a reason; it is never split.01
Plan → order
wrap, hooked transfer, unwrap| As written | Kind | After |
|---|---|---|
| bob-unwraps | unwrap | send |
| alice-wraps | wrap | — |
| send | hooked-transfer | alice-wraps |
| Compiled order |
|---|
| 1. alice-wraps |
| 2. send |
| 3. bob-unwraps |
| Instruction | Program | Accounts | Data |
|---|---|---|---|
| 0 | compute-budget | 0 | 5 B |
| 1 | token-wrapper | 11 | 24 B |
| 2 | token-2022 | 7 | 10 B |
| 3 | token-wrapper | 11 | 24 B |
The hooked transfer's extra accounts were resolved from the live token policy, not supplied by hand.
Size
912 / 1232 bytes
Instructions
4 (incl. compute budget)
Accounts
18
Signers
3
Static CU limit
165,300
Executed CU
58,624 (success)
Limit after simulation
64,787
Account table (18)
| EazAwDoXW972pHpDGaS5GyVapdpMFTEbZJA5tELjfegb | signer · writable | static |
| 7KLdMniakNwCDrYVab2EWxCShQrvX1cmRKEif6YyrMrj | signer | static |
| Hp6q1R9z9VboWoD9tBtBG1kf3QDLQWrajiW24J7EUBur | signer | static |
| dyysQ1xDidgiXRyCU3zNd3NME4aHehT2siaibft1wZa | writable | static |
| CBdwZUip9KR9gUw9E9PWQG9JXP5Ae1YEUspLCJnvpixa | writable | static |
| BTBb3uJeVKpfDx7tyUiYaGwmEz5Soqy1sjQMLpRBvchP | writable | static |
| 5zEM9F4FeTMY5GvEpChSoKwzyVe4Vd2RK5n6UVX7dfpK | writable | static |
| FkzKgGqgYZozBRy5kRjNVsGMrKZ1xgAtzZGhjPVFNA2H | writable | static |
| 2rmc3F9Me1j1qviTbXyDZug9soLLQsYsBpSLE7mbZqyT | writable | static |
| CLZhjGg2JzStBdia99uRED1QVhELEr1DjHPryeS4dQQc | writable | static |
| BJjLaKLF4x5cLDjCNHoDiKxzbMF5r1zEPhwGHfGGQhkv | writable | static |
| ComputeBudget111111111111111111111111111111 | readonly | static |
| 841vHKyD8HXQKsNSp2A2pzNjDHuFDBu9JPt6xsJc7vbh | readonly | static |
| 2Hamw4Ui4oTaq6xfBcYWSUEaQs2ANRzDbR38gzRafkSU | readonly | static |
| TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA | readonly | static |
| TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb | readonly | static |
| FZBBkQQamgfMCAoNk6PAdZi9nYZGMsGw9gDyTMNC3v54 | readonly | static |
| GSEbAPFac9Wr4oG1ZEmdiof7Vp7jNUnKcFfcCbugYw5C | readonly | static |
02
Atomic failure
A wrap followed by a transfer of more than the user holds. The transfer fails, so the wrap before it is undone too: only the fee payer's balance changes.
Status
failed
Error
InstructionError(2, Custom(1))
Accounts changed
fee payer
03
Refusals
typed errors, never a partial plan| Plan | Code | Message |
|---|---|---|
| dependency cycle | cycle | dependency cycle: a -> b -> a |
| signer not provided | missing-signer | missing signatures: 8tcx56x5K84jBSTpnhWYQkN9DfmmDV5VDnqcCbFzeoCi (a) |
| 40 writable accounts, no lookup table | too-large | transaction is 1572 bytes (limit 1232). It is not split automatically, because a split would no longer be atomic. 40 accounts could move to an address lookup table (saves up to 1240 bytes). |
Provenance: commit 9327d8e, generated 2026-10-20
Commit
9327d8e27103
Generated
2026-10-20T18:16:25.064Z
Runtime
LiteSVM (node, litesvm 1.6.1) with the compiled .so files
token_hooks.so sha256
969dd56de202ba3e740f6b6aa6875d43406aee7679c4b2522266b49d196b7e36
token_wrapper.so sha256
d37cdbe6acab5c349bbc42ece5b86fe37219cb73fd69d8ec2a2bfde7f401c067
anti_jit_hook.so sha256
ee6c37e94d71f2b8ebe153607ee1b0b2ee5b914e1d982b585184db56236b506d
pnpm --filter @pump-hooks/web export-data