Comment on page
A relayer is a transaction processor responsible for ensuring that transactions end up on chain. Allows programatic transaction creation and handles nonce management, secret key storage, gas pricing and readjustment, transaction retries, and network errors.
Account abstraction decouples the creation of blockchain transactions from the implementation of the accounts that create them. Traditionally, the means to create transactions is rigid, but with account abstraction you can unlock a ton of new features: gasless transactions, shared wallets and wallet recovery, bundled transactions, wallet security rules to control transaction types, and more.
ERC-4337 is a powerful account abstraction standard.
A meta-transaction is a transaction created by one account but sent and paid for by another account. This allows for gasless transactions for a user. Some account abstract techniques use meta-transactions to create gasless transactions.
ERC-4337 implements account abstraction without any blockchain protocol changes by creating an alternative mempool. Users submit
UserOpmessages to this alt-mempool, which can then process and put transactions on chain. A
UserOpessentially takes all of the protocol-level fields, such as gas price and nonce, and encodes them into the smart contracts so that they can be processed flexibly by smart contract implementations without requiring protocol-level client forks.
If you are familiar with operating systems, you can think of this as taking transaction creation out of the "kernel" and putting it into the "application layer".
A bundler receives
UserOpmessages from ERC-4337 wallets and batches them up and submits them to the blockchain via an ERC-4337 entrypoint. Technically, ERC-4337 wallets don't need to interact with a bundler and can submit transactions directly themselves, but using a bundler lets users save gas by grouping transactions together and enables gasless transactions.
You can think of a bundler as an alternative mempool for blockchain transactions (
A paymaster is a piece of the ERC-4337 architecture. A paymaster pays for transactions on behalf of others, or gives users more flexible ways to pay for transactions. For example, a paymaster can let a user pay with ERC-20 or fully or partially sponsor all of the gas payment for a user.
An EOA is an externally owned account. Basically, it is a private key that represents a blockchain account and lets a user sign and send transactions. An EOA has no smart contract code attached to it, and is the most basic account type. Traditionally, all transactions originate from an EOA, but account abstraction expands the flexibility of blockchains so that smart contracts can also create transactions.
ERC-2771 is a standard for encoding the original
msg.senderof a meta-transaction. Normally, meta-transactions obscure the original transaction creator since the transactions are sent through a meta-transaction forwarder or by another EOA. This causes compatibility issues.
Smart contracts that support ERC-2771 can gain compatibility with every meta-transaction forwarder that supports the standard, making it easier to send meta-transactions.
EIP-712 is a way of signing structured messages. These messages can then be submitted in transactions and more easily parsed on chain. This is often used to support meta-transactions.
As a quick aside, here is the difference between a "message" and a "transaction":
- transaction: the payload that is sent to the blockchain protocol and can result in a transaction ending up on chain. Transactions can be signed or unsigned, but only signed transactions can end up on chain. Transactions are signed by a private key (aka an EOA).
- message: arbitrary bytes signed by an account, but are not a transaction. Thus, a signed message cannot directly result in an on-chain transaction, but it can be processed in blockchain systems to prove that a message came from a particular account.