ERC-4337 UserOp & Calldata Decoder
Debug Account Abstraction transactions before broadcast. Unpack EntryPoint v0.6 and v0.7 structs, calculate required prefund balances, decode smart wallet calldata, and isolate AA21, AA23, and AA33 revert conditions.
100% Client-Side Sandbox Decoding
All user operations and hexadecimal calldata strings are parsed locally in your browser memory. No payload details, account addresses, or signatures are transmitted over any external network.
EntryPoint Diagnostic Codes
| Field | Decoded Value | Decimal / Note |
|---|---|---|
| No operation loaded. Paste UserOp JSON on the left. | ||
Understanding ERC-4337 Prefund & Validation Mechanics
How EntryPoint Calculates Required Prefund
Before the EntryPoint contract invokes your smart account's validateUserOp function, it demands an upfront collateral deposit known as the prefund. On EntryPoint v0.6 and v0.7, this is calculated as:
requiredPrefund = ( verificationGasLimit * (paymaster ? 3 : 1) + callGasLimit + preVerificationGas ) * maxFeePerGas
If the account's EntryPoint deposit (or native balance for self-paying accounts) is less than this theoretical worst-case amount, the transaction immediately reverts with AA21 didn't pay prefund without even attempting verification.
EntryPoint v0.6 vs v0.7 Structural Differences
EntryPoint v0.7 reorganized the UserOperation struct to optimize calldata packing on Layer 2 rollups (Arbitrum, Base, Optimism):
- accountGasLimits: Combines
verificationGasLimit(high 16 bytes) andcallGasLimit(low 16 bytes) into a single bytes32. - gasFees: Combines
maxPriorityFeePerGasandmaxFeePerGasinto a single bytes32. - paymasterAndData: Replaced by dedicated
paymaster,paymasterVerificationGasLimit,paymasterPostOpGasLimit, andpaymasterData.