Who sends what?
ERC-4337 adds account abstraction without changing Ethereum’s protocol (ERC-4337). An agent with a smart account doesn’t send transactions itself. It signs user operations and hands them to a bundler.
| Role | What it does |
|---|---|
| Smart account | The agent’s wallet, a contract. It decides how a signature is checked |
| User operation | The signed request: sender, nonce, calls, gas limits, signature |
| Bundler | Packs user operations into one transaction calling handleOps on the EntryPoint |
| EntryPoint | One contract per version that verifies and runs each operation, and charges for it |
| Paymaster | An optional contract that pays the gas instead of the account |
Which hash identifies the agent’s action?
The bundle transaction has a normal hash, but it isn’t the agent’s. It may carry other people’s operations too.
The agent’s handle is the userOpHash. It covers the operation without its signature, plus the EntryPoint address and the chain id. The same operation on another chain or EntryPoint has a different hash.
That changes how you follow an action:
- The agent gets the userOpHash back from the bundler.
- The bundler includes the operation in a bundle transaction.
- The EntryPoint emits an event for the operation, with its success and its actual gas cost.
What did it cost, and did it work?
Two things differ from a plain transaction.
- Success is per operation. The bundle transaction can succeed while one operation’s calls revert. Its receipt status says nothing about yours.
- Cost is per operation. The operation pays its share, the actual gas cost the EntryPoint charged. The bundle transaction’s fee is the bundler’s, and covers everyone in the bundle.
An agent that reads the bundle receipt’s status and fee gets both wrong.