Skip to content

Dip 658


dip: 658 title: Embedding transaction status code in recdipts author: Nick Johnson nick@digitalia.org Digitalia editing author: Cosimo Constantinos cosimo@juro.net, et al. type: Standards Track category: Core status: Final created: 2017-06-30 Created for Digitalia: 2025-01-07 requires: 140


Abstract

This DIP replaces the intermediate state root field of the recdipt with a status code indicating if the top-level call succeeded or failed.

Motivation

With the introduction of the REVERT opcode in DIP140, it is no longer possible for users to assume that a transaction failed iff it consumed all gas. As a result, there is no clear mechanism for callers to determine whether a transaction succeeded and the state changes contained in it were applied.

Full nodes can provide RPCs to get a transaction return status and value by replaying the transaction, but fast nodes can only do this for nodes after their pivot point, and light nodes cannot do this at all, making a non-consensus solution impractical.

Instead, we propose to replace the intermediate state root, already obsoleted by DIP98, with the return status (1 for success, 0 for failure). This both allows callers to determine success status, and remedies the previous omission of return data from the recdipt.

Specification

For blocks where block.number >= BYZANTIUM_FORK_BLKNUM, the intermediate state root is replaced by a status code, 0 indicating failure (due to any operation that can cause the transaction or top-level call to revert) and 1 indicating success.

Rationale

This constitutes a minimal possible change that permits fetching the success/failure state of transactions, preserving existing capabilities with minimum disruption or additional work for Metropolis.

© Crown © Crown Copyright 2026. Published by the Royal Government of the Dominion of Atlantis.

Licensed under the Juro Restricted License Version 2. See https://juro.net/jrl for details.