Examples v09-safe-empty-selfcall
v09-safe-empty-selfcall
Bundler 0x3cfd…7a89 Bundler EOA submitting Safe self-call cluster B evidence level: cluster submitted one v0.9 UserOperation: account 0xa1fd…ccca Safe self-call account B (v0.9, Candide multi-chain module) evidence level: cluster asked to an empty, zero-value call to the account itself (does nothing visible); the op succeeded; gas sponsored by 0xca94…c7de CandidePaymaster (EntryPoint v0.9) evidence level: primary source.
- Block
- 97,835,991
- Outer status
- success grade: observed
- UserOperations
- 1 in 1
handleOpscall - Selector
0x765e827f
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.
Who was involved
- Bundler
0x3cfd…7a89Bundler EOA submitting Safe self-call cluster B evidence level: clustersent and paid for the outer transaction · grade: observed- Called contract
0x4337…d009EntryPoint v0.9 evidence level: primary sourcegrade: observed- EntryPoint
0x4337…d009EntryPoint v0.9 evidence level: primary sourcev0.9handleOps· grade: decoded- Beneficiary
0x3cfd…7a89Bundler EOA submitting Safe self-call cluster B evidence level: clusterthebeneficiaryargument ofhandleOps· same address as the bundler · grade: decoded
Operations: what was asked, what happened
Operation 1
v0.9 succeeded index 0Account 0xa1fd…ccca Safe self-call account B (v0.9, Candide multi-chain module) evidence level: cluster asked to an empty, zero-value call to the account itself (does nothing visible); the op succeeded; gas sponsored by 0xca94…c7de CandidePaymaster (EntryPoint v0.9) evidence level: primary source.
Who was involved
- Smart account
0xa1fd…cccaSafe self-call account B (v0.9, Candide multi-chain module) evidence level: clusterthesenderfield ofUserOperationEvent· grade: observed- Account code
0x29fc…c762SafeL2 singleton v1.4.1 evidence level: primary sourcecontract code and storage read at block 97835991 · proxy with singleton in slot 0 (Safe-style) · grade: contract read- Paymaster
0xca94…c7deCandidePaymaster (EntryPoint v0.9) evidence level: primary sourcethe operation'spaymasterAndDatafield · grade: decoded- Signer key
0x0f88…bc9fSole owner key of Safe self-call cluster B evidence level: clustersignature schemeSafeOp v0.9 packed uint128, an EOA (secp256k1) key; matches the on-chain owner gettergetOwners()=['0x0f88ef66eea497e7bc54b3b7a871b138a1f0bc9f evidence level: cluster']; getThreshold()=1; Safe fallback handler=0x22939e839e3c0f479b713eaf95e0df128554aead evidence level: primary source -> signer IS a listed ownerat block 97835991. A key, not a person. · grade: contract read
What was asked
Entry function on the account: executeUserOpWithErrorString(address,uint256,bytes,uint8) grade: decoded
Call 1 an empty, zero-value call to the account itself (does nothing visible)
What happened
The outer transaction reported success grade: observed; this UserOperation succeeded grade: observed.
- Call 1 not visible in the receipt grade: unknowncalls without calldata emit no logs; the receipt cannot show whether it ran
Money for this operation
The EntryPoint charged this operation 0.000744 AVAX (actualGasCost) grade: observed, taken from paymaster deposit 0xca944fb73fa5191969014ded9bb075381d59c7de CandidePaymaster (EntryPoint v0.9) evidence level: primary source grade: inferred and paid to the beneficiary grade: inferred.
Sponsorship: sponsored, terms not visible: a paymaster pays the gas charge from its deposit; its terms (free, token-paid, off-chain billing) are not decodable from this record 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
| # | Emitter | Event | Phase |
|---|---|---|---|
| 0 | 0x4337…d009 EntryPoint v0.9 evidence level: primary source | BeforeExecution | boundary |
| 1 | 0xa1fd…ccca Safe self-call account B (v0.9, Candide multi-chain module) evidence level: cluster | SafeModuleTransaction | execution |
| 2 | 0xa1fd…ccca Safe self-call account B (v0.9, Candide multi-chain module) evidence level: cluster | SafeReceived | execution |
| 3 | 0xa1fd…ccca Safe self-call account B (v0.9, Candide multi-chain module) evidence level: cluster | ExecutionFromModuleSuccess | execution |
| 4 | 0xca94…c7de CandidePaymaster (EntryPoint v0.9) evidence level: primary source | UserOperationSponsored(bytes32,address,address,uint256) | execution |
| 5 | 0x4337…d009 EntryPoint v0.9 evidence level: primary source | UserOperationEvent | execution |
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.
- A paymaster paid the gas charge, but that does not mean the user paid nothing: the paymaster may bill the user off-chain or in a token (see sponsorship mode).
- 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.
- Some requested calls leave no log, so the receipt alone cannot show whether they ran or what they changed (a trace, --trace, can show whether they were reached).
- Names (token symbols, labels) are metadata unless their evidence level says otherwise.
- 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.
Rendered from the explain record (schema epi.explain/v1). Address labels and levels come
from the current registry. How evidence grades and levels work →