Hello Gents,
Thanks for the thoughtful discussion. Many of the points raised resonate with the work weâve been doing on blind signing and transaction unpredictability. For context, we have been researching and addressing a new class of phishing attacks called Transaction Simulation Spoofing (TSP), as well as broader TOCTOU-style issues.
I discovered this EIP a bit later than I would have liked, but better late than never. And I hope some of our observations can be helpful to the discussion. Below are a few reflections weâve developed that may support the design space.
1. Verification Approach
TL;DR:
- It is extremely difficult on-chain to prove that nothing else happened.
- Slot- or access-list-based verification tends to be fragile under real market conditions.
- Focusing on semantic outcomes (what happened) instead of technical mechanics (how it happened) seems more robust.
- Events offer a natural substrate for representing these outcomes.
- Comparing the transaction outcome at Time of Check with the outcome at Time of Use could be a more reliable approach.
1.1 The ânegative spaceâ limitation
We strongly agree with Alexâs point:
from within the EVM, it is practically impossible to guarantee that no unintended effect occurred.
This is also something we observed in TSP.
For example, verifying the absence of unexpected approvals would require comparing pre- and post-state allowances for every asset and every address, which is computationally unfeasible.
For this reason, relying on the 7702 batching capability to evaluate the final outcome of a transaction is likely insufficient: it can confirm that certain intended effects occurred, but it cannot prove that no additional or harmful effects happened alongside them.
1.2. Why access lists / slot diffs may not scale
DEX aggregators can adapt their routing dynamically depending on real-time conditions; tick intervals or liquidity can shift between the moment of signing and the moment of inclusion.
As a consequence:
- storage slots touched may differ
- contracts interacted with may differ
Even in legitimate use cases.
Therefore, validating technical details (slot sets, touched contracts, execution paths) may fail despite the transaction being semantically correct.
Validating technical mechanics does not always reflect the userâs expectations or the intended financial effect of the transaction.
1.3. Users reason in functional outcomes
Users think in terms of:
- âI give A, I receive B.â
- âI withdraw X.â
- âI stake Y.â
To improve UX and reduce blind signing, it seems fundamental to abstract internal mechanics and validate the functional outcome, not the specific implementation details.
1.4. Why events might be a better semantic surface
Although we do not yet have a strict standard for event usage, they are widely considered best practice:
- they log the functional evolution of dApps
- they are evaluated during audits
- they allow indexers to aggregate data cleanly
From our experience, events encode user-visible actions much more reliably than storage diffs.
So comparing what happened rather than how it happened feels like a more stable approach.
1.5 Intent-based semantic equivalence
This is why we have been leaning toward modeling expected outcomes as intents, and comparing executions through semantic equivalence, not bytecode reproduction.
For example, two different routes that swap the same two assets for approximately the same amount should be considered equivalent, even if the internal execution path diverges.
2. Ensuring Transaction Fidelity through Transaction Contractualization
Another angle we have been exploring is what we call transaction contractualization. We create a "contractâ between the user and the chain to ensure that the user gets something similar to what they signed for at signing time. In other words, a practical form of âwhat you see is what you get.â
The idea is that users should be given:
- a clear, understandable representation of the transactionâs expected outcome
- the ability to control their tolerances (slippage, risk bounds, asset restrictions)
- enough context to decide whether the simulated outcome matches their intent
From a UX perspective, users naturally treat the simulation outcome as a form of agreement:
âIf I sign this, I expect this to happen.â
To capture this, the expected outcome (with user-defined tolerances) can be expressed in a structured Intent that accompanies the transaction payload.
This creates a contract between the Time-of-Check (simulation) and Time-of-Use (execution).
Validation then becomes a comparison between:
- the user-signed intent blueprint, and
- the actual executed outcome,
ensuring similarity within user-approved boundaries and helping guarantee transaction fidelity.
3. Protocol-Level Enforcement
TL;DR:
- Off-chain checks can be bypassed or altered, creating false confidence.
- Protocol-level enforcement seems necessary for predictable guarantees.
- Block execution provides the final, authoritative outcome.
3.1 Why protocol-level matters
RPC-level or client-side checks can help but cannot offer strong guarantees:
- the transaction can be intercepted and rebroadcast to nodes or builders that do not perform any validation
- ordering and final state may differ from simulation
- the verification environment may not match the final execution environment
Protocol-level enforcement appears much stronger because:
- ordering is final at this level
- final effects are known precisely
- results are stored on-chain, making them transparent, auditable, and consensual
Given these factors, we have been leaning toward the idea that protocol-level enforcement is the only reliable place to ensure predictable and robust guarantees for users transactions outcome.
3.2. User-centric validation
We believe users should be able to express:
- expected outcomes
- tolerances / slippage
- asset restrictions
- intended beneficiaries
And wallets should display this in clear and accessible language, reducing ambiguity and blind signing.
3.3. dApp-provided validation logic
We really like the idea of dApps helping specify how to evaluate transactions interacting with their protocols, they know their systems best.
However, we also see some considerations:
- malicious dApps may provide permissive or misleading rules
- legitimate dApps may unintentionally miss edge cases
- incomplete or incorrect rules can weaken security
So some form of standardization, validation, or templating may be useful to ensure consistency and safety.
3.4 TSP and TOCTOU in practice
In TSP attacks, we observed:
- The simulation appears safe.
- The dApp front-runs the user.
- Execution diverges from simulation.
- With 7702 batching, multiple assets can be drained in a single tx.
This is a classic TOCTOU gap. The state at signing differs from the state at execution.
Binding the transaction to the expected outcome and validating it directly against the executed effects seems to significantly prevent this class of risks.
4. Closing Thought
Really appreciate this EIP. It addresses several deep structural issues weâve also been exploring.
Our current intuition points toward combining:
- semantic, event-based outcome evaluation
- user-defined tolerances
- intent-based contractualization
- protocol-level enforcement
- clear UX for expected results
Weâve been documenting some of these ideas in a draft we call the Transaction Fidelity Standard (TFS-1). Itâs still a work in progress, but sharing it here in case any parts of it are relevant to this conversation: link
Happy to continue contributing ideas, test cases, or empirical findings.
Thanks again for opening this important conversation.