How It Works6 min readEthereum (ETH)

After You Sign: Ethereum’s Proposed Final Check

A signature approves an instruction. Ethereum’s EIP-7906 proposes checking the result before accepting its effects. The crucial detail is what a failed check can—and cannot—undo.

After You Sign: Ethereum’s Proposed Final Check

AI-generated conceptual illustration: comparing a delivered tray with an order before accepting it. This is a metaphor for a proposal, not an existing wallet feature.

Key Points

  • As of October 17, 2026, EIP-7906 remains Draft and is being considered for Hegota. It is not an activated Ethereum feature.
  • The proposal adds a read-only ASSERT stage after execution, using transaction changes to check conditions chosen in advance.
  • A failed assertion rolls back the execution body. Consumed gas and the preceding validation stage remain, and weak conditions still offer weak protection.

Chronological Timeline

2025-02-21The proposal is created

EIP-7906 begins its proposal history; the current design has since evolved.

2026-09-24Considered for Hegota

ACDE #246 moves EIP-7906 to Considered for Inclusion, not confirmed activation.

2026-10-05The Foundation explains outcome checks

An explainer connects transaction assertions with the gap between signing and execution.

2026-10-15The rollback boundary is clarified

The specification explicitly preserves the EIP-8141 validation prefix on assertion failure.

2026-10-16POST_TX becomes ASSERT

The final checking mode is renamed. This is a specification revision, not a network launch.

The instruction and the receipt

Imagine agreeing to exchange one asset for at least a specified amount of another. The screen describes an action; what matters to you is the balance left afterward. Those are related promises, but they are not identical. A signature authorizes transaction data. It does not, by itself, turn every expectation in your head into an enforceable condition. This is a hypothetical example, not a report of a failed trade.[1][2]

The Ethereum Foundation’s October 5 explainer addresses that gap. A readable signing screen helps explain the requested action, while a simulation estimates what it would do against a particular chain state. The state or contract behavior may differ when execution actually happens. EIP-7906 asks a different question: can the transaction carry a final test of its own outcome, with consequences if that test fails?[2]

A familiar idea, with a wider view

Outcome conditions already exist inside applications. Uniswap v3’s swap interface has an amountOutMinimum parameter: a lower bound for what a swap should return. Its developer guide warns that using zero, as a simplified teaching example does, is risky in production. The presence of a checking mechanism is useful only when the chosen condition expresses a meaningful limit.[7]

The proposed extension is a more general view of what changed during a transaction, available to checking contracts. Instead of relying only on checks built into each called application, a wallet could attach a separate assertion. EIP-7906 depends on EIP-8141, another draft that divides transactions into frames with distinct jobs, including validation, payment approval and execution. Assertions would become an additional final frame mode.[1][3]

Checking after the work, inside the transaction

In the current text, all ASSERT frames sit together at the end. They are read-only: the checker can inspect the outcome but cannot alter state and then approve its own alteration. TXTRACE exposes transaction changes for enumeration; TXDIFF looks up a particular account or storage entry; EVENTDATACOPY makes emitted event data available. These are proposed EVM instructions, not buttons already available in ordinary wallets.[1]

Think of the state diff as a before-and-after comparison, not a video of every instruction. Repeated writes to a storage slot collapse into its net change; a value restored to its starting point does not appear as a net change in that list. Native ETH balance changes, contract storage and deployed code are distinct kinds of information. Reading a token’s economic meaning still requires appropriate logic: raw storage is not automatically a human-readable inventory of every token and permission.[1]

In our hypothetical exchange, a suitable assertion could check that the intended recipient received at least the agreed amount. But checking that one result alone would not prohibit unrelated changes elsewhere. A useful policy must also specify which assets, recipients and permissions matter. The protocol can execute the test; it cannot infer a complete expression of the user’s intent from a broad permission to transact.[1]

Undo has a boundary—and a bill

If an ASSERT frame fails, the current design rolls back the execution body to the point immediately after the frame that approved gas payment. The transaction itself remains valid for inclusion in a block, and the payer still pays for gas already consumed. It is therefore inaccurate to promise that a failed assertion erases the whole transaction or makes an unsuccessful attempt free.[1][5]

The earlier validation prefix remains committed. That prefix can include account deployment as well as payment approval. A wallet must place the untrusted application actions it wants protected after that boundary; moving an action into the prefix would put it outside the assertion’s rollback protection. The October 15 revision made this dividing line explicit. A useful mental picture is a rejected execution with its processing cost and trusted setup still recorded, not a universal undo button.[1][3][5]

Who writes the acceptance rule?

A malicious or mistaken interface could provide a condition so permissive that an unwanted result passes. The specification therefore treats the source of the rule, its inputs and the checker’s code as part of the design. A check derived from a value that the same transaction can alter may approve the very behavior it was meant to constrain. The chosen assertion must express intent independently enough to be meaningful.[1]

Nor does the proposal force every transaction to include a particular assertion. Wallet validation must require the right checking frame, target and data, rather than merely assume that a useful check will be present. Reliable checkers, careful gas budgeting and trustworthy validation logic remain necessary. This mechanism concerns the current transaction’s on-chain effects; it does not promise protection against later market moves or fulfillment on another chain.[1]

A developing specification, not a shipped guarantee

The October 5 blog used the mode name POST_TX. A merged October 16 change renamed it ASSERT, following the previous day’s rollback clarification. As checked on October 17, both EIP-7906 and its EIP-8141 dependency still carry Draft status. Forkcast records EIP-7906 as Considered for Inclusion in Hegota. That planning stage is not an activation announcement, and a specification’s maturity label is a different axis from upgrade scheduling.[1][2][3][4][5][6]

The proposal’s significance is a change in where a wallet can express the user’s bargain: not only in the instruction it signs, but in a test of the outcome execution produced. Whether that becomes useful protection depends on adoption and on the exact rule the wallet requires. For now, the honest reading is a developing way to constrain results, with a defined rollback boundary—not an assurance that any signed transaction can later be recalled.[1][6]

The next question

Continue reading

Explore the topic through other cases and contexts.

Sources & References

  1. [1]Source 1: EIP-7906: Transaction Assertions via State Diff OpcodeEthereum Improvement ProposalsAccessed 2026-10-17
  2. [2]Source 2: How native transaction assertions could enforce a transaction’s final outcomeEthereum Foundation · 2026-10-05Accessed 2026-10-17
  3. [3]Source 3: EIP-8141: Frame TransactionEthereum Improvement ProposalsAccessed 2026-10-17
  4. [4]Source 4: October 16 revision: POST_TX renamed ASSERTethereum/EIPsAccessed 2026-10-17
  5. [5]Source 5: October 15 revision: rollback boundary at the validation prefixethereum/EIPsAccessed 2026-10-17
  6. [6]Source 6: EIP-7906 upgrade inclusion historyEthereum ForkcastAccessed 2026-10-17
  7. [7]Source 7: Uniswap v3 single swaps: minimum output parametersUniswap DevelopersAccessed 2026-10-17