# EntryPoint v0.6 Revert Codes

> Learn about the revert codes returned by the ERC-4337 EntryPoint v0.6

> For the complete documentation index, see [llms.txt](/docs/llms.txt).

Bundler JSON-RPC error codes are often accompanied by an additional AAxx code provided by the EntryPoint.

* **AA1x** error codes relate to **creating an account**
* **AA2x** error codes relate to **the sender or the user operation itself** (nonce, signature, prefund, time validity, verification gas)
* **AA3x** error codes relate to **paymasters** (deposit, expiration, verification)
* **AA4x** error codes relate to **verification**
* **AA5x** errors relate to **post execution actions**
* **AA9x** error codes are **general and not related to a certain theme** (invalid addresses, failed sends, invalid aggregator, etc.)

***

## AA10 sender already constructed

The `sender` has already been created. This error may occur if you attempt to create an account multiple times.

**Possible Solutions**

1. Remove the `initCode` from the userOp struct.

***

## AA13 initCode failed or OOG

The `initCode` failed to create the smart account. There are two possible reasons:

1. The `initCode` ran out of gas (OOG)
2. The `initCode` reverted during the account deployment process

**Possible Solutions**

1. Check the account has native token to pay for its deployment if you aren't using a paymaster.
2. Check that the factory address in the `initCode` is correct (the factory address is the first 20 bytes of the `initCode`).
3. Check that the `verificationGasLimit` is high enough for the `initCode` to complete without running out of gas.
4. If the `initCode` reverted, investigate why using tools like [Tenderly](https://tenderly.co/).

***

## AA14 initCode must return sender

The address of the smart account deployed with the `initCode` does not match the sender address of the user operation.

**Possible Solutions**

1. Check that the `initCode` is correct.

   1. The first 20 bytes should be the factory address.
   2. The remaining bytes should be the encoded function call.

2. Verify that the sender address was generated deterministically from `initCode`.

***

## AA15 initCode must create sender

The `initCode` does not return any sender address.

Possible reasons:

1. The `initCode` factory is not creating an account.
2. The `initCode` factory is creating an account, but is not returning the deployed sender address.

**Possible solutions**

1. Check that the `initCode` is correct.

   1. The first 20 bytes should be the factory address.
   2. The remaining bytes should be the encoded function call.

2. Verify that the `initCode` factory is implemented correctly, i.e., it deploys the smart account and returns the sender address.

***

## AA20 account not deployed

The sender of the userOp is not deployed and the `initCode` is not specified.

**Possible Solutions**

1. Check that you are using the correct sender address.
2. If this is the first transaction by this account make sure the `initCode` is included in the userOp.
3. Check that you are sending the userOp to the correct network.

***

## AA21 Didn’t pay prefund

The sender did not have enough native tokens to prefund the EntryPoint for the user operation.

**Possible Solutions**

1. If you are not using a paymaster, check that the account has enough native token to cover the required prefund.
2. If you are using a paymaster, check that the paymaster and data fields are set.

***

## AA22 expired or not due

The `signature` of the user operation is not valid because it is outside of the specified time range.

This error occurs when the `block.timestamp` is after the `validUntil` timestamp or before the `validAfter` timestamp.

**Possible Solutions**

1. If you are using time-based signatures, check that the `validAfter` and `validUntil` fields are set correctly and that the userOp is sent within the specified range.
2. If you not using time-based signatures, check that the `validAfter` and `validUntil` fields are set to `0`.

***

## AA23 reverted (or OOG)

The sender signature validation reverted or ran out of gas (OOG).

**Possible Solutions**

1. Check that the `verificationGasLimit` is high enough to cover the gas costs of`validateUserOp`.
2. If you are not using a paymaster, check that the sender has enough native tokens to cover the required prefund.
3. If you are using a paymaster to cover the gas fees, verify that the paymaster and data fields are set.

***

## AA24 signature error

The signature of the `userOp` is invalid.

**Possible Solutions**

1. Check that the userOp was correctly signed.

   1. The `userOpHash` is correctly computed
   2. The `entryPointAddress` is correct
   3. The `chainId` is correct
   4. The smart account expects the same type of signature

***

## AA25 Invalid account nonce

The `nonce` of the userOp is invalid. The userOp may be reusing an old nonce or formatting the nonce incorrectly.

**Possible Solutions**

1. Check that you are not using a `nonce` that has already been used.
2. Check that you are not using a `nonce` that is too far in the future (more than 10 higher than the current `nonce`.
3. Check that the `nonce` is formatted correctly.

***

## AA30 paymaster not deployed

The paymaster contract is not deployed.

**Possible Solutions**

1. Check that the first 20 bytes of the `paymasterAndData` field are the address of the paymaster contract you intend to use.
2. Check that the paymaster contract is deployed on the network you are using.

***

## AA31 paymaster deposit too low

The paymaster contract does not have enough funds deposited into the EntryPoint contract to cover the gas of the userOp.

**Possible Solutions**

1. Please file a ticket via our [Discord server](https://discord.com/channels/735965332958871634/1115787488838033538).

***

## AA32 Paymaster expired or not due

The paymaster's signature is outside of the specified time range and has expired.

**Possible Solutions**

1. Make sure you are sending the userOp within the `sponsorship expiry` period specified in your Gas Manager policy.

***

## AA33 reverted (or OOG)

The paymaster signature was rejected or verifying the paymaster signature ran out of gas (OOG).

**Possible Solutions**

1. Check that the `verificationGasLimit` is high enough to cover the `validatePaymasterUserOp` function's gas costs.
2. If the userOp is well formed with a high enough `verificationGasLimit`, please file a ticket via our [Discord server](https://discord.com/channels/735965332958871634/1115787488838033538).

***

## AA34 Signature Error

The paymaster's signature is invalid.

**Possible solutions**

1. Check the format of the signature in the `paymasterAndData` or the `paymaster` field depending on the EntryPoint version you are using.

***

## AA40 over verificationGasLimit

The amount of gas used to verify the smart account or paymaster signature was higher than userOp's `verificationGasLimit`.

**Possible Solutions**

1. Check that the `verificationGasLimit` set for the userOp is high enough to cover the gas used for smart account and paymaster verification.
2. Investigate why the smart account and/or paymaster used more gas than expected using tools like [Tenderly](https://tenderly.co/).
3. Please file a ticket via our [Discord server](https://discord.com/channels/735965332958871634/1115787488838033538).

***

## AA41 too little verificationGas

Verifying the userOp took too much gas and did not complete.

**Potential Solutions**

1. Increase the `verificationGasLimit`.

***

## AA50 postOp reverted

The paymaster contract's postOp function reverted.

**Possible Solutions**

1. Please file a ticket via our [Discord server](https://discord.com/channels/735965332958871634/1115787488838033538).

***

## AA51 prefund below actualGasCost

The actual gas cost of the userOp ended was higher than the prefund covered by the smart account or the paymaster.

***

## AA90 invalid beneficiary

The bundler specified an invalid address or the zero address as the beneficiary of the userOp.

**Possible Solutions**

1. Please file a ticket via our [Discord server](https://discord.com/channels/735965332958871634/1115787488838033538).

***

## AA91 failed send to beneficiary

The beneficiary of the bundler fee was unable to receive compensation from the EntryPoint.

**Possible Solutions**

1. Please file a ticket via our [Discord server](https://discord.com/channels/735965332958871634/1115787488838033538).

***

## AA92 internal call only

A function intended only for internal calls within the EntryPoint was called externally. This occurs if `innerHandleOp` is invoked by an address other than the EntryPoint itself.

**Possible Solutions:**

1. Do not call `innerHandleOp` directly from outside the EntryPoint.
2. Ensure you are calling the EntryPoint’s main methods (`handleOps`, etc.) rather than internal helper methods.

***

## AA93 invalid paymasterAndData

The paymasterAndData field is of an incorrect length.

**Possible Solutions**

1. Check that `paymasterAndData` is either empty or at least 20 bytes long.

***

## AA94 gas values overflow

A gas value of the userOp did not fit into a `uint160`.

**Possible Solutions**

1. Check that all the gas limit and gas price fields of the userOp fit into `uint160`.

***

## AA95 out of gas

The entire operation (or a sub-call) ran out of gas. This is usually due to too low gas limits passed to `handleOps`.

**Possible Solutions:**

1. Increase the gas limit provided to the bundler or `handleOps` call.
2. Optimize your code to require less gas.

***

## AA96 invalid aggregator

The aggregator address is invalid. For example, it might be the special `address(1)` marker used internally or not meet aggregator requirements.

**Possible Solutions:**

1. Use a proper aggregator address that implements the `IAggregator` interface.
2. Check that you’re not using reserved addresses that are disallowed by the EntryPoint.