Entrypoint Error Codes
If a UserOperation is valid, the bundler return the calculated userOpHash for it. In case of failure, the bundler return an error result object, with code and message.
AAxx Error Codes
Entrypoint Validation Error Codes: These error codes are returned by ERC-4337 Entrypoint and may occur when you send user operations.
- AA1x error codes pertain to account creation.
- AA2x error codes concern the sender of the user operation.
- AA3x error codes are associated with paymasters.
- AA4x error codes relate to general verification.
- AA5x errors are related to actions taken after the user operation has been executed.
- AA9x errors relate to the bundle transaction or malformed user operation fields.
| Code | Description | Explanation |
|---|---|---|
| AA10 | Sender already constructed | The sender has already already created, so initCode does not need to be included in the user operation. EntryPoint v0.6 to v0.8. |
| AA13 | initCode failed or Out of Gas OOG | Check the amount of gas consumed, and then verify the initCode or the factory contract is correct. |
| AA14 | initCode must return sender | The initCode does not return the sender address. Check the initCode or the factory contract. |
| AA15 | initCode must create sender | The initCode in the user operation does not create an account. Check the initCode or the factory contract. |
| AA20 | Account Not Deployed | If this is the first transaction by this account make sure an initCode is included. Otherwise, check that the correct sender address is specified and is an ERC-4337 account. |
| AA21 | Didn't pay prefund | The sender lacks sufficient native tokens to cover the gas costs associated with the User Operation. If your intention was to utilize a Paymaster for sponsorship, it is crucial to verify that the paymasterAndData field of the user operation is correctly configured. |
| AA22 | Expired or not due | The signature is not valid because it is outside of the specified time range. |
| AA23 | AA23 reverted OOG | The sender signature validation was rejected or ran out of gas. "OOG" is an abbreviation for Out-Of-Gas. The verificationGasLimit may be too low. |
| AA24 | Signature Error | Check the signature. It may be in an incompatible format. |
| AA25 | Invalid account nonce | The nonce is invalid. The user operation may be re-using an old nonce, or formatted the nonce incorrectly. |
| AA26 | Over verification gas limit | The account's validation used more gas than verificationGasLimit (EntryPoint v0.7+). Increase verificationGasLimit, and make sure the dummy signature used for gas estimation runs the same validation steps as the real signature. |
| AA27 | Outside valid block range | The account returned a block-number validity range that does not include the current block (EntryPoint v0.9). |
| AA30 | Paymaster not deployed | The paymaster address specified by paymasterAndData contains no code. Check that the first characters of the paymasterAndData field are the paymaster address you intend to use. EntryPoint v0.6 to v0.8. |
| AA31 | Paymaster deposit too low | The paymaster is out of funds. More gas tokens must be deposited into the EntryPoint for the paymaster. This is usually done by calling the paymaster contract's deposit function. If you are using Candide Paymaster, let us know. |
| AA32 | Paymaster expired or not due | Paymaster signatures have a specific time range. If the user operation was executed after this time range, the paymaster's signature becomes invalid |
| AA33 | AA33 reverted | The paymaster validation was rejected or ran out of gas. "OOG" = Out-Of-Gas. First check the paymaster's signature in paymasterAndData. If the signature is correct, the paymaster's gas limit may be too low: paymasterVerificationGasLimit on EntryPoint v0.7+, verificationGasLimit on v0.6. |
| AA34 | Signature Error | The paymaster's signature is invalid. Check the format of the signature in paymasterAndData. |
| AA35 | Malformed paymaster data | The paymaster's validatePaymasterUserOp returned data in an unexpected format (EntryPoint v0.9). |
| AA36 | Over paymaster verification gas limit | The paymaster's validation used more gas than paymasterVerificationGasLimit (EntryPoint v0.7+; on v0.9 the message reads over pmVerificationGasLimit). Increase paymasterVerificationGasLimit. |
| AA37 | Paymaster invalid block range | The paymaster returned a block-number validity range that does not include the current block (EntryPoint v0.9). Request fresh paymaster data. |
| AA40 | Over verification gas limit | The verification gas limit was exceeded. Check the verificationGasLimit in your user operation. EntryPoint v0.6 only: v0.7+ returns AA26 or AA36. |
| AA41 | Too little verification gas | Verifying the user operation took too much gas and did not complete. You may need to increase verificationGasLimit. EntryPoint v0.6 only. |
| AA50 | PostOp reverted | After the user operation was completed, the execution of additional logic by the EntryPoint reverted. EntryPoint v0.6 only. |
| AA51 | prefund below actualGasCost | The actual cost of the user operation is higher than the total amount of gas approved. The prefund is the amount that the EntryPoint is allowed to execute the user operation. After the user operation is executed, the remainder of the prefund is credited back to the sender. EntryPoint v0.6 only. |
| AA93 | Invalid paymasterAndData | paymasterAndData is too short to hold the paymaster address (and, on v0.7+, its gas limits). Check the paymaster fields. EntryPoint v0.6 to v0.8; v0.9 reverts with InvalidPaymasterData instead. |
| AA94 | Gas values overflow | A gas or fee field is larger than the EntryPoint accepts (uint120). Check the units and encoding of the gas fields. |
| AA95 | Out of gas | The bundle transaction ran out of gas while executing the user operation. On v0.7+ this is caused by the bundle's gas limit; on v0.6 it can also be caused by a paymaster. Contact us if it persists. |
| AA98 | Invalid paymaster | The paymaster address in paymasterAndData is the zero address. EntryPoint v0.8; v0.9 reverts with InvalidPaymaster instead. |
| AA99 | initCode too small | initCode is shorter than a factory address (EntryPoint v0.8+). Leave factory empty for deployed accounts, or set it to 0x7702 for EIP-7702 accounts. |