Description:
A canonical, content-addressed structure that any independent party (wallet, hardware device, second machine, third-party verifier) can produce and re-verify from the exact same VerificationPayload + state snapshot.
It turns simulation from a trusted frontend service into a reproducible, machine-checkable artifact that can be bound into signatures and Scoped Capability Tokens.
Natural continuity with capability tokens (bind the result hash) and authority lifecycle (simulation is required before high-privilege authority transitions).
Abstract:
Standardizes the format, hashing, and verification of simulation results so that any compliant simulator produces identical canonical output for the same inputs. Enables “recompute on a component the UI does not control.”
Motivation:
A simulation served by a compromised frontend is worthless. Independence + canonicity closes the UI/calldata mismatch class of attacks.
Specification:
Inputs: full preimage of the transaction UserOperation SafeTx (including all fields that enter the hash), block/state root or Merkle proofs of relevant state, optional overrides.
Output (SimulationResult):
success (bool)
gasUsed
returnData logs (canonical encoding)
stateDiff (or hash of stateDiff)
balanceChanges tokenTransfers (structured)
semanticEffects (optional derived summary, preferably recomputed via ERC-7730-style descriptors)
snapshotId (block number + state root)
simulatorId version
Canonical hash: keccak256(abi.encode(SimulationResult)) or a domain-separated EIP-712 hash.
Requirement: hardware offline verifier MUST be able to re-execute (or re-verify proofs) and reject on mismatch.
Compliance: Basic (any simulator), Standard (multi-node consensus on state root), Strict (local revm/EVM execution + Merkle proofs of prestate).
Reference:
struct SimulationResult
bool success;
uint256 gasUsed;
bytes returnData;
bytes32 stateDiffHash;
bytes32 logsHash;
bytes32 snapshotId; blockHash or stateRoot
bytes32 resultHash; self-describing canonical hash
string derivedSummary; optional, claimed or recomputed
Discussion points:
Exact stateDiff encoding (full vs. hash-only for size).
Required prestate proofs vs. trusted RPC with multi-node consensus.
How tightly to bind into the VerificationPayload and capabilities.
I have set up a public draft repository for the Independent Simulation Result for (STVA) proposal and configured basic CI (Markdown linting, link checking, and codespell).
All checks are currently passing.
Canonicalization is the core value: all variable data is hashed so two independent simulators that produce identical semantic outcomes yield the identical resultHash.
Looking forward to feedbacks