Comment on page
Account Abstraction
Account abstraction is a concept introduced by Ethereum Improvement Proposal EIP-4337, which aims to improve the flexibility and usability of Ethereum accounts. It allows the creation of smart contract accounts with user-defined logic to handle transaction validation and execution, instead of relying solely on the built-in transaction processing of EOAs.
With account abstraction, users can:
- Implement custom transaction validation rules
- Use alternative transaction fee payment methods (e.g., ERC20 tokens instead of Ether)
- Improve privacy by obfuscating transaction details
- Simplify user experience by bundling multiple actions in a single transaction
A Smart Account is a smart contract implementing ERC-4337 representing an account that receives user operations and processes verifications on it before executing them. The smart Account interacts mainly with the Entrypoint by receiving user operations, validating them and executing them.
A User Operation is the equivalent of a transaction in Account Abstraction. A User Operation specifies the account that will handle the transaction, calldata, gas fees, nonce etc… See full structure here. The User Operation is sent to a bundler that will create a transaction from it.
Field | Type | Description |
---|---|---|
sender | address | The account making the operation |
nonce | uint256 | Anti-replay parameter; also used as the salt for first-time account creation |
initCode | bytes | The initCode of the account (needed if and only if the account is not yet on-chain and needs to be created) |
callData | bytes | The data to pass to the sender during the main execution call |
callGasLimit | uint256 | The amount of gas to allocate the main execution call |
verificationGasLimit | uint256 | The amount of gas to allocate for the verification step |
preVerificationGas | uint256 | The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata |
maxFeePerGas | uint256 | Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) |
maxPriorityFeePerGas | uint256 | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) |
paymasterAndData | bytes | Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster (empty for self-sponsored transaction) |
signature | bytes | Data passed into the account along with the nonce during the verification step |
A paymaster is a smart contract that can sponsor (pay the gas) for user operations. If a user operation specifies that the gas will be paid by a paymaster, the paymaster will check if the user operation is corresponding to custom criteria and it will pay for the transaction. A paymaster can be used for gasless transactions, pay fees with stablecoins or with custom tokens.
The bundler is a node connected to a block builder on the blockchain that receives user operations a bundles them into an Ethereum transaction.
The Entrypoint is the main contract responsible of Account Abstraction. It is permission-less meaning that no one owns it and it processes user operations, redirects them to the accounts, sends the receipts to paymaster, refunds bundlers for their transaction, etc… The entrypoint is also responsible of managing stakes and deposits for the Account Abstraction system.
An aggregator is a contract trusted by accounts to verify the user operations signature. It is used to create lighter signatures when combining them for L2 rollups for example.
Last modified 6mo ago