ERC-7562 Validation
Rules imposed on validating account abstraction transactions
Alternative Mempools
We strongly recommend you follow the public mempool validation rules in ERC-7562, but if you believe an alternative mempool is required for your application please contact us at [email protected].
Your application will be more robust if it uses the public ERC-4337 mempool. It allows you to work with any ERC-4337 bundler, paymaster, or account and prevents lock in to a single provider. It also guarantees that you will get the best price for your user operations because they can be picked up by more bundlers.
The tradeoff is that using this mempool imposes some restrictions on what user operations can do. This prevents denial-of-service attacks on the mempool. These rules can be intimidating, but in most practical applications you won't approach them.
ERC-7562 contains the full set of validation rules for the canonical public ERC-4337 mempool.
Guiding Principles
A public mempool of valid UserOperations is susceptible to denial-of-service attacks unless some access to the EVM is restricted during the validation phase.
The rules in ERC-7562 are enforced by bundlers. The codes that you may encounter are:
- General Reputation Rules (GREP prefix)
- Opcode Rules (OP prefix)
- Code Rules (COD prefix)
- Storage Rules (STO prefix)
- Staked Entities Reputation Rules (SREP prefix)
- Entity Specific Rules (EREP prefix)
- Unstaked Paymasters Reputation Rules (UREP prefix)
Staking Rules
Some types of ERC-4337 entities can have enhanced permissions with the public mempool if they stake with the EntryPoint. Here are the common values required.
Name | Value | Description |
---|---|---|
Minimum unstake delay | 86400 secconds (24 hours) | MIN_UNSTAKE_DELAY is the minimum delay an entity can withdraw its stake from the EntryPoint. |
Minimum stake value | ~0.5 ETH (chain-dependent) | MIN_STAKE_VALUE is typically about $1000 in native tokens. Stackup's bundler currently requires 0.1 ETH, but it will likely increase to 0.5 ETH in the future. |
Same sender mempool count | 4 | SAME_SENDER_MEMPOOL_COUNT is the number of user operations an unstaked sender is allowed to have in the mempool. |
Same unstaked entity mempool count | 10 | SAME_UNSTAKED_ENTITY_MEMPOOL_COUNT is the default number of user operations an unstaked paymaster can have in the mempool. The number of allowed operations can be higher if inclusion rate is high - see UREP-020 Entity ops allowed - or lower if it is being throttled - see GREP-020. |
Throttled entity mempool count | 4 | THROTTLED_ENTITY_MEMPOOL_COUNT is the number of user operations a throttled entity can have in the mempool. |
Throttled entity live blocks | 10 | THROTTLED_ENTITY_LIVE_BLOCKS is the number of blocks a user operation can stay in the mempool if it uses a throttled entity . |
Throttled entity bundle count | 4 | THROTTLED_ENTITY_BUNDLE_COUNT is the maximum number of user operations a throttled entity can have in a bundle. |
Updated 10 months ago