Examples v06-wrapper-five-handleops
v06-wrapper-five-handleops
Bundler 0xf70d…dbef Unattributed bundler #48 (EOA) evidence level: hint submitted a bundle of 5 v0.6 UserOperations through a wrapper contract for 1 smart account(s), requesting call x5 across 1 target contract(s); 5 of 5 succeeded.
- Block
- 96,955,051
- Outer status
- success grade: observed
- UserOperations
- 5 in 5
handleOpscalls - Selector
0xcd6e13f7
How to read the evidence markers
Evidence levels (how strong an address label is)
- evidence level: primary source The vendor or protocol itself publishes this exact address
- evidence level: self-description What the contract says about itself via a getter; contracts can claim any name
- evidence level: cluster Shares a key, getter or bytecode with labelled addresses: same machinery, not proof of the same operator
- evidence level: hint Ranking, explorer tag, metadata or third-party label: a clue, never proof
- evidence level: unlabelled No registry label. In running text, an address without a marker has no label.
Evidence grades (how a value was obtained), strongest first
grade: observed grade: decoded grade: recomputed grade: recovered grade: contract read grade: inferred grade: unknown
Weaker grades are set in italics. Hover or focus a marker for its definition; full definitions.
- 5 BeforeExecution events: this tx made 5 separate handleOps calls (typical of a wrapper contract). Logs between calls are labelled 'between_calls' unless they can be tied to an op.
- The outer transaction was sent to a non-EntryPoint contract (a wrapper). Logs before BeforeExecution may include the wrapper's own activity, not only validation.
Who was involved
- Bundler
0xf70d…dbefUnattributed bundler #48 (EOA) evidence level: hintsent and paid for the outer transaction · grade: observed- Called contract
0xb92f…ff4fevidence level: unlabellednot an EntryPoint: a wrapper contract · grade: observed- EntryPoint (call 1)
0x5ff1…2789EntryPoint v0.6 evidence level: primary sourcev0.6handleOps, embedded in the wrapper's call · grade: decoded- Beneficiary (call 1)
0xc727…74a3evidence level: unlabelledthebeneficiaryargument ofhandleOps· differs from the bundler · grade: decoded- EntryPoint (call 2)
0x5ff1…2789EntryPoint v0.6 evidence level: primary sourcev0.6handleOps, embedded in the wrapper's call · grade: decoded- Beneficiary (call 2)
0xc727…74a3evidence level: unlabelledthebeneficiaryargument ofhandleOps· differs from the bundler · grade: decoded- EntryPoint (call 3)
0x5ff1…2789EntryPoint v0.6 evidence level: primary sourcev0.6handleOps, embedded in the wrapper's call · grade: decoded- Beneficiary (call 3)
0xc727…74a3evidence level: unlabelledthebeneficiaryargument ofhandleOps· differs from the bundler · grade: decoded- EntryPoint (call 4)
0x5ff1…2789EntryPoint v0.6 evidence level: primary sourcev0.6handleOps, embedded in the wrapper's call · grade: decoded- Beneficiary (call 4)
0xc727…74a3evidence level: unlabelledthebeneficiaryargument ofhandleOps· differs from the bundler · grade: decoded- EntryPoint (call 5)
0x5ff1…2789EntryPoint v0.6 evidence level: primary sourcev0.6handleOps, embedded in the wrapper's call · grade: decoded- Beneficiary (call 5)
0xc727…74a3evidence level: unlabelledthebeneficiaryargument ofhandleOps· differs from the bundler · grade: decoded
Operations: what was asked, what happened
Operation 1 of 5
v0.6 succeeded index 0Account 0xc727…74a3 asked to call addOwnerAddress(...) on 0xc727…74a3; the op succeeded; gas paid by the account itself.
Who was involved
- Smart account
0xc727…74a3evidence level: unlabelledthesenderfield ofUserOperationEvent· grade: observed- Account code
0x0000…534dCoinbase Smart Wallet implementation v1.1.0 evidence level: primary sourcecontract code and storage read at block 96955051 · EIP-1967 proxy · grade: contract read- Signer key
0x737f…7fe0evidence level: unlabelledsignature schemeCoinbase SignatureWrapper raw ECDSA(userOpHash), an EOA (secp256k1) key; matches the on-chain owner getterownerAtIndex(0)=0x000000000000000000000000737f9001475e36d0a69c411dd0f14d4fda7f7fe0 -> signer IS that ownerat block 96955051. A key, not a person. · grade: contract read
What was asked
Entry function on the account: executeWithoutChainIdValidation(bytes[]) grade: decoded
Call 1 call addOwnerAddress(...) on
0xc727…74a3
What happened
The outer transaction reported success grade: observed; this UserOperation succeeded grade: observed.
- Call 1 ran (its logs show it) grade: inferredthe target emitted 1 log(s) in this op's execution segment (AddOwner(uint256,bytes) x1); this shows it ran, not what it achieved
Money for this operation
The EntryPoint charged this operation 0.000000 AVAX (actualGasCost) grade: observed, taken from account (sender) deposit 0xc7277ff2d04a24a8a35b891bdb3a644ba0a074a3 grade: inferred and paid to the beneficiary grade: inferred.
Sponsorship: self-funded: no paymaster: the account's own EntryPoint deposit (or prefund it sent) pays the gas charge grade: decoded
Operation 2 of 5
v0.6 succeeded index 1Account 0xc727…74a3 asked to call addOwnerAddress(...) on 0xc727…74a3; the op succeeded; gas paid by the account itself.
Who was involved
- Smart account
0xc727…74a3evidence level: unlabelledthesenderfield ofUserOperationEvent· grade: observed- Account code
0x0000…534dCoinbase Smart Wallet implementation v1.1.0 evidence level: primary sourcecontract code and storage read at block 96955051 · EIP-1967 proxy · grade: contract read- Signer key
0x737f…7fe0evidence level: unlabelledsignature schemeCoinbase SignatureWrapper raw ECDSA(userOpHash), an EOA (secp256k1) key; matches the on-chain owner getterownerAtIndex(0)=0x000000000000000000000000737f9001475e36d0a69c411dd0f14d4fda7f7fe0 -> signer IS that ownerat block 96955051. A key, not a person. · grade: contract read
What was asked
Entry function on the account: executeWithoutChainIdValidation(bytes[]) grade: decoded
Call 1 call addOwnerAddress(...) on
0xc727…74a3
What happened
The outer transaction reported success grade: observed; this UserOperation succeeded grade: observed.
- Call 1 ran (its logs show it) grade: inferredthe target emitted 1 log(s) in this op's execution segment (AddOwner(uint256,bytes) x1); this shows it ran, not what it achieved
Money for this operation
The EntryPoint charged this operation 0.000000 AVAX (actualGasCost) grade: observed, taken from account (sender) deposit 0xc7277ff2d04a24a8a35b891bdb3a644ba0a074a3 grade: inferred and paid to the beneficiary grade: inferred.
Sponsorship: self-funded: no paymaster: the account's own EntryPoint deposit (or prefund it sent) pays the gas charge grade: decoded
Operation 3 of 5 v0.6 succeeded index 2
Account 0xc727…74a3 asked to call addOwnerAddress(...) on 0xc727…74a3; the op succeeded; gas paid by the account itself.
Who was involved
- Smart account
0xc727…74a3evidence level: unlabelledthesenderfield ofUserOperationEvent· grade: observed- Account code
0x0000…534dCoinbase Smart Wallet implementation v1.1.0 evidence level: primary sourcecontract code and storage read at block 96955051 · EIP-1967 proxy · grade: contract read
What was asked
Entry function on the account: executeWithoutChainIdValidation(bytes[]) grade: decoded
Call 1 call addOwnerAddress(...) on
0xc727…74a3
What happened
The outer transaction reported success grade: observed; this UserOperation succeeded grade: observed.
- Call 1 ran (its logs show it) grade: inferredthe target emitted 1 log(s) in this op's execution segment (AddOwner(uint256,bytes) x1); this shows it ran, not what it achieved
Money for this operation
The EntryPoint charged this operation 0.000000 AVAX (actualGasCost) grade: observed, taken from account (sender) deposit 0xc7277ff2d04a24a8a35b891bdb3a644ba0a074a3 grade: inferred and paid to the beneficiary grade: inferred.
Sponsorship: self-funded: no paymaster: the account's own EntryPoint deposit (or prefund it sent) pays the gas charge grade: decoded
Operation 4 of 5 v0.6 succeeded index 3
Account 0xc727…74a3 asked to call addOwnerPublicKey(...) on 0xc727…74a3; the op succeeded; gas paid by the account itself.
Who was involved
- Smart account
0xc727…74a3evidence level: unlabelledthesenderfield ofUserOperationEvent· grade: observed- Account code
0x0000…534dCoinbase Smart Wallet implementation v1.1.0 evidence level: primary sourcecontract code and storage read at block 96955051 · EIP-1967 proxy · grade: contract read- Signer key
0x5bd1…41eaevidence level: unlabelledsignature schemeCoinbase SignatureWrapper raw ECDSA(userOpHash), an EOA (secp256k1) key; matches the on-chain owner getterownerAtIndex(17)=0x0000000000000000000000005bd17e29be34f6ec471a6ffaffb4637cf44841ea -> signer IS that ownerat block 96955051. A key, not a person. · grade: contract read
What was asked
Entry function on the account: executeWithoutChainIdValidation(bytes[]) grade: decoded
Call 1 call addOwnerPublicKey(...) on
0xc727…74a3
What happened
The outer transaction reported success grade: observed; this UserOperation succeeded grade: observed.
- Call 1 ran (its logs show it) grade: inferredthe target emitted 1 log(s) in this op's execution segment (AddOwner(uint256,bytes) x1); this shows it ran, not what it achieved
Money for this operation
The EntryPoint charged this operation 0.000000 AVAX (actualGasCost) grade: observed, taken from account (sender) deposit 0xc7277ff2d04a24a8a35b891bdb3a644ba0a074a3 grade: inferred and paid to the beneficiary grade: inferred.
Sponsorship: self-funded: no paymaster: the account's own EntryPoint deposit (or prefund it sent) pays the gas charge grade: decoded
Operation 5 of 5 v0.6 succeeded index 4
Account 0xc727…74a3 asked to call addOwnerAddress(...) on 0xc727…74a3; the op succeeded; gas paid by the account itself.
Who was involved
- Smart account
0xc727…74a3evidence level: unlabelledthesenderfield ofUserOperationEvent· grade: observed- Account code
0x0000…534dCoinbase Smart Wallet implementation v1.1.0 evidence level: primary sourcecontract code and storage read at block 96955051 · EIP-1967 proxy · grade: contract read- Signer key
0x737f…7fe0evidence level: unlabelledsignature schemeCoinbase SignatureWrapper raw ECDSA(userOpHash), an EOA (secp256k1) key; matches the on-chain owner getterownerAtIndex(0)=0x000000000000000000000000737f9001475e36d0a69c411dd0f14d4fda7f7fe0 -> signer IS that ownerat block 96955051. A key, not a person. · grade: contract read
What was asked
Entry function on the account: executeWithoutChainIdValidation(bytes[]) grade: decoded
Call 1 call addOwnerAddress(...) on
0xc727…74a3
What happened
The outer transaction reported success grade: observed; this UserOperation succeeded grade: observed.
- Call 1 ran (its logs show it) grade: inferredthe target emitted 1 log(s) in this op's execution segment (AddOwner(uint256,bytes) x1); this shows it ran, not what it achieved
Money for this operation
The EntryPoint charged this operation 0.000000 AVAX (actualGasCost) grade: observed, taken from account (sender) deposit 0xc7277ff2d04a24a8a35b891bdb3a644ba0a074a3 grade: inferred and paid to the beneficiary grade: inferred.
Sponsorship: self-funded: no paymaster: the account's own EntryPoint deposit (or prefund it sent) pays the gas charge grade: decoded
Money
The outer fee (what the bundler paid the network) and the per-op charges (what the EntryPoint collected from deposits and paid to the beneficiary) are different quantities. They are listed, never added together; their difference is not 'bundler profit'.
The logs
Show all 21 receipt logs
| # | Emitter | Event | Phase |
|---|---|---|---|
| 0 | 0x5ff1…2789 EntryPoint v0.6 evidence level: primary source | BeforeExecution | boundary |
| 1 | 0xc727…74a3 evidence level: unlabelled | AddOwner(uint256,bytes) | execution |
| 2 | 0x5ff1…2789 EntryPoint v0.6 evidence level: primary source | UserOperationEvent | execution |
| 3 | 0xb92f…ff4f evidence level: unlabelled | SolverCallExecuted(address,bytes,uint256) | between calls |
| 4 | 0x5ff1…2789 EntryPoint v0.6 evidence level: primary source | BeforeExecution | boundary |
| 5 | 0xc727…74a3 evidence level: unlabelled | AddOwner(uint256,bytes) | execution |
| 6 | 0x5ff1…2789 EntryPoint v0.6 evidence level: primary source | UserOperationEvent | execution |
| 7 | 0xb92f…ff4f evidence level: unlabelled | SolverCallExecuted(address,bytes,uint256) | between calls |
| 8 | 0x5ff1…2789 EntryPoint v0.6 evidence level: primary source | BeforeExecution | boundary |
| 9 | 0xc727…74a3 evidence level: unlabelled | AddOwner(uint256,bytes) | execution |
| 10 | 0x5ff1…2789 EntryPoint v0.6 evidence level: primary source | UserOperationEvent | execution |
| 11 | 0xb92f…ff4f evidence level: unlabelled | SolverCallExecuted(address,bytes,uint256) | between calls |
| 12 | 0x5ff1…2789 EntryPoint v0.6 evidence level: primary source | BeforeExecution | boundary |
| 13 | 0xc727…74a3 evidence level: unlabelled | AddOwner(uint256,bytes) | execution |
| 14 | 0x5ff1…2789 EntryPoint v0.6 evidence level: primary source | UserOperationEvent | execution |
| 15 | 0xb92f…ff4f evidence level: unlabelled | SolverCallExecuted(address,bytes,uint256) | between calls |
| 16 | 0x5ff1…2789 EntryPoint v0.6 evidence level: primary source | BeforeExecution | boundary |
| 17 | 0xc727…74a3 evidence level: unlabelled | AddOwner(uint256,bytes) | execution |
| 18 | 0x5ff1…2789 EntryPoint v0.6 evidence level: primary source | UserOperationEvent | execution |
| 19 | 0xb92f…ff4f evidence level: unlabelled | SolverCallExecuted(address,bytes,uint256) | after the EntryPoint call |
| 20 | 0xb92f…ff4f evidence level: unlabelled | SolverCallExecuted(address,bytes,uint256) | after the EntryPoint call |
What we can't tell
- The signer is a key (address) recovered from the signature. It does not tell you which person, company or bot controls that key.
- The beneficiary is only where gas compensation was sent; it is not the user, and it is not proof of who runs the bundler.
- UserOp success=true only means the account's call did not revert at the top level. Accounts and batch executors can catch inner failures, so individual legs can still have failed.
- Names (token symbols, labels) are metadata unless their evidence level says otherwise.
- The signer is a passkey (a P-256 public key held by a device or password manager); there is no address to look up, and the key does not tell you who holds the device.
- The outer fee is what the bundler paid the network for the whole transaction; it cannot be split fairly across ops or legs, and comparing it with the per-op charges does not give bundler profit.
- handleOps was embedded inside a wrapper contract's call. The wrapper's own logic (what it did before/after, and with which funds) is not decoded.
Rendered from the explain record (schema epi.explain/v1). Address labels and levels come
from the current registry. How evidence grades and levels work →