diff --git a/.github/workflows/test-deploy.yaml b/.github/workflows/test-deploy.yaml index 67d6624c8..e7f27e5b0 100644 --- a/.github/workflows/test-deploy.yaml +++ b/.github/workflows/test-deploy.yaml @@ -30,6 +30,7 @@ jobs: - name: Test build website (no versions) run: | npm run build:spec + npm run test:docs npm run build:docs - name: Test versioned build (synthesized snapshot) diff --git a/.gitignore b/.gitignore index 0b3b597cd..6d0e85d7a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ api_versioned_docs/ api_versioned_sidebars/ api_versions.json docs-snapshot-*.tar.gz + +docs-openrpc.json diff --git a/Makefile b/Makefile index 921937132..b05d7c569 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,7 @@ SPECFLAGS := -schemas 'src/schemas' \ -schemas 'src/engine/openrpc/schemas' \ -methods 'src/eth' \ -methods 'src/debug' \ + -methods 'src/trace' \ -methods 'src/txpool' \ -methods 'src/engine/openrpc/methods' \ -methods 'src/testing' \ diff --git a/docs-api/api/methods/eth_simulateV1.mdx b/docs-api/api/methods/eth_simulateV1.mdx index b03ce987e..0f50a384b 100644 --- a/docs-api/api/methods/eth_simulateV1.mdx +++ b/docs-api/api/methods/eth_simulateV1.mdx @@ -8,7 +8,7 @@ description: "" import {TwoColumnLayout, InteractiveRequest, ResponseExample} from '@open-rpc/docusaurus-plugin/components'; import { useState } from 'react'; -}> +}> # eth_simulateV1 @@ -55,7 +55,7 @@ import { useState } from 'react'; #### `Block tag` fields - `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions; `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. Before the merge transition is finalized, any call querying for `finalized` or `safe` block MUST be responded to with `-39001: Unknown block` error + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions; `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. **Block tag** `string` @@ -103,69 +103,333 @@ import { useState } from 'react'; #### `Result of calls` fields - * **hash** `string` *required* + * **baseFeePerGas** `string` - Hash + Base fee per gas - *Match pattern:* `^0x[0-9a-f]{64}$` + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **parentHash** `string` *required* + * **blobGasUsed** `string` - Parent block hash + Blob gas used - *Match pattern:* `^0x[0-9a-f]{64}$` + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **sha3Uncles** `string` *required* + * **blockAccessListHash** `string` - Ommers hash + EIP-7928 block access list hash *Match pattern:* `^0x[0-9a-f]{64}$` *** - * **miner** `string` *required* + * **calls** `object or object` *required* - Coinbase + *** - *Match pattern:* `^0x[0-9a-fA-F]{40}$` +
+
+ + Show Option 1 `Result of call failure` object + - *** + #### `Result of call failure` fields - * **stateRoot** `string` *required* + The error messages are suggestions, and clients might implement different error messages. However, the error codes are enforced by the spec. - State root + **calls** `array` *required* - *Match pattern:* `^0x[0-9a-f]{64}$` + The error messages are suggestions, and clients might implement different error messages. However, the error codes are enforced by the spec. - *** + *** - * **transactionsRoot** `string` *required* +
+
+ + Show `calls` object + - Transactions root + #### `calls` fields - *Match pattern:* `^0x[0-9a-f]{64}$` + * **error** `object or object` *required* - *** + *** - * **receiptsRoot** `string` *required* +
+
+ + Show Option 1 `error` object + - Receipts root + #### `error` fields - *Match pattern:* `^0x[0-9a-f]{64}$` + **error** `object` *required* - *** + *** - * **logsBloom** `string` *required* +
+
+ + Show `error` object + - Bloom filter + #### `error` fields - *Match pattern:* `^0x[0-9a-f]{512}$` + * - *** + * **message** `string` *required* + + Suggested message prefix is "execution reverted". + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `error` object + + + #### `error` fields + + **error** `object` *required* + + *** + +
+
+ + Show `error` object + + + #### `error` fields + + * + + * **message** `string` *required* + + Suggested message prefix is "vm execution error". + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **gasUsed** `string` *required* + + Return gasUsed + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **maxUsedGas** `string` + + Maximum gas used during execution before refunds + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **returnData** `string` *required* + + Return data + + *Match pattern:* `^0x[0-9a-f]*$` + + *** + + * **status** `string` *required* + + Call Status Failure + + *Match pattern:* `^0x0$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 2 `Result of call success` object + + + #### `Result of call success` fields + + **calls** `array` *required* + + Result of call success + + *** + +
+
+ + Show `calls` object + + + #### `calls` fields + + * **gasUsed** `string` *required* + + Return gasUsed + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **logs** `array` *required* + + log + + *** + +
+
+ + Show `logs` object + + + #### `logs` fields + + * **address** `string` + + address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **blockHash** `string` + + block hash + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `string` + + block number + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** + + * **blockTimestamp** `string` + + block timestamp + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** + + * **data** `string` + + data + + *Match pattern:* `^0x[0-9a-f]*$` + + *** + + * **logIndex** `string` + + log index + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** + + * **removed** `boolean` + + removed + + *** + + * **topics** `array` + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionHash** `string` *required* + + transaction hash + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionIndex** `string` + + transaction index + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **maxUsedGas** `string` + + Maximum gas used during execution before refunds + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **returnData** `string` *required* + + Return data + + *Match pattern:* `^0x[0-9a-f]*$` + + *** + + * **status** `string` *required* + + Call Status Success + + *Match pattern:* `^0x1$` + + *** + + * **additionalProperties** `true` + + *** + + + + * **difficulty** `string` @@ -175,14 +439,22 @@ import { useState } from 'react'; *** - * **number** `string` *required* + * **excessBlobGas** `string` - Number + Excess blob gas *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** + * **extraData** `string` *required* + + Extra data + + *Match pattern:* `^0x[0-9a-f]*$` + + *** + * **gasLimit** `string` *required* Gas limit @@ -199,19 +471,27 @@ import { useState } from 'react'; *** - * **timestamp** `string` *required* + * **hash** `string` *required* - Timestamp + Hash - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x[0-9a-f]{64}$` *** - * **extraData** `string` *required* + * **logsBloom** `string` *required* - Extra data + Bloom filter - *Match pattern:* `^0x[0-9a-f]*$` + *Match pattern:* `^0x[0-9a-f]{512}$` + + *** + + * **miner** `string` *required* + + Coinbase + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` *** @@ -231,41 +511,49 @@ import { useState } from 'react'; *** - * **baseFeePerGas** `string` + * **number** `string` *required* - Base fee per gas + Number *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **withdrawalsRoot** `string` + * **parentBeaconBlockRoot** `string` - Withdrawals root + Parent Beacon Block Root *Match pattern:* `^0x[0-9a-f]{64}$` *** - * **blobGasUsed** `string` + * **parentHash** `string` *required* - Blob gas used + Parent block hash - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x[0-9a-f]{64}$` *** - * **excessBlobGas** `string` + * **receiptsRoot** `string` *required* - Excess blob gas + Receipts root - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x[0-9a-f]{64}$` *** - * **parentBeaconBlockRoot** `string` + * **requestsHash** `string` - Parent Beacon Block Root + EIP-7685 requests hash + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **sha3Uncles** `string` *required* + + Ommers hash *Match pattern:* `^0x[0-9a-f]{64}$` @@ -279,6 +567,22 @@ import { useState } from 'react'; *** + * **stateRoot** `string` *required* + + State root + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **timestamp** `string` *required* + + Timestamp + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** + * **transactions** `array or array` *required* *** @@ -304,108 +608,36 @@ import { useState } from 'react';
- Show Option 2 `Full transactions` array - - - #### `Full transactions` fields - - **transactions** `object or object or object or object or object` *required* - - *** - -
-
- - Show Option 1 `Signed 7702 Transaction` object - - - #### `Signed 7702 Transaction` fields - - **transactions** `array` *required* - - Signed 7702 Transaction - - *** - -
-
- - Show `transactions` object - - - #### `transactions` fields - - * **type** `string` *required* - - type - - *Match pattern:* `^0x4$` - - *** - - * **nonce** `string` *required* - - nonce - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - - *** - - * **to** `string` *required* - - to address - - *Match pattern:* `^0x[0-9a-fA-F]{40}$` - - *** - - * **gas** `string` *required* - - gas limit - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - - *** - - * **value** `string` *required* - - value - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - - *** - - * **input** `string` *required* - - input data - - *Match pattern:* `^0x[0-9a-f]*$` - - *** - - * **maxPriorityFeePerGas** `string` *required* - - Maximum fee per gas the sender is willing to pay to miners in wei + Show Option 2 `Full transactions` array + - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + #### `Full transactions` fields - *** + **transactions** `object or object or object or object or object` *required* - * **maxFeePerGas** `string` *required* + *** - The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei +
+
+ + Show Option 1 `Signed 7702 Transaction` object + - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + #### `Signed 7702 Transaction` fields - *** + **transactions** `array` *required* - * **gasPrice** `string` + Signed 7702 Transaction - The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using effectiveGasPrice in the receipt object going forward. + *** - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` +
+
+ + Show `transactions` object + - *** + #### `transactions` fields * **accessList** `array` *required* @@ -445,14 +677,6 @@ import { useState } from 'react'; - * **chainId** `string` *required* - - Chain ID that this transaction is valid on - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - - *** - * **authorizationList** `array` *required* List of authorizations for the transaction @@ -469,35 +693,27 @@ import { useState } from 'react'; List of authorizations for the transaction - * **chainId** `string` *required* + * **address** `string` *required* - Chain ID on which this transaction is valid + hex encoded address - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x[0-9a-fA-F]{40}$` *** - * **nonce** `string` *required* + * **chainId** `string` *required* - nonce + Chain ID on which this transaction is valid *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **address** `string` *required* - - hex encoded address - - *Match pattern:* `^0x[0-9a-fA-F]{40}$` - - *** - - * **yParity** `string` *required* + * **nonce** `string` *required* - The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature + nonce - *Match pattern:* `^0x([0-9a-fA-F]?){1,2}$` + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** @@ -517,98 +733,28 @@ import { useState } from 'react'; *** - * **additionalProperties** `true` - - *** - - - - * **yParity** `string` *required* - - The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature. - - *Match pattern:* `^0x([0-9a-fA-F]?){1,2}$` - - *** - - * **v** `string` - - For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`. - - *Match pattern:* `^0x([0-9a-fA-F]?){1,2}$` - - *** - - * **r** `string` *required* - - r - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - - *** - - * **s** `string` *required* - - s - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - - *** - - * **additionalProperties** `true` - - *** - - - - - -
-
- - Show Option 2 `Signed 4844 Transaction` object - - - #### `Signed 4844 Transaction` fields - - **transactions** `array` *required* - - Signed 4844 Transaction - - *** - -
-
- - Show `transactions` object - + * **yParity** `string` *required* - #### `transactions` fields + The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature - * **type** `string` *required* + *Match pattern:* `^0x[0-9a-f]{1,2}$` - type + *** - *Match pattern:* `^0x3$` + * **additionalProperties** `true` - *** + *** +
+
- * **nonce** `string` *required* + * **chainId** `string` *required* - nonce + Chain ID that this transaction is valid on *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **to** `string` *required* - - to address - - *Match pattern:* `^0x[0-9a-fA-F]{40}$` - - *** - * **gas** `string` *required* gas limit @@ -617,9 +763,9 @@ import { useState } from 'react'; *** - * **value** `string` *required* + * **gasPrice** `string` - value + The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using effectiveGasPrice in the receipt object going forward. *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` @@ -633,14 +779,6 @@ import { useState } from 'react'; *** - * **maxPriorityFeePerGas** `string` *required* - - Maximum fee per gas the sender is willing to pay to miners in wei - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - - *** - * **maxFeePerGas** `string` *required* The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei @@ -649,81 +787,51 @@ import { useState } from 'react'; *** - * **maxFeePerBlobGas** `string` *required* + * **maxPriorityFeePerGas** `string` *required* - The maximum total fee per gas the sender is willing to pay for blob gas in wei + Maximum fee per gas the sender is willing to pay to miners in wei *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **gasPrice** `string` + * **nonce** `string` *required* - The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using effectiveGasPrice in the receipt object going forward. + nonce *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **accessList** `array` *required* - - EIP-2930 access list - - *** - -
-
- - Show `accessList` object - - - #### `accessList` fields - - EIP-2930 access list - - * **address** `string` *required* - - hex encoded address - - *Match pattern:* `^0x[0-9a-fA-F]{40}$` - - *** - - * **storageKeys** `array` *required* - - 32 byte hex value - - *Match pattern:* `^0x[0-9a-f]{64}$` + * **r** `string` *required* - *** + r - * **additionalProperties** `false` + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - *** -
-
+ *** - * **blobVersionedHashes** `array` *required* + * **s** `string` *required* - List of versioned blob hashes associated with the transaction's EIP-4844 data blobs + s - *Match pattern:* `^0x[0-9a-f]{64}$` + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **chainId** `string` *required* + * **to** `string` *required* - Chain ID that this transaction is valid on + to address - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x[0-9a-fA-F]{40}$` *** - * **yParity** `string` *required* + * **type** `string` *required* - The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature. + type - *Match pattern:* `^0x([0-9a-fA-F]?){1,2}$` + *Match pattern:* `^0x4$` *** @@ -731,23 +839,23 @@ import { useState } from 'react'; For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`. - *Match pattern:* `^0x([0-9a-fA-F]?){1,2}$` + *Match pattern:* `^0x[0-9a-f]{1,2}$` *** - * **r** `string` *required* + * **value** `string` *required* - r + value *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **s** `string` *required* + * **yParity** `string` *required* - s + The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature. - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x[0-9a-f]{1,2}$` *** @@ -762,14 +870,14 @@ import { useState } from 'react';
- Show Option 3 `Signed 1559 Transaction` object + Show Option 2 `Signed 4844 Transaction` object - #### `Signed 1559 Transaction` fields + #### `Signed 4844 Transaction` fields **transactions** `array` *required* - Signed 1559 Transaction + Signed 4844 Transaction *** @@ -781,59 +889,59 @@ import { useState } from 'react'; #### `transactions` fields - * **type** `string` *required* - - type + * **accessList** `array` *required* - *Match pattern:* `^0x2$` + EIP-2930 access list *** - * **nonce** `string` *required* +
+
+ + Show `accessList` object + - nonce + #### `accessList` fields + + EIP-2930 access list + + * **address** `string` *required* - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + hex encoded address - *** + *Match pattern:* `^0x[0-9a-fA-F]{40}$` - * **to** `null or string` + *** - *** + * **storageKeys** `array` *required* -
-
- - Show Option 1 `Contract Creation (null)` null - + 32 byte hex value - #### `Contract Creation (null)` fields + *Match pattern:* `^0x[0-9a-f]{64}$` - **to** `null` + *** - Contract Creation (null) + * **additionalProperties** `false` - *** + ***
-
-
- - Show Option 2 `Address` string - + * **blobVersionedHashes** `array` *required* - #### `Address` fields + List of versioned blob hashes associated with the transaction's EIP-4844 data blobs - **to** `string` + *Match pattern:* `^0x[0-9a-f]{64}$` - Address + *** - *Match pattern:* `^0x[0-9a-fA-F]{40}$` + * **chainId** `string` *required* - *** -
-
+ Chain ID that this transaction is valid on + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** * **gas** `string` *required* @@ -843,9 +951,9 @@ import { useState } from 'react'; *** - * **value** `string` *required* + * **gasPrice** `string` - value + The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using effectiveGasPrice in the receipt object going forward. *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` @@ -859,9 +967,9 @@ import { useState } from 'react'; *** - * **maxPriorityFeePerGas** `string` *required* + * **maxFeePerBlobGas** `string` *required* - Maximum fee per gas the sender is willing to pay to miners in wei + The maximum total fee per gas the sender is willing to pay for blob gas in wei *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` @@ -875,65 +983,51 @@ import { useState } from 'react'; *** - * **gasPrice** `string` *required* + * **maxPriorityFeePerGas** `string` *required* - The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using effectiveGasPrice in the receipt object going forward. + Maximum fee per gas the sender is willing to pay to miners in wei *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **accessList** `array` *required* - - EIP-2930 access list - - *** - -
-
- - Show `accessList` object - - - #### `accessList` fields + * **nonce** `string` *required* - EIP-2930 access list + nonce - * **address** `string` *required* + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - hex encoded address + *** - *Match pattern:* `^0x[0-9a-fA-F]{40}$` + * **r** `string` *required* - *** + r - * **storageKeys** `array` *required* + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - 32 byte hex value + *** - *Match pattern:* `^0x[0-9a-f]{64}$` + * **s** `string` *required* - *** + s - * **additionalProperties** `false` + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - *** -
-
+ *** - * **chainId** `string` *required* + * **to** `string` *required* - Chain ID that this transaction is valid on. + to address - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x[0-9a-fA-F]{40}$` *** - * **yParity** `string` *required* + * **type** `string` *required* - The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature. + type - *Match pattern:* `^0x([0-9a-fA-F]?){1,2}$` + *Match pattern:* `^0x3$` *** @@ -941,23 +1035,23 @@ import { useState } from 'react'; For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`. - *Match pattern:* `^0x([0-9a-fA-F]?){1,2}$` + *Match pattern:* `^0x[0-9a-f]{1,2}$` *** - * **r** `string` *required* + * **value** `string` *required* - r + value *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **s** `string` *required* + * **yParity** `string` *required* - s + The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature. - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x[0-9a-f]{1,2}$` *** @@ -972,14 +1066,14 @@ import { useState } from 'react';
- Show Option 4 `Signed 2930 Transaction` object + Show Option 3 `Signed 1559 Transaction` object - #### `Signed 2930 Transaction` fields + #### `Signed 1559 Transaction` fields **transactions** `array` *required* - Signed 2930 Transaction + Signed 1559 Transaction *** @@ -991,60 +1085,52 @@ import { useState } from 'react'; #### `transactions` fields - * **type** `string` *required* - - type - - *Match pattern:* `^0x1$` - - *** - - * **nonce** `string` *required* - - nonce - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - - *** + * **accessList** `array` *required* - * **to** `null or string` + EIP-2930 access list ***
- Show Option 1 `Contract Creation (null)` null + Show `accessList` object - #### `Contract Creation (null)` fields + #### `accessList` fields - **to** `null` + EIP-2930 access list - Contract Creation (null) + * **address** `string` *required* - *** -
-
+ hex encoded address -
-
- - Show Option 2 `Address` string - + *Match pattern:* `^0x[0-9a-fA-F]{40}$` - #### `Address` fields + *** - **to** `string` + * **storageKeys** `array` *required* - Address + 32 byte hex value - *Match pattern:* `^0x[0-9a-fA-F]{40}$` + *Match pattern:* `^0x[0-9a-f]{64}$` - *** + *** + + * **additionalProperties** `false` + + ***
+ * **chainId** `string` *required* + + Chain ID that this transaction is valid on. + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** + * **gas** `string` *required* gas limit @@ -1053,9 +1139,9 @@ import { useState } from 'react'; *** - * **value** `string` *required* + * **gasPrice** `string` *required* - value + The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using effectiveGasPrice in the receipt object going forward. *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` @@ -1069,65 +1155,89 @@ import { useState } from 'react'; *** - * **gasPrice** `string` *required* + * **maxFeePerGas** `string` *required* - The gas price willing to be paid by the sender in wei + The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **accessList** `array` *required* + * **maxPriorityFeePerGas** `string` *required* - EIP-2930 access list + Maximum fee per gas the sender is willing to pay to miners in wei + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** -
-
- - Show `accessList` object - + * **nonce** `string` *required* - #### `accessList` fields + nonce - EIP-2930 access list + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - * **address** `string` *required* + *** - hex encoded address + * **r** `string` *required* - *Match pattern:* `^0x[0-9a-fA-F]{40}$` + r - *** + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - * **storageKeys** `array` *required* + *** - 32 byte hex value + * **s** `string` *required* - *Match pattern:* `^0x[0-9a-f]{64}$` + s - *** + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - * **additionalProperties** `false` + *** - *** + * **to** `null or string` + + *** + +
+
+ + Show Option 1 `Contract Creation (null)` null + + + #### `Contract Creation (null)` fields + + **to** `null` + + Contract Creation (null) + + ***
- * **chainId** `string` *required* +
+
+ + Show Option 2 `Address` string + - Chain ID that this transaction is valid on. + #### `Address` fields - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + **to** `string` - *** + Address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** +
+
- * **yParity** `string` *required* + * **type** `string` *required* - The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature. + type - *Match pattern:* `^0x([0-9a-fA-F]?){1,2}$` + *Match pattern:* `^0x2$` *** @@ -1135,23 +1245,23 @@ import { useState } from 'react'; For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`. - *Match pattern:* `^0x([0-9a-fA-F]?){1,2}$` + *Match pattern:* `^0x[0-9a-f]{1,2}$` *** - * **r** `string` *required* + * **value** `string` *required* - r + value *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **s** `string` *required* + * **yParity** `string` *required* - s + The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature. - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x[0-9a-f]{1,2}$` *** @@ -1166,14 +1276,14 @@ import { useState } from 'react';
- Show Option 5 `Signed Legacy Transaction` object + Show Option 4 `Signed 2930 Transaction` object - #### `Signed Legacy Transaction` fields + #### `Signed 2930 Transaction` fields **transactions** `array` *required* - Signed Legacy Transaction + Signed 2930 Transaction *** @@ -1185,84 +1295,60 @@ import { useState } from 'react'; #### `transactions` fields - * **type** `string` *required* - - type - - *Match pattern:* `^0x0$` - - *** - - * **nonce** `string` *required* - - nonce - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - - *** + * **accessList** `array` *required* - * **to** `null or string` + EIP-2930 access list ***
- Show Option 1 `Contract Creation (null)` null + Show `accessList` object - #### `Contract Creation (null)` fields + #### `accessList` fields - **to** `null` + EIP-2930 access list - Contract Creation (null) + * **address** `string` *required* - *** -
-
+ hex encoded address -
-
- - Show Option 2 `Address` string - + *Match pattern:* `^0x[0-9a-fA-F]{40}$` - #### `Address` fields + *** - **to** `string` + * **storageKeys** `array` *required* - Address + 32 byte hex value - *Match pattern:* `^0x[0-9a-fA-F]{40}$` + *Match pattern:* `^0x[0-9a-f]{64}$` - *** + *** + + * **additionalProperties** `false` + + ***
- * **gas** `string` *required* + * **chainId** `string` *required* - gas limit + Chain ID that this transaction is valid on. *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **value** `string` *required* + * **gas** `string` *required* - value + gas limit *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** - * **input** `string` *required* - - input data - - *Match pattern:* `^0x[0-9a-f]*$` - - *** - * **gasPrice** `string` *required* The gas price willing to be paid by the sender in wei @@ -1271,17 +1357,17 @@ import { useState } from 'react'; *** - * **chainId** `string` + * **input** `string` *required* - Chain ID that this transaction is valid on. + input data - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x[0-9a-f]*$` *** - * **v** `string` *required* + * **nonce** `string` *required* - v + nonce *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` @@ -1303,372 +1389,310 @@ import { useState } from 'react'; *** - * **additionalProperties** `true` + * **to** `null or string` *** - - - - - - - - * **withdrawals** `array` - - Validator withdrawal - - *** - -
-
- - Show `withdrawals` object - - - #### `withdrawals` fields - - * **index** `string` *required* - - index of withdrawal - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` - - *** - - * **validatorIndex** `string` *required* - index of validator that generated withdrawal +
+
+ + Show Option 1 `Contract Creation (null)` null + - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + #### `Contract Creation (null)` fields - *** + **to** `null` - * **address** `string` *required* + Contract Creation (null) - recipient address for withdrawal value + *** +
+
- *Match pattern:* `^0x[0-9a-fA-F]{40}$` +
+
+ + Show Option 2 `Address` string + - *** + #### `Address` fields - * **amount** `string` *required* + **to** `string` - value contained in withdrawal + Address - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + *Match pattern:* `^0x[0-9a-fA-F]{40}$` - *** + *** +
+
- * **additionalProperties** `false` + * **type** `string` *required* - *** -
-
+ type - * **uncles** `array` *required* + *Match pattern:* `^0x1$` - 32 byte hex value + *** - *Match pattern:* `^0x[0-9a-f]{64}$` + * **v** `string` - *** + For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`. - * **requestsHash** `string` + *Match pattern:* `^0x[0-9a-f]{1,2}$` - EIP-7685 requests hash + *** - *Match pattern:* `^0x[0-9a-f]{64}$` + * **value** `string` *required* - *** + value - * **calls** `object or object` *required* + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - *** + *** -
-
- - Show Option 1 `Result of call failure` object - + * **yParity** `string` *required* - #### `Result of call failure` fields + The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature. - The error messages are suggestions, and clients might implement different error messages. However, the error codes are enforced by the spec. + *Match pattern:* `^0x[0-9a-f]{1,2}$` - **calls** `array` *required* + *** - The error messages are suggestions, and clients might implement different error messages. However, the error codes are enforced by the spec. + * **additionalProperties** `true` - *** + *** + + + +
- Show `calls` object + Show Option 5 `Signed Legacy Transaction` object - #### `calls` fields - - * **status** `string` *required* - - Call Status Failure - - *Match pattern:* `^0x0$` - - *** - - * **returnData** `string` *required* - - Return data - - *Match pattern:* `^0x[0-9a-f]*$` - - *** - - * **gasUsed** `string` *required* - - Return gasUsed - - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` - - *** - - * **error** `object or object` *required* - - *** - -
-
- - Show Option 1 `error` object - - - #### `error` fields - - **error** `object` *required* - - *** - -
-
- - Show `error` object - + #### `Signed Legacy Transaction` fields - #### `error` fields + **transactions** `array` *required* - * + Signed Legacy Transaction - * **message** `string` *required* + *** - *Match pattern:* `^execution reverted.*` +
+
+ + Show `transactions` object + - *** + #### `transactions` fields - * **additionalProperties** `true` + * **chainId** `string` - *** -
-
- - + Chain ID that this transaction is valid on. -
-
- - Show Option 2 `error` object - + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - #### `error` fields + *** - **error** `object` *required* + * **gas** `string` *required* + + gas limit + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` *** -
-
- - Show `error` object - + * **gasPrice** `string` *required* - #### `error` fields + The gas price willing to be paid by the sender in wei - * + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - * **message** `string` + *** - *Match pattern:* `^vm execution error.*` + * **input** `string` *required* - *** + input data - * **additionalProperties** `true` + *Match pattern:* `^0x[0-9a-f]*$` - *** -
-
-
-
+ *** - * **additionalProperties** `true` + * **nonce** `string` *required* - *** - - - - + nonce -
-
- - Show Option 2 `Result of call success` object - + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - #### `Result of call success` fields + *** - **calls** `array` *required* + * **r** `string` *required* - Result of call success + r - *** + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` -
-
- - Show `calls` object - + *** - #### `calls` fields + * **s** `string` *required* - * **status** `string` *required* + s - Call Status Success + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - *Match pattern:* `^0x1$` + *** - *** + * **to** `null or string` - * **returnData** `string` *required* + *** - Return data +
+
+ + Show Option 1 `Contract Creation (null)` null + - *Match pattern:* `^0x[0-9a-f]*$` + #### `Contract Creation (null)` fields - *** + **to** `null` - * **gasUsed** `string` *required* + Contract Creation (null) - Return gasUsed + *** +
+
- *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` +
+
+ + Show Option 2 `Address` string + - *** + #### `Address` fields - * **logs** `array` *required* + **to** `string` - log + Address - *** + *Match pattern:* `^0x[0-9a-fA-F]{40}$` -
-
- - Show `logs` object - + *** +
+
- #### `logs` fields + * **type** `string` *required* - * **removed** `boolean` + type - removed + *Match pattern:* `^0x0$` - *** + *** - * **logIndex** `string` + * **v** `string` *required* - log index + v - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - *** + *** - * **transactionIndex** `string` + * **value** `string` *required* - transaction index + value - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` - *** + *** - * **transactionHash** `string` *required* + * **additionalProperties** `true` - transaction hash + *** + + + + + + - *Match pattern:* `^0x[0-9a-f]{64}$` + * **transactionsRoot** `string` *required* - *** + Transactions root - * **blockHash** `string` + *Match pattern:* `^0x[0-9a-f]{64}$` - block hash + *** - *Match pattern:* `^0x[0-9a-f]{64}$` + * **uncles** `array` *required* - *** + 32 byte hex value - * **blockNumber** `string` + *Match pattern:* `^0x[0-9a-f]{64}$` - block number + *** - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + * **withdrawals** `array` - *** + Validator withdrawal - * **blockTimestamp** `string` + *** - block timestamp +
+
+ + Show `withdrawals` object + - *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + #### `withdrawals` fields - *** + * **address** `string` *required* - * **address** `string` + recipient address for withdrawal value - address + *Match pattern:* `^0x[0-9a-fA-F]{40}$` - *Match pattern:* `^0x[0-9a-fA-F]{40}$` + *** - *** + * **amount** `string` *required* - * **data** `string` + value contained in withdrawal - data + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` - *Match pattern:* `^0x[0-9a-f]*$` + *** - *** + * **index** `string` *required* - * **topics** `array` + index of withdrawal - 32 hex encoded bytes + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` - *Match pattern:* `^0x[0-9a-f]{64}$` + *** - *** + * **validatorIndex** `string` *required* - * **additionalProperties** `false` + index of validator that generated withdrawal - *** -
-
+ *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` - * **additionalProperties** `true` + *** - *** - - + * **additionalProperties** `false` + + *** + * **withdrawalsRoot** `string` + + Withdrawals root + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + * **additionalProperties** `true` *** @@ -1923,4 +1947,101 @@ import { useState } from 'react'; Client adjustable limit exceeded + + ## Examples + +
+
+ + eth_simulateV1 simple transfer + + + #### Request + + ```json + { + "params": [ + { + "blockStateCalls": [ + { + "calls": [ + { + "from": "0xc000000000000000000000000000000000000000", + "to": "0xc100000000000000000000000000000000000000", + "value": "0x3e8" + }, + { + "from": "0xc100000000000000000000000000000000000000", + "to": "0xc200000000000000000000000000000000000000", + "value": "0x3e8" + } + ], + "stateOverrides": { + "0xc000000000000000000000000000000000000000": { + "balance": "0x3e8" + } + } + } + ] + }, + "latest" + ] + } + ``` + + #### Response + + ```json + [ + { + "baseFeePerGas": "0x0", + "blobGasUsed": "0x0", + "calls": [ + { + "gasUsed": "0x5208", + "logs": [], + "maxUsedGas": "0x5208", + "returnData": "0x", + "status": "0x1" + }, + { + "gasUsed": "0x5208", + "logs": [], + "maxUsedGas": "0x5208", + "returnData": "0x", + "status": "0x1" + } + ], + "difficulty": "0x0", + "excessBlobGas": "0x0", + "extraData": "0x", + "gasLimit": "0xbebc200", + "gasUsed": "0xa410", + "hash": "0xdb785f2444d7f68bc2bc04860c27ad059217192d17e2889ec801bcae9209b204", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x0000000000000000000000000000000000000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x37", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash": "0xd226371d0b1551adb03fb52b71f08e3e11247fe9b1af994768af8cdaa8e7dcd7", + "receiptsRoot": "0x75308898d571eafb5cd8cde8278bf5b3d13c5f6ec074926de3bb895b519264e1", + "requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x2c5", + "stateRoot": "0x026d07e9a1fb2c8e737ede84b4d70fd2c3be2872646b9ff1d13c215eb81354e5", + "timestamp": "0x228", + "transactions": [ + "0xf1c5abb08809ef760f87aeabe7a87284c60797192dab6d2f0d26c27c9c038e9d", + "0xbc123d32ae457d4a444af60d1aef663c2f4a77c44a52bec0eef8ac81b53549cb" + ], + "transactionsRoot": "0x6d79cfd6f20bf10a0b3831acf15402528b00992cb9a71302596de7fbb4ebfb07", + "uncles": [], + "withdrawals": [], + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" + } + ] + ``` +
+
diff --git a/docs-api/api/methods/trace_block.mdx b/docs-api/api/methods/trace_block.mdx new file mode 100644 index 000000000..7a0c1664d --- /dev/null +++ b/docs-api/api/methods/trace_block.mdx @@ -0,0 +1,1645 @@ +--- +# GENERATED DOCUMENTATION - DO NOT EDIT THIS FILE +title: "trace_block" +hide_table_of_contents: true +description: "Return transaction records in transaction-index order, each tree in preorder, followed by the block's historical PoW rewards, the block reward first and then uncle rewards in ommer order. The genesis block has no transaction or reward records and returns []. Do not emit synthetic zero PoW rewards after the Merge. Withdrawals and system operations are applied to state but are not trace records. Trace the block from its parent's post-block state with its own pre-transaction system operations applied, under its own fork rules. Block does not accept pending (-32602) until a pending contract exists; records never carry a block hash that is not canonical. An unknown selected block returns -32001 (Resource not found); a known block whose required state is pruned returns 4444 (H05,H06,H27,H28,H32). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references." +--- + +import {TwoColumnLayout, InteractiveRequest, ResponseExample} from '@open-rpc/docusaurus-plugin/components'; +import { useState } from 'react'; + +}> + # trace_block + + Return transaction records in transaction-index order, each tree in preorder, followed by the block's historical PoW rewards, the block reward first and then uncle rewards in ommer order. The genesis block has no transaction or reward records and returns \[]. Do not emit synthetic zero PoW rewards after the Merge. Withdrawals and system operations are applied to state but are not trace records. Trace the block from its parent's post-block state with its own pre-transaction system operations applied, under its own fork rules. Block does not accept pending (-32602) until a pending contract exists; records never carry a block hash that is not canonical. An unknown selected block returns -32001 (Resource not found); a known block whose required state is pruned returns 4444 (H05,H06,H27,H28,H32). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references. + + Returns localized call traces for a block. + + ## Parameters (by position) + + **Block** `string or string` *required* + + *** + +
+
+ + Show Option 1 `Block number` string + + + #### `Block number` fields + + **Block** `string` *required* + + Block number + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** +
+
+ +
+
+ + Show Option 2 `Block tag` string + + + #### `Block tag` fields + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + **Block** `string` *required* + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + *Allowed values:* `earliest` `finalized` `safe` `latest` + + *** +
+
+ + ## Result + + **Result** `array or array or array or array or array or array or array or array` + + *** + +
+
+ + Show Option 1 `Successful CALL` array + + + #### `Successful CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Successful frame; result is required and error must be absent. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"call"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 2 `Reverted CALL` array + + + #### `Reverted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + REVERT; result carries the frame's gas and revert bytes. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"call"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 3 `Halted CALL` array + + + #### `Halted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Exceptional halt; result is omitted or null. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"call"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 4 `Successful CREATE` array + + + #### `Successful CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Successful frame; result is required and error must be absent. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object or object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"create"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 5 `Reverted CREATE` array + + + #### `Reverted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + REVERT; result carries the frame's gas and revert bytes, without address or code. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object or object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"create"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 6 `Halted CREATE` array + + + #### `Halted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Exceptional halt, including an address collision; result is omitted or null. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"create"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 7 `Historical call trace record or protocol reward` array + + + #### `Historical call trace record or protocol reward` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **balance** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **refundAddress** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"suicide"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 8 `Historical call trace record or protocol reward` array + + + #### `Historical call trace record or protocol reward` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + A historical PoW block or uncle reward paid to author. Withdrawals and system operations are not reward records (H05). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + A historical PoW block or uncle reward paid to author. Withdrawals and system operations are not reward records (H05). + + * **author** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **rewardType** `string` *required* + + *Allowed values:* `block` `uncle` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"reward"` + + *** + + * **transactionHash** `null` *required* + + *** + + * **transactionPosition** `null` *required* + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + + ## Errors + +
+ + Error code: -32601 + + + * **code** + + -32601 + * **message** + + Method not found +
+ +
+ + Error code: -32602 + + + * **code** + + -32602 + * **message** + + Invalid params +
+ +
+ + Error code: -32001 + + + * **code** + + -32001 + * **message** + + Resource not found +
+ +
+ + Error code: 4444 + + + * **code** + + 4444 + * **message** + + Pruned history unavailable +
+ + ## Examples + +
+
+ + trace_block result shape + + + Illustrative response shape; exact execution depends on chain state. + + #### Request + + ```json + { + "params": [ + "latest" + ] + } + ``` + + #### Response + + ```json + [] + ``` +
+
+ diff --git a/docs-api/api/methods/trace_call.mdx b/docs-api/api/methods/trace_call.mdx new file mode 100644 index 000000000..6af2a21c1 --- /dev/null +++ b/docs-api/api/methods/trace_call.mdx @@ -0,0 +1,3985 @@ +--- +# GENERATED DOCUMENTATION - DO NOT EDIT THIS FILE +title: "trace_call" +hide_table_of_contents: true +description: "Execute against the state at the end of the selected block, default latest, under its fork rules and block environment. Block accepts a number, tag or block hash; an unknown selected block returns -32001 (Resource not found), and a known block whose required state is pruned returns 4444. pending has no agreed semantics yet; a client that does not implement it must reject it explicitly rather than substitute another block (H32). Fees follow eth_call and eth_simulateV1 (H15). Omitted fee fields default to 0. The effective gas price is gasPrice, or min(maxPriorityFeePerGas + base fee, maxFeePerGas), computed after defaulting; when it is 0, GASPRICE and BASEFEE are both 0 and no gas fee is paid. BLOBBASEFEE is 0 exactly when maxFeePerBlobGas is supplied as 0 or defaulted to 0; a call without blob fields keeps the block's BLOBBASEFEE. Other block fields are unchanged. Fee validation is skipped only when both fee caps are 0, as with gasPrice 0. Omitted gas, and supplied gas above the server's execution cap, run with that cap, as eth_call does; the cap is server policy, not a truncated result. A validation failure without a listed code is -32602. Unsigned calls skip the EIP-3607 sender-code check, as eth_call does. Otherwise the price must cover the base fee (-38012), maxPriorityFeePerGas must not exceed maxFeePerGas (-32602), and the sender must fund the upfront cost (-38014); execution then charges the upfront gas payment, applies refunds, burns the base fee and pays the tip. A zero price does not exempt value transfers from funding. Validation rejections use the eth_simulateV1 codes listed below; malformed requests use -32602. Optional StateOverrides and BlockOverrides use the eth_simulateV1 schemas and apply before execution; block overrides replace fields of the selected block environment, and the zero-fee rule then uses the overridden base fee. A client that does not implement an override parameter must reject a non-null value with -32602. Simulated changes are discarded. EVM failure is trace output; invalid parameters or unavailable state are RPC errors (H08,H11,H14,H15,H28). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references." +--- + +import {TwoColumnLayout, InteractiveRequest, ResponseExample} from '@open-rpc/docusaurus-plugin/components'; +import { useState } from 'react'; + +}> + # trace_call + + Execute against the state at the end of the selected block, default latest, under its fork rules and block environment. Block accepts a number, tag or block hash; an unknown selected block returns -32001 (Resource not found), and a known block whose required state is pruned returns 4444. pending has no agreed semantics yet; a client that does not implement it must reject it explicitly rather than substitute another block (H32). Fees follow eth_call and eth_simulateV1 (H15). Omitted fee fields default to 0. The effective gas price is gasPrice, or min(maxPriorityFeePerGas + base fee, maxFeePerGas), computed after defaulting; when it is 0, GASPRICE and BASEFEE are both 0 and no gas fee is paid. BLOBBASEFEE is 0 exactly when maxFeePerBlobGas is supplied as 0 or defaulted to 0; a call without blob fields keeps the block's BLOBBASEFEE. Other block fields are unchanged. Fee validation is skipped only when both fee caps are 0, as with gasPrice 0. Omitted gas, and supplied gas above the server's execution cap, run with that cap, as eth_call does; the cap is server policy, not a truncated result. A validation failure without a listed code is -32602. Unsigned calls skip the EIP-3607 sender-code check, as eth_call does. Otherwise the price must cover the base fee (-38012), maxPriorityFeePerGas must not exceed maxFeePerGas (-32602), and the sender must fund the upfront cost (-38014); execution then charges the upfront gas payment, applies refunds, burns the base fee and pays the tip. A zero price does not exempt value transfers from funding. Validation rejections use the eth_simulateV1 codes listed below; malformed requests use -32602. Optional StateOverrides and BlockOverrides use the eth_simulateV1 schemas and apply before execution; block overrides replace fields of the selected block environment, and the zero-fee rule then uses the overridden base fee. A client that does not implement an override parameter must reject a non-null value with -32602. Simulated changes are discarded. EVM failure is trace output; invalid parameters or unavailable state are RPC errors (H08,H11,H14,H15,H28). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references. + + Executes an unsigned call and returns selected traces. + + ## Parameters (by position) + + **Call** `object` *required* + + Unsigned simulation. The fields are those of the eth_simulateV1 GenericCallTransaction, with chainId and authorizationList as in GenericTransaction, plus data as a compatibility alias for input. When data and input are both present they MUST be equal; otherwise return -32602. Every field defined here MUST either take effect with its eth_call meaning or cause the request to be rejected (-32602, or the selected fork's validity error, such as authorizationList before Prague); a client MUST NOT silently ignore a defined field. Only fields outside this schema are ignored, and accepting them does not establish extension support (H14). Omitted or null to creates a contract. Defaults: from zero address, value zero, input empty; omitted gas, and gas above the client execution cap, use that cap as in eth_call. Omitted gasPrice, maxFeePerGas and maxPriorityFeePerGas default to 0 as in eth_call and eth_simulateV1; maxFeePerBlobGas defaults to 0 when blobVersionedHashes are present (H15). Legacy gasPrice and dynamic fee fields MUST NOT be combined. A supplied nonce is accepted but neither validated nor used: execution, including CREATE address derivation, uses the sender nonce in the selected state. A supplied chainId must match the chain. + + *** + +
+
+ + Show `Call` object + + + #### `Call` fields + + * **accessList** `array` + + Access list entry + + *** + +
+
+ + Show `accessList` object + + + #### `accessList` fields + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **storageKeys** `array` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **authorizationList** `array` + + List of authorizations for the transaction + + *** + +
+
+ + Show `authorizationList` object + + + #### `authorizationList` fields + + List of authorizations for the transaction + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **chainId** `string` *required* + + Chain ID on which this transaction is valid + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** + + * **nonce** `string` *required* + + nonce + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** + + * **r** `string` *required* + + r + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **s** `string` *required* + + s + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **yParity** `string` *required* + + The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature + + *Match pattern:* `^0x[0-9a-f]{1,2}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **blobVersionedHashes** `array` + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **chainId** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **data** `string` + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **from** `string` + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` + + hex encoded 64 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **gasPrice** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **maxFeePerBlobGas** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **maxFeePerGas** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **maxPriorityFeePerGas** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **nonce** `string` + + hex encoded 64 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **to** `string or null` + + *** + +
+
+ + Show Option 1 `hex encoded address` string + + + #### `hex encoded address` fields + + **to** `string` + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** +
+
+ +
+
+ + Show Option 2 `to` null + + + #### `to` fields + + **to** `null` + + *** +
+
+ + * **type** `string` + + hex encoded byte + + *Match pattern:* `^0x[0-9a-f]{1,2}$` + + *** + + * **value** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** + + + + **TraceTypes** `array` *required* + + *Allowed values:* `trace` `stateDiff` `vmTrace` + + *** + + **Block** `string or string or string` + + *** + +
+
+ + Show Option 1 `Block number` string + + + #### `Block number` fields + + **Block** `string` + + Block number + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** +
+
+ +
+
+ + Show Option 2 `Block tag` string + + + #### `Block tag` fields + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions; `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + **Block** `string` + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions; `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + *Allowed values:* `earliest` `finalized` `safe` `latest` `pending` + + *** +
+
+ +
+
+ + Show Option 3 `Block hash` string + + + #### `Block hash` fields + + **Block** `string` + + Block hash + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** +
+
+ + **StateOverrides** `object or null` + + *** + +
+
+ + Show Option 1 `Dictionary of addresses in the state to be overridden` object + + + #### `Dictionary of addresses in the state to be overridden` fields + + **StateOverrides** `object` + + Dictionary of addresses in the state to be overridden + + *** + +
+
+ + Show `StateOverrides` object + + + #### `StateOverrides` fields + + * **^0x\[a-fA-F0-9]\{40}$** `object or object` + + *** + +
+
+ + Show Option 1 `Account override with whole storage replacement` object + + + #### `Account override with whole storage replacement` fields + + It is possible to override any kind of address (EOA's, contracts and precompiles) + + **^0x\[a-fA-F0-9]\{40}$** `object` + + It is possible to override any kind of address (EOA's, contracts and precompiles) + + *** + +
+
+ + Show `^0x[a-fA-F0-9]{40}$` object + + + #### `^0x[a-fA-F0-9]{40}$` fields + + * **balance** `string` + + Balance + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **code** `string` + + Code + + *Match pattern:* `^0x[0-9a-f]*$` + + *** + + * **movePrecompileToAddress** `string` + + Moves addresses precompile into the specified address. This move is done before the 'code' override is set. When the specified address is not a precompile, the behaviour is undefined and different clients might behave differently. + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **nonce** `string` + + Nonce + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **state** `object` *required* + + Key-value mapping to override all slots in the account storage before executing the call. This functions similar to eth_call's state parameter. + + *** + +
+
+ + Show `state` object + + + #### `state` fields + + Key-value mapping to override all slots in the account storage before executing the call. This functions similar to eth_call's state parameter. + + * **^0x\[a-fA-F0-9]\{64}$** `string` + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** +
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `Account override with partial storage modification` object + + + #### `Account override with partial storage modification` fields + + **^0x\[a-fA-F0-9]\{40}$** `object` + + Account override with partial storage modification + + *** + +
+
+ + Show `^0x[a-fA-F0-9]{40}$` object + + + #### `^0x[a-fA-F0-9]{40}$` fields + + * **balance** `string` + + Balance + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **code** `string` + + Code + + *Match pattern:* `^0x[0-9a-f]*$` + + *** + + * **movePrecompileToAddress** `string` + + Moves addresses precompile into the specified address. This move is done before the 'code' override is set. Can only move precompiles. + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **nonce** `string` + + Nonce + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **stateDiff** `object` *required* + + Key-value mapping to override individual slots in the account storage before executing the call. This functions similar to eth_call's state parameter. + + *** + +
+
+ + Show `stateDiff` object + + + #### `stateDiff` fields + + Key-value mapping to override individual slots in the account storage before executing the call. This functions similar to eth_call's state parameter. + + * **^0x\[a-fA-F0-9]\{64}$** `string` + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** +
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+
+
+
+
+ +
+
+ + Show Option 2 `Optional state overrides` null + + + #### `Optional state overrides` fields + + **StateOverrides** `null` + + Optional state overrides + + *** +
+
+ + **BlockOverrides** `object or null` + + *** + +
+
+ + Show Option 1 `Context fields related to the block being executed` object + + + #### `Context fields related to the block being executed` fields + + **BlockOverrides** `object` + + Context fields related to the block being executed + + *** + +
+
+ + Show `BlockOverrides` object + + + #### `BlockOverrides` fields + + * **baseFeePerGas** `string` + + Base fee per unit of gas + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **blobBaseFee** `string` + + Base fee per unit of blob gas + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **feeRecipient** `string` + + Address set by the proposer/builder to receive priority fees. Often matches the block header `feeRecipient` field but is not the COINBASE EVM opcode. + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gasLimit** `string` + + Gas limit + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **number** `string` + + When overriding block numbers across multiple blocks, block number need to be increasing. Skipping over blocks numbers is possible. If block number is not specified, it's incremented by one for each block. + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **prevRandao** `string` + + The Previous value of randomness beacon + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **time** `string` + + Time must either increase or remain constant relative to the previous block. If time is not specified, it's incremented by one for each block. + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **withdrawals** `array` + + This array can have a maximum length of 16. + + *** + +
+
+ + Show `withdrawals` object + + + #### `withdrawals` fields + + This array can have a maximum length of 16. + + * **address** `string` *required* + + recipient address for withdrawal value + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **amount** `string` *required* + + value contained in withdrawal + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **index** `string` *required* + + index of withdrawal + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **validatorIndex** `string` *required* + + index of validator that generated withdrawal + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + + +
+
+ + Show Option 2 `Optional block overrides` null + + + #### `Optional block overrides` fields + + **BlockOverrides** `null` + + Optional block overrides + + *** +
+
+ + ## Result + + **Result** `object` + + output always contains actual return bytes, including when only stateDiff is selected. Unrequested trace is \[], stateDiff and vmTrace are null. A selected vmTrace is always an object, even for an EOA or precompile target (H08,H20). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **stateDiff** `object or null` *required* + + *** + +
+
+ + Show Option 1 `TraceStateDiff` object + + + #### `TraceStateDiff` fields + + Net committed state changes for this execution, comparing the execution endpoints. An account appears only if its balance, nonce, code, storage or existence changed. Existence means presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a deletion. + and - appear only when the account is born or dies; = marks an unchanged field and \* a changed field of an account that exists at both endpoints. A born account includes zero nonce and empty code creation markers and lists its nonzero post-state slots. A deleted account has empty storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving transaction-level changes remain. callMany diffs are relative to each preceding post-state. Multiple authorization writes are reduced to their net effect, including nonce changes when final code equals initial code. An account absent at both endpoints has no account diff. The sender pays value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 post-block calls, rewards) belong to no transaction's diff, so concatenated diffs do not reconstruct the block post-state (H16-H18,H26). + + **stateDiff** `object` *required* + + Net committed state changes for this execution, comparing the execution endpoints. An account appears only if its balance, nonce, code, storage or existence changed. Existence means presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a deletion. + and - appear only when the account is born or dies; = marks an unchanged field and \* a changed field of an account that exists at both endpoints. A born account includes zero nonce and empty code creation markers and lists its nonzero post-state slots. A deleted account has empty storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving transaction-level changes remain. callMany diffs are relative to each preceding post-state. Multiple authorization writes are reduced to their net effect, including nonce changes when final code equals initial code. An account absent at both endpoints has no account diff. The sender pays value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 post-block calls, rewards) belong to no transaction's diff, so concatenated diffs do not reconstruct the block post-state (H16-H18,H26). + + *** + +
+
+ + Show `stateDiff` object + + + #### `stateDiff` fields + + * **^0x\[0-9a-f]\{40}$** `object or object or object` + + *** + +
+
+ + Show Option 1 `Born account` object + + + #### `Born account` fields + + Absent before and present after; every field uses +, and storage lists nonzero slots. + + **^0x\[0-9a-f]\{40}$** `object` + + Absent before and present after; every field uses +, and storage lists nonzero slots. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **code** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **+** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **-** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **nonce** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object` + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + +
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `Deleted account` object + + + #### `Deleted account` fields + + Present before and absent after; every field uses -, and storage is empty because deletion wipes all storage. + + **^0x\[0-9a-f]\{40}$** `object` + + Present before and absent after; every field uses -, and storage is empty because deletion wipes all storage. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **code** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **+** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **-** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **nonce** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object or object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show Option 1 `TraceStorageChange` object + + + #### `TraceStorageChange` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + **^0x\[0-9a-f]\{64}$** `object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + - **+** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + - **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceStorageChange` object + + + #### `TraceStorageChange` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + **^0x\[0-9a-f]\{64}$** `object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + - **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **to** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + - **additionalProperties** `false` + + *** +
+
+
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `Existing account` object + + + #### `Existing account` fields + + Present at both endpoints; fields use = or \*, slots use \*, and at least one value changed. + + **^0x\[0-9a-f]\{40}$** `object` + + Present at both endpoints; fields use = or \*, slots use \*, and at least one value changed. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` string + + + #### `TraceQuantityChange` fields + + **balance** `string` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ + * **code** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` string + + + #### `TraceCodeChange` fields + + **code** `string` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ + * **nonce** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` string + + + #### `TraceQuantityChange` fields + + **nonce** `string` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object` + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + +
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+
+
+
+
+ +
+
+ + Show Option 2 `stateDiff` null + + + #### `stateDiff` fields + + **stateDiff** `null` *required* + + *** +
+
+ + * **trace** `array or array or array or array or array or array or array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show Option 1 `Successful CALL` array + + + #### `Successful CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 2 `Reverted CALL` array + + + #### `Reverted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 3 `Halted CALL` array + + + #### `Halted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 4 `Successful CREATE` array + + + #### `Successful CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object or object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 5 `Reverted CREATE` array + + + #### `Reverted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object or object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 6 `Halted CREATE` array + + + #### `Halted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 7 `Call trace record inside an execution envelope` array + + + #### `Call trace record inside an execution envelope` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"suicide"` + + *** + + * **action** `object` *required* + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **balance** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **refundAddress** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + + * **vmTrace** `object or null` *required* + + *** + +
+
+ + Show Option 1 `Recursive VM execution trace` object + + + #### `Recursive VM execution trace` fields + + code is the actually executed bytecode, including initcode and resolved delegated code. ops lists every operation that began executing; operations rejected before execution (undefined opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies inside code. cost is the total gas deducted from the caller when the operation starts, including gas made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the caller's remaining gas after the operation, including unused gas returned by a child. An operation that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top k stack words after execution, deepest first, as minimal quantities, where k is the number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE and MLOAD \[off, off+32), MSTORE8 \[off, off+1), the destination of CALLDATACOPY, CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE and SLOAD never set it. sub is the trace of the child frame this operation entered, including precompile and empty-code targets, which give \{code: 0x, ops: \[]} when no instruction ran; it is null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are optional annotations (H19-H21). + + **vmTrace** `object` *required* + + code is the actually executed bytecode, including initcode and resolved delegated code. ops lists every operation that began executing; operations rejected before execution (undefined opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies inside code. cost is the total gas deducted from the caller when the operation starts, including gas made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the caller's remaining gas after the operation, including unused gas returned by a child. An operation that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top k stack words after execution, deepest first, as minimal quantities, where k is the number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE and MLOAD \[off, off+32), MSTORE8 \[off, off+1), the destination of CALLDATACOPY, CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE and SLOAD never set it. sub is the trace of the child frame this operation entered, including precompile and empty-code targets, which give \{code: 0x, ops: \[]} when no instruction ran; it is null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are optional annotations (H19-H21). + + *** + +
+
+ + Show `vmTrace` object + + + #### `vmTrace` fields + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **ops** `array` *required* + + *** + +
+
+ + Show `ops` object + + + #### `ops` fields + + * **cost** `integer` *required* + + Range: `>= 0` + + *** + + * **ex** `object or null` *required* + + *** + +
+
+ + Show Option 1 `ex` object + + + #### `ex` fields + + **ex** `object` *required* + + *** + +
+
+ + Show `ex` object + + + #### `ex` fields + + * **mem** `object or null` *required* + + *** + +
+
+ + Show Option 1 `mem` object + + + #### `mem` fields + + **mem** `object` *required* + + *** + +
+
+ + Show `mem` object + + + #### `mem` fields + + * **data** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **off** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `mem` null + + + #### `mem` fields + + **mem** `null` *required* + + *** +
+
+ + * **push** `array` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **store** `object or null` *required* + + *** + +
+
+ + Show Option 1 `store` object + + + #### `store` fields + + **store** `object` *required* + + *** + +
+
+ + Show `store` object + + + #### `store` fields + + * **key** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **val** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `store` null + + + #### `store` fields + + **store** `null` *required* + + *** +
+
+ + * **used** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `ex` null + + + #### `ex` fields + + **ex** `null` *required* + + *** +
+
+ + * **idx** `string` + + *** + + * **op** `string` + + *** + + * **pc** `integer` *required* + + Range: `>= 0` + + *** + + * **sub** `object or null` *required* + + *** + +
+
+ + Show Option 1 `sub` object + + + #### `sub` fields + + Recursive instance of [https://ethereum.github.io/execution-apis/schemas/trace-vm.json](https://ethereum.github.io/execution-apis/schemas/trace-vm.json). The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation. + + **sub** `object` *required* + + Recursive instance of [https://ethereum.github.io/execution-apis/schemas/trace-vm.json](https://ethereum.github.io/execution-apis/schemas/trace-vm.json). The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation. + + *** + +
+
+ + Show `sub` object + + + #### `sub` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `sub` null + + + #### `sub` fields + + **sub** `null` *required* + + *** +
+
+ + * **additionalProperties** `true` + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + + +
+
+ + Show Option 2 `vmTrace` null + + + #### `vmTrace` fields + + **vmTrace** `null` *required* + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + ## Errors + +
+ + Error code: -32601 + + + * **code** + + -32601 + * **message** + + Method not found +
+ +
+ + Error code: -32602 + + + * **code** + + -32602 + * **message** + + Invalid params +
+ +
+ + Error code: -32001 + + + * **code** + + -32001 + * **message** + + Resource not found +
+ +
+ + Error code: 4444 + + + * **code** + + 4444 + * **message** + + Pruned history unavailable +
+ +
+ + Error code: -38012 + + + * **code** + + -38012 + * **message** + + Transactions baseFeePerGas is too low +
+ +
+ + Error code: -38013 + + + * **code** + + -38013 + * **message** + + Not enough gas provided to pay for intrinsic gas for a transaction +
+ +
+ + Error code: -38014 + + + * **code** + + -38014 + * **message** + + Insufficient funds to pay for gas fees and value for a transaction +
+ +
+ + Error code: -38025 + + + * **code** + + -38025 + * **message** + + Max init code size exceeded +
+ +
+ + Error code: -38026 + + + * **code** + + -38026 + * **message** + + Client adjustable limit exceeded +
+ + ## Examples + +
+
+ + trace_call result shape + + + Illustrative response shape; exact execution depends on chain state. + + #### Request + + ```json + { + "params": [ + { + "from": "0x1111111111111111111111111111111111111111", + "gas": "0x5208", + "to": "0x2222222222222222222222222222222222222222" + }, + [], + "latest" + ] + } + ``` + + #### Response + + ```json + { + "output": "0x", + "stateDiff": null, + "trace": [], + "vmTrace": null + } + ``` +
+
+ diff --git a/docs-api/api/methods/trace_callMany.mdx b/docs-api/api/methods/trace_callMany.mdx new file mode 100644 index 000000000..53a5ca97b --- /dev/null +++ b/docs-api/api/methods/trace_callMany.mdx @@ -0,0 +1,4074 @@ +--- +# GENERATED DOCUMENTATION - DO NOT EDIT THIS FILE +title: "trace_callMany" +hide_table_of_contents: true +description: "Each [call, traceTypes] item is a separate transaction executed in order on the preceding item's post-state. EIP-2200 and EIP-3529 original storage values, EIP-2929 access sets, EIP-1153 transient storage, the refund counter and the EIP-6780 same-transaction scope all start afresh for each item. All items share one block environment, as selected for trace_call; NUMBER and TIMESTAMP do not advance between items. The first item runs against the same state and environment as trace_call at the selected block. The trace_call fee rules, including the zero-fee BASEFEE adjustment, apply to each item independently. Each stateDiff is relative to the preceding item's post-state. Reverted writes roll back and subsequent items continue; transaction-level nonce and fee effects survive. If any decoded item fails validation, return one error for the whole request, using the trace_call codes, whose error.data object carries the zero-based index of the failing item as index; return no partial results. A malformed item is invalid params (-32602) without an index. A server may cap the item count or total gas only with an explicit -38026 error, never by truncating. Return one envelope per input in order. The sequence never changes canonical state. Empty input returns []. Block defaults to latest; StateOverrides and BlockOverrides apply once, before the first item, as for trace_call (H15,H16,H25,H31). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references." +--- + +import {TwoColumnLayout, InteractiveRequest, ResponseExample} from '@open-rpc/docusaurus-plugin/components'; +import { useState } from 'react'; + +}> + # trace_callMany + + Each \[call, traceTypes] item is a separate transaction executed in order on the preceding item's post-state. EIP-2200 and EIP-3529 original storage values, EIP-2929 access sets, EIP-1153 transient storage, the refund counter and the EIP-6780 same-transaction scope all start afresh for each item. All items share one block environment, as selected for trace_call; NUMBER and TIMESTAMP do not advance between items. The first item runs against the same state and environment as trace_call at the selected block. The trace_call fee rules, including the zero-fee BASEFEE adjustment, apply to each item independently. Each stateDiff is relative to the preceding item's post-state. Reverted writes roll back and subsequent items continue; transaction-level nonce and fee effects survive. If any decoded item fails validation, return one error for the whole request, using the trace_call codes, whose error.data object carries the zero-based index of the failing item as index; return no partial results. A malformed item is invalid params (-32602) without an index. A server may cap the item count or total gas only with an explicit -38026 error, never by truncating. Return one envelope per input in order. The sequence never changes canonical state. Empty input returns \[]. Block defaults to latest; StateOverrides and BlockOverrides apply once, before the first item, as for trace_call (H15,H16,H25,H31). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references. + + Executes dependent unsigned calls in order. + + ## Parameters (by position) + + **Calls** `array<[object, array]>` *required* + + *** + +
+
+ + Show array items `Calls` array + + + #### `Calls` fields + + **Items** `[object, array]` + + TraceCallManyEntry + + `exactly 2 items` + + *** + +
+
+ + Show tuple positions `Items` array + + + #### `Items` fields + + Tuple positions are zero-based and must be supplied in the order shown. + + **Position 0** `object` *required* + + Unsigned simulation. The fields are those of the eth_simulateV1 GenericCallTransaction, with chainId and authorizationList as in GenericTransaction, plus data as a compatibility alias for input. When data and input are both present they MUST be equal; otherwise return -32602. Every field defined here MUST either take effect with its eth_call meaning or cause the request to be rejected (-32602, or the selected fork's validity error, such as authorizationList before Prague); a client MUST NOT silently ignore a defined field. Only fields outside this schema are ignored, and accepting them does not establish extension support (H14). Omitted or null to creates a contract. Defaults: from zero address, value zero, input empty; omitted gas, and gas above the client execution cap, use that cap as in eth_call. Omitted gasPrice, maxFeePerGas and maxPriorityFeePerGas default to 0 as in eth_call and eth_simulateV1; maxFeePerBlobGas defaults to 0 when blobVersionedHashes are present (H15). Legacy gasPrice and dynamic fee fields MUST NOT be combined. A supplied nonce is accepted but neither validated nor used: execution, including CREATE address derivation, uses the sender nonce in the selected state. A supplied chainId must match the chain. + + *** + +
+
+ + Show `Position 0` object + + + #### `Position 0` fields + + Unsigned simulation. The fields are those of the eth_simulateV1 GenericCallTransaction, with chainId and authorizationList as in GenericTransaction, plus data as a compatibility alias for input. When data and input are both present they MUST be equal; otherwise return -32602. Every field defined here MUST either take effect with its eth_call meaning or cause the request to be rejected (-32602, or the selected fork's validity error, such as authorizationList before Prague); a client MUST NOT silently ignore a defined field. Only fields outside this schema are ignored, and accepting them does not establish extension support (H14). Omitted or null to creates a contract. Defaults: from zero address, value zero, input empty; omitted gas, and gas above the client execution cap, use that cap as in eth_call. Omitted gasPrice, maxFeePerGas and maxPriorityFeePerGas default to 0 as in eth_call and eth_simulateV1; maxFeePerBlobGas defaults to 0 when blobVersionedHashes are present (H15). Legacy gasPrice and dynamic fee fields MUST NOT be combined. A supplied nonce is accepted but neither validated nor used: execution, including CREATE address derivation, uses the sender nonce in the selected state. A supplied chainId must match the chain. + + * **accessList** `array` + + Access list entry + + *** + +
+
+ + Show `accessList` object + + + #### `accessList` fields + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **storageKeys** `array` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **authorizationList** `array` + + List of authorizations for the transaction + + *** + +
+
+ + Show `authorizationList` object + + + #### `authorizationList` fields + + List of authorizations for the transaction + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **chainId** `string` *required* + + Chain ID on which this transaction is valid + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** + + * **nonce** `string` *required* + + nonce + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** + + * **r** `string` *required* + + r + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **s** `string` *required* + + s + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **yParity** `string` *required* + + The parity (0 for even, 1 for odd) of the y-value of the secp256k1 signature + + *Match pattern:* `^0x[0-9a-f]{1,2}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **blobVersionedHashes** `array` + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **chainId** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **data** `string` + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **from** `string` + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` + + hex encoded 64 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **gasPrice** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **maxFeePerBlobGas** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **maxFeePerGas** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **maxPriorityFeePerGas** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **nonce** `string` + + hex encoded 64 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **to** `string or null` + + *** + +
+
+ + Show Option 1 `hex encoded address` string + + + #### `hex encoded address` fields + + **to** `string` + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** +
+
+ +
+
+ + Show Option 2 `to` null + + + #### `to` fields + + **to** `null` + + *** +
+
+ + * **type** `string` + + hex encoded byte + + *Match pattern:* `^0x[0-9a-f]{1,2}$` + + *** + + * **value** `string` + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** + + + + **Position 1** `array` *required* + + An empty array is valid and requests execution output only (H11). + + *Allowed values:* `trace` `stateDiff` `vmTrace` + + *** + + + + + + **Block** `string or string or string` + + *** + +
+
+ + Show Option 1 `Block number` string + + + #### `Block number` fields + + **Block** `string` + + Block number + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** +
+
+ +
+
+ + Show Option 2 `Block tag` string + + + #### `Block tag` fields + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions; `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + **Block** `string` + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions; `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + *Allowed values:* `earliest` `finalized` `safe` `latest` `pending` + + *** +
+
+ +
+
+ + Show Option 3 `Block hash` string + + + #### `Block hash` fields + + **Block** `string` + + Block hash + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** +
+
+ + **StateOverrides** `object or null` + + *** + +
+
+ + Show Option 1 `Dictionary of addresses in the state to be overridden` object + + + #### `Dictionary of addresses in the state to be overridden` fields + + **StateOverrides** `object` + + Dictionary of addresses in the state to be overridden + + *** + +
+
+ + Show `StateOverrides` object + + + #### `StateOverrides` fields + + * **^0x\[a-fA-F0-9]\{40}$** `object or object` + + *** + +
+
+ + Show Option 1 `Account override with whole storage replacement` object + + + #### `Account override with whole storage replacement` fields + + It is possible to override any kind of address (EOA's, contracts and precompiles) + + **^0x\[a-fA-F0-9]\{40}$** `object` + + It is possible to override any kind of address (EOA's, contracts and precompiles) + + *** + +
+
+ + Show `^0x[a-fA-F0-9]{40}$` object + + + #### `^0x[a-fA-F0-9]{40}$` fields + + * **balance** `string` + + Balance + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **code** `string` + + Code + + *Match pattern:* `^0x[0-9a-f]*$` + + *** + + * **movePrecompileToAddress** `string` + + Moves addresses precompile into the specified address. This move is done before the 'code' override is set. When the specified address is not a precompile, the behaviour is undefined and different clients might behave differently. + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **nonce** `string` + + Nonce + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **state** `object` *required* + + Key-value mapping to override all slots in the account storage before executing the call. This functions similar to eth_call's state parameter. + + *** + +
+
+ + Show `state` object + + + #### `state` fields + + Key-value mapping to override all slots in the account storage before executing the call. This functions similar to eth_call's state parameter. + + * **^0x\[a-fA-F0-9]\{64}$** `string` + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** +
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `Account override with partial storage modification` object + + + #### `Account override with partial storage modification` fields + + **^0x\[a-fA-F0-9]\{40}$** `object` + + Account override with partial storage modification + + *** + +
+
+ + Show `^0x[a-fA-F0-9]{40}$` object + + + #### `^0x[a-fA-F0-9]{40}$` fields + + * **balance** `string` + + Balance + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **code** `string` + + Code + + *Match pattern:* `^0x[0-9a-f]*$` + + *** + + * **movePrecompileToAddress** `string` + + Moves addresses precompile into the specified address. This move is done before the 'code' override is set. Can only move precompiles. + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **nonce** `string` + + Nonce + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **stateDiff** `object` *required* + + Key-value mapping to override individual slots in the account storage before executing the call. This functions similar to eth_call's state parameter. + + *** + +
+
+ + Show `stateDiff` object + + + #### `stateDiff` fields + + Key-value mapping to override individual slots in the account storage before executing the call. This functions similar to eth_call's state parameter. + + * **^0x\[a-fA-F0-9]\{64}$** `string` + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** +
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+
+
+
+
+ +
+
+ + Show Option 2 `Optional state overrides` null + + + #### `Optional state overrides` fields + + **StateOverrides** `null` + + Optional state overrides + + *** +
+
+ + **BlockOverrides** `object or null` + + *** + +
+
+ + Show Option 1 `Context fields related to the block being executed` object + + + #### `Context fields related to the block being executed` fields + + **BlockOverrides** `object` + + Context fields related to the block being executed + + *** + +
+
+ + Show `BlockOverrides` object + + + #### `BlockOverrides` fields + + * **baseFeePerGas** `string` + + Base fee per unit of gas + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **blobBaseFee** `string` + + Base fee per unit of blob gas + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **feeRecipient** `string` + + Address set by the proposer/builder to receive priority fees. Often matches the block header `feeRecipient` field but is not the COINBASE EVM opcode. + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gasLimit** `string` + + Gas limit + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **number** `string` + + When overriding block numbers across multiple blocks, block number need to be increasing. Skipping over blocks numbers is possible. If block number is not specified, it's incremented by one for each block. + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **prevRandao** `string` + + The Previous value of randomness beacon + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **time** `string` + + Time must either increase or remain constant relative to the previous block. If time is not specified, it's incremented by one for each block. + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **withdrawals** `array` + + This array can have a maximum length of 16. + + *** + +
+
+ + Show `withdrawals` object + + + #### `withdrawals` fields + + This array can have a maximum length of 16. + + * **address** `string` *required* + + recipient address for withdrawal value + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **amount** `string` *required* + + value contained in withdrawal + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **index** `string` *required* + + index of withdrawal + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **validatorIndex** `string` *required* + + index of validator that generated withdrawal + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + + +
+
+ + Show Option 2 `Optional block overrides` null + + + #### `Optional block overrides` fields + + **BlockOverrides** `null` + + Optional block overrides + + *** +
+
+ + ## Result + + **Result** `array` + + output always contains actual return bytes, including when only stateDiff is selected. Unrequested trace is \[], stateDiff and vmTrace are null. A selected vmTrace is always an object, even for an EOA or precompile target (H08,H20). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **stateDiff** `object or null` *required* + + *** + +
+
+ + Show Option 1 `TraceStateDiff` object + + + #### `TraceStateDiff` fields + + Net committed state changes for this execution, comparing the execution endpoints. An account appears only if its balance, nonce, code, storage or existence changed. Existence means presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a deletion. + and - appear only when the account is born or dies; = marks an unchanged field and \* a changed field of an account that exists at both endpoints. A born account includes zero nonce and empty code creation markers and lists its nonzero post-state slots. A deleted account has empty storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving transaction-level changes remain. callMany diffs are relative to each preceding post-state. Multiple authorization writes are reduced to their net effect, including nonce changes when final code equals initial code. An account absent at both endpoints has no account diff. The sender pays value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 post-block calls, rewards) belong to no transaction's diff, so concatenated diffs do not reconstruct the block post-state (H16-H18,H26). + + **stateDiff** `object` *required* + + Net committed state changes for this execution, comparing the execution endpoints. An account appears only if its balance, nonce, code, storage or existence changed. Existence means presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a deletion. + and - appear only when the account is born or dies; = marks an unchanged field and \* a changed field of an account that exists at both endpoints. A born account includes zero nonce and empty code creation markers and lists its nonzero post-state slots. A deleted account has empty storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving transaction-level changes remain. callMany diffs are relative to each preceding post-state. Multiple authorization writes are reduced to their net effect, including nonce changes when final code equals initial code. An account absent at both endpoints has no account diff. The sender pays value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 post-block calls, rewards) belong to no transaction's diff, so concatenated diffs do not reconstruct the block post-state (H16-H18,H26). + + *** + +
+
+ + Show `stateDiff` object + + + #### `stateDiff` fields + + * **^0x\[0-9a-f]\{40}$** `object or object or object` + + *** + +
+
+ + Show Option 1 `Born account` object + + + #### `Born account` fields + + Absent before and present after; every field uses +, and storage lists nonzero slots. + + **^0x\[0-9a-f]\{40}$** `object` + + Absent before and present after; every field uses +, and storage lists nonzero slots. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **code** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **+** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **-** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **nonce** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object` + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + +
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `Deleted account` object + + + #### `Deleted account` fields + + Present before and absent after; every field uses -, and storage is empty because deletion wipes all storage. + + **^0x\[0-9a-f]\{40}$** `object` + + Present before and absent after; every field uses -, and storage is empty because deletion wipes all storage. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **code** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **+** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **-** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **nonce** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object or object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show Option 1 `TraceStorageChange` object + + + #### `TraceStorageChange` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + **^0x\[0-9a-f]\{64}$** `object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + - **+** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + - **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceStorageChange` object + + + #### `TraceStorageChange` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + **^0x\[0-9a-f]\{64}$** `object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + - **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **to** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + - **additionalProperties** `false` + + *** +
+
+
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `Existing account` object + + + #### `Existing account` fields + + Present at both endpoints; fields use = or \*, slots use \*, and at least one value changed. + + **^0x\[0-9a-f]\{40}$** `object` + + Present at both endpoints; fields use = or \*, slots use \*, and at least one value changed. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` string + + + #### `TraceQuantityChange` fields + + **balance** `string` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ + * **code** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` string + + + #### `TraceCodeChange` fields + + **code** `string` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ + * **nonce** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` string + + + #### `TraceQuantityChange` fields + + **nonce** `string` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object` + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + +
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+
+
+
+
+ +
+
+ + Show Option 2 `stateDiff` null + + + #### `stateDiff` fields + + **stateDiff** `null` *required* + + *** +
+
+ + * **trace** `array or array or array or array or array or array or array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show Option 1 `Successful CALL` array + + + #### `Successful CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 2 `Reverted CALL` array + + + #### `Reverted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 3 `Halted CALL` array + + + #### `Halted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 4 `Successful CREATE` array + + + #### `Successful CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object or object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 5 `Reverted CREATE` array + + + #### `Reverted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object or object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 6 `Halted CREATE` array + + + #### `Halted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 7 `Call trace record inside an execution envelope` array + + + #### `Call trace record inside an execution envelope` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"suicide"` + + *** + + * **action** `object` *required* + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **balance** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **refundAddress** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + + * **vmTrace** `object or null` *required* + + *** + +
+
+ + Show Option 1 `Recursive VM execution trace` object + + + #### `Recursive VM execution trace` fields + + code is the actually executed bytecode, including initcode and resolved delegated code. ops lists every operation that began executing; operations rejected before execution (undefined opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies inside code. cost is the total gas deducted from the caller when the operation starts, including gas made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the caller's remaining gas after the operation, including unused gas returned by a child. An operation that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top k stack words after execution, deepest first, as minimal quantities, where k is the number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE and MLOAD \[off, off+32), MSTORE8 \[off, off+1), the destination of CALLDATACOPY, CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE and SLOAD never set it. sub is the trace of the child frame this operation entered, including precompile and empty-code targets, which give \{code: 0x, ops: \[]} when no instruction ran; it is null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are optional annotations (H19-H21). + + **vmTrace** `object` *required* + + code is the actually executed bytecode, including initcode and resolved delegated code. ops lists every operation that began executing; operations rejected before execution (undefined opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies inside code. cost is the total gas deducted from the caller when the operation starts, including gas made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the caller's remaining gas after the operation, including unused gas returned by a child. An operation that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top k stack words after execution, deepest first, as minimal quantities, where k is the number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE and MLOAD \[off, off+32), MSTORE8 \[off, off+1), the destination of CALLDATACOPY, CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE and SLOAD never set it. sub is the trace of the child frame this operation entered, including precompile and empty-code targets, which give \{code: 0x, ops: \[]} when no instruction ran; it is null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are optional annotations (H19-H21). + + *** + +
+
+ + Show `vmTrace` object + + + #### `vmTrace` fields + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **ops** `array` *required* + + *** + +
+
+ + Show `ops` object + + + #### `ops` fields + + * **cost** `integer` *required* + + Range: `>= 0` + + *** + + * **ex** `object or null` *required* + + *** + +
+
+ + Show Option 1 `ex` object + + + #### `ex` fields + + **ex** `object` *required* + + *** + +
+
+ + Show `ex` object + + + #### `ex` fields + + * **mem** `object or null` *required* + + *** + +
+
+ + Show Option 1 `mem` object + + + #### `mem` fields + + **mem** `object` *required* + + *** + +
+
+ + Show `mem` object + + + #### `mem` fields + + * **data** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **off** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `mem` null + + + #### `mem` fields + + **mem** `null` *required* + + *** +
+
+ + * **push** `array` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **store** `object or null` *required* + + *** + +
+
+ + Show Option 1 `store` object + + + #### `store` fields + + **store** `object` *required* + + *** + +
+
+ + Show `store` object + + + #### `store` fields + + * **key** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **val** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `store` null + + + #### `store` fields + + **store** `null` *required* + + *** +
+
+ + * **used** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `ex` null + + + #### `ex` fields + + **ex** `null` *required* + + *** +
+
+ + * **idx** `string` + + *** + + * **op** `string` + + *** + + * **pc** `integer` *required* + + Range: `>= 0` + + *** + + * **sub** `object or null` *required* + + *** + +
+
+ + Show Option 1 `sub` object + + + #### `sub` fields + + Recursive instance of [https://ethereum.github.io/execution-apis/schemas/trace-vm.json](https://ethereum.github.io/execution-apis/schemas/trace-vm.json). The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation. + + **sub** `object` *required* + + Recursive instance of [https://ethereum.github.io/execution-apis/schemas/trace-vm.json](https://ethereum.github.io/execution-apis/schemas/trace-vm.json). The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation. + + *** + +
+
+ + Show `sub` object + + + #### `sub` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `sub` null + + + #### `sub` fields + + **sub** `null` *required* + + *** +
+
+ + * **additionalProperties** `true` + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + + +
+
+ + Show Option 2 `vmTrace` null + + + #### `vmTrace` fields + + **vmTrace** `null` *required* + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + ## Errors + +
+ + Error code: -32601 + + + * **code** + + -32601 + * **message** + + Method not found +
+ +
+ + Error code: -32602 + + + * **code** + + -32602 + * **message** + + Invalid params +
+ +
+ + Error code: -32001 + + + * **code** + + -32001 + * **message** + + Resource not found +
+ +
+ + Error code: 4444 + + + * **code** + + 4444 + * **message** + + Pruned history unavailable +
+ +
+ + Error code: -38012 + + + * **code** + + -38012 + * **message** + + Transactions baseFeePerGas is too low +
+ +
+ + Error code: -38013 + + + * **code** + + -38013 + * **message** + + Not enough gas provided to pay for intrinsic gas for a transaction +
+ +
+ + Error code: -38014 + + + * **code** + + -38014 + * **message** + + Insufficient funds to pay for gas fees and value for a transaction +
+ +
+ + Error code: -38025 + + + * **code** + + -38025 + * **message** + + Max init code size exceeded +
+ +
+ + Error code: -38026 + + + * **code** + + -38026 + * **message** + + Client adjustable limit exceeded +
+ + ## Examples + +
+
+ + Fund an account then spend its simulated balance + + + Illustrative sequence assuming the first sender has at least one wei, the second sender initially has zero balance, and both recipients have no code. Each call selects no trace families and uses zero fees. The second call spends the wei received from the first call; canonical state is unchanged. + + #### Request + + ```json + { + "params": [ + [ + [ + { + "from": "0x1111111111111111111111111111111111111111", + "gas": "0x5208", + "gasPrice": "0x0", + "to": "0x2222222222222222222222222222222222222222", + "value": "0x1" + }, + [] + ], + [ + { + "from": "0x2222222222222222222222222222222222222222", + "gas": "0x5208", + "gasPrice": "0x0", + "to": "0x3333333333333333333333333333333333333333", + "value": "0x1" + }, + [] + ] + ], + "latest" + ] + } + ``` + + #### Response + + ```json + [ + { + "output": "0x", + "stateDiff": null, + "trace": [], + "vmTrace": null + }, + { + "output": "0x", + "stateDiff": null, + "trace": [], + "vmTrace": null + } + ] + ``` +
+
+ +
+
+ + trace_callMany result shape + + + Illustrative response shape; exact execution depends on chain state. + + #### Request + + ```json + { + "params": [ + [], + "latest" + ] + } + ``` + + #### Response + + ```json + [] + ``` +
+
+ diff --git a/docs-api/api/methods/trace_filter.mdx b/docs-api/api/methods/trace_filter.mdx new file mode 100644 index 000000000..f48148249 --- /dev/null +++ b/docs-api/api/methods/trace_filter.mdx @@ -0,0 +1,1789 @@ +--- +# GENERATED DOCUMENTATION - DO NOT EDIT THIS FILE +title: "trace_filter" +hide_table_of_contents: true +description: "Apply OR within each address list and AND between the lists by default, as eth_getLogs composes topic positions; mode union matches either populated list; omitted/null/empty lists are unrestricted; compare address bytes independently of hex letter case. Omitted bounds mean latest through latest, resolved against one canonical head. As for eth_getLogs, if either bound resolves to a block number greater than the current head block, or fromBlock resolves above toBlock, return -32602 (Invalid params); an explicit toBlock before an omitted latest start is such a reversed range. Never clamp the range or return a partial result. Historical searches must explicitly set fromBlock. earliest means the lowest block the client has available; never replace an explicit endpoint with the retained-history boundary, and return 4444 when required history is unavailable. Resource limits produce errors, never silently narrowed ranges. count limits returned records, not scan or replay work. Indexed retrieval and replay must yield the same fork-correct per-block records, each block traced from its parent's post-block state. Match CALL sender/recipient, CREATE creator/created address and SELFDESTRUCT executing (self-destructing) account/beneficiary; after EIP-6780 that account usually survives. Failed CREATE has no created-address match. A reward matches toAddress by author and has no from side; in intersection mode it is excluded whenever fromAddress is populated, while in union mode a toAddress match suffices. The genesis block contributes no records. Order records by block, then transaction, then preorder, with each block's rewards after its transaction records (block reward, then uncle rewards in ommer order). Filter first, then skip after records and take count. Offsets are stable only for a fixed, numerically resolved range. Capture one canonical snapshot for the request (H03-H06,H23,H27,H30,H32). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references." +--- + +import {TwoColumnLayout, InteractiveRequest, ResponseExample} from '@open-rpc/docusaurus-plugin/components'; +import { useState } from 'react'; + +}> + # trace_filter + + Apply OR within each address list and AND between the lists by default, as eth_getLogs composes topic positions; mode union matches either populated list; omitted/null/empty lists are unrestricted; compare address bytes independently of hex letter case. Omitted bounds mean latest through latest, resolved against one canonical head. As for eth_getLogs, if either bound resolves to a block number greater than the current head block, or fromBlock resolves above toBlock, return -32602 (Invalid params); an explicit toBlock before an omitted latest start is such a reversed range. Never clamp the range or return a partial result. Historical searches must explicitly set fromBlock. earliest means the lowest block the client has available; never replace an explicit endpoint with the retained-history boundary, and return 4444 when required history is unavailable. Resource limits produce errors, never silently narrowed ranges. count limits returned records, not scan or replay work. Indexed retrieval and replay must yield the same fork-correct per-block records, each block traced from its parent's post-block state. Match CALL sender/recipient, CREATE creator/created address and SELFDESTRUCT executing (self-destructing) account/beneficiary; after EIP-6780 that account usually survives. Failed CREATE has no created-address match. A reward matches toAddress by author and has no from side; in intersection mode it is excluded whenever fromAddress is populated, while in union mode a toAddress match suffices. The genesis block contributes no records. Order records by block, then transaction, then preorder, with each block's rewards after its transaction records (block reward, then uncle rewards in ommer order). Filter first, then skip after records and take count. Offsets are stable only for a fixed, numerically resolved range. Capture one canonical snapshot for the request (H03-H06,H23,H27,H30,H32). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references. + + Returns localized traces matching an address filter. + + ## Parameters (by position) + + **Filter** `object` *required* + + Inclusive block range; defaults omitted fromBlock and toBlock to the same latest head, after 0, count unlimited subject to an explicit server limit. Bounds exclude pending. If either bound resolves beyond the current head block, or fromBlock resolves above toBlock, return -32602; an explicit toBlock before an omitted latest start is such a reversed range. Never clamp the range. OR within each address list; AND between lists by default, as eth_getLogs composes topic positions. Missing, null or empty lists are unrestricted. mode union matches either populated list instead. Compare address bytes independently of hex letter case. Resolve tags once per request. Apply filtering before pagination; count 0 returns \[]. after and count are JSON integers bounded by uint64. Return an error rather than silently truncate when a server limit is exceeded. earliest is the lowest available block; never replace an explicit endpoint with a retention boundary, and return 4444 if required history is unavailable. count limits results, not scan or replay work (H03,H04,H06,H23,H27,H30,H32). + + *** + +
+
+ + Show `Filter` object + + + #### `Filter` fields + + * **after** `integer` + + Range: `>= 0 and <= 18446744073709552000` + + *** + + * **count** `integer` + + Range: `>= 0 and <= 18446744073709552000` + + *** + + * **fromAddress** `array or null` + + *** + +
+
+ + Show Option 1 `fromAddress` array + + + #### `fromAddress` fields + + **fromAddress** `array` + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** +
+
+ +
+
+ + Show Option 2 `fromAddress` null + + + #### `fromAddress` fields + + **fromAddress** `null` + + *** +
+
+ + * **fromBlock** `string or string` + + *** + +
+
+ + Show Option 1 `Block number` string + + + #### `Block number` fields + + **fromBlock** `string` + + Block number + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** +
+
+ +
+
+ + Show Option 2 `Block tag` string + + + #### `Block tag` fields + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + **fromBlock** `string` + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + *Allowed values:* `earliest` `finalized` `safe` `latest` + + *** +
+
+ + * **mode** `string` + + intersection (default) requires every populated address list to match; union requires any populated list to match. Unknown values are invalid parameters (-32602). + + *Allowed values:* `intersection` `union` + + *** + + * **toAddress** `array or null` + + *** + +
+
+ + Show Option 1 `toAddress` array + + + #### `toAddress` fields + + **toAddress** `array` + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** +
+
+ +
+
+ + Show Option 2 `toAddress` null + + + #### `toAddress` fields + + **toAddress** `null` + + *** +
+
+ + * **toBlock** `string or string` + + *** + +
+
+ + Show Option 1 `Block number` string + + + #### `Block number` fields + + **toBlock** `string` + + Block number + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** +
+
+ +
+
+ + Show Option 2 `Block tag` string + + + #### `Block tag` fields + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + **toBlock** `string` + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + *Allowed values:* `earliest` `finalized` `safe` `latest` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+ + ## Result + + **Result** `array or array or array or array or array or array or array or array` + + *** + +
+
+ + Show Option 1 `Successful CALL` array + + + #### `Successful CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Successful frame; result is required and error must be absent. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"call"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 2 `Reverted CALL` array + + + #### `Reverted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + REVERT; result carries the frame's gas and revert bytes. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"call"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 3 `Halted CALL` array + + + #### `Halted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Exceptional halt; result is omitted or null. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"call"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 4 `Successful CREATE` array + + + #### `Successful CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Successful frame; result is required and error must be absent. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object or object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"create"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 5 `Reverted CREATE` array + + + #### `Reverted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + REVERT; result carries the frame's gas and revert bytes, without address or code. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object or object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"create"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 6 `Halted CREATE` array + + + #### `Halted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Exceptional halt, including an address collision; result is omitted or null. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"create"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 7 `Historical call trace record or protocol reward` array + + + #### `Historical call trace record or protocol reward` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **balance** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **refundAddress** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"suicide"` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 8 `Historical call trace record or protocol reward` array + + + #### `Historical call trace record or protocol reward` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **action** `object` *required* + + A historical PoW block or uncle reward paid to author. Withdrawals and system operations are not reward records (H05). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + A historical PoW block or uncle reward paid to author. Withdrawals and system operations are not reward records (H05). + + * **author** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **rewardType** `string` *required* + + *Allowed values:* `block` `uncle` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Must be:* `"reward"` + + *** + + * **transactionHash** `null` *required* + + *** + + * **transactionPosition** `null` *required* + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + + ## Errors + +
+ + Error code: -32601 + + + * **code** + + -32601 + * **message** + + Method not found +
+ +
+ + Error code: -32602 + + + * **code** + + -32602 + * **message** + + Invalid params +
+ +
+ + Error code: 4444 + + + * **code** + + 4444 + * **message** + + Pruned history unavailable +
+ + ## Examples + +
+
+ + trace_filter result shape + + + Illustrative response shape; exact execution depends on chain state. + + #### Request + + ```json + { + "params": [ + { + "fromBlock": "0x1", + "toBlock": "0x1" + } + ] + } + ``` + + #### Response + + ```json + [] + ``` +
+
+ diff --git a/docs-api/api/methods/trace_get.mdx b/docs-api/api/methods/trace_get.mdx new file mode 100644 index 000000000..685c82648 --- /dev/null +++ b/docs-api/api/methods/trace_get.mdx @@ -0,0 +1,1523 @@ +--- +# GENERATED DOCUMENTATION - DO NOT EDIT THIS FILE +title: "trace_get" +hide_table_of_contents: true +description: "Position selects one traceAddress path: [] is root, [\"0x0\"] first child, [\"0x6\",\"0x0\"] the first child of child six. Return one localized object, or null if the transaction is not in a canonical block or the path does not exist. Integer path entries are invalid params (-32602); convert traceAddress integers to hex quantities. Unavailable state is an error (H02,H06). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references." +--- + +import {TwoColumnLayout, InteractiveRequest, ResponseExample} from '@open-rpc/docusaurus-plugin/components'; +import { useState } from 'react'; + +}> + # trace_get + + Position selects one traceAddress path: \[] is root, \["0x0"] first child, \["0x6","0x0"] the first child of child six. Return one localized object, or null if the transaction is not in a canonical block or the path does not exist. Integer path entries are invalid params (-32602); convert traceAddress integers to hex quantities. Unavailable state is an error (H02,H06). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references. + + Returns the trace at one tree path. + + ## Parameters (by position) + + **TransactionHash** `string` *required* + + *** + + **Position** `array` *required* + + hex encoded 64 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,15})$` + + *** + + ## Result + + **Result** `object or object or object or object or object or object or object or null` + + *** + +
+
+ + Show Option 1 `Successful CALL` object + + + #### `Successful CALL` fields + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Successful frame; result is required and error must be absent. + + **Result** `object` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Successful frame; result is required and error must be absent. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `Reverted CALL` object + + + #### `Reverted CALL` fields + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + REVERT; result carries the frame's gas and revert bytes. + + **Result** `object` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + REVERT; result carries the frame's gas and revert bytes. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `Halted CALL` object + + + #### `Halted CALL` fields + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Exceptional halt; result is omitted or null. + + **Result** `object` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Exceptional halt; result is omitted or null. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `Successful CREATE` object + + + #### `Successful CREATE` fields + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Successful frame; result is required and error must be absent. + + **Result** `object` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Successful frame; result is required and error must be absent. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object or object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 5 `Reverted CREATE` object + + + #### `Reverted CREATE` fields + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + REVERT; result carries the frame's gas and revert bytes, without address or code. + + **Result** `object` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + REVERT; result carries the frame's gas and revert bytes, without address or code. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object or object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 6 `Halted CREATE` object + + + #### `Halted CREATE` fields + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Exceptional halt, including an address collision; result is omitted or null. + + **Result** `object` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Exceptional halt, including an address collision; result is omitted or null. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 7 `Historical transaction call trace record` object + + + #### `Historical transaction call trace record` fields + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + **Result** `object` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"suicide"` + + *** + + * **action** `object` *required* + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **balance** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **refundAddress** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 8 `Result` null + + + #### `Result` fields + + **Result** `null` + + *** +
+
+ + ## Errors + +
+ + Error code: -32601 + + + * **code** + + -32601 + * **message** + + Method not found +
+ +
+ + Error code: -32602 + + + * **code** + + -32602 + * **message** + + Invalid params +
+ +
+ + Error code: 4444 + + + * **code** + + 4444 + * **message** + + Pruned history unavailable +
+ + ## Examples + +
+
+ + trace_get result shape + + + Illustrative response shape; exact execution depends on chain state. + + #### Request + + ```json + { + "params": [ + "0x1111111111111111111111111111111111111111111111111111111111111111", + [] + ] + } + ``` + + #### Response + + ```json + null + ``` +
+
+
diff --git a/docs-api/api/methods/trace_rawTransaction.mdx b/docs-api/api/methods/trace_rawTransaction.mdx new file mode 100644 index 000000000..f6ad76f16 --- /dev/null +++ b/docs-api/api/methods/trace_rawTransaction.mdx @@ -0,0 +1,3296 @@ +--- +# GENERATED DOCUMENTATION - DO NOT EDIT THIS FILE +title: "trace_rawTransaction" +hide_table_of_contents: true +description: "Decode the signed transaction and validate it for execution against latest state before simulating it (H13). Apply the transaction validity rules of the selected fork, including signature, chain identity, nonce equality, sufficient balance for value and upfront gas, intrinsic gas, fees and sender-code restrictions (including permitted EIP-7702 delegation). Reject both low and high nonces; do not replace signed fields, override the sender nonce or top up its balance. This is execution validation, not transaction-pool admission; do not impose local replacement, already-known or minimum-tip policies. A decodable transaction that fails validation uses the eth_sendRawTransaction error groups, 1 nonce too low, 2 nonce too high, 800 intrinsic gas, 804 priority fee above fee cap, 806 fee cap below base fee, 809 insufficient funds, and -32003 (Transaction rejected) for any other validation failure. A signed gas limit above the server's execution cap is not reduced; reject it with -38026. Malformed encodings or request parameters use -32602. A valid transaction that REVERTs or exceptionally halts returns an execution trace, not a validation error. The portable baseline defines two parameters and latest state. An explicitly supplied block-selector extension is outside this baseline; accepting it is not a baseline failure. Extension semantics require separate agreement. Validation failure returns a complete JSON-RPC error, not a partially serialized result (H12-H14,H25). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references." +--- + +import {TwoColumnLayout, InteractiveRequest, ResponseExample} from '@open-rpc/docusaurus-plugin/components'; +import { useState } from 'react'; + +}> + # trace_rawTransaction + + Decode the signed transaction and validate it for execution against latest state before simulating it (H13). Apply the transaction validity rules of the selected fork, including signature, chain identity, nonce equality, sufficient balance for value and upfront gas, intrinsic gas, fees and sender-code restrictions (including permitted EIP-7702 delegation). Reject both low and high nonces; do not replace signed fields, override the sender nonce or top up its balance. This is execution validation, not transaction-pool admission; do not impose local replacement, already-known or minimum-tip policies. A decodable transaction that fails validation uses the eth_sendRawTransaction error groups, 1 nonce too low, 2 nonce too high, 800 intrinsic gas, 804 priority fee above fee cap, 806 fee cap below base fee, 809 insufficient funds, and -32003 (Transaction rejected) for any other validation failure. A signed gas limit above the server's execution cap is not reduced; reject it with -38026. Malformed encodings or request parameters use -32602. A valid transaction that REVERTs or exceptionally halts returns an execution trace, not a validation error. The portable baseline defines two parameters and latest state. An explicitly supplied block-selector extension is outside this baseline; accepting it is not a baseline failure. Extension semantics require separate agreement. Validation failure returns a complete JSON-RPC error, not a partially serialized result (H12-H14,H25). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references. + + Simulates a signed transaction at latest state. + + ## Parameters (by position) + + **Transaction** `string` *required* + + *** + + **TraceTypes** `array` *required* + + *Allowed values:* `trace` `stateDiff` `vmTrace` + + *** + + ## Result + + **Result** `object` + + output always contains actual return bytes, including when only stateDiff is selected. Unrequested trace is \[], stateDiff and vmTrace are null. A selected vmTrace is always an object, even for an EOA or precompile target (H08,H20). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **stateDiff** `object or null` *required* + + *** + +
+
+ + Show Option 1 `TraceStateDiff` object + + + #### `TraceStateDiff` fields + + Net committed state changes for this execution, comparing the execution endpoints. An account appears only if its balance, nonce, code, storage or existence changed. Existence means presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a deletion. + and - appear only when the account is born or dies; = marks an unchanged field and \* a changed field of an account that exists at both endpoints. A born account includes zero nonce and empty code creation markers and lists its nonzero post-state slots. A deleted account has empty storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving transaction-level changes remain. callMany diffs are relative to each preceding post-state. Multiple authorization writes are reduced to their net effect, including nonce changes when final code equals initial code. An account absent at both endpoints has no account diff. The sender pays value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 post-block calls, rewards) belong to no transaction's diff, so concatenated diffs do not reconstruct the block post-state (H16-H18,H26). + + **stateDiff** `object` *required* + + Net committed state changes for this execution, comparing the execution endpoints. An account appears only if its balance, nonce, code, storage or existence changed. Existence means presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a deletion. + and - appear only when the account is born or dies; = marks an unchanged field and \* a changed field of an account that exists at both endpoints. A born account includes zero nonce and empty code creation markers and lists its nonzero post-state slots. A deleted account has empty storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving transaction-level changes remain. callMany diffs are relative to each preceding post-state. Multiple authorization writes are reduced to their net effect, including nonce changes when final code equals initial code. An account absent at both endpoints has no account diff. The sender pays value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 post-block calls, rewards) belong to no transaction's diff, so concatenated diffs do not reconstruct the block post-state (H16-H18,H26). + + *** + +
+
+ + Show `stateDiff` object + + + #### `stateDiff` fields + + * **^0x\[0-9a-f]\{40}$** `object or object or object` + + *** + +
+
+ + Show Option 1 `Born account` object + + + #### `Born account` fields + + Absent before and present after; every field uses +, and storage lists nonzero slots. + + **^0x\[0-9a-f]\{40}$** `object` + + Absent before and present after; every field uses +, and storage lists nonzero slots. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **code** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **+** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **-** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **nonce** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object` + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + +
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `Deleted account` object + + + #### `Deleted account` fields + + Present before and absent after; every field uses -, and storage is empty because deletion wipes all storage. + + **^0x\[0-9a-f]\{40}$** `object` + + Present before and absent after; every field uses -, and storage is empty because deletion wipes all storage. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **code** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **+** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **-** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **nonce** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object or object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show Option 1 `TraceStorageChange` object + + + #### `TraceStorageChange` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + **^0x\[0-9a-f]\{64}$** `object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + - **+** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + - **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceStorageChange` object + + + #### `TraceStorageChange` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + **^0x\[0-9a-f]\{64}$** `object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + - **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **to** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + - **additionalProperties** `false` + + *** +
+
+
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `Existing account` object + + + #### `Existing account` fields + + Present at both endpoints; fields use = or \*, slots use \*, and at least one value changed. + + **^0x\[0-9a-f]\{40}$** `object` + + Present at both endpoints; fields use = or \*, slots use \*, and at least one value changed. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` string + + + #### `TraceQuantityChange` fields + + **balance** `string` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ + * **code** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` string + + + #### `TraceCodeChange` fields + + **code** `string` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ + * **nonce** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` string + + + #### `TraceQuantityChange` fields + + **nonce** `string` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object` + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + +
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+
+
+
+
+ +
+
+ + Show Option 2 `stateDiff` null + + + #### `stateDiff` fields + + **stateDiff** `null` *required* + + *** +
+
+ + * **trace** `array or array or array or array or array or array or array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show Option 1 `Successful CALL` array + + + #### `Successful CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 2 `Reverted CALL` array + + + #### `Reverted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 3 `Halted CALL` array + + + #### `Halted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 4 `Successful CREATE` array + + + #### `Successful CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object or object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 5 `Reverted CREATE` array + + + #### `Reverted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object or object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 6 `Halted CREATE` array + + + #### `Halted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 7 `Call trace record inside an execution envelope` array + + + #### `Call trace record inside an execution envelope` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"suicide"` + + *** + + * **action** `object` *required* + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **balance** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **refundAddress** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + + * **vmTrace** `object or null` *required* + + *** + +
+
+ + Show Option 1 `Recursive VM execution trace` object + + + #### `Recursive VM execution trace` fields + + code is the actually executed bytecode, including initcode and resolved delegated code. ops lists every operation that began executing; operations rejected before execution (undefined opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies inside code. cost is the total gas deducted from the caller when the operation starts, including gas made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the caller's remaining gas after the operation, including unused gas returned by a child. An operation that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top k stack words after execution, deepest first, as minimal quantities, where k is the number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE and MLOAD \[off, off+32), MSTORE8 \[off, off+1), the destination of CALLDATACOPY, CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE and SLOAD never set it. sub is the trace of the child frame this operation entered, including precompile and empty-code targets, which give \{code: 0x, ops: \[]} when no instruction ran; it is null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are optional annotations (H19-H21). + + **vmTrace** `object` *required* + + code is the actually executed bytecode, including initcode and resolved delegated code. ops lists every operation that began executing; operations rejected before execution (undefined opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies inside code. cost is the total gas deducted from the caller when the operation starts, including gas made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the caller's remaining gas after the operation, including unused gas returned by a child. An operation that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top k stack words after execution, deepest first, as minimal quantities, where k is the number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE and MLOAD \[off, off+32), MSTORE8 \[off, off+1), the destination of CALLDATACOPY, CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE and SLOAD never set it. sub is the trace of the child frame this operation entered, including precompile and empty-code targets, which give \{code: 0x, ops: \[]} when no instruction ran; it is null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are optional annotations (H19-H21). + + *** + +
+
+ + Show `vmTrace` object + + + #### `vmTrace` fields + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **ops** `array` *required* + + *** + +
+
+ + Show `ops` object + + + #### `ops` fields + + * **cost** `integer` *required* + + Range: `>= 0` + + *** + + * **ex** `object or null` *required* + + *** + +
+
+ + Show Option 1 `ex` object + + + #### `ex` fields + + **ex** `object` *required* + + *** + +
+
+ + Show `ex` object + + + #### `ex` fields + + * **mem** `object or null` *required* + + *** + +
+
+ + Show Option 1 `mem` object + + + #### `mem` fields + + **mem** `object` *required* + + *** + +
+
+ + Show `mem` object + + + #### `mem` fields + + * **data** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **off** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `mem` null + + + #### `mem` fields + + **mem** `null` *required* + + *** +
+
+ + * **push** `array` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **store** `object or null` *required* + + *** + +
+
+ + Show Option 1 `store` object + + + #### `store` fields + + **store** `object` *required* + + *** + +
+
+ + Show `store` object + + + #### `store` fields + + * **key** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **val** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `store` null + + + #### `store` fields + + **store** `null` *required* + + *** +
+
+ + * **used** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `ex` null + + + #### `ex` fields + + **ex** `null` *required* + + *** +
+
+ + * **idx** `string` + + *** + + * **op** `string` + + *** + + * **pc** `integer` *required* + + Range: `>= 0` + + *** + + * **sub** `object or null` *required* + + *** + +
+
+ + Show Option 1 `sub` object + + + #### `sub` fields + + Recursive instance of [https://ethereum.github.io/execution-apis/schemas/trace-vm.json](https://ethereum.github.io/execution-apis/schemas/trace-vm.json). The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation. + + **sub** `object` *required* + + Recursive instance of [https://ethereum.github.io/execution-apis/schemas/trace-vm.json](https://ethereum.github.io/execution-apis/schemas/trace-vm.json). The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation. + + *** + +
+
+ + Show `sub` object + + + #### `sub` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `sub` null + + + #### `sub` fields + + **sub** `null` *required* + + *** +
+
+ + * **additionalProperties** `true` + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + + +
+
+ + Show Option 2 `vmTrace` null + + + #### `vmTrace` fields + + **vmTrace** `null` *required* + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + ## Errors + +
+ + Error code: -32601 + + + * **code** + + -32601 + * **message** + + Method not found +
+ +
+ + Error code: -32602 + + + * **code** + + -32602 + * **message** + + Invalid params +
+ +
+ + Error code: 1 + + + * **code** + + 1 + * **message** + + Nonce too low +
+ +
+ + Error code: 2 + + + * **code** + + 2 + * **message** + + Nonce too high +
+ +
+ + Error code: 800 + + + * **code** + + 800 + * **message** + + Intrinsic gas too low / Intrinsic gas exceeds gas limit +
+ +
+ + Error code: 804 + + + * **code** + + 804 + * **message** + + Max priority fee per gas higher than max fee per gas +
+ +
+ + Error code: 806 + + + * **code** + + 806 + * **message** + + Max fee per gas less than block base fee +
+ +
+ + Error code: 809 + + + * **code** + + 809 + * **message** + + Insufficient funds for gas \* price + value +
+ +
+ + Error code: -32003 + + + * **code** + + -32003 + * **message** + + Transaction rejected +
+ +
+ + Error code: -38026 + + + * **code** + + -38026 + * **message** + + Client adjustable limit exceeded +
+ +
+ + Error code: 4444 + + + * **code** + + 4444 + * **message** + + Pruned history unavailable +
+ + ## Examples + +
+
+ + trace_rawTransaction result shape + + + Illustrative response shape; exact execution depends on chain state. + + #### Request + + ```json + { + "params": [ + "0xf86a80847735940082520894000000000000000000000000000000000000123401808718e5bb3abd10a0a04c833abdb116ad76fc98610ae0e626d7e35154f1fba38ce6bfdaf69a31eec42ca035ecfb996cc68a2a03df0e1087194e25180b01bf0469f69b4f1d330eea9d027a", + [] + ] + } + ``` + + #### Response + + ```json + { + "output": "0x", + "stateDiff": null, + "trace": [], + "vmTrace": null + } + ``` +
+
+ diff --git a/docs-api/api/methods/trace_replayBlockTransactions.mdx b/docs-api/api/methods/trace_replayBlockTransactions.mdx new file mode 100644 index 000000000..35fedadc8 --- /dev/null +++ b/docs-api/api/methods/trace_replayBlockTransactions.mdx @@ -0,0 +1,3246 @@ +--- +# GENERATED DOCUMENTATION - DO NOT EDIT THIS FILE +title: "trace_replayBlockTransactions" +hide_table_of_contents: true +description: "Default block is not implicit: Block is required. Return exactly one envelope per transaction, in transaction order, each with its transactionHash. Empty blocks and the genesis block return []. Trace the block from its parent's post-block state with its own pre-transaction system operations applied, under its own fork rules. System operations (EIP-4788 and EIP-2935 pre-block calls, EIP-7002 and EIP-7251 post-block calls), withdrawals and rewards are applied in protocol order but belong to no envelope; concatenated stateDiffs therefore do not reconstruct the block post-state. Block does not accept pending (-32602) until a pending contract exists. An unknown selected block returns -32001 (Resource not found); a known block whose required state is pruned returns 4444 (H05,H07,H16,H28,H32). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references." +--- + +import {TwoColumnLayout, InteractiveRequest, ResponseExample} from '@open-rpc/docusaurus-plugin/components'; +import { useState } from 'react'; + +}> + # trace_replayBlockTransactions + + Default block is not implicit: Block is required. Return exactly one envelope per transaction, in transaction order, each with its transactionHash. Empty blocks and the genesis block return \[]. Trace the block from its parent's post-block state with its own pre-transaction system operations applied, under its own fork rules. System operations (EIP-4788 and EIP-2935 pre-block calls, EIP-7002 and EIP-7251 post-block calls), withdrawals and rewards are applied in protocol order but belong to no envelope; concatenated stateDiffs therefore do not reconstruct the block post-state. Block does not accept pending (-32602) until a pending contract exists. An unknown selected block returns -32001 (Resource not found); a known block whose required state is pruned returns 4444 (H05,H07,H16,H28,H32). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references. + + Replays every transaction in a block. + + ## Parameters (by position) + + **Block** `string or string` *required* + + *** + +
+
+ + Show Option 1 `Block number` string + + + #### `Block number` fields + + **Block** `string` *required* + + Block number + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]*)$` + + *** +
+
+ +
+
+ + Show Option 2 `Block tag` string + + + #### `Block tag` fields + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + **Block** `string` *required* + + `earliest`: The lowest numbered block the client has available; `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination; `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions; `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. If the `safe` or `finalized` tag cannot be resolved to a block, the method responds as it does for an unknown block. + + *Allowed values:* `earliest` `finalized` `safe` `latest` + + *** +
+
+ + **TraceTypes** `array` *required* + + *Allowed values:* `trace` `stateDiff` `vmTrace` + + *** + + ## Result + + **Result** `array` + + Execution envelope with the replayed transaction hash (H07). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **stateDiff** `object or null` *required* + + *** + +
+
+ + Show Option 1 `TraceStateDiff` object + + + #### `TraceStateDiff` fields + + Net committed state changes for this execution, comparing the execution endpoints. An account appears only if its balance, nonce, code, storage or existence changed. Existence means presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a deletion. + and - appear only when the account is born or dies; = marks an unchanged field and \* a changed field of an account that exists at both endpoints. A born account includes zero nonce and empty code creation markers and lists its nonzero post-state slots. A deleted account has empty storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving transaction-level changes remain. callMany diffs are relative to each preceding post-state. Multiple authorization writes are reduced to their net effect, including nonce changes when final code equals initial code. An account absent at both endpoints has no account diff. The sender pays value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 post-block calls, rewards) belong to no transaction's diff, so concatenated diffs do not reconstruct the block post-state (H16-H18,H26). + + **stateDiff** `object` *required* + + Net committed state changes for this execution, comparing the execution endpoints. An account appears only if its balance, nonce, code, storage or existence changed. Existence means presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a deletion. + and - appear only when the account is born or dies; = marks an unchanged field and \* a changed field of an account that exists at both endpoints. A born account includes zero nonce and empty code creation markers and lists its nonzero post-state slots. A deleted account has empty storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving transaction-level changes remain. callMany diffs are relative to each preceding post-state. Multiple authorization writes are reduced to their net effect, including nonce changes when final code equals initial code. An account absent at both endpoints has no account diff. The sender pays value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 post-block calls, rewards) belong to no transaction's diff, so concatenated diffs do not reconstruct the block post-state (H16-H18,H26). + + *** + +
+
+ + Show `stateDiff` object + + + #### `stateDiff` fields + + * **^0x\[0-9a-f]\{40}$** `object or object or object` + + *** + +
+
+ + Show Option 1 `Born account` object + + + #### `Born account` fields + + Absent before and present after; every field uses +, and storage lists nonzero slots. + + **^0x\[0-9a-f]\{40}$** `object` + + Absent before and present after; every field uses +, and storage lists nonzero slots. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **code** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **+** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **-** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **nonce** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object` + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + +
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `Deleted account` object + + + #### `Deleted account` fields + + Present before and absent after; every field uses -, and storage is empty because deletion wipes all storage. + + **^0x\[0-9a-f]\{40}$** `object` + + Present before and absent after; every field uses -, and storage is empty because deletion wipes all storage. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **code** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **+** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **-** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **nonce** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object or object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show Option 1 `TraceStorageChange` object + + + #### `TraceStorageChange` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + **^0x\[0-9a-f]\{64}$** `object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + - **+** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + - **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceStorageChange` object + + + #### `TraceStorageChange` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + **^0x\[0-9a-f]\{64}$** `object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + - **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **to** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + - **additionalProperties** `false` + + *** +
+
+
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `Existing account` object + + + #### `Existing account` fields + + Present at both endpoints; fields use = or \*, slots use \*, and at least one value changed. + + **^0x\[0-9a-f]\{40}$** `object` + + Present at both endpoints; fields use = or \*, slots use \*, and at least one value changed. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` string + + + #### `TraceQuantityChange` fields + + **balance** `string` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ + * **code** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` string + + + #### `TraceCodeChange` fields + + **code** `string` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ + * **nonce** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` string + + + #### `TraceQuantityChange` fields + + **nonce** `string` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object` + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + +
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+
+
+
+
+ +
+
+ + Show Option 2 `stateDiff` null + + + #### `stateDiff` fields + + **stateDiff** `null` *required* + + *** +
+
+ + * **trace** `array or array or array or array or array or array or array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show Option 1 `Successful CALL` array + + + #### `Successful CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 2 `Reverted CALL` array + + + #### `Reverted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 3 `Halted CALL` array + + + #### `Halted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 4 `Successful CREATE` array + + + #### `Successful CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object or object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 5 `Reverted CREATE` array + + + #### `Reverted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object or object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 6 `Halted CREATE` array + + + #### `Halted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 7 `Call trace record inside an execution envelope` array + + + #### `Call trace record inside an execution envelope` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"suicide"` + + *** + + * **action** `object` *required* + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **balance** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **refundAddress** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **vmTrace** `object or null` *required* + + *** + +
+
+ + Show Option 1 `Recursive VM execution trace` object + + + #### `Recursive VM execution trace` fields + + code is the actually executed bytecode, including initcode and resolved delegated code. ops lists every operation that began executing; operations rejected before execution (undefined opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies inside code. cost is the total gas deducted from the caller when the operation starts, including gas made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the caller's remaining gas after the operation, including unused gas returned by a child. An operation that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top k stack words after execution, deepest first, as minimal quantities, where k is the number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE and MLOAD \[off, off+32), MSTORE8 \[off, off+1), the destination of CALLDATACOPY, CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE and SLOAD never set it. sub is the trace of the child frame this operation entered, including precompile and empty-code targets, which give \{code: 0x, ops: \[]} when no instruction ran; it is null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are optional annotations (H19-H21). + + **vmTrace** `object` *required* + + code is the actually executed bytecode, including initcode and resolved delegated code. ops lists every operation that began executing; operations rejected before execution (undefined opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies inside code. cost is the total gas deducted from the caller when the operation starts, including gas made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the caller's remaining gas after the operation, including unused gas returned by a child. An operation that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top k stack words after execution, deepest first, as minimal quantities, where k is the number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE and MLOAD \[off, off+32), MSTORE8 \[off, off+1), the destination of CALLDATACOPY, CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE and SLOAD never set it. sub is the trace of the child frame this operation entered, including precompile and empty-code targets, which give \{code: 0x, ops: \[]} when no instruction ran; it is null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are optional annotations (H19-H21). + + *** + +
+
+ + Show `vmTrace` object + + + #### `vmTrace` fields + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **ops** `array` *required* + + *** + +
+
+ + Show `ops` object + + + #### `ops` fields + + * **cost** `integer` *required* + + Range: `>= 0` + + *** + + * **ex** `object or null` *required* + + *** + +
+
+ + Show Option 1 `ex` object + + + #### `ex` fields + + **ex** `object` *required* + + *** + +
+
+ + Show `ex` object + + + #### `ex` fields + + * **mem** `object or null` *required* + + *** + +
+
+ + Show Option 1 `mem` object + + + #### `mem` fields + + **mem** `object` *required* + + *** + +
+
+ + Show `mem` object + + + #### `mem` fields + + * **data** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **off** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `mem` null + + + #### `mem` fields + + **mem** `null` *required* + + *** +
+
+ + * **push** `array` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **store** `object or null` *required* + + *** + +
+
+ + Show Option 1 `store` object + + + #### `store` fields + + **store** `object` *required* + + *** + +
+
+ + Show `store` object + + + #### `store` fields + + * **key** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **val** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `store` null + + + #### `store` fields + + **store** `null` *required* + + *** +
+
+ + * **used** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `ex` null + + + #### `ex` fields + + **ex** `null` *required* + + *** +
+
+ + * **idx** `string` + + *** + + * **op** `string` + + *** + + * **pc** `integer` *required* + + Range: `>= 0` + + *** + + * **sub** `object or null` *required* + + *** + +
+
+ + Show Option 1 `sub` object + + + #### `sub` fields + + Recursive instance of [https://ethereum.github.io/execution-apis/schemas/trace-vm.json](https://ethereum.github.io/execution-apis/schemas/trace-vm.json). The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation. + + **sub** `object` *required* + + Recursive instance of [https://ethereum.github.io/execution-apis/schemas/trace-vm.json](https://ethereum.github.io/execution-apis/schemas/trace-vm.json). The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation. + + *** + +
+
+ + Show `sub` object + + + #### `sub` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `sub` null + + + #### `sub` fields + + **sub** `null` *required* + + *** +
+
+ + * **additionalProperties** `true` + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + + +
+
+ + Show Option 2 `vmTrace` null + + + #### `vmTrace` fields + + **vmTrace** `null` *required* + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + ## Errors + +
+ + Error code: -32601 + + + * **code** + + -32601 + * **message** + + Method not found +
+ +
+ + Error code: -32602 + + + * **code** + + -32602 + * **message** + + Invalid params +
+ +
+ + Error code: -32001 + + + * **code** + + -32001 + * **message** + + Resource not found +
+ +
+ + Error code: 4444 + + + * **code** + + 4444 + * **message** + + Pruned history unavailable +
+ + ## Examples + +
+
+ + trace_replayBlockTransactions result shape + + + Illustrative response shape; exact execution depends on chain state. + + #### Request + + ```json + { + "params": [ + "latest", + [] + ] + } + ``` + + #### Response + + ```json + [] + ``` +
+
+ diff --git a/docs-api/api/methods/trace_replayTransaction.mdx b/docs-api/api/methods/trace_replayTransaction.mdx new file mode 100644 index 000000000..b95515fbc --- /dev/null +++ b/docs-api/api/methods/trace_replayTransaction.mdx @@ -0,0 +1,3225 @@ +--- +# GENERATED DOCUMENTATION - DO NOT EDIT THIS FILE +title: "trace_replayTransaction" +hide_table_of_contents: true +description: "Reconstruct the state immediately before this transaction from the parent block's post-block state, applying this block's pre-transaction system operations and then its preceding transactions, under this block's fork rules. Return null for a transaction that is not in a canonical block; error for unavailable history. Report the transaction's actual committed state transition; block-level operations belong to no transaction's stateDiff (H06,H07,H16,H18,H28). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references." +--- + +import {TwoColumnLayout, InteractiveRequest, ResponseExample} from '@open-rpc/docusaurus-plugin/components'; +import { useState } from 'react'; + +}> + # trace_replayTransaction + + Reconstruct the state immediately before this transaction from the parent block's post-block state, applying this block's pre-transaction system operations and then its preceding transactions, under this block's fork rules. Return null for a transaction that is not in a canonical block; error for unavailable history. Report the transaction's actual committed state transition; block-level operations belong to no transaction's stateDiff (H06,H07,H16,H18,H28). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references. + + Replays a mined transaction with selected traces. + + ## Parameters (by position) + + **TransactionHash** `string` *required* + + *** + + **TraceTypes** `array` *required* + + *Allowed values:* `trace` `stateDiff` `vmTrace` + + *** + + ## Result + + **Result** `object or null` + + *** + +
+
+ + Show Option 1 `TraceReplay` object + + + #### `TraceReplay` fields + + Execution envelope with the replayed transaction hash (H07). + + **Result** `object` + + Execution envelope with the replayed transaction hash (H07). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **stateDiff** `object or null` *required* + + *** + +
+
+ + Show Option 1 `TraceStateDiff` object + + + #### `TraceStateDiff` fields + + Net committed state changes for this execution, comparing the execution endpoints. An account appears only if its balance, nonce, code, storage or existence changed. Existence means presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a deletion. + and - appear only when the account is born or dies; = marks an unchanged field and \* a changed field of an account that exists at both endpoints. A born account includes zero nonce and empty code creation markers and lists its nonzero post-state slots. A deleted account has empty storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving transaction-level changes remain. callMany diffs are relative to each preceding post-state. Multiple authorization writes are reduced to their net effect, including nonce changes when final code equals initial code. An account absent at both endpoints has no account diff. The sender pays value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 post-block calls, rewards) belong to no transaction's diff, so concatenated diffs do not reconstruct the block post-state (H16-H18,H26). + + **stateDiff** `object` *required* + + Net committed state changes for this execution, comparing the execution endpoints. An account appears only if its balance, nonce, code, storage or existence changed. Existence means presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a deletion. + and - appear only when the account is born or dies; = marks an unchanged field and \* a changed field of an account that exists at both endpoints. A born account includes zero nonce and empty code creation markers and lists its nonzero post-state slots. A deleted account has empty storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving transaction-level changes remain. callMany diffs are relative to each preceding post-state. Multiple authorization writes are reduced to their net effect, including nonce changes when final code equals initial code. An account absent at both endpoints has no account diff. The sender pays value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 post-block calls, rewards) belong to no transaction's diff, so concatenated diffs do not reconstruct the block post-state (H16-H18,H26). + + *** + +
+
+ + Show `stateDiff` object + + + #### `stateDiff` fields + + * **^0x\[0-9a-f]\{40}$** `object or object or object` + + *** + +
+
+ + Show Option 1 `Born account` object + + + #### `Born account` fields + + Absent before and present after; every field uses +, and storage lists nonzero slots. + + **^0x\[0-9a-f]\{40}$** `object` + + Absent before and present after; every field uses +, and storage lists nonzero slots. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **code** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **+** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **-** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **nonce** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object` + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + +
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `Deleted account` object + + + #### `Deleted account` fields + + Present before and absent after; every field uses -, and storage is empty because deletion wipes all storage. + + **^0x\[0-9a-f]\{40}$** `object` + + Present before and absent after; every field uses -, and storage is empty because deletion wipes all storage. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **code** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **+** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **-** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **nonce** `object or object or object or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **+** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **-** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 4 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + * **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **to** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + * **additionalProperties** `false` + + *** +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object or object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show Option 1 `TraceStorageChange` object + + + #### `TraceStorageChange` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + **^0x\[0-9a-f]\{64}$** `object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + - **+** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + - **additionalProperties** `false` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceStorageChange` object + + + #### `TraceStorageChange` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + **^0x\[0-9a-f]\{64}$** `object` + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + * lists a nonzero post-state slot of a born account. \* changes a slot of an account that exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = and never use - (H17,H26). + + - **\*** `object` *required* + + *** + +
+
+ + Show `*` object + + + #### `*` fields + + * **from** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **to** `string` *required* + + 32 hex encoded bytes + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **additionalProperties** `false` + + *** +
+
+ + - **additionalProperties** `false` + + *** +
+
+
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 3 `Existing account` object + + + #### `Existing account` fields + + Present at both endpoints; fields use = or \*, slots use \*, and at least one value changed. + + **^0x\[0-9a-f]\{40}$** `object` + + Present at both endpoints; fields use = or \*, slots use \*, and at least one value changed. + + *** + +
+
+ + Show `^0x[0-9a-f]{40}$` object + + + #### `^0x[0-9a-f]{40}$` fields + + * **balance** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` string + + + #### `TraceQuantityChange` fields + + **balance** `string` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **balance** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `balance` object + + + #### `balance` fields + + +
+
+
+
+ + * **code** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceCodeChange` string + + + #### `TraceCodeChange` fields + + **code** `string` *required* + + TraceCodeChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceCodeChange` object + + + #### `TraceCodeChange` fields + + **code** `object` *required* + + TraceCodeChange + + *** + +
+
+ + Show `code` object + + + #### `code` fields + + +
+
+
+
+ + * **nonce** `string or object` *required* + + *** + +
+
+ + Show Option 1 `TraceQuantityChange` string + + + #### `TraceQuantityChange` fields + + **nonce** `string` *required* + + TraceQuantityChange + + *Must be:* `"="` + + *** +
+
+ +
+
+ + Show Option 2 `TraceQuantityChange` object + + + #### `TraceQuantityChange` fields + + **nonce** `object` *required* + + TraceQuantityChange + + *** + +
+
+ + Show `nonce` object + + + #### `nonce` fields + + +
+
+
+
+ + * **storage** `object` *required* + + *** + +
+
+ + Show `storage` object + + + #### `storage` fields + + * **^0x\[0-9a-f]\{64}$** `object` + + *** + +
+
+ + Show `^0x[0-9a-f]{64}$` object + + + #### `^0x[0-9a-f]{64}$` fields + + +
+
+
+
+ + * **additionalProperties** `true` + + *** +
+
+
+
+
+
+
+
+ +
+
+ + Show Option 2 `stateDiff` null + + + #### `stateDiff` fields + + **stateDiff** `null` *required* + + *** +
+
+ + * **trace** `array or array or array or array or array or array or array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show Option 1 `Successful CALL` array + + + #### `Successful CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 2 `Reverted CALL` array + + + #### `Reverted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 3 `Halted CALL` array + + + #### `Halted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 4 `Successful CREATE` array + + + #### `Successful CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object or object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 5 `Reverted CREATE` array + + + #### `Reverted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object or object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 6 `Halted CREATE` array + + + #### `Halted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 7 `Call trace record inside an execution envelope` array + + + #### `Call trace record inside an execution envelope` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **trace** `array` *required* + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + *** + +
+
+ + Show `trace` object + + + #### `trace` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"suicide"` + + *** + + * **action** `object` *required* + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **balance** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **refundAddress** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **vmTrace** `object or null` *required* + + *** + +
+
+ + Show Option 1 `Recursive VM execution trace` object + + + #### `Recursive VM execution trace` fields + + code is the actually executed bytecode, including initcode and resolved delegated code. ops lists every operation that began executing; operations rejected before execution (undefined opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies inside code. cost is the total gas deducted from the caller when the operation starts, including gas made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the caller's remaining gas after the operation, including unused gas returned by a child. An operation that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top k stack words after execution, deepest first, as minimal quantities, where k is the number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE and MLOAD \[off, off+32), MSTORE8 \[off, off+1), the destination of CALLDATACOPY, CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE and SLOAD never set it. sub is the trace of the child frame this operation entered, including precompile and empty-code targets, which give \{code: 0x, ops: \[]} when no instruction ran; it is null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are optional annotations (H19-H21). + + **vmTrace** `object` *required* + + code is the actually executed bytecode, including initcode and resolved delegated code. ops lists every operation that began executing; operations rejected before execution (undefined opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies inside code. cost is the total gas deducted from the caller when the operation starts, including gas made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the caller's remaining gas after the operation, including unused gas returned by a child. An operation that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top k stack words after execution, deepest first, as minimal quantities, where k is the number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE and MLOAD \[off, off+32), MSTORE8 \[off, off+1), the destination of CALLDATACOPY, CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE and SLOAD never set it. sub is the trace of the child frame this operation entered, including precompile and empty-code targets, which give \{code: 0x, ops: \[]} when no instruction ran; it is null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are optional annotations (H19-H21). + + *** + +
+
+ + Show `vmTrace` object + + + #### `vmTrace` fields + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **ops** `array` *required* + + *** + +
+
+ + Show `ops` object + + + #### `ops` fields + + * **cost** `integer` *required* + + Range: `>= 0` + + *** + + * **ex** `object or null` *required* + + *** + +
+
+ + Show Option 1 `ex` object + + + #### `ex` fields + + **ex** `object` *required* + + *** + +
+
+ + Show `ex` object + + + #### `ex` fields + + * **mem** `object or null` *required* + + *** + +
+
+ + Show Option 1 `mem` object + + + #### `mem` fields + + **mem** `object` *required* + + *** + +
+
+ + Show `mem` object + + + #### `mem` fields + + * **data** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **off** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `mem` null + + + #### `mem` fields + + **mem** `null` *required* + + *** +
+
+ + * **push** `array` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **store** `object or null` *required* + + *** + +
+
+ + Show Option 1 `store` object + + + #### `store` fields + + **store** `object` *required* + + *** + +
+
+ + Show `store` object + + + #### `store` fields + + * **key** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **val** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `store` null + + + #### `store` fields + + **store** `null` *required* + + *** +
+
+ + * **used** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `ex` null + + + #### `ex` fields + + **ex** `null` *required* + + *** +
+
+ + * **idx** `string` + + *** + + * **op** `string` + + *** + + * **pc** `integer` *required* + + Range: `>= 0` + + *** + + * **sub** `object or null` *required* + + *** + +
+
+ + Show Option 1 `sub` object + + + #### `sub` fields + + Recursive instance of [https://ethereum.github.io/execution-apis/schemas/trace-vm.json](https://ethereum.github.io/execution-apis/schemas/trace-vm.json). The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation. + + **sub** `object` *required* + + Recursive instance of [https://ethereum.github.io/execution-apis/schemas/trace-vm.json](https://ethereum.github.io/execution-apis/schemas/trace-vm.json). The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation. + + *** + +
+
+ + Show `sub` object + + + #### `sub` fields + + +
+
+
+
+ +
+
+ + Show Option 2 `sub` null + + + #### `sub` fields + + **sub** `null` *required* + + *** +
+
+ + * **additionalProperties** `true` + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + + +
+
+ + Show Option 2 `vmTrace` null + + + #### `vmTrace` fields + + **vmTrace** `null` *required* + + *** +
+
+ + * **additionalProperties** `true` + + *** + + + + + +
+
+ + Show Option 2 `Result` null + + + #### `Result` fields + + **Result** `null` + + *** +
+
+ + ## Errors + +
+ + Error code: -32601 + + + * **code** + + -32601 + * **message** + + Method not found +
+ +
+ + Error code: -32602 + + + * **code** + + -32602 + * **message** + + Invalid params +
+ +
+ + Error code: 4444 + + + * **code** + + 4444 + * **message** + + Pruned history unavailable +
+ + ## Examples + +
+
+ + trace_replayTransaction result shape + + + Illustrative response shape; exact execution depends on chain state. + + #### Request + + ```json + { + "params": [ + "0x1111111111111111111111111111111111111111111111111111111111111111", + [] + ] + } + ``` + + #### Response + + ```json + null + ``` +
+
+ diff --git a/docs-api/api/methods/trace_transaction.mdx b/docs-api/api/methods/trace_transaction.mdx new file mode 100644 index 000000000..05bcef603 --- /dev/null +++ b/docs-api/api/methods/trace_transaction.mdx @@ -0,0 +1,1502 @@ +--- +# GENERATED DOCUMENTATION - DO NOT EDIT THIS FILE +title: "trace_transaction" +hide_table_of_contents: true +description: "Return a flat preorder tree, including the root. A transaction that is not in a canonical block returns null; unavailable state is an error. traceAddress is a path, not a flat list index (H02,H06). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references." +--- + +import {TwoColumnLayout, InteractiveRequest, ResponseExample} from '@open-rpc/docusaurus-plugin/components'; +import { useState } from 'react'; + +}> + # trace_transaction + + Return a flat preorder tree, including the root. A transaction that is not in a canonical block returns null; unavailable state is an error. traceAddress is a path, not a flat list index (H02,H06). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references. + + Returns localized call traces for a mined transaction. + + ## Parameters (by position) + + **TransactionHash** `string` *required* + + *** + + ## Result + + **Result** `array or array or array or array or array or array or array or null` + + *** + +
+
+ + Show Option 1 `Successful CALL` array + + + #### `Successful CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Successful frame; result is required and error must be absent. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 2 `Reverted CALL` array + + + #### `Reverted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + REVERT; result carries the frame's gas and revert bytes. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object` *required* + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic gas and the EIP-7623 floor. output is the frame's return or revert bytes. + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 3 `Halted CALL` array + + + #### `Halted CALL` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Exceptional halt; result is omitted or null. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"call"` + + *** + + * **action** `object` *required* + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from is the executing address, to the code address. value is the transferred value; DELEGATECALL reports the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, plus the 2300 stipend for a value transfer (H09,H29). + + * **callType** `string` *required* + + *Allowed values:* `call` `callcode` `delegatecall` `staticcall` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **input** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **to** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 4 `Successful CREATE` array + + + #### `Successful CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Successful frame; result is required and error must be absent. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `object or object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 5 `Reverted CREATE` array + + + #### `Reverted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + REVERT; result carries the frame's gas and revert bytes, without address or code. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *Must be:* `"Reverted"` + + *** + + * **result** `object or object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show Option 1 `TraceCreateResult` object + + + #### `TraceCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + Successful creation. gasUsed is execution gas before refunds, including the code deposit; for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode (H10). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **code** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ +
+
+ + Show Option 2 `TraceRevertedCreateResult` object + + + #### `TraceRevertedCreateResult` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + **result** `object` *required* + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + *** + +
+
+ + Show `result` object + + + #### `result` fields + + A reverted creation reports its gas and revert bytes, never an address or deployed code (H09). + + * **gasUsed** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **output** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **additionalProperties** `true` + + *** +
+
+
+
+ + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 6 `Halted CREATE` array + + + #### `Halted CREATE` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + Exceptional halt, including an address collision; result is omitted or null. + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"create"` + + *** + + * **action** `object` *required* + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE from CREATE2 and is required on every create action (H10). + + * **creationMethod** `string` *required* + + *Allowed values:* `create` `create2` + + *** + + * **from** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **gas** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **init** `string` *required* + + Trace byte string + + *Match pattern:* `^0x([0-9a-f]{2})*$` + + *** + + * **value** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **error** `string` *required* + + *** + + * **result** `null` + + *** + + * **revertReason** `string` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 7 `Historical transaction call trace record` array + + + #### `Historical transaction call trace record` fields + + Array result. Each item independently matches one of the following variants; different variants may occur in the same array. + + **Result** `array` + + Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile frames with zero value; retain nested frames with nonzero transferred or inherited value, whether successful or failed. A precompile is an address in the precompile set active at the executing block's fork. traceAddress gives child ordinals and subtraces counts direct children in the emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient balance) starts no execution and emits no frame. A CREATE whose address collides emits a create frame with error "Contract address collision" that consumes its gas. Standalone historical records require localization; only protocol rewards have null transaction fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. error alone determines failure. A REVERT frame has error "Reverted" and a required result \{gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An exceptional halt consumes the frame's action gas; its result may be omitted or null. Failure labels are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". Any other error string is an extension that consumers treat as a generic failure. revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion (H05,H09,H10,H24). + + *** + +
+
+ + Show `Result` object + + + #### `Result` fields + + * **blockHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **blockNumber** `integer` *required* + + Range: `>= 0` + + *** + + * **type** `string` *required* + + *Allowed values:* `call` `create` `suicide` + + *Must be:* `"suicide"` + + *** + + * **action** `object` *required* + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + *** + +
+
+ + Show `action` object + + + #### `action` fields + + Records a SELFDESTRUCT opcode and the balance it transferred from address to refundAddress, not account deletion; after EIP-6780 the account usually survives. + + * **address** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **balance** `string` *required* + + hex encoded 256 bit unsigned integer + + *Match pattern:* `^0x(0|[1-9a-f][0-9a-f]{0,63})$` + + *** + + * **refundAddress** `string` *required* + + hex encoded address + + *Match pattern:* `^0x[0-9a-fA-F]{40}$` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + * **result** `null` + + *** + + * **subtraces** `integer` *required* + + Range: `>= 0` + + *** + + * **traceAddress** `array` *required* + + Range: `>= 0` + + *** + + * **transactionHash** `string` *required* + + 32 byte hex value + + *Match pattern:* `^0x[0-9a-f]{64}$` + + *** + + * **transactionPosition** `integer` *required* + + Range: `>= 0` + + *** + + * **additionalProperties** `true` + + *** +
+
+ + + +
+
+ + Show Option 8 `Result` null + + + #### `Result` fields + + **Result** `null` + + *** +
+
+ + ## Errors + +
+ + Error code: -32601 + + + * **code** + + -32601 + * **message** + + Method not found +
+ +
+ + Error code: -32602 + + + * **code** + + -32602 + * **message** + + Invalid params +
+ +
+ + Error code: 4444 + + + * **code** + + 4444 + * **message** + + Pruned history unavailable +
+ + ## Examples + +
+
+ + trace_transaction result shape + + + Illustrative response shape; exact execution depends on chain state. + + #### Request + + ```json + { + "params": [ + "0x1111111111111111111111111111111111111111111111111111111111111111" + ] + } + ``` + + #### Response + + ```json + null + ``` +
+
+ diff --git a/docs-api/docs/trace-profile.md b/docs-api/docs/trace-profile.md new file mode 100644 index 000000000..bc29a5a82 --- /dev/null +++ b/docs-api/docs/trace-profile.md @@ -0,0 +1,282 @@ +# Proposed Parity trace profile + +This branch is a draft for client review, not adopted RPC policy. It proposes the nine +traditional trace methods and three output families. Support/conformance policy (H01) +remains a standards decision; adding these files does not assert that every client must +implement every method. Geth support is not assumed. + +The companion [trace-interop project](https://github.com/banteg/trace-interop) retains +client observations, reproducible cases and per-client impact reports. +Observed agreement is not a correctness oracle. Recommendations below are proposals. +The target is a useful, precise contract; historical implementations explain compatibility +costs but do not decide it. Intentional departures are called out below. + +## Explicit choices in this draft + +- Query path inputs use hex quantities for caller compatibility; traceAddress outputs retain JSON + integers. Convert each output integer to a minimal hex quantity before passing it to trace_get. + Integer path entries return -32602, rather than null. +- Address filters use OR within each list and AND between lists, as `eth_getLogs` composes topic + positions. Missing, null and empty lists are unrestricted. Addresses compare by bytes, irrespective + of hex letter case. Optional `mode` accepts `intersection` (the default) and `union` (match either + populated list); other values return -32602. +- Standalone historical records (`trace_block`, `trace_filter`, `trace_transaction`, + `trace_get`) require non-null block localization. Mined transaction frames also require + non-null transaction hash/index; protocol rewards require null transaction hash/index + and occur only in block/filter results. Frames inside simulation and replay envelopes + omit localization and rewards; both individual and block replay envelopes carry the transaction + hash so results retain their identity outside the request. Requiring it for individual replay + deliberately extends the original Parity response shape. +- Trace calls default to latest post-state and accept a block number, tag or hash. Raw signed + simulation uses latest and two parameters. Accepting an explicitly supplied block-selector + extension is outside this baseline, not a conformance failure. The third selector existed in + Parity’s implementation, although its guide omitted it. +- Empty trace selection is valid. The envelope always preserves output. +- Unknown single selected blocks (`trace_block`, `trace_replayBlockTransactions`, and the + simulation block) return -32001 (Resource not found). Unknown transactions and valid but absent + tree paths return null. Known blocks with pruned required state return 4444. If pruned indexing + prevents establishing whether a hash is absent, return 4444 rather than claiming a definitive + not-found result. This extends the pruned-history code adopted for eth/debug methods in + [#636](https://github.com/ethereum/execution-apis/pull/636) to trace methods and execution state; + that extension remains a proposal. +- `trace_filter` ranges follow `eth_getLogs` + ([#875](https://github.com/ethereum/execution-apis/pull/875)): if either bound resolves beyond + the current head, or `fromBlock` resolves above `toBlock`, return -32602 (Invalid params). Never + clamp the range or return a partial result. Bounds use `BlockNumberOrTagForRange`, which excludes + `pending`. `earliest` is the lowest block the client has available, as the shared tag defines it; + an explicit number below retained history returns 4444. +- Omitted filter bounds both mean `latest`, resolved against the same canonical head for the + request. A `toBlock` earlier than the omitted `fromBlock` is a reversed range (-32602); + callers searching history must state `fromBlock`. This follows Parity’s original + `trace_filter` default and the `eth_getLogs` convention. Query limits produce an explicit error, + never an incomplete success. `count` limits returned records, not scan or replay work. + [H30](https://github.com/banteg/trace-interop/blob/main/reports/decisions/H30.md) +- `trace_block` and `trace_replayBlockTransactions` reject `pending` with -32602 until a pending + contract exists. Localized records never carry a block hash that is not canonical. + +## Blocks, rewards and pagination + +The genesis block has no transaction or reward records: `trace_block(0)` and +`trace_replayBlockTransactions(0)` return `[]`, and filters over genesis contribute nothing. In +every other block, rewards follow all transaction records of that block: the block reward, then +uncle rewards in ommer order. A reward matches `toAddress` by its `author` and has no sender side, +so it is excluded when `fromAddress` is populated in intersection mode; in union mode a `toAddress` +match suffices. `trace_filter` filters first, then applies `after` and `count` in block, +transaction, preorder, then reward order. `after` and `count` are JSON integers bounded by uint64. +Offsets are stable only for a fixed, numerically resolved range. + +System operations (EIP-4788 and EIP-2935 pre-block calls, EIP-7002 and EIP-7251 post-block +calls), withdrawals and rewards are applied to replay state in protocol order, but they are not call +trace records and belong to no transaction’s `stateDiff`. Concatenated transaction diffs therefore do +not reconstruct the block post-state. Each block is traced from its parent’s post-block state with +its own pre-transaction system operations applied, under its own fork rules, whether a request +covers one block or a range. Replay arrays hold exactly one envelope per transaction. + +## Simulation requests + +Call objects use the `eth_simulateV1` `GenericCallTransaction` fields, together with `chainId` and +`authorizationList` from `GenericTransaction` and `data` as an alias for `input`. When `data` and +`input` are both present they must be equal (-32602). Every field the schema defines either takes +effect with its `eth_call` meaning or causes a rejection (-32602, or the fork’s validity error); +only fields outside the schema are ignored. A supplied nonce is accepted but neither validated nor +used, so CREATE addresses derive from the state nonce. `gas` is a uint64. + +Fees follow `eth_call` and `eth_simulateV1` (H15). Omitted fee fields default to zero. The zero-fee +rule applies to the effective gas price after defaulting: a zero price means GASPRICE 0 and BASEFEE +0. BLOBBASEFEE is 0 exactly when `maxFeePerBlobGas` is supplied as 0 or defaulted to 0; calls without blob +fields keep the block’s BLOBBASEFEE. Fee validation is skipped only when both fee caps are zero. +Positive prices are validated against the base fee, funded and charged, with refunds, base-fee burn +and tips simulated. This removes Parity’s virtual balance top-up for unsigned calls. + +Parameter positions for overrides are reserved: `trace_call` takes `StateOverrides` fourth and +`BlockOverrides` fifth; `trace_callMany` takes them third and fourth. Both use the `eth_simulateV1` +schemas. A client that does not implement them must reject a non-null value with -32602. With a +block override, the zero-fee rule uses the overridden base fee. + +In `trace_callMany` every item is a separate transaction: EIP-2200 and EIP-3529 original storage +values, EIP-2929 access sets, EIP-1153 transient storage, the refund counter and EIP-6780’s +same-transaction scope start afresh. All items share one block environment, so NUMBER and TIMESTAMP +do not advance. The first item runs against the same state and environment as `trace_call` at the +selected block, and each diff is relative to the preceding item’s post-state. If any decoded item +fails validation, the request returns one error whose `error.data.index` is the zero-based item index, +and no partial results. A malformed item is invalid params (-32602) without an index. Servers may cap items or total gas with an explicit -38026 error, never by +truncating. + +Validation rejections of `trace_call` and `trace_callMany` use the `eth_simulateV1` codes: -38012 +base fee too low, -38013 intrinsic gas, -38014 insufficient funds, -38025 init-code size and -38026 +client limit. A priority fee above the fee cap, and any other validation failure without a listed +code, is -32602. A supplied nonce is not validated and unsigned calls skip the EIP-3607 sender-code +check, as `eth_call` does, so the nonce and sender-not-EOA codes do not apply. Omitted gas, and +supplied gas above the server's execution cap, run with that cap, as `eth_call` does; the cap is +server policy, not a truncated result. +`trace_rawTransaction` uses the `eth_sendRawTransaction` error groups +([#650](https://github.com/ethereum/execution-apis/pull/650)): 1 nonce too low, 2 nonce too high, +800 intrinsic gas, 804 priority fee above fee cap, 806 fee cap below base fee and 809 insufficient +funds, with -32003 (Transaction rejected) as the generic fallback. A signed gas limit above the +server's execution cap is not reduced, because that would change the transaction: it is rejected +with -38026. Malformed input is -32602. + +## Execution results and state changes + +Frame numbers follow Parity. The root `action.gas` is the transaction gas minus intrinsic gas, +including access-list and authorization costs. The root `result.gasUsed` is execution gas before +refunds, excluding intrinsic gas and the EIP-7623 floor. A nested CALL-family `action.gas` is the gas +forwarded after the 63/64 cap plus the 2300 stipend for a value transfer. CREATE `gasUsed` includes +the code deposit, and an exceptional halt consumes `action.gas`. CALL and STATICCALL report the +caller as `from` and the target as `to`; DELEGATECALL and CALLCODE report the executing address and +the code address. DELEGATECALL `value` is the inherited value and STATICCALL `value` is 0. Create +actions require `creationMethod` (`create` or `create2`). A `suicide` frame records the opcode and +its transfer, not account deletion. Calls and creates that fail their precheck (depth limit, +insufficient balance) emit no frame; a CREATE address collision emits a create frame with error +`Contract address collision`. + +`error` alone determines failure. A REVERT frame has error `Reverted` and requires +`result: {gasUsed, output}`, for CREATE too, without an address or code. An exceptional halt may +omit `result` or set it to null. Erigon and Reth already emit REVERT results; the new part is the +failed-CREATE shape, which must not report the would-be address. Failure labels are `Reverted`, +`Out of gas`, `Bad instruction`, `Bad jump destination`, `Stack underflow`, `Out of stack`, +`Mutable Call In Static Context`, `Built-in failed` and `Out of bounds`, plus the post-Parity +`Contract address collision`, `Code size limit exceeded`, `Invalid code prefix 0xEF` and +`Nonce overflow`. EIP-3860 oversized initcode aborts the creating frame with `Out of gas`, as the +EIP specifies. The designated invalid instruction 0xFE is an undefined opcode: it is omitted from +`vmTrace` ops and its frame fails with `Bad instruction`. Other strings are extensions that +consumers treat as generic failure. +`revertReason`, if present, is decoded `Error(string)` text; raw revert bytes live in +`result.output`. The execution envelope carries root output, which cannot substitute for a nested +frame’s revert bytes. A locally successful child remains successful even if an ancestor later +reverts; its state changes then do not survive in `stateDiff`. + +`stateDiff` compares execution endpoints, not intermediate writes. An account appears only if its +balance, nonce, code, storage or existence changed. Existence means presence in the state trie, so +an existing EIP-161-empty account removed by touch-clearing is a deletion. `+` and `-` appear only +when the account is born or dies. Slots of an account that exists at both endpoints use `*` with +32-byte words, including zero words; slots never use `=`. A born account lists its nonzero +post-state slots as `+`. A deleted account has `storage: {}`, and its `-` implies that all storage +is wiped, as Parity, Besu and Erigon already report. Multiple EIP-7702 authorizations may restore the +original code while changing nonce; only net code changes appear. Accepted authorization effects +survive a later EVM revert. Accounts absent at both endpoints have no account diff even if created +and destroyed. The sender pays value, `gasUsed` times the effective price and `blobGasUsed` times +the blob base fee; base and blob fees are burned or credited to a chain-defined collector, and the +tip goes to the fee recipient. + +VM `mem` is the post-operation contents of the memory range the opcode’s operands designate: +MSTORE and MLOAD `[off, off+32)`, MSTORE8 `[off, off+1)`, the destination of CALLDATACOPY, +CODECOPY, EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. It is null +when that range is empty or the opcode has none (RETURN, REVERT, LOG, KECCAK256, CREATE). This +matches Parity, Erigon, Nethermind and Besu for MLOAD, and reverses an earlier draft that narrowed +`mem` to written bytes. `cost` is the total gas deducted from the caller when the operation starts, +including gas made available to a child frame (the 63/64-capped forwarded gas for the CALL family, +excluding the value stipend; all but 1/64 for the CREATE family). `ex.used` is the caller’s +remaining gas after the operation, including unused child gas returned. An operation that began +executing and halted exceptionally keeps its pre-execution `cost` and has `ex: null` and `sub: null`. +Operations rejected before execution are omitted, and no synthetic STOP is added, so every `pc` +lies inside `code`. `push` is the top k stack words after execution, deepest first, where k is the +number of words the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1). +`store` is set only by SSTORE, from its operands, whenever the SSTORE completes, even if the value is +unchanged. A selected `vmTrace` is always an object. An operation that entered a child frame, +including a precompile or empty-code target, has that frame’s trace as `sub` +(`{code: "0x", ops: []}` if no instruction ran); others have `sub: null`. These deltas do not +independently encode allocated memory size. `pc`, `cost`, `ex.used` and output trace paths remain +JSON integers; stack words use hex quantities. Optional `idx` needs a declared numbering convention +to be checked. + +Filter membership describes actions, not necessarily committed transfers. Failed CREATE +can match its creator but has no created-address match; an explicit union may +still retain the creator match. SELFDESTRUCT matches the executing (self-destructing) account and +the beneficiary; after EIP-6780 the account usually survives. Range results must match +fork-correct per-block records, whether those records come from replay or an index. + +## Response integrity + +Before result bytes are committed, validation or execution setup failures must produce +one complete JSON-RPC error. Buffering may be necessary to preserve that boundary: +parsing all callMany inputs does not validate later calls against earlier calls’ state. +If a failure occurs after output is committed, explicitly abort the transport rather +than append a second error envelope or finish a partial result as success. An aborted +request is incomplete, not a successful trace or a complete JSON-RPC error. Tests must +distinguish deliberate transport termination from malformed completed responses. + +## Precompile frames (H29) + +All methods that return call frames use the same inclusion rule: retain root precompile +calls regardless of value. Omit nested precompile frames with zero value, and retain +those with nonzero transferred or inherited value, whether successful or failed. +A precompile is an address in the precompile set active at the executing block’s fork. +For CALL and CALLCODE, use the explicit value operand, not the parent transaction value. +For DELEGATECALL, use the inherited call value; STATICCALL has zero value. The inherited +value exception preserves action context even though DELEGATECALL transfers no funds. +`traceAddress` and `subtraces` describe the emitted tree, so omitted frames do not +consume child ordinals. This also determines the paths used by `trace_get` and the +records available to `trace_filter`. An omitted frame must not suppress its caller's +VM return-memory effects. Errors belong to the frame that failed; a handled precompile +failure does not make its successful caller fail. + +This is a compatibility choice, subject to client review. Parity's trace database +[omitted nested built-ins to avoid denial-of-service from trace volume](https://github.com/openethereum/parity-ethereum/blob/66477a9476200aaf7e933a52dc64676154adfb2b/ethcore/src/executive.rs#L266), +then [retained actual value transfers](https://github.com/openethereum/parity-ethereum/blob/4255d4c46436d2740c4afb521b773cb95072c7cc/ethcore/src/executive.rs#L431) while citing heavy `IDENTITY` use. The inherited-value +case above follows [current client behavior](https://github.com/banteg/trace-interop/blob/main/reports/decisions/H29.md), not Parity's original +transfer-only rationale. JSON Schema alone cannot enforce this rule; the companion +precompile fixtures check inclusion and path numbering. + +## Signed transaction validation + +H13 proposes execution validity at the selected state for signed raw transactions: +signature, chain identity, nonce equality, balance for value and upfront gas, intrinsic +gas, fees and the selected fork's sender-code restrictions, including EIP-7702's +delegation exception. Reject both low and high nonces without modifying signed fields +or implicitly changing the sender's nonce or balance. A valid transaction that REVERTs +or runs out of execution gas still returns a trace. Local pool policies such as +replacement pricing, already-known rejection and minimum tips do not apply. Full block +admissibility is not established by a successful simulation. Authorization tuples skipped +under EIP-7702 do not themselves make the outer transaction invalid; validation must +follow the selected fork’s distinction between rejected transactions and skipped tuples. + +This deliberately tightens legacy permissive simulation: queued high-nonce transactions +and already-mined low-nonce transactions may stop tracing at latest state. Historical +OpenEthereum skipped nonce checks and could supplement balance. Using a state nonce +different from the signed nonce can change CREATE's execution address; overriding +state instead invents a pre-state. The baseline chooses neither behavior. Hypothetical +execution belongs in explicitly documented simulation facilities. Erigon's +[feedback](https://github.com/ethereum/execution-apis/issues/890#issuecomment-5784143408) +supports strict validation despite the compatibility cost; this is not unanimous client +approval. Malformed JSON on rejection is independently a reporting defect. + +## Open details requiring focused review + +Optional method discovery; the value of client execution caps; `pending` for simulations +and its localization; the shared semantics of a raw-transaction block selector (H12); and +simulation extensions beyond the reserved override positions need further agreement. Clients +must declare supported extensions rather than relying on a successful response as feature +detection. Full semantic conformance cannot be inferred from schema validity. + +The VM schema has its own JSON Schema resource identity and a local self-reference, +so nested execution receives the same validation as the root. Build tooling preserves +that bounded self-reference while still rejecting cyclic component expansion. + +## Decisions and client impact + +The [decision ledger](https://github.com/banteg/trace-interop/blob/main/decisions/README.md) +contains the rationale, evidence and open questions for each decision. The +[client impact tables](https://github.com/banteg/trace-interop/blob/main/reports/README.md) +show the changes required by each tested build, with individual requests and responses. + +## Recursive schema rendering + +`openrpc.json` retains the recursive `vmTrace` schema and is the validation artifact. +The documentation renderer currently cannot expand recursive schemas. Its generated +`docs-openrpc.json` display input replaces resource-local self references with labeled +recursive object descriptions. It also materializes shared object fields in union +branches and labels array-item variants for the renderer. Different item variants may +coexist in one array; the display wrappers are not an equivalent validation schema. +This artifact must not be used for conformance validation. + +`npm run docs:refresh` rebuilds the spec, refreshes this display projection, and copies +the introductory page. The watcher uses the same chain. Startup and production-build +hooks only refresh the projection so an already prepared release spec is preserved. +`npm run test:docs` tests rendered method output and the refresh chain after `make build`. + +The Go trace schema tests build the real YAML and validate positive and negative cases +against reference-preserving and expanded schemas (Draft 7 and Draft 2019-09), and the +actual speccheck parsing/validation path. They include recursive VM resources, fee +conflicts, contextual frame restrictions and nonempty callMany tuples. These are schema +tests, not execution fixtures or evidence of client semantic conformance. diff --git a/docusaurus.config.ts b/docusaurus.config.ts index d926c8868..e0195b888 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -37,7 +37,7 @@ const config: Config = { "docusaurus-plugin-copy-page-button", ['@open-rpc/docusaurus-plugin', { - openRPCSpecPath: './openrpc.json', + openRPCSpecPath: './docs-openrpc.json', docOutputPath: './docs-api/api', indexSlug: '/' }], diff --git a/package-lock.json b/package-lock.json index f7f1660ee..51d9a6054 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "execution-apis", "version": "0.0.0", + "hasInstallScript": true, "license": "CC0-1.0", "dependencies": { "@docusaurus/core": "3.9.2", @@ -27,8 +28,11 @@ "react": "^19.0.0", "react-dom": "^19.0.0", "remark-gfm": "~4.0.1", - "semver": "^7.8.1", + "semver": "7.8.1", "typescript": "~5.6.2" + }, + "devDependencies": { + "patch-package": "8.0.1" } }, "node_modules/@algolia/abtesting": { @@ -6155,6 +6159,13 @@ "version": "4.2.2", "license": "Apache-2.0" }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -7573,6 +7584,20 @@ "node-fetch": "2.6.7" } }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/crypto-random-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", @@ -8883,55 +8908,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.6", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/express": { "version": "4.22.2", "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", @@ -9267,6 +9243,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "micromatch": "^4.0.2" + } + }, "node_modules/flat": { "version": "5.0.2", "license": "BSD-3-Clause", @@ -10664,6 +10650,8 @@ }, "node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/isobject": { @@ -10788,6 +10776,33 @@ "version": "0.4.1", "license": "MIT" }, + "node_modules/json-stable-stringify": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", + "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/json-stable-stringify/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/json5": { "version": "2.2.3", "license": "MIT", @@ -10808,6 +10823,16 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -12505,13 +12530,6 @@ "node": ">=8" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", @@ -12941,6 +12959,78 @@ "tslib": "^2.0.3" } }, + "node_modules/patch-package": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", + "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^10.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.2.4", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/patch-package/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/path-exists": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", @@ -12956,6 +13046,15 @@ "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", "license": "(WTFPL OR MIT)" }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -15850,6 +15949,27 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", "license": "MIT" }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/shell-quote": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", @@ -16499,6 +16619,16 @@ "node": "^18.0.0 || >=20.0.0" } }, + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "license": "MIT", @@ -17521,6 +17651,21 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", @@ -17683,6 +17828,22 @@ "xml-js": "bin/cli.js" } }, + "node_modules/yaml": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", + "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yocto-queue": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", diff --git a/package.json b/package.json index b39c389a8..27093732b 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,14 @@ "start": "docusaurus start", "serve": "docusaurus serve", "clear": "docusaurus clear", - "watch": "nodemon --watch src --watch docs-api/docs --watch README.md --ignore docs-api/docs/quickstart.md --ext yaml,md,json --exec \"npm run build:spec && npm run docs:copy\"", - "docs:copy": "cp README.md ./docs-api/docs/quickstart.md" + "watch": "nodemon --watch src --watch docs-api/docs --watch README.md --ignore docs-api/docs/quickstart.md --ext yaml,md,json --exec \"npm run docs:refresh\"", + "docs:copy": "cp README.md ./docs-api/docs/quickstart.md", + "prebuild:docusaurus": "npm run docs:spec", + "prestart": "npm run docs:spec", + "docs:spec": "node scripts/docs-spec.cjs", + "docs:refresh": "npm run build:spec && npm run docs:spec && npm run docs:copy", + "test:docs": "node --test scripts/docs-spec.test.cjs", + "postinstall": "patch-package --error-on-fail" }, "repository": { "type": "git", @@ -55,5 +61,8 @@ "remark-gfm": "~4.0.1", "semver": "7.8.1", "typescript": "~5.6.2" + }, + "devDependencies": { + "patch-package": "8.0.1" } -} \ No newline at end of file +} diff --git a/patches/@open-rpc+markdown-generator+0.2.0.patch b/patches/@open-rpc+markdown-generator+0.2.0.patch new file mode 100644 index 000000000..5a00b737e --- /dev/null +++ b/patches/@open-rpc+markdown-generator+0.2.0.patch @@ -0,0 +1,43 @@ +diff --git a/node_modules/@open-rpc/markdown-generator/dist/index.js b/node_modules/@open-rpc/markdown-generator/dist/index.js +index e02139d..0c0edec 100644 +--- a/node_modules/@open-rpc/markdown-generator/dist/index.js ++++ b/node_modules/@open-rpc/markdown-generator/dist/index.js +@@ -289,6 +289,8 @@ function labelTypeStringForSchema(schema) { + if (schema === null || schema === undefined) + return "null"; + if (typeof schema === "object" && schema !== null) { ++ if (schema.type === "array" && Array.isArray(schema.items)) ++ return `[${schema.items.map(labelTypeStringForSchema).join(", ")}]`; + if (schema.type === "array") + return `array<${labelTypeStringForSchema(schema.items)}>`; + if (schema.type === "object") +@@ -843,6 +845,29 @@ function renderSchema(contentDescriptor = undefined, schema = undefined, editSch + return renderOfTypeSchema(contentDescriptor, "anyOf", schema, editSchema); + } + if (schema.type === "array") { ++ // Tuples and nested arrays need their own container. Passing a tuple's ++ // items array back to renderSchema silently drops every position. ++ if (Array.isArray(schema.items) || schema.items?.type === "array") { ++ const tuple = Array.isArray(schema.items); ++ const items = tuple ? schema.items : [schema.items]; ++ const children = items.flatMap((item, index) => renderSchema({ ++ name: tuple ? `Position ${index}` : "Items", ++ description: item.description, ++ required: tuple && index < (schema.minItems ?? 0), ++ constraintsSchema: item ++ }, item, editSchema)); ++ const container = { ...contentDescriptor, constraintsSchema: schema }; ++ return [ ++ ...renderAtomicHelper(container.name ?? schema.title ?? "", labelTypeStringForSchema(schema), getSchemaDescription(container, schema), container), ++ ...divify([details({ ++ summaryTitle: tuple ? "Show tuple positions" : "Show array items", ++ summaryCode: container.name ?? schema.title ?? "", ++ summaryType: "array", ++ summaryContent: children, ++ detailDescription: tuple ? "Tuple positions are zero-based and must be supplied in the order shown." : "" ++ })]) ++ ]; ++ } + if (typeof schema.items === "object") { + const containingContent = { + ...contentDescriptor, diff --git a/patches/README.md b/patches/README.md new file mode 100644 index 000000000..d1936e651 --- /dev/null +++ b/patches/README.md @@ -0,0 +1,15 @@ +# Documentation renderer patch + +`@open-rpc+markdown-generator+0.2.0.patch` fixes the Node renderer used by the +Docusaurus plugin. It renders positional tuples and preserves their surrounding +array containers. This makes `trace_callMany` show its required `Calls` parameter, +the two tuple positions, and the length constraint on each tuple. + +`npm ci` applies the patch through `postinstall`. If lifecycle scripts are disabled, +run `npm run postinstall` before generating or testing documentation. Patch failures +stop installation. The package version is locked; remove this patch when a renderer +release includes the fix, alongside the recursive/composed-schema tooling consolidation. + +`npm run test:docs` checks every trace parameter's visibility and required status, +plus tuple labels, order and cardinality. The canonical OpenRPC schemas are unchanged +by the renderer patch. diff --git a/scripts/docs-spec.cjs b/scripts/docs-spec.cjs new file mode 100644 index 000000000..0e5fca064 --- /dev/null +++ b/scripts/docs-spec.cjs @@ -0,0 +1,124 @@ +// Display projection for the Markdown renderer. Validators use openrpc.json. +const fs = require('node:fs'); + +// The renderer treats oneOf branches as complete schemas, ignoring siblings. +// Materialize their shared fields for display; the canonical intersection stays +// in openrpc.json. Return false for visibly contradictory discriminator branches. +function withCommon(common, branch) { + if (branch === false || common === false) return false; + if (branch === true) return common; + if (common === true) return branch; + if (common.type && branch.type && common.type !== branch.type) return false; + const out = {...common, ...branch}; + if (common.enum && branch.const !== undefined && !common.enum.includes(branch.const)) return false; + if (branch.enum && common.const !== undefined && !branch.enum.includes(common.const)) return false; + if (common.const !== undefined && branch.const !== undefined && common.const !== branch.const) return false; + if (common.properties || branch.properties) { + out.properties = {...common.properties, ...branch.properties}; + for (const key of Object.keys(common.properties || {})) { + if (branch.properties?.[key]) { + out.properties[key] = withCommon(common.properties[key], branch.properties[key]); + if (out.properties[key] === false && [...(common.required || []), ...(branch.required || [])].includes(key)) return false; + } + } + } + if (common.required || branch.required) out.required = [...new Set([...(common.required || []), ...(branch.required || [])])]; + const descriptions = [...new Set([common.description, branch.description].filter(Boolean))]; + if (descriptions.length) out.description = descriptions.join('\n\n'); + return out; +} + +function forDisplay(schema, resource) { + if (schema === null || typeof schema !== 'object') return schema; + resource = schema.$id || resource; + if (schema.$ref === '#') { + if (!resource) throw new Error('Unscoped recursive schema reference'); + return { + type: 'object', + description: `Recursive instance of ${resource}. The child has the same schema as its parent resource; see the canonical OpenRPC schema for validation.`, + }; + } + // Once a union branch fixes a discriminator, its conditional localization + // properties can be shown directly. Leave undecidable conditions untouched. + if (schema.if?.properties) { + const conditions = Object.entries(schema.if.properties); + if (conditions.length && conditions.every(([key, value]) => value.const !== undefined && schema.properties?.[key]?.const !== undefined)) { + const matches = conditions.every(([key, value]) => schema.properties[key].const === value.const); + const {if: condition, then, else: otherwise, ...base} = schema; + return forDisplay(withCommon(base, (matches ? then : otherwise) || {}), resource); + } + } + const union = schema.oneOf ? 'oneOf' : schema.anyOf ? 'anyOf' : undefined; + if (union) { + const {[union]: variants, ...common} = schema; + const projected = variants.map(branch => withCommon(common, branch)) + .filter(branch => branch !== false).map(branch => forDisplay(branch, resource)); + // Flatten nested unions after shared object fields have reached each leaf. + const branches = projected.flatMap(branch => branch.oneOf || branch.anyOf || [branch]); + if (branches.length === 1) return branches[0]; + return {title: schema.title, description: schema.description, [union]: branches}; + } + const out = {...schema}; + // JSON Schema permits const/enum without type; the renderer does not. + const literal = out.const ?? out.enum?.[0]; + if (!out.type && literal !== undefined && (out.const !== undefined || out.enum.every(value => typeof value === typeof literal))) { + out.type = literal === null ? 'null' : typeof literal; + } + if (out.not?.required?.length === 1 && Object.keys(out.not).length === 1) { + const forbidden = out.not.required[0]; + out.properties = {...out.properties}; + delete out.properties[forbidden]; + } + for (const key of ['properties', 'patternProperties', 'definitions', '$defs']) { + if (out[key]) out[key] = Object.fromEntries(Object.entries(out[key]).map(([name, child]) => [name, forDisplay(child, resource)])); + } + for (const key of ['items', 'additionalProperties', 'not', 'if', 'then', 'else']) { + if (out[key] && typeof out[key] === 'object') { + out[key] = Array.isArray(out[key]) ? out[key].map(child => forDisplay(child, resource)) : forDisplay(out[key], resource); + } + } + // The renderer drops the array label when items is a union. Display each + // element variant in an array wrapper, explicitly allowing mixed variants. + // This is a presentation device, not an equivalent validation schema. + const itemUnion = out.items?.oneOf ? 'oneOf' : out.items?.anyOf ? 'anyOf' : undefined; + if (out.type === 'array' && itemUnion) { + const description = [out.description, 'Array result. Each item independently matches one of the following variants; different variants may occur in the same array.'].filter(Boolean).join('\n\n'); + return {title: out.title, description, [itemUnion]: out.items[itemUnion].map(items => ({...out, title: items.title || out.title, description, items}))}; + } + return out; +} + +// Keep existing method documentation stable while these composition workarounds +// are exercised by the new trace schemas. Recursion remains bounded everywhere. +function abbreviateRecursion(value, resource) { + if (Array.isArray(value)) return value.map(child => abbreviateRecursion(child, resource)); + if (value === null || typeof value !== 'object') return value; + resource = value.$id || resource; + if (value.$ref === '#') return forDisplay(value, resource); + return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, abbreviateRecursion(child, resource)])); +} + +function documentForDisplay(document) { + // Examples are data, not schemas: do not rewrite objects that happen to have + // schema keyword names in an example value. + return { + ...document, + methods: document.methods.map(method => { + const project = method.name?.startsWith('trace_') ? forDisplay : abbreviateRecursion; + return { + ...method, + params: method.params.map(param => ({...param, schema: project(param.schema)})), + result: {...method.result, schema: project(method.result.schema)}, + ...(method.errors && { + errors: method.errors.map(error => error.data ? {...error, data: project(error.data)} : error), + }), + }; + }), + }; +} + +if (require.main === module) { + const document = JSON.parse(fs.readFileSync('openrpc.json', 'utf8')); + fs.writeFileSync('docs-openrpc.json', JSON.stringify(documentForDisplay(document), null, 2) + '\n'); +} +module.exports = {forDisplay, documentForDisplay}; diff --git a/scripts/docs-spec.test.cjs b/scripts/docs-spec.test.cjs new file mode 100644 index 000000000..5523a9d19 --- /dev/null +++ b/scripts/docs-spec.test.cjs @@ -0,0 +1,126 @@ +const assert = require('node:assert/strict'); +const test = require('node:test'); +const {forDisplay} = require('./docs-spec.cjs'); + +test('recursive resources become labeled display nodes without mutating validation input', () => { + const input = {$id: 'https://example.org/vm', type: 'object', properties: {sub: {anyOf: [{$ref: '#'}, {type: 'null'}]}}}; + const output = forDisplay(input); + assert.equal(input.properties.sub.anyOf[0].$ref, '#'); + assert.equal(output.properties.sub.anyOf[0].type, 'object'); + assert.match(output.properties.sub.anyOf[0].description, /https:\/\/example.org\/vm/); + assert.deepEqual(output.properties.sub.anyOf[1], {type: 'null'}); +}); +test('unscoped recursion fails and ordinary references are preserved', () => { + assert.throws(() => forDisplay({$ref: '#'}), /Unscoped/); + assert.deepEqual(forDisplay({$ref: '#/components/schemas/Value'}), {$ref: '#/components/schemas/Value'}); +}); + +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const {execFileSync} = require('node:child_process'); +const {documentForDisplay} = require('./docs-spec.cjs'); + +test('actual generated trace pages retain array, variant fields and localization', async () => { + const {renderMethodsToMarkdown, identityEdits, identitySchemaEdits} = await import('@open-rpc/markdown-generator'); + const input = JSON.parse(fs.readFileSync(path.join(__dirname, '../openrpc.json'))); + const before = JSON.stringify(input); + const display = documentForDisplay(input); + display.methods = display.methods.filter(method => method.name.startsWith('trace_')); + const pages = await renderMethodsToMarkdown(display, identitySchemaEdits, identityEdits); + for (const page of pages) { + assert.doesNotMatch(page.markdown, /`unknown(?: or|`)/); + const method = input.methods.find(method => method.name === page.methodName); + const parameters = page.markdown.split('## Parameters (by position)')[1].split('## Result')[0]; + for (const param of method.params) { + const line = parameters.split('\n').find(line => line.startsWith(`**${param.name}** `)); + assert.ok(line, `${method.name} must render parameter ${param.name}`); + assert.equal(line.includes('*required*'), Boolean(param.required), `${method.name}.${param.name} required status`); + } + } + const many = pages.find(page => page.methodName === 'trace_callMany').markdown; + assert.match(many, /\*\*Calls\*\* `array<\[object, array\]>` \*required\*/); + assert.match(many, /\*\*Position 0\*\* `object` \*required\*/); + assert.match(many, /\*\*Position 1\*\* `array` \*required\*/); + assert.match(many, /`trace` `stateDiff` `vmTrace`/); + assert.match(many, /\*\*Items\*\* `\[object, array\]`[\s\S]*?`exactly 2 items`/); + assert.doesNotMatch(many.split('**Items**')[0], /exactly 2 items/); + assert.ok(many.indexOf('**Position 0**') < many.indexOf('**Position 1**')); + assert.ok(many.indexOf('**Calls**') < many.indexOf('**Block**')); + const example = input.methods.find(method => method.name === 'trace_callMany').examples[0]; + assert.ok(example.params[0].value.length > 0, 'render a nonempty Calls example'); + for (const entry of example.params[0].value) assert.equal(entry.length, 2); + const block = pages.find(page => page.methodName === 'trace_block').markdown; + assert.match(block, /\*\*Result\*\* `array/); + assert.match(block, /different variants may occur in the same array/); + assert.doesNotMatch(block, /unknown or unknown/); + for (const field of ['blockHash', 'blockNumber', 'transactionHash', 'transactionPosition', 'action', 'result', 'callType', 'init', 'gasUsed', 'output', 'code']) { + assert.match(block, new RegExp(`\\*\\*${field}\\*\\* [^\\n]+\\*required\\*`)); + } + assert.match(block, /Successful CALL/); + assert.match(block, /Reverted CREATE/); + assert.match(block, /Halted CREATE/); + assert.match(block, /error must be absent/); + assert.match(block, /result carries the frame's gas and revert bytes/); + assert.match(block, /result is omitted or null/); + assert.match(block, /\*\*creationMethod\*\* [^\n]+\*required\*/); + assert.match(block, /\*\*transactionHash\*\* `null` \*required\*/); + const get = pages.find(page => page.methodName === 'trace_get').markdown; + assert.doesNotMatch(get, /TraceRewardAction/); + const call = pages.find(page => page.methodName === 'trace_call').markdown; + assert.match(call, /Recursive instance of \[?https:\/\/ethereum.github.io\/execution-apis\/schemas\/trace-vm.json/); + assert.doesNotMatch(call, /\*\*blockHash\*\*/); + for (const field of ['chainId', 'authorizationList', 'blobVersionedHashes', 'maxFeePerBlobGas']) { + assert.ok(call.includes(`**${field}**`), `standard call field ${field} must be visible`); + } + assert.match(call, /Only fields outside this schema are ignored/); + for (const param of ['StateOverrides', 'BlockOverrides']) assert.ok(call.includes(`**${param}**`), `reserved ${param} parameter must be visible`); + const filter = pages.find(page => page.methodName === 'trace_filter').markdown; + for (const field of ['fromAddress', 'toAddress']) { + assert.ok(filter.includes(`**${field}**`), `nullable filter field ${field} must be visible`); + } + assert.match(filter, /Missing, null or empty/); + assert.match(filter, /-32602/); + assert.doesNotMatch(filter, /-32001/); + assert.match(get, /Integer path entries are invalid params/); + + assert.equal(JSON.stringify(input), before); +}); + +test('projection preserves examples as data', () => { + const example = {oneOf: [{$ref: '#'}], type: 'array', items: {const: 'value'}}; + const doc = {methods: [{params: [], result: {schema: {type: 'object'}}, examples: [example]}]}; + assert.deepEqual(documentForDisplay(doc).methods[0].examples, [example]); +}); + +test('watched rebuild refreshes the projection; startup/release hooks preserve prepared specs', () => { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'docs-refresh-')); + try { + const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json'))); + assert.match(pkg.scripts.watch, /--exec "npm run docs:refresh"/); + // Substitute only the expensive Go build with a deterministic source copy. + // Run the real npm command chain, projection and copy in a scratch site. + pkg.scripts['build:spec'] = 'node build.cjs'; + fs.mkdirSync(path.join(dir, 'scripts')); + fs.mkdirSync(path.join(dir, 'docs-api/docs'), {recursive: true}); + fs.writeFileSync(path.join(dir, 'package.json'), JSON.stringify(pkg)); + fs.copyFileSync(path.join(__dirname, 'docs-spec.cjs'), path.join(dir, 'scripts/docs-spec.cjs')); + fs.writeFileSync(path.join(dir, 'README.md'), 'Watch test'); + fs.writeFileSync(path.join(dir, 'build.cjs'), "require('fs').copyFileSync('source.json','openrpc.json')"); + const run = script => execFileSync('npm', ['run', script], {cwd: dir, stdio: 'pipe'}); + for (const description of ['before edit', 'after edit']) { + fs.writeFileSync(path.join(dir, 'source.json'), JSON.stringify({methods: [{params: [], result: {schema: {type: 'string', description}}}]})); + run('docs:refresh'); + const projected = JSON.parse(fs.readFileSync(path.join(dir, 'docs-openrpc.json'))); + assert.equal(projected.methods[0].result.schema.description, description); + } + assert.equal(fs.readFileSync(path.join(dir, 'docs-api/docs/quickstart.md'), 'utf8'), 'Watch test'); + // A prepared release must not be rebuilt by either lifecycle hook. + fs.writeFileSync(path.join(dir, 'build.cjs'), 'process.exit(99)'); + for (const hook of ['prestart', 'prebuild:docusaurus']) { + fs.rmSync(path.join(dir, 'docs-openrpc.json')); + run(hook); + assert.ok(fs.existsSync(path.join(dir, 'docs-openrpc.json'))); + } + } finally { fs.rmSync(dir, {recursive: true, force: true}); } +}); diff --git a/src/schemas/execute.yaml b/src/schemas/execute.yaml index f8a3cee93..e3a1a99f1 100644 --- a/src/schemas/execute.yaml +++ b/src/schemas/execute.yaml @@ -201,7 +201,7 @@ CallResultFailure: const: 3 message: type: string - pattern: "^execution reverted.*" + description: Suggested message prefix is "execution reverted". required: [code, message] - type: object properties: @@ -209,7 +209,8 @@ CallResultFailure: const: -32015 message: type: string - pattern: "^vm execution error.*" + description: Suggested message prefix is "vm execution error". + required: [code, message] CallResultSuccess: title: Result of call success type: object diff --git a/src/schemas/trace.yaml b/src/schemas/trace.yaml new file mode 100644 index 000000000..afc7c070d --- /dev/null +++ b/src/schemas/trace.yaml @@ -0,0 +1,801 @@ +TraceData: + title: Trace byte string + type: string + pattern: ^0x([0-9a-f]{2})*$ +TraceTypes: + title: Requested trace outputs + type: array + uniqueItems: true + items: + type: string + enum: + - trace + - stateDiff + - vmTrace + description: An empty array is valid and requests execution output only (H11). +TraceCall: + type: object + required: [] + properties: + from: &id001 + $ref: '#/components/schemas/address' + to: + anyOf: + - *id001 + - type: 'null' + gas: + $ref: '#/components/schemas/uint64' + gasPrice: &id002 + $ref: '#/components/schemas/uint256' + maxFeePerGas: *id002 + maxPriorityFeePerGas: *id002 + value: *id002 + data: &id003 + $ref: '#/components/schemas/TraceData' + input: *id003 + nonce: + $ref: '#/components/schemas/uint64' + type: + $ref: '#/components/schemas/byte' + accessList: + $ref: '#/components/schemas/AccessList' + chainId: *id002 + maxFeePerBlobGas: *id002 + blobVersionedHashes: + type: array + items: + $ref: '#/components/schemas/hash32' + authorizationList: + $ref: '#/components/schemas/AuthorizationList' + not: + required: [gasPrice] + anyOf: + - required: [maxFeePerGas] + - required: [maxPriorityFeePerGas] + additionalProperties: true + description: 'Unsigned simulation. The fields are those of the eth_simulateV1 GenericCallTransaction, + with chainId and authorizationList as in GenericTransaction, plus data as a compatibility alias for + input. When data and input are both present they MUST be equal; otherwise return -32602. Every field + defined here MUST either take effect with its eth_call meaning or cause the request to be rejected + (-32602, or the selected fork''s validity error, such as authorizationList before Prague); a client + MUST NOT silently ignore a defined field. Only fields outside this schema are ignored, and accepting + them does not establish extension support (H14). Omitted or null to creates a contract. Defaults: from + zero address, value zero, input empty; omitted gas, and gas above the client execution cap, use that cap as in eth_call. Omitted gasPrice, + maxFeePerGas and maxPriorityFeePerGas default to 0 as in eth_call and eth_simulateV1; maxFeePerBlobGas + defaults to 0 when blobVersionedHashes are present (H15). Legacy gasPrice and dynamic fee fields MUST + NOT be combined. A supplied nonce is accepted but neither validated nor used: execution, including + CREATE address derivation, uses the sender nonce in the selected state. A supplied chainId must match + the chain.' + title: TraceCall +TraceCallManyEntry: + type: array + minItems: 2 + maxItems: 2 + items: + - $ref: '#/components/schemas/TraceCall' + - $ref: '#/components/schemas/TraceTypes' + title: TraceCallManyEntry +TraceAddress: + type: array + items: &id004 + type: integer + minimum: 0 + title: TraceAddress +TracePosition: + type: array + items: + $ref: '#/components/schemas/uint64' + description: 'One path into the call tree: [] selects the root, ["0x0"] its first child (H02). Output + traceAddress uses JSON integers; the input path uses hex quantities for compatibility with existing + callers. Convert each output integer to a minimal hex quantity before querying. Integer path entries + are invalid parameters (-32602), not missing paths.' + title: TracePosition +TraceFilter: + type: object + required: [] + properties: + fromBlock: &rangeBound + $ref: '#/components/schemas/BlockNumberOrTagForRange' + toBlock: *rangeBound + fromAddress: + anyOf: + - type: array + items: *id001 + - type: 'null' + toAddress: + anyOf: + - type: array + items: *id001 + - type: 'null' + mode: + type: string + enum: + - intersection + - union + description: intersection (default) requires every populated address list to match; union requires + any populated list to match. Unknown values are invalid parameters (-32602). + after: &pageSize + type: integer + minimum: 0 + maximum: 18446744073709551615 + count: *pageSize + additionalProperties: false + description: Inclusive block range; defaults omitted fromBlock and toBlock to the same latest head, + after 0, count unlimited subject to an explicit server limit. Bounds exclude pending. If either + bound resolves beyond the current head block, or fromBlock resolves above toBlock, return -32602; + an explicit toBlock before an omitted latest start is such a reversed range. Never clamp the range. + OR within each address list; AND between lists by default, as eth_getLogs composes topic positions. + Missing, null or empty lists are unrestricted. mode union matches either populated list instead. + Compare address bytes independently of hex letter case. Resolve tags once per request. Apply + filtering before pagination; count 0 returns []. after and count are JSON integers bounded by + uint64. Return an error rather than silently truncate when a server limit is exceeded. earliest is + the lowest available block; never replace an explicit endpoint with a retention boundary, and + return 4444 if required history is unavailable. count limits results, not scan or replay work + (H03,H04,H06,H23,H27,H30,H32). + title: TraceFilter +TraceCallAction: + type: object + required: + - callType + - from + - to + - gas + - input + - value + properties: + callType: + type: string + enum: + - call + - callcode + - delegatecall + - staticcall + from: *id001 + to: *id001 + gas: *id002 + input: *id003 + value: *id002 + description: 'CALL and STATICCALL: from is the caller, to the target. DELEGATECALL and CALLCODE: from + is the executing address, to the code address. value is the transferred value; DELEGATECALL reports + the inherited value and STATICCALL 0. Root gas is the transaction gas minus intrinsic gas, including + access-list and authorization costs. Nested gas is the gas forwarded after the EIP-150 63/64 cap, + plus the 2300 stipend for a value transfer (H09,H29).' + title: TraceCallAction +TraceCreateAction: + type: object + required: + - from + - gas + - init + - value + - creationMethod + properties: + from: *id001 + gas: *id002 + init: *id003 + value: *id002 + creationMethod: + type: string + enum: + - create + - create2 + description: from is the creator and init the initcode. Root gas is the transaction gas minus intrinsic + gas; nested gas is all but 1/64 of the caller's remaining gas. creationMethod distinguishes CREATE + from CREATE2 and is required on every create action (H10). + title: TraceCreateAction +TraceSuicideAction: + type: object + required: + - address + - refundAddress + - balance + properties: + address: *id001 + refundAddress: *id001 + balance: *id002 + description: Records a SELFDESTRUCT opcode and the balance it transferred from address to + refundAddress, not account deletion; after EIP-6780 the account usually survives. + title: TraceSuicideAction +TraceRewardAction: + type: object + required: + - author + - value + - rewardType + properties: + author: *id001 + value: *id002 + rewardType: + type: string + enum: + - block + - uncle + description: A historical PoW block or uncle reward paid to author. Withdrawals and system operations + are not reward records (H05). + title: TraceRewardAction +TraceCallResult: + type: object + required: + - gasUsed + - output + properties: + gasUsed: *id002 + output: *id003 + description: gasUsed is the frame's execution gas before refunds; for the root it excludes intrinsic + gas and the EIP-7623 floor. output is the frame's return or revert bytes. + title: TraceCallResult +TraceCreateResult: + type: object + required: + - gasUsed + - address + - code + properties: + gasUsed: *id002 + address: *id001 + code: *id003 + description: Successful creation. gasUsed is execution gas before refunds, including the code deposit; + for the root it excludes intrinsic gas and the EIP-7623 floor. code is the deployed runtime bytecode + (H10). + title: TraceCreateResult +TraceRevertedCreateResult: + type: object + required: [gasUsed, output] + properties: + gasUsed: *id002 + output: *id003 + not: + anyOf: + - required: [address] + - required: [code] + description: A reverted creation reports its gas and revert bytes, never an address or deployed code + (H09). + title: TraceRevertedCreateResult +TraceFrame: + title: Flat call trace record + description: 'Preorder traversal. Retain root precompile calls regardless of value. Omit nested precompile + frames with zero value; retain nested frames with nonzero transferred or inherited value, whether + successful or failed. A precompile is an address in the precompile set active at the executing + block''s fork. traceAddress gives child ordinals and subtraces counts direct children in the + emitted tree, excluding omitted frames (H29). Omitting a call frame must not omit its caller VM + return-memory effects. A CALL or CREATE that fails its precheck (call depth limit or insufficient + balance) starts no execution and emits no frame. A CREATE whose address collides emits a create + frame with error "Contract address collision" that consumes its gas. + Standalone historical records require localization; only protocol rewards have null transaction + fields. Frames inside simulation and replay envelopes omit localization and protocol rewards. + error alone determines failure. A REVERT frame has error "Reverted" and a required result + {gasUsed, output} carrying its revert bytes, for CREATE too, without address or code. An + exceptional halt consumes the frame''s action gas; its result may be omitted or null. Failure labels + are "Reverted", "Out of gas", "Bad instruction", "Bad jump destination", "Stack underflow", + "Out of stack", "Mutable Call In Static Context", "Built-in failed", "Out of bounds", and after + Parity "Contract address collision", "Code size limit exceeded", "Invalid code prefix 0xEF" and + "Nonce overflow". EIP-3860 oversized initcode aborts the creating frame with "Out of gas". The + designated invalid instruction 0xFE is an undefined opcode, so its frame fails with "Bad instruction". + Any other error string is an extension that consumers treat as a generic failure. + revertReason, if present, is the decoded Error(string) text; raw revert bytes live in result.output. + A suicide frame records the SELFDESTRUCT opcode and its transfer, not account deletion + (H05,H09,H10,H24).' + oneOf: + - type: object + required: + - type + - action + - subtraces + - traceAddress + properties: + subtraces: &count + type: integer + minimum: 0 + traceAddress: &id005 + $ref: '#/components/schemas/TraceAddress' + type: + const: call + action: + $ref: '#/components/schemas/TraceCallAction' + result: + anyOf: + - $ref: '#/components/schemas/TraceCallResult' + - type: 'null' + error: + type: string + revertReason: + type: string + oneOf: + - title: Successful CALL + description: Successful frame; result is required and error must be absent. + required: + - result + not: + required: + - error + properties: + result: + $ref: '#/components/schemas/TraceCallResult' + - title: Reverted CALL + description: REVERT; result carries the frame's gas and revert bytes. + required: + - error + - result + properties: + error: + const: Reverted + result: + $ref: '#/components/schemas/TraceCallResult' + - title: Halted CALL + description: Exceptional halt; result is omitted or null. + required: + - error + properties: + error: &haltError + not: + const: Reverted + result: + type: 'null' + - type: object + required: + - type + - action + - subtraces + - traceAddress + properties: + subtraces: *count + traceAddress: *id005 + type: + const: create + action: + $ref: '#/components/schemas/TraceCreateAction' + result: + anyOf: + - $ref: '#/components/schemas/TraceCreateResult' + - $ref: '#/components/schemas/TraceRevertedCreateResult' + - type: 'null' + error: + type: string + revertReason: + type: string + oneOf: + - title: Successful CREATE + description: Successful frame; result is required and error must be absent. + required: + - result + not: + required: + - error + properties: + result: + $ref: '#/components/schemas/TraceCreateResult' + - title: Reverted CREATE + description: REVERT; result carries the frame's gas and revert bytes, without address or code. + required: + - error + - result + properties: + error: + const: Reverted + result: + $ref: '#/components/schemas/TraceRevertedCreateResult' + - title: Halted CREATE + description: Exceptional halt, including an address collision; result is omitted or null. + required: + - error + properties: + error: *haltError + result: + type: 'null' + - type: object + required: + - type + - action + - subtraces + - traceAddress + properties: + subtraces: *count + traceAddress: *id005 + type: + const: suicide + action: + $ref: '#/components/schemas/TraceSuicideAction' + result: + type: 'null' + - type: object + required: + - type + - action + - subtraces + - traceAddress + properties: + subtraces: *count + traceAddress: *id005 + type: + const: reward + action: + $ref: '#/components/schemas/TraceRewardAction' + result: + type: 'null' +# Context constraints are separate from the shared action/result union. Keep +# their keywords disjoint so the generator's limited allOf merger preserves them. +TraceTransactionFrame: + title: Transaction call trace record + allOf: + - $ref: '#/components/schemas/TraceFrame' + - type: object + properties: + type: + enum: [call, create, suicide] +TraceUnlocalizedFrame: + title: Call trace record inside an execution envelope + allOf: + - $ref: '#/components/schemas/TraceTransactionFrame' + - not: + anyOf: + - required: [blockHash] + - required: [blockNumber] + - required: [transactionHash] + - required: [transactionPosition] +TraceFrames: + type: array + items: + $ref: '#/components/schemas/TraceUnlocalizedFrame' + title: TraceFrames +TraceLocalizedFrames: + type: array + items: + $ref: '#/components/schemas/TraceLocalizedFrame' + title: TraceLocalizedFrames +TraceLocalizedFrame: + title: Historical call trace record or protocol reward + allOf: + - $ref: '#/components/schemas/TraceFrame' + - type: object + required: [blockHash, blockNumber, transactionHash, transactionPosition] + properties: + blockHash: + $ref: '#/components/schemas/hash32' + blockNumber: *id004 + if: + properties: + type: + const: reward + required: [type] + then: + properties: + transactionHash: + type: 'null' + transactionPosition: + type: 'null' + else: + properties: + transactionHash: + $ref: '#/components/schemas/hash32' + transactionPosition: *id004 +TraceLocalizedTransactionFrame: + title: Historical transaction call trace record + allOf: + - $ref: '#/components/schemas/TraceLocalizedFrame' + - type: object + properties: + type: + enum: [call, create, suicide] +TraceLocalizedTransactionFrames: + title: Historical transaction call traces + type: array + items: + $ref: '#/components/schemas/TraceLocalizedTransactionFrame' +TraceQuantityChange: + oneOf: + - const: '=' + - type: object + required: + - + + properties: + +: *id002 + additionalProperties: false + - type: object + required: + - '-' + properties: + '-': *id002 + additionalProperties: false + - type: object + required: + - '*' + properties: + '*': + type: object + required: + - from + - to + properties: + from: *id002 + to: *id002 + additionalProperties: false + additionalProperties: false + title: TraceQuantityChange +TraceCodeChange: + oneOf: + - const: '=' + - type: object + required: + - + + properties: + +: *id003 + additionalProperties: false + - type: object + required: + - '-' + properties: + '-': *id003 + additionalProperties: false + - type: object + required: + - '*' + properties: + '*': + type: object + required: + - from + - to + properties: + from: *id003 + to: *id003 + additionalProperties: false + additionalProperties: false + title: TraceCodeChange +TraceStorageChange: + oneOf: + - type: object + required: + - + + properties: + +: &id010 + $ref: '#/components/schemas/bytes32' + additionalProperties: false + - type: object + required: + - '*' + properties: + '*': + type: object + required: + - from + - to + properties: + from: *id010 + to: *id010 + additionalProperties: false + additionalProperties: false + description: '+ lists a nonzero post-state slot of a born account. * changes a slot of an account that + exists at both endpoints, with 32-byte from and to words, including zero words. Slots never use = + and never use - (H17,H26).' + title: TraceStorageChange +TraceAccountDiff: + type: object + required: + - balance + - nonce + - code + - storage + properties: + balance: + $ref: '#/components/schemas/TraceQuantityChange' + nonce: + $ref: '#/components/schemas/TraceQuantityChange' + code: + $ref: '#/components/schemas/TraceCodeChange' + storage: + type: object + patternProperties: + ^0x[0-9a-f]{64}$: + $ref: '#/components/schemas/TraceStorageChange' + additionalProperties: false + oneOf: + - title: Born account + description: Absent before and present after; every field uses +, and storage lists nonzero slots. + properties: + balance: &born + type: object + required: [+] + nonce: *born + code: *born + storage: + patternProperties: + ^0x[0-9a-f]{64}$: *born + - title: Deleted account + description: Present before and absent after; every field uses -, and storage is empty because + deletion wipes all storage. + properties: + balance: &died + type: object + required: ['-'] + nonce: *died + code: *died + storage: + maxProperties: 0 + - title: Existing account + description: Present at both endpoints; fields use = or *, slots use *, and at least one value changed. + properties: + balance: &kept + oneOf: + - const: '=' + - type: object + required: ['*'] + nonce: *kept + code: *kept + storage: + patternProperties: + ^0x[0-9a-f]{64}$: + type: object + required: ['*'] + not: + properties: + balance: + const: '=' + nonce: + const: '=' + code: + const: '=' + storage: + maxProperties: 0 + title: TraceAccountDiff +TraceStateDiff: + type: object + patternProperties: + ^0x[0-9a-f]{40}$: + $ref: '#/components/schemas/TraceAccountDiff' + additionalProperties: false + description: 'Net committed state changes for this execution, comparing the execution endpoints. An + account appears only if its balance, nonce, code, storage or existence changed. Existence means + presence in the state trie: an existing EIP-161-empty account removed by touch-clearing is a + deletion. + and - appear only when the account is born or dies; = marks an unchanged field and * + a changed field of an account that exists at both endpoints. A born account includes zero nonce and + empty code creation markers and lists its nonzero post-state slots. A deleted account has empty + storage; its - implies all storage is wiped. Reverted EVM writes are absent; surviving + transaction-level changes remain. callMany diffs are relative to each preceding post-state. + Multiple authorization writes are reduced to their net effect, including nonce changes when final + code equals initial code. An account absent at both endpoints has no account diff. The sender pays + value, gasUsed times the effective gas price and blobGasUsed times the blob base fee; base and blob + fees are burned or credited to a chain-defined collector, and the tip goes to the fee recipient. + Block-level operations (EIP-4788 and EIP-2935 pre-block calls, withdrawals, EIP-7002 and EIP-7251 + post-block calls, rewards) belong to no transaction''s diff, so concatenated diffs do not + reconstruct the block post-state (H16-H18,H26).' + title: TraceStateDiff +TraceVm: + $id: https://ethereum.github.io/execution-apis/schemas/trace-vm.json + title: Recursive VM execution trace + type: object + required: + - code + - ops + properties: + # This resource has its own base URI. Primitive definitions must be local; + # component pointers would resolve inside TraceVm, not the OpenRPC document. + code: &vmData + title: Trace byte string + type: string + pattern: ^0x([0-9a-f]{2})*$ + ops: + type: array + items: + type: object + required: + - pc + - cost + - ex + - sub + properties: + pc: *id004 + cost: *id004 + ex: + anyOf: + - type: object + required: + - used + - push + - mem + - store + properties: + used: *id004 + push: + type: array + items: &vmQuantity + title: hex encoded 256 bit unsigned integer + type: string + pattern: ^0x(0|[1-9a-f][0-9a-f]{0,63})$ + mem: + anyOf: + - type: object + required: + - 'off' + - data + properties: + 'off': *id004 + data: *vmData + - type: 'null' + store: + anyOf: + - type: object + required: + - key + - val + properties: + key: *vmQuantity + val: *vmQuantity + - type: 'null' + - type: 'null' + sub: + anyOf: + - $ref: '#' + - type: 'null' + op: + type: string + idx: + type: string + if: + required: [ex] + properties: + ex: + type: 'null' + then: + properties: + sub: + type: 'null' + description: 'code is the actually executed bytecode, including initcode and resolved delegated code. + ops lists every operation that began executing; operations rejected before execution (undefined + opcodes including the designated invalid 0xFE, stack underflow or overflow) are omitted, and there is no synthetic STOP, so every pc lies + inside code. cost is the total gas deducted from the caller when the operation starts, including gas + made available to a child frame: the 63/64-capped forwarded gas for the CALL family, excluding the + value stipend, and all but 1/64 for the CREATE family. ex records same-step effects; ex.used is the + caller''s remaining gas after the operation, including unused gas returned by a child. An operation + that halted exceptionally keeps its pre-execution cost and has ex null and sub null. push is the top + k stack words after execution, deepest first, as minimal quantities, where k is the number of words + the opcode leaves in place of its inputs (DUPn and SWAPn n+1, CALL and CREATE 1 after the child + returns). mem is the post-operation contents of the memory range designated by the operands: MSTORE + and MLOAD [off, off+32), MSTORE8 [off, off+1), the destination of CALLDATACOPY, CODECOPY, + EXTCODECOPY, RETURNDATACOPY and MCOPY, and the full CALL-family output window. mem is null when that + range is empty or the opcode designates none (for example RETURN, REVERT, LOG, KECCAK256 and CREATE). + These deltas do not encode allocated memory size. store is set only by SSTORE, from its key and + value operands as quantities, whenever the SSTORE completes, even if the value is unchanged; TSTORE + and SLOAD never set it. sub is the trace of the child frame this operation entered, including + precompile and empty-code targets, which give {code: 0x, ops: []} when no instruction ran; it is + null when the operation entered no frame, such as a failed precheck or SELFDESTRUCT. op and idx are + optional annotations (H19-H21).' +TraceExecution: + type: object + required: + - output + - trace + - stateDiff + - vmTrace + properties: + output: *id003 + trace: &id011 + $ref: '#/components/schemas/TraceFrames' + stateDiff: &id012 + anyOf: + - $ref: '#/components/schemas/TraceStateDiff' + - type: 'null' + vmTrace: &id013 + anyOf: + - $ref: '#/components/schemas/TraceVm' + - type: 'null' + description: output always contains actual return bytes, including when only stateDiff is selected. + Unrequested trace is [], stateDiff and vmTrace are null. A selected vmTrace is always an object, even + for an EOA or precompile target (H08,H20). + title: TraceExecution +TraceReplay: + type: object + required: + - output + - trace + - stateDiff + - vmTrace + - transactionHash + properties: + output: *id003 + trace: *id011 + stateDiff: *id012 + vmTrace: *id013 + transactionHash: + $ref: '#/components/schemas/hash32' + description: Execution envelope with the replayed transaction hash (H07). + title: TraceReplay diff --git a/src/trace/methods.yaml b/src/trace/methods.yaml new file mode 100644 index 000000000..424f277d2 --- /dev/null +++ b/src/trace/methods.yaml @@ -0,0 +1,471 @@ +- name: trace_call + summary: Executes an unsigned call and returns selected traces. + description: Execute against the state at the end of the selected block, default latest, under its + fork rules and block environment. Block accepts a number, tag or block hash; an unknown selected + block returns -32001 (Resource not found), and a known block whose required state is pruned returns + 4444. pending has no agreed semantics yet; a client that does not implement it must reject it + explicitly rather than substitute another block (H32). Fees follow eth_call and eth_simulateV1 + (H15). Omitted fee fields default to 0. The effective gas price is gasPrice, or + min(maxPriorityFeePerGas + base fee, maxFeePerGas), computed after defaulting; when it is 0, GASPRICE + and BASEFEE are both 0 and no gas fee is paid. BLOBBASEFEE is 0 exactly when maxFeePerBlobGas is + supplied as 0 or defaulted to 0; a call without blob fields keeps the block's BLOBBASEFEE. Other block + fields are unchanged. Fee validation is skipped only when both fee caps are 0, as with gasPrice 0. + Omitted gas, and supplied gas above the server's execution cap, run with that cap, as eth_call does; + the cap is server policy, not a truncated result. A validation failure without a listed code is + -32602. Unsigned calls skip the EIP-3607 sender-code check, as eth_call does. + Otherwise the price must cover the base fee (-38012), maxPriorityFeePerGas must not exceed + maxFeePerGas (-32602), and the sender must fund the upfront cost (-38014); execution then charges + the upfront gas payment, applies refunds, burns the base fee and pays the tip. A zero price does not + exempt value transfers from funding. Validation rejections use the eth_simulateV1 codes listed below; + malformed requests use -32602. Optional StateOverrides and BlockOverrides use the eth_simulateV1 + schemas and apply before execution; block overrides replace fields of the selected block + environment, and the zero-fee rule then uses the overridden base fee. A client that does not + implement an override parameter must reject a non-null value with -32602. Simulated changes are + discarded. EVM failure is trace output; invalid parameters or unavailable state are RPC errors + (H08,H11,H14,H15,H28). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its + decision references. + params: + - name: Call + required: true + schema: + $ref: '#/components/schemas/TraceCall' + - &id002 + name: TraceTypes + required: true + schema: + $ref: '#/components/schemas/TraceTypes' + - &id001 + name: Block + required: false + schema: + $ref: '#/components/schemas/BlockNumberOrTagOrHash' + - &stateOverrides + name: StateOverrides + required: false + schema: + title: Optional state overrides + anyOf: + - $ref: '#/components/schemas/StateOverrides' + - type: 'null' + - &blockOverrides + name: BlockOverrides + required: false + schema: + title: Optional block overrides + anyOf: + - $ref: '#/components/schemas/BlockOverrides' + - type: 'null' + result: + name: Result + schema: + $ref: '#/components/schemas/TraceExecution' + errors: &simulationErrors + - code: -32601 + message: Method not found + - code: -32602 + message: Invalid params + - code: -32001 + message: Resource not found + - code: 4444 + message: Pruned history unavailable + - code: -38012 + message: Transactions baseFeePerGas is too low + - code: -38013 + message: Not enough gas provided to pay for intrinsic gas for a transaction + - code: -38014 + message: Insufficient funds to pay for gas fees and value for a transaction + - code: -38025 + message: Max init code size exceeded + - code: -38026 + message: Client adjustable limit exceeded + examples: + - name: trace_call result shape + description: Illustrative response shape; exact execution depends on chain state. + params: + - name: Call + value: + from: '0x1111111111111111111111111111111111111111' + to: '0x2222222222222222222222222222222222222222' + gas: '0x5208' + - name: TraceTypes + value: &id003 [] + - name: Block + value: latest + result: + name: Result + value: &id004 + output: 0x + trace: [] + stateDiff: null + vmTrace: null +- name: trace_callMany + summary: Executes dependent unsigned calls in order. + description: Each [call, traceTypes] item is a separate transaction executed in order on the preceding + item's post-state. EIP-2200 and EIP-3529 original storage values, EIP-2929 access sets, EIP-1153 + transient storage, the refund counter and the EIP-6780 same-transaction scope all start afresh for + each item. All items share one block environment, as selected for trace_call; NUMBER and TIMESTAMP + do not advance between items. The first item runs against the same state and environment as + trace_call at the selected block. The trace_call fee rules, including the zero-fee BASEFEE + adjustment, apply to each item independently. Each stateDiff is relative to the preceding item's + post-state. Reverted writes roll back and subsequent items continue; transaction-level nonce and fee + effects survive. If any decoded item fails validation, return one error for the whole request, using the + trace_call codes, whose error.data object carries the zero-based index of the failing item as index; + return no partial results. A malformed item is invalid params (-32602) without an index. A server may cap the item count or total gas only with an explicit -38026 + error, never by truncating. Return one envelope per input in order. The sequence never changes + canonical state. Empty input returns []. Block defaults to latest; StateOverrides and BlockOverrides + apply once, before the first item, as for trace_call (H15,H16,H25,H31). This is a provisional trace + profile; see docs-api/docs/trace-profile.md and its decision references. + params: + - name: Calls + required: true + schema: + type: array + items: + $ref: '#/components/schemas/TraceCallManyEntry' + - *id001 + - *stateOverrides + - *blockOverrides + result: + name: Result + schema: + type: array + items: + $ref: '#/components/schemas/TraceExecution' + errors: *simulationErrors + examples: + - name: Fund an account then spend its simulated balance + description: >- + Illustrative sequence assuming the first sender has at least one wei, the second sender + initially has zero balance, and both recipients have no code. Each call selects no trace + families and uses zero fees. The second call spends the wei received from the first call; + canonical state is unchanged. + params: + - name: Calls + value: + - - from: '0x1111111111111111111111111111111111111111' + to: '0x2222222222222222222222222222222222222222' + value: '0x1' + gas: '0x5208' + gasPrice: '0x0' + - [] + - - from: '0x2222222222222222222222222222222222222222' + to: '0x3333333333333333333333333333333333333333' + value: '0x1' + gas: '0x5208' + gasPrice: '0x0' + - [] + - name: Block + value: latest + result: + name: Result + value: + - output: 0x + trace: [] + stateDiff: null + vmTrace: null + - output: 0x + trace: [] + stateDiff: null + vmTrace: null + - name: trace_callMany result shape + description: Illustrative response shape; exact execution depends on chain state. + params: + - name: Calls + value: [] + - name: Block + value: latest + result: + name: Result + value: [] +- name: trace_rawTransaction + summary: Simulates a signed transaction at latest state. + description: Decode the signed transaction and validate it for execution against latest state before + simulating it (H13). Apply the transaction validity rules of the selected fork, including signature, + chain identity, nonce equality, sufficient balance for value and upfront gas, intrinsic gas, fees and + sender-code restrictions (including permitted EIP-7702 delegation). Reject both low and high nonces; + do not replace signed fields, override the sender nonce or top up its balance. This is execution + validation, not transaction-pool admission; do not impose local replacement, already-known or minimum-tip + policies. A decodable transaction that fails validation uses the eth_sendRawTransaction error groups, + 1 nonce too low, 2 nonce too high, 800 intrinsic gas, 804 priority fee above fee cap, 806 fee cap + below base fee, 809 insufficient funds, and -32003 (Transaction rejected) for any other validation + failure. A signed gas limit above the server's execution cap is not reduced; reject it with -38026. + Malformed encodings or request parameters use -32602. A valid transaction that REVERTs or + exceptionally halts returns an execution trace, not a validation error. The portable baseline + defines two parameters and latest state. An explicitly supplied block-selector extension is outside + this baseline; accepting it is not a baseline failure. Extension semantics require separate + agreement. Validation failure returns a complete JSON-RPC error, not a partially serialized result + (H12-H14,H25). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its + decision references. + params: + - name: Transaction + required: true + schema: + $ref: '#/components/schemas/TraceData' + - *id002 + result: + name: Result + schema: + $ref: '#/components/schemas/TraceExecution' + errors: + - code: -32601 + message: Method not found + - code: -32602 + message: Invalid params + - code: 1 + message: Nonce too low + - code: 2 + message: Nonce too high + - code: 800 + message: Intrinsic gas too low / Intrinsic gas exceeds gas limit + - code: 804 + message: Max priority fee per gas higher than max fee per gas + - code: 806 + message: Max fee per gas less than block base fee + - code: 809 + message: Insufficient funds for gas * price + value + - code: -32003 + message: Transaction rejected + - code: -38026 + message: Client adjustable limit exceeded + - code: 4444 + message: Pruned history unavailable + examples: + - name: trace_rawTransaction result shape + description: Illustrative response shape; exact execution depends on chain state. + params: + - name: Transaction + value: '0xf86a80847735940082520894000000000000000000000000000000000000123401808718e5bb3abd10a0a04c833abdb116ad76fc98610ae0e626d7e35154f1fba38ce6bfdaf69a31eec42ca035ecfb996cc68a2a03df0e1087194e25180b01bf0469f69b4f1d330eea9d027a' + - name: TraceTypes + value: *id003 + result: + name: Result + value: *id004 +- name: trace_replayTransaction + summary: Replays a mined transaction with selected traces. + description: Reconstruct the state immediately before this transaction from the parent block's + post-block state, applying this block's pre-transaction system operations and then its preceding + transactions, under this block's fork rules. Return null for a transaction that is not in a + canonical block; error for unavailable history. Report the transaction's actual committed state + transition; block-level operations belong to no transaction's stateDiff (H06,H07,H16,H18,H28). This + is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision references. + params: + - &id005 + name: TransactionHash + required: true + schema: + $ref: '#/components/schemas/hash32' + - *id002 + result: + name: Result + schema: + anyOf: + - $ref: '#/components/schemas/TraceReplay' + - type: 'null' + errors: + - code: -32601 + message: Method not found + - code: -32602 + message: Invalid params + - code: 4444 + message: Pruned history unavailable + examples: + - name: trace_replayTransaction result shape + description: Illustrative response shape; exact execution depends on chain state. + params: + - name: TransactionHash + value: '0x1111111111111111111111111111111111111111111111111111111111111111' + - name: TraceTypes + value: *id003 + result: + name: Result + value: null +- name: trace_replayBlockTransactions + summary: Replays every transaction in a block. + description: 'Default block is not implicit: Block is required. Return exactly one envelope per + transaction, in transaction order, each with its transactionHash. Empty blocks and the genesis block + return []. Trace the block from its parent''s post-block state with its own pre-transaction system + operations applied, under its own fork rules. System operations (EIP-4788 and EIP-2935 pre-block + calls, EIP-7002 and EIP-7251 post-block calls), withdrawals and rewards are applied in protocol + order but belong to no envelope; concatenated stateDiffs therefore do not reconstruct the block + post-state. Block does not accept pending (-32602) until a pending contract exists. An unknown + selected block returns -32001 (Resource not found); a known block whose required state is pruned + returns 4444 (H05,H07,H16,H28,H32). This is a provisional trace profile; see + docs-api/docs/trace-profile.md and its decision references.' + params: + - &historicalBlock + name: Block + required: true + schema: + $ref: '#/components/schemas/BlockNumberOrTagForRange' + - *id002 + result: + name: Result + schema: + type: array + items: + $ref: '#/components/schemas/TraceReplay' + errors: &blockErrors + - code: -32601 + message: Method not found + - code: -32602 + message: Invalid params + - code: -32001 + message: Resource not found + - code: 4444 + message: Pruned history unavailable + examples: + - name: trace_replayBlockTransactions result shape + description: Illustrative response shape; exact execution depends on chain state. + params: + - name: Block + value: latest + - name: TraceTypes + value: *id003 + result: + name: Result + value: [] +- name: trace_block + summary: Returns localized call traces for a block. + description: Return transaction records in transaction-index order, each tree in preorder, followed + by the block's historical PoW rewards, the block reward first and then uncle rewards in ommer order. + The genesis block has no transaction or reward records and returns []. Do not emit synthetic zero + PoW rewards after the Merge. Withdrawals and system operations are applied to state but are not + trace records. Trace the block from its parent's post-block state with its own pre-transaction system + operations applied, under its own fork rules. Block does not accept pending (-32602) until a pending + contract exists; records never carry a block hash that is not canonical. An unknown selected block + returns -32001 (Resource not found); a known block whose required state is pruned returns 4444 + (H05,H06,H27,H28,H32). This is a provisional trace profile; see docs-api/docs/trace-profile.md and + its decision references. + params: + - *historicalBlock + result: + name: Result + schema: + $ref: '#/components/schemas/TraceLocalizedFrames' + errors: *blockErrors + examples: + - name: trace_block result shape + description: Illustrative response shape; exact execution depends on chain state. + params: + - name: Block + value: latest + result: + name: Result + value: [] +- name: trace_transaction + summary: Returns localized call traces for a mined transaction. + description: Return a flat preorder tree, including the root. A transaction that is not in a canonical + block returns null; unavailable state is an error. traceAddress is a path, not a flat list index + (H02,H06). This is a provisional trace profile; see docs-api/docs/trace-profile.md and its decision + references. + params: + - *id005 + result: + name: Result + schema: + anyOf: + - $ref: '#/components/schemas/TraceLocalizedTransactionFrames' + - type: 'null' + errors: + - code: -32601 + message: Method not found + - code: -32602 + message: Invalid params + - code: 4444 + message: Pruned history unavailable + examples: + - name: trace_transaction result shape + description: Illustrative response shape; exact execution depends on chain state. + params: + - name: TransactionHash + value: '0x1111111111111111111111111111111111111111111111111111111111111111' + result: + name: Result + value: null +- name: trace_get + summary: Returns the trace at one tree path. + description: 'Position selects one traceAddress path: [] is root, ["0x0"] first child, ["0x6","0x0"] + the first child of child six. Return one localized object, or null if the transaction is not in a + canonical block or the path does not exist. Integer path entries are invalid params (-32602); convert + traceAddress integers to hex quantities. Unavailable state is an error (H02,H06). This is a + provisional trace profile; see docs-api/docs/trace-profile.md and its decision references.' + params: + - *id005 + - name: Position + required: true + schema: + $ref: '#/components/schemas/TracePosition' + result: + name: Result + schema: + anyOf: + - $ref: '#/components/schemas/TraceLocalizedTransactionFrame' + - type: 'null' + errors: + - code: -32601 + message: Method not found + - code: -32602 + message: Invalid params + - code: 4444 + message: Pruned history unavailable + examples: + - name: trace_get result shape + description: Illustrative response shape; exact execution depends on chain state. + params: + - name: TransactionHash + value: '0x1111111111111111111111111111111111111111111111111111111111111111' + - name: Position + value: [] + result: + name: Result + value: null +- name: trace_filter + summary: Returns localized traces matching an address filter. + description: Apply OR within each address list and AND between the lists by default, as eth_getLogs composes topic positions; + mode union matches either populated list; omitted/null/empty lists are unrestricted; compare address bytes independently of hex letter case. + Omitted bounds mean latest through latest, resolved against one canonical head. As for eth_getLogs, + if either bound resolves to a block number greater than the current head block, or fromBlock resolves + above toBlock, return -32602 (Invalid params); an explicit toBlock before an omitted latest start is + such a reversed range. Never clamp the range or return a partial result. Historical searches must + explicitly set fromBlock. earliest means the lowest block the client has available; never replace + an explicit endpoint with the retained-history boundary, and return 4444 when required history is + unavailable. Resource limits produce errors, never silently narrowed ranges. count limits returned + records, not scan or replay work. Indexed retrieval and replay must yield the same fork-correct + per-block records, each block traced from its parent's post-block state. + Match CALL sender/recipient, CREATE creator/created address and SELFDESTRUCT executing + (self-destructing) account/beneficiary; after EIP-6780 that account usually survives. Failed CREATE + has no created-address match. A reward matches toAddress by author and has no from side; in + intersection mode it is excluded whenever fromAddress is populated, while in union mode a toAddress + match suffices. The genesis block contributes no records. Order records by block, then transaction, + then preorder, with each block's rewards after its transaction records (block reward, then uncle + rewards in ommer order). Filter first, then skip after records and take count. Offsets are stable + only for a fixed, numerically resolved range. Capture one canonical snapshot for the request + (H03-H06,H23,H27,H30,H32). This is a provisional trace profile; see docs-api/docs/trace-profile.md + and its decision references. + params: + - name: Filter + required: true + schema: + $ref: '#/components/schemas/TraceFilter' + result: + name: Result + schema: + $ref: '#/components/schemas/TraceLocalizedFrames' + errors: + - code: -32601 + message: Method not found + - code: -32602 + message: Invalid params + - code: 4444 + message: Pruned history unavailable + examples: + - name: trace_filter result shape + description: Illustrative response shape; exact execution depends on chain state. + params: + - name: Filter + value: + fromBlock: '0x1' + toBlock: '0x1' + result: + name: Result + value: [] diff --git a/tools/cmd/speccheck/check.go b/tools/cmd/speccheck/check.go index 2de9daa38..b9b7f3e80 100644 --- a/tools/cmd/speccheck/check.go +++ b/tools/cmd/speccheck/check.go @@ -6,7 +6,6 @@ import ( "regexp" "strings" - openrpc "github.com/open-rpc/spec-types/generated/packages/go/v1_4" "github.com/santhosh-tekuri/jsonschema/v5" ) @@ -36,7 +35,7 @@ func checkSpec(methods map[string]*methodSchema, rts []*roundTrip, re *regexp.Re } return fmt.Errorf("missing required parameter %s.param[%d]", rt.method, i) } - if err := validate(&method.params[i].schema, rt.params[i], fmt.Sprintf("%s.param[%d]", rt.method, i)); err != nil { + if err := validate(method.params[i].schema, rt.params[i], fmt.Sprintf("%s.param[%d]", rt.method, i)); err != nil { return fmt.Errorf("unable to validate parameter in %s: %s", rt.name, err) } } @@ -44,7 +43,7 @@ func checkSpec(methods map[string]*methodSchema, rts []*roundTrip, re *regexp.Re // skip validation of errors, they haven't been standardized continue } - if err := validate(&method.result.schema, rt.response.Result, fmt.Sprintf("%s.result", rt.method)); err != nil { + if err := validate(method.result.schema, rt.response.Result, fmt.Sprintf("%s.result", rt.method)); err != nil { // Print out the value and schema if there is an error to further debug. buf, _ := json.Marshal(method.result.schema) fmt.Println(string(buf)) @@ -58,27 +57,25 @@ func checkSpec(methods map[string]*methodSchema, rts []*roundTrip, re *regexp.Re return nil } -// validateParam validates the provided value against schema using the url base. -func validate(schema *openrpc.JSONSchemaObject, val []byte, url string) error { - // Set $schema explicitly to force jsonschema to use draft 2019-09. - draft := openrpc.Schema("https://json-schema.org/draft/2019-09/schema") - schema.Schema = &draft - - // Compile schema. - b, err := json.Marshal(schema) +// validate preserves schema keywords and tuple structure while selecting the +// same Draft 2019-09 dialect used by the round-trip checker. +func validate(schema json.RawMessage, val []byte, url string) error { + var object map[string]json.RawMessage + if err := json.Unmarshal(schema, &object); err != nil { + return err + } + object["$schema"] = json.RawMessage(`"https://json-schema.org/draft/2019-09/schema"`) + b, err := json.Marshal(object) if err != nil { - return fmt.Errorf("unable to marshal schema to json") + return fmt.Errorf("unable to marshal schema to json: %w", err) } s, err := jsonschema.CompileString(url, string(b)) if err != nil { return err } - - // Validate value var x interface{} - json.Unmarshal(val, &x) - if err := s.Validate(x); err != nil { + if err := json.Unmarshal(val, &x); err != nil { return err } - return nil + return s.Validate(x) } diff --git a/tools/cmd/speccheck/spec.go b/tools/cmd/speccheck/spec.go index df4ea46c6..051d18a8d 100644 --- a/tools/cmd/speccheck/spec.go +++ b/tools/cmd/speccheck/spec.go @@ -4,17 +4,15 @@ import ( "encoding/json" "fmt" "os" - - openrpc "github.com/open-rpc/spec-types/generated/packages/go/v1_4" ) type ContentDescriptor struct { name string required bool - schema openrpc.JSONSchemaObject + schema json.RawMessage } -// methodSchema stores all the schemas neccessary to validate a request or +// methodSchema stores all the schemas necessary to validate a request or // response corresponding to the method. type methodSchema struct { name string @@ -22,69 +20,77 @@ type methodSchema struct { result *ContentDescriptor } -// parseSpec reads an OpenRPC specification and parses out each -// method's schemas. +// Keep schemas as raw JSON. The generated OpenRPC union types change `items` +// (both homogeneous arrays and tuples) when marshaled back to JSON. +type specDescriptor struct { + Name *string `json:"name"` + Required bool `json:"required"` + Schema json.RawMessage `json:"schema"` + Ref *string `json:"$ref"` +} + +// parseSpec reads method descriptors without reserializing their schemas. func parseSpec(filename string) (map[string]*methodSchema, error) { - doc, err := readSpec(filename) + data, err := os.ReadFile(filename) if err != nil { - return nil, fmt.Errorf("unable to read spec: %v", err) + return nil, fmt.Errorf("unable to read spec: %w", err) + } + var doc struct { + Methods []struct { + Name *string `json:"name"` + Ref *string `json:"$ref"` + Params []*specDescriptor `json:"params"` + Result *specDescriptor `json:"result"` + } `json:"methods"` + } + if err := json.Unmarshal(data, &doc); err != nil { + return nil, fmt.Errorf("unable to read spec: %w", err) } - - // Iterate over each method in the OpenRPC spec and pull out the parameter - // schema and result schema. parsed := make(map[string]*methodSchema) - for _, method := range *doc.Methods { - if method.ReferenceObject != nil { - return nil, fmt.Errorf("reference object not supported, %s", *method.ReferenceObject.Ref) + for _, method := range doc.Methods { + if method.Ref != nil { + return nil, fmt.Errorf("reference object not supported, %s", *method.Ref) } - var ( - method = method.MethodObject - ms = methodSchema{name: string(*method.Name)} - ) - // Add parameter schemas. - for i, param := range *method.Params { - if err := checkCDOR(param); err != nil { - return nil, fmt.Errorf("%s, parameter %d: %v", *method.Name, i, err) - } - required := false - if param.ContentDescriptorObject.Required != nil && *param.ContentDescriptorObject.Required { - required = true - } - cd := &ContentDescriptor{ - name: string(*param.ContentDescriptorObject.Name), - required: required, - schema: *param.ContentDescriptorObject.Schema.JSONSchemaObject, + if method.Name == nil { + return nil, fmt.Errorf("missing method name") + } + ms := &methodSchema{name: *method.Name} + for i, param := range method.Params { + cd, err := parseDescriptor(param) + if err != nil { + return nil, fmt.Errorf("%s, parameter %d: %w", ms.name, i, err) } ms.params = append(ms.params, cd) } - - // Add result schema. if method.Result == nil { - return nil, fmt.Errorf("%s: missing result", *method.Name) - } - cdor := openrpc.ContentDescriptorOrReference{ - ContentDescriptorObject: method.Result.ContentDescriptorObject, - ReferenceObject: method.Result.ReferenceObject, - } - if err := checkCDOR(cdor); err != nil { - return nil, fmt.Errorf("%s: %v", *method.Name, err) + return nil, fmt.Errorf("%s: missing result", ms.name) } - obj := method.Result.ContentDescriptorObject - required := false - if obj.Required != nil && *obj.Required { - required = true - } - ms.result = &ContentDescriptor{ - name: string(*obj.Name), - required: required, - schema: *obj.Schema.JSONSchemaObject, + ms.result, err = parseDescriptor(method.Result) + if err != nil { + return nil, fmt.Errorf("%s: %w", ms.name, err) } - parsed[string(*method.Name)] = &ms + parsed[ms.name] = ms } - return parsed, nil } +func parseDescriptor(cd *specDescriptor) (*ContentDescriptor, error) { + if cd == nil { + return nil, fmt.Errorf("missing content descriptor") + } + if cd.Ref != nil { + return nil, fmt.Errorf("references not supported") + } + if cd.Name == nil { + return nil, fmt.Errorf("missing name") + } + var schema map[string]json.RawMessage + if err := json.Unmarshal(cd.Schema, &schema); err != nil || schema == nil { + return nil, fmt.Errorf("missing or invalid schema object") + } + return &ContentDescriptor{name: *cd.Name, required: cd.Required, schema: cd.Schema}, nil +} + // parseParamValues parses each parameter out of the raw json value in its own byte // slice. func parseParamValues(raw json.RawMessage) ([][]byte, error) { @@ -107,32 +113,3 @@ func parseParamValues(raw json.RawMessage) ([][]byte, error) { } return out, nil } - -func checkCDOR(obj openrpc.ContentDescriptorOrReference) error { - if obj.ReferenceObject != nil { - return fmt.Errorf("references not supported") - } - if obj.ContentDescriptorObject == nil { - return fmt.Errorf("missing content descriptor") - } - cd := obj.ContentDescriptorObject - if cd.Name == nil { - return fmt.Errorf("missing name") - } - if cd.Schema == nil || cd.Schema.JSONSchemaObject == nil { - return fmt.Errorf("missing schema") - } - return nil -} - -func readSpec(path string) (*openrpc.OpenrpcDocument, error) { - spec, err := os.ReadFile(path) - if err != nil { - return nil, err - } - var doc openrpc.OpenrpcDocument - if err := json.Unmarshal(spec, &doc); err != nil { - return nil, err - } - return &doc, nil -} diff --git a/tools/cmd/speccheck/spec_test.go b/tools/cmd/speccheck/spec_test.go new file mode 100644 index 000000000..5923d83e6 --- /dev/null +++ b/tools/cmd/speccheck/spec_test.go @@ -0,0 +1,79 @@ +package main + +import ( + "encoding/json" + "os" + "path/filepath" + "testing" + + "github.com/ethereum/execution-apis/tools/internal/specgen" +) + +func TestPreserveArraySchemas(t *testing.T) { + for _, schema := range []string{ + `{"type":"array","items":{"type":"integer"}}`, + `{"type":"array","items":[{"type":"integer"},{"type":"string"}],"minItems":2,"maxItems":2}`, + } { + data := `{"methods":[{"name":"example","params":[],"result":{"name":"Result","schema":` + schema + `}}]}` + path := filepath.Join(t.TempDir(), "spec.json") + if err := os.WriteFile(path, []byte(data), 0600); err != nil { + t.Fatal(err) + } + parsed, err := parseSpec(path) + if err != nil { + t.Fatal(err) + } + got := parsed["example"].result.schema + if string(got) != schema { + t.Fatalf("schema changed during parsing: %s", got) + } + invalid := []byte(`[1,false]`) + if err := validate(got, invalid, "https://example.test/array.json"); err == nil { + t.Fatal("second item escaped validation") + } + } +} + +func TestSimulationFailureMessages(t *testing.T) { + // Fix the schema/prose mismatch exposed by validating every array element: + // error codes are normative, but the schema says messages are suggestions. + g := specgen.New() + for _, name := range []string{"base-types.yaml", "execute.yaml"} { + data, err := os.ReadFile(filepath.Join("../../../src/schemas", name)) + if err != nil { + t.Fatal(err) + } + if err := g.AddSchemas(data); err != nil { + t.Fatal(err) + } + } + data, err := g.JSON() + if err != nil { + t.Fatal(err) + } + var doc map[string]any + if err := json.Unmarshal(data, &doc); err != nil { + t.Fatal(err) + } + root := map[string]any{"$ref": "#/components/schemas/CallResultFailure", "components": doc["components"]} + schema, err := json.Marshal(root) + if err != nil { + t.Fatal(err) + } + for _, tc := range []struct { + error string + valid bool + }{ + {`{"code":-32015,"message":"out of gas"}`, true}, + {`{"code":3,"message":"execution reverted"}`, true}, + {`{"code":3,"message":"custom revert message"}`, true}, + {`{"code":-1,"message":"out of gas"}`, false}, + {`{"message":"out of gas"}`, false}, + {`{"code":-32015}`, false}, + } { + value := []byte(`{"status":"0x0","returnData":"0x","gasUsed":"0x0","error":` + tc.error + `}`) + if err := validate(schema, value, "https://example.test/simulation.json"); (err == nil) != tc.valid { + t.Fatalf("valid=%v for %s: %v", tc.valid, tc.error, err) + } + } +} diff --git a/tools/cmd/speccheck/trace_test.go b/tools/cmd/speccheck/trace_test.go new file mode 100644 index 000000000..31c6c33a1 --- /dev/null +++ b/tools/cmd/speccheck/trace_test.go @@ -0,0 +1,450 @@ +package main + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/ethereum/execution-apis/tools/internal/specgen" + schema5 "github.com/santhosh-tekuri/jsonschema/v5" + schema6 "github.com/santhosh-tekuri/jsonschema/v6" +) + +type traceObject = map[string]any + +// Build from the real YAML, so tests also run on a clean checkout without make. +func traceDocuments(t *testing.T) (traceObject, traceObject, map[string]*methodSchema) { + t.Helper() + g := specgen.New() + paths, err := filepath.Glob("../../../src/schemas/*.yaml") + if err != nil || len(paths) == 0 { + t.Fatalf("schema files: %v", err) + } + for _, path := range paths { + data, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + if err := g.AddSchemas(data); err != nil { + t.Fatal(err) + } + } + data, err := os.ReadFile("../../../src/trace/methods.yaml") + if err != nil { + t.Fatal(err) + } + if err := g.AddMethods(data); err != nil { + t.Fatal(err) + } + read := func() (traceObject, []byte) { + t.Helper() + data, err := g.JSON() + if err != nil { + t.Fatal(err) + } + var doc traceObject + if err := json.Unmarshal(data, &doc); err != nil { + t.Fatal(err) + } + return doc, data + } + refs, _ := read() + if err := g.Dereference(); err != nil { + t.Fatal(err) + } + expanded, data := read() + path := filepath.Join(t.TempDir(), "openrpc.json") + if err := os.WriteFile(path, data, 0600); err != nil { + t.Fatal(err) + } + parsed, err := parseSpec(path) + if err != nil { + t.Fatal(err) + } + return refs, expanded, parsed +} + +func traceJSON(t *testing.T, value any) []byte { + t.Helper() + data, err := json.Marshal(value) + if err != nil { + t.Fatal(err) + } + return data +} +func traceCopy(t *testing.T, value traceObject) traceObject { + t.Helper() + var copy traceObject + if err := json.Unmarshal(traceJSON(t, value), ©); err != nil { + t.Fatal(err) + } + return copy +} + +func TestTraceContracts(t *testing.T) { + refs, expanded, parsed := traceDocuments(t) + address := "0x" + strings.Repeat("1", 40) + hash := "0x" + strings.Repeat("2", 64) + call := traceObject{"type": "call", "action": traceObject{"callType": "call", "from": address, "to": address, "gas": "0x100", "input": "0x", "value": "0x0"}, "subtraces": 0, "traceAddress": []any{}, "result": traceObject{"gasUsed": "0x0", "output": "0x"}} + create := traceCopy(t, call) + create["type"] = "create" + create["action"] = traceObject{"from": address, "gas": "0x100", "init": "0x00", "value": "0x0", "creationMethod": "create"} + create["result"] = traceObject{"gasUsed": "0x0", "address": address, "code": "0x"} + suicide := traceObject{"type": "suicide", "action": traceObject{"address": address, "refundAddress": address, "balance": "0x0"}, "subtraces": 0, "traceAddress": []any{}} + reward := traceObject{"type": "reward", "action": traceObject{"author": address, "rewardType": "block", "value": "0x1"}, "subtraces": 0, "traceAddress": []any{}} + local := func(frame traceObject) traceObject { + x := traceCopy(t, frame) + x["blockHash"] = hash + x["blockNumber"] = 1 + x["transactionHash"] = hash + x["transactionPosition"] = 0 + return x + } + historicalReward := local(reward) + historicalReward["transactionHash"] = nil + historicalReward["transactionPosition"] = nil + envelope := func(frame any) traceObject { + return traceObject{"output": "0x", "trace": []any{frame}, "stateDiff": nil, "vmTrace": nil} + } + type probe struct { + name, method string + param int + value any + valid bool + } + var probes []probe + add := func(name, method string, param int, value any, valid bool) { + probes = append(probes, probe{name, method, param, value, valid}) + } + for _, frame := range []traceObject{call, create, suicide} { + kind := frame["type"].(string) + for _, method := range []string{"trace_block", "trace_filter", "trace_transaction"} { + add(kind+" mined", method, -1, []any{local(frame)}, true) + add(kind+" unlocalized", method, -1, []any{frame}, false) + for _, field := range []string{"blockHash", "blockNumber", "transactionHash", "transactionPosition"} { + bad := local(frame) + bad[field] = nil + add(kind+" null "+field, method, -1, []any{bad}, false) + bad = local(frame) + delete(bad, field) + add(kind+" missing "+field, method, -1, []any{bad}, false) + } + } + add(kind+" lookup", "trace_get", -1, local(frame), true) + for _, method := range []string{"trace_call", "trace_rawTransaction"} { + add(kind+" simulation", method, -1, envelope(frame), true) + for _, field := range []string{"blockHash", "blockNumber", "transactionHash", "transactionPosition"} { + bad := traceCopy(t, frame) + bad[field] = nil + add(kind+" simulation has "+field, method, -1, envelope(bad), false) + } + add(kind+" simulation localized", method, -1, envelope(local(frame)), false) + } + } + for _, method := range []string{"trace_block", "trace_filter"} { + add("protocol reward", method, -1, []any{historicalReward}, true) + add("reward with transaction", method, -1, []any{local(reward)}, false) + for _, field := range []string{"blockHash", "blockNumber"} { + bad := traceCopy(t, historicalReward) + bad[field] = nil + add("reward null "+field, method, -1, []any{bad}, false) + } + for _, field := range []string{"transactionHash", "transactionPosition"} { + bad := traceCopy(t, historicalReward) + bad[field] = local(reward)[field] + add("reward non-null "+field, method, -1, []any{bad}, false) + } + } + add("reward excluded", "trace_transaction", -1, []any{historicalReward}, false) + add("reward excluded", "trace_get", -1, historicalReward, false) + for _, method := range []string{"trace_call", "trace_rawTransaction"} { + add("reward excluded", method, -1, envelope(reward), false) + } + for _, frame := range []traceObject{call, create} { + kind := frame["type"].(string) + reverted := traceCopy(t, frame) + reverted["error"] = "Reverted" + reverted["result"] = traceObject{"gasUsed": "0x1", "output": "0xdead"} + add("revert bytes "+kind, "trace_call", -1, envelope(reverted), true) + reverted = traceCopy(t, reverted) + reverted["result"] = nil + add("revert null result "+kind, "trace_call", -1, envelope(reverted), false) + reverted = traceCopy(t, reverted) + delete(reverted, "result") + add("revert missing result "+kind, "trace_call", -1, envelope(reverted), false) + failed := traceCopy(t, frame) + failed["result"] = nil + add("null result without error "+kind, "trace_call", -1, envelope(failed), false) + failed = traceCopy(t, failed) + failed["error"] = "Out of gas" + add("halt null result "+kind, "trace_call", -1, envelope(failed), true) + failed = traceCopy(t, failed) + delete(failed, "result") + add("halt missing result "+kind, "trace_call", -1, envelope(failed), true) + failed = traceCopy(t, failed) + failed["result"] = traceObject{"gasUsed": "0x1", "output": "0x"} + add("halt with result "+kind, "trace_call", -1, envelope(failed), false) + failed = traceCopy(t, failed) + failed["error"] = "vendor detail" + delete(failed, "result") + add("extension error label "+kind, "trace_call", -1, envelope(failed), true) + } + failedCreate := traceCopy(t, create) + failedCreate["error"] = "Out of gas" + add("failed create successful result", "trace_call", -1, envelope(failedCreate), false) + failedCreate = traceCopy(t, failedCreate) + failedCreate["error"] = "Reverted" + add("reverted create successful result", "trace_call", -1, envelope(failedCreate), false) + failedCreate = traceCopy(t, failedCreate) + failedCreate["result"] = traceObject{"gasUsed": "0x1", "output": "0xdead", "address": address} + add("reverted create with address", "trace_call", -1, envelope(failedCreate), false) + failedCreate = traceCopy(t, failedCreate) + failedCreate["result"] = traceObject{"gasUsed": "0x1", "output": "0xdead", "address": address, "code": "0x"} + add("failed create mixed result", "trace_call", -1, envelope(failedCreate), false) + collision := traceCopy(t, create) + collision["error"] = "Contract address collision" + delete(collision, "result") + add("create collision", "trace_call", -1, envelope(collision), true) + for _, method := range []any{nil, "create3"} { + bad := traceCopy(t, create) + action := bad["action"].(traceObject) + if method == nil { + delete(action, "creationMethod") + } else { + action["creationMethod"] = method + } + add(fmt.Sprintf("creation method %v", method), "trace_call", -1, envelope(bad), false) + } + create2 := traceCopy(t, create) + create2["action"].(traceObject)["creationMethod"] = "create2" + add("create2", "trace_call", -1, envelope(create2), true) + for _, value := range []any{traceObject{}, traceObject{"gasPrice": "0x0"}, traceObject{"maxFeePerGas": "0x1", "maxPriorityFeePerGas": "0x0"}} { + add("valid fees", "trace_call", 0, value, true) + } + add("future call field", "trace_call", 0, traceObject{"futureField": traceObject{"x": 1}}, true) + add("standard call fields", "trace_call", 0, traceObject{"chainId": "0x1", "maxFeePerBlobGas": "0x1", "blobVersionedHashes": []any{hash}, "authorizationList": []any{}}, true) + add("invalid chain id", "trace_call", 0, traceObject{"chainId": 1}, false) + add("gas above uint64", "trace_call", 0, traceObject{"gas": "0x10000000000000000"}, false) + add("uint64 gas", "trace_call", 0, traceObject{"gas": "0xffffffffffffffff"}, true) + add("block hash", "trace_call", 2, hash, true) + add("block hash", "trace_callMany", 1, hash, true) + for _, param := range []struct { + method string + position int + }{{"trace_call", 3}, {"trace_callMany", 2}} { + add("null state overrides", param.method, param.position, nil, true) + add("state overrides", param.method, param.position, traceObject{address: traceObject{"balance": "0x1", "stateDiff": traceObject{}}}, true) + add("malformed state overrides", param.method, param.position, traceObject{"bad": traceObject{}}, false) + add("null block overrides", param.method, param.position+1, nil, true) + add("block overrides", param.method, param.position+1, traceObject{"baseFeePerGas": "0x0"}, true) + } + add("invalid blob hash", "trace_call", 0, traceObject{"blobVersionedHashes": []any{"0x01"}}, false) + for _, value := range []any{nil, []any{}, []any{address}} { + add("unrestricted or address filter", "trace_filter", 0, traceObject{"fromAddress": value, "toAddress": value}, true) + } + add("scalar address filter", "trace_filter", 0, traceObject{"fromAddress": address}, false) + add("negative count", "trace_filter", 0, traceObject{"count": -1}, false) + add("uint64 page", "trace_filter", 0, traceObject{"after": uint64(1) << 63, "count": 1}, true) + for _, tag := range []string{"earliest", "latest", "safe", "finalized"} { + add("range tag "+tag, "trace_filter", 0, traceObject{"fromBlock": tag, "toBlock": tag}, true) + } + add("pending range", "trace_filter", 0, traceObject{"fromBlock": "pending"}, false) + for _, method := range []string{"trace_block", "trace_replayBlockTransactions"} { + add("latest block", method, 0, "latest", true) + add("pending block", method, 0, "pending", false) + } + add("hex path", "trace_get", 1, []any{"0x0", "0xa"}, true) + add("integer path", "trace_get", 1, []any{0, 10}, false) + for _, field := range []string{"maxFeePerGas", "maxPriorityFeePerGas"} { + add("conflicting "+field, "trace_call", 0, traceObject{"gasPrice": "0x0", field: "0x1"}, false) + } + add("nonempty tuples", "trace_callMany", 0, []any{[]any{traceObject{"to": address}, []any{"trace"}}, []any{traceObject{}, []any{"stateDiff", "vmTrace"}}}, true) + add("invalid second envelope", "trace_callMany", -1, []any{envelope(call), envelope(reward)}, false) + add("invalid second tuple", "trace_callMany", 0, []any{[]any{traceObject{}, []any{}}, []any{traceObject{}, []any{"bad"}}}, false) + add("invalid second selection", "trace_call", 1, []any{"trace", "bad"}, false) + add("short tuple", "trace_callMany", 0, []any{[]any{traceObject{}}}, false) + add("long tuple", "trace_callMany", 0, []any{[]any{traceObject{}, []any{}, 0}}, false) + add("reversed tuple", "trace_callMany", 0, []any{[]any{[]any{}, traceObject{}}}, false) + add("duplicate selections", "trace_callMany", 0, []any{[]any{traceObject{}, []any{"trace", "trace"}}}, false) + add("nonempty envelopes", "trace_callMany", -1, []any{envelope(call), envelope(create)}, true) + add("reward in sequence", "trace_callMany", -1, []any{envelope(reward)}, false) + diff := envelope(call) + diff["stateDiff"] = traceObject{address: traceObject{"balance": "=", "nonce": "=", "code": "=", "storage": traceObject{hash: traceObject{"*": traceObject{"from": hash, "to": hash}}}}} + add("state change", "trace_call", -1, diff, true) + slot := "0x" + strings.Repeat("0", 64) + accountDiff := func(balance, nonce, code any, storage traceObject) traceObject { + e := envelope(call) + e["stateDiff"] = traceObject{address: traceObject{"balance": balance, "nonce": nonce, "code": code, "storage": storage}} + return e + } + changed := traceObject{"*": traceObject{"from": "0x1", "to": "0x2"}} + add("changed balance", "trace_call", -1, accountDiff(changed, "=", "=", traceObject{}), true) + add("unchanged account", "trace_call", -1, accountDiff("=", "=", "=", traceObject{}), false) + add("zero slot write", "trace_call", -1, accountDiff("=", "=", "=", traceObject{slot: traceObject{"*": traceObject{"from": slot, "to": hash}}}), true) + add("slot born on existing account", "trace_call", -1, accountDiff("=", "=", "=", traceObject{slot: traceObject{"+": hash}}), false) + add("slot died on existing account", "trace_call", -1, accountDiff(changed, "=", "=", traceObject{slot: traceObject{"-": hash}}), false) + add("unchanged slot", "trace_call", -1, accountDiff(changed, "=", "=", traceObject{slot: "="}), false) + born := func(storage traceObject) traceObject { + return accountDiff(traceObject{"+": "0x0"}, traceObject{"+": "0x1"}, traceObject{"+": "0x00"}, storage) + } + add("born account", "trace_call", -1, born(traceObject{slot: traceObject{"+": hash}}), true) + add("born account changed slot", "trace_call", -1, born(traceObject{slot: traceObject{"*": traceObject{"from": slot, "to": hash}}}), false) + add("born account unchanged nonce", "trace_call", -1, accountDiff(traceObject{"+": "0x1"}, "=", traceObject{"+": "0x"}, traceObject{}), false) + died := func(storage traceObject) traceObject { + return accountDiff(traceObject{"-": "0x0"}, traceObject{"-": "0x1"}, traceObject{"-": "0x00"}, storage) + } + add("deleted account", "trace_call", -1, died(traceObject{}), true) + add("deleted account storage", "trace_call", -1, died(traceObject{slot: traceObject{"*": traceObject{"from": hash, "to": slot}}}), false) + add("mixed markers", "trace_call", -1, accountDiff(traceObject{"-": "0x1"}, "=", "=", traceObject{}), false) + for _, frame := range []traceObject{call, reward, local(call)} { + replay := envelope(frame) + replay["transactionHash"] = hash + add("replay "+frame["type"].(string), "trace_replayTransaction", -1, replay, frame["type"] == "call" && frame["blockHash"] == nil) + add("block replay "+frame["type"].(string), "trace_replayBlockTransactions", -1, []any{replay}, frame["type"] == "call" && frame["blockHash"] == nil) + } + for _, method := range []string{"trace_get", "trace_transaction", "trace_replayTransaction"} { + add("missing transaction", method, -1, nil, true) + } + // A deeply malformed child must fail through the actual speccheck serialization path. + vm := traceObject{"code": "0x00", "ops": []any{}} + for range 5 { + vm = traceObject{"code": "0x00", "ops": []any{traceObject{"pc": 0, "cost": 0, "ex": traceObject{"used": 0, "push": []any{}, "mem": nil, "store": nil}, "sub": vm}}} + } + e := envelope(call) + e["vmTrace"] = vm + add("nested VM", "trace_call", -1, e, true) + badVM := traceCopy(t, vm) + leaf := badVM + for range 5 { + leaf = leaf["ops"].([]any)[0].(traceObject)["sub"].(traceObject) + } + leaf["code"] = "not hex" + e = envelope(call) + e["vmTrace"] = badVM + add("malformed deep VM", "trace_call", -1, e, false) + + for _, tc := range probes { + t.Run(tc.method+"/"+tc.name, func(t *testing.T) { + for _, artifact := range []struct { + name string + doc traceObject + }{{"refs", refs}, {"expanded", expanded}} { + t.Run(artifact.name, func(t *testing.T) { + var schema traceObject + for _, m := range artifact.doc["methods"].([]any) { + method := m.(traceObject) + if method["name"] != tc.method { + continue + } + if tc.param < 0 { + schema = method["result"].(traceObject)["schema"].(traceObject) + } else { + schema = method["params"].([]any)[tc.param].(traceObject)["schema"].(traceObject) + } + } + root := traceCopy(t, schema) + root["components"] = artifact.doc["components"] + for _, draft := range []*schema5.Draft{schema5.Draft7, schema5.Draft2019} { + compiler := schema5.NewCompiler() + compiler.Draft = draft + if err := compiler.AddResource("https://example.test/trace.json", bytes.NewReader(traceJSON(t, root))); err != nil { + t.Fatal(err) + } + compiled, err := compiler.Compile("https://example.test/trace.json") + if err != nil { + t.Fatal(err) + } + err = compiled.Validate(tc.value) + if (err == nil) != tc.valid { + t.Fatalf("valid=%v: %v", tc.valid, err) + } + } + }) + } + t.Run("speccheck", func(t *testing.T) { + cd := parsed[tc.method].result + if tc.param >= 0 { + cd = parsed[tc.method].params[tc.param] + } + err := validate(cd.schema, traceJSON(t, tc.value), "https://example.test/speccheck.json") + var validationErr *schema5.ValidationError + if err != nil && !errors.As(err, &validationErr) { + t.Fatalf("compile/serialization error: %v", err) + } + if (err == nil) != tc.valid { + t.Fatalf("valid=%v: %v", tc.valid, err) + } + }) + }) + } +} + +func TestTraceVmResource(t *testing.T) { + refs, _, _ := traceDocuments(t) + vm := refs["components"].(traceObject)["schemas"].(traceObject)["TraceVm"].(traceObject) + // Compile at its own declared identity, with no surrounding components to hide a scope defect. + for _, draft := range []*schema6.Draft{schema6.Draft7, schema6.Draft2019} { + compiler := schema6.NewCompiler() + compiler.DefaultDraft(draft) + id := vm["$id"].(string) + if err := compiler.AddResource(id, vm); err != nil { + t.Fatal(err) + } + compiled, err := compiler.Compile(id) + if err != nil { + t.Fatal(err) + } + for _, tc := range []struct { + input string + valid bool + }{ + {`{"code":"0x","ops":[]}`, true}, + {`{"code":"0x","ops":[{"pc":0,"cost":0,"ex":{"used":0,"push":["0x1"],"mem":{"off":0,"data":"0x00"},"store":{"key":"0x0","val":"0x1"}},"sub":{"code":"0x","ops":[]}}]}`, true}, + {`{"code":"0x","ops":[{"pc":0,"cost":0,"ex":null,"sub":{"code":"bad","ops":[]}}]}`, false}, + {`{"code":"0x","ops":[{"pc":0,"cost":0,"ex":{"used":0,"push":["0x00"],"mem":null,"store":null},"sub":null}]}`, false}, + {`{"code":"0x","ops":[{"pc":0,"cost":0,"ex":null,"sub":null}]}`, true}, + {`{"code":"0x","ops":[{"pc":0,"cost":0,"ex":null,"sub":{"code":"0x","ops":[]}}]}`, false}, + } { + var input any + if err := json.Unmarshal([]byte(tc.input), &input); err != nil { + t.Fatal(err) + } + err := compiled.Validate(input) + if (err == nil) != tc.valid { + t.Fatalf("valid=%v: %v", tc.valid, err) + } + } + } +} + +func TestTraceExamples(t *testing.T) { + _, document, methods := traceDocuments(t) + for _, entry := range document["methods"].([]any) { + method := entry.(traceObject) + name := method["name"].(string) + for _, entry := range method["examples"].([]any) { + example := entry.(traceObject) + t.Run(name+"/"+example["name"].(string), func(t *testing.T) { + for i, entry := range example["params"].([]any) { + param := entry.(traceObject) + descriptor := methods[name].params[i] + if param["name"] != descriptor.name { + t.Fatalf("example parameter %d has wrong name", i) + } + if err := validate(descriptor.schema, traceJSON(t, param["value"]), "https://example.test/parameter.json"); err != nil { + t.Fatal(err) + } + } + result := example["result"].(traceObject) + if err := validate(methods[name].result.schema, traceJSON(t, result["value"]), "https://example.test/result.json"); err != nil { + t.Fatal(err) + } + }) + } + } +} diff --git a/tools/internal/specgen/dereference.go b/tools/internal/specgen/dereference.go index 1a423a7cf..9b1efe7c7 100644 --- a/tools/internal/specgen/dereference.go +++ b/tools/internal/specgen/dereference.go @@ -8,10 +8,10 @@ import ( ) // dereference recursively expands all '$ref' entries in schema, resolving each -// reference against repository. Every '$ref' value must have the form -// "#/components/schemas/". +// reference against repository. Component references use +// "#/components/schemas/"; a local "#" under an explicit $id is preserved. // -// The input schema is not modified; a fully dereferenced deep copy is returned. +// The input schema is not modified; an expanded deep copy is returned. // Cycles are detected and reported as errors. func dereference(schema object, repository schemaRepository) (object, error) { d := &dereferencer{ @@ -25,6 +25,7 @@ func dereference(schema object, repository schemaRepository) (object, error) { type dereferencer struct { repository schemaRepository visiting map[string]bool + resourceID string } func (d *dereferencer) value(v any) (any, error) { @@ -58,6 +59,11 @@ func (d *dereferencer) slice(arr []any) ([]any, error) { // local overrides. func (d *dereferencer) object(obj object) (object, error) { ref, hasRef := obj["$ref"].(string) + previousID := d.resourceID + if id, ok := obj["$id"].(string); ok && id != "" { + d.resourceID = id + } + defer func() { d.resourceID = previousID }() // Expand all non-$ref values. out := make(object, len(obj)) @@ -72,6 +78,12 @@ func (d *dereferencer) object(obj object) (object, error) { out[k] = expanded } + if hasRef && ref == "#" && d.resourceID != "" { + // A self-reference is finite when preserved within its own schema resource. + // Expanding it would either recurse forever or weaken nested validation. + out["$ref"] = ref + return out, nil + } if hasRef { // Resolve the reference and use it as the base, letting local siblings // (already in out) take precedence over the resolved fields. diff --git a/tools/internal/specgen/mergeallof.go b/tools/internal/specgen/mergeallof.go index c1a8ed264..d4ac99000 100644 --- a/tools/internal/specgen/mergeallof.go +++ b/tools/internal/specgen/mergeallof.go @@ -15,7 +15,8 @@ import ( // - required: concatenated and deduplicated. // - all other fields: parent object wins. // -// The input must not contain any $ref entries; if one is found mergeAllOf panics. +// Component references must already be expanded. Resource-local self-references +// validated by dereference are preserved. func mergeAllOf(schema object) object { return mergeObject(schema) } @@ -40,7 +41,7 @@ func mergeSlice(arr []any) []any { } func mergeObject(obj object) object { - if ref, ok := obj["$ref"].(string); ok { + if ref, ok := obj["$ref"].(string); ok && ref != "#" { panic(fmt.Sprintf("mergeObject: unexpected $ref %q (dereference input first)", ref)) } diff --git a/tools/internal/specgen/recursive_schema_test.go b/tools/internal/specgen/recursive_schema_test.go new file mode 100644 index 000000000..c05a4b90c --- /dev/null +++ b/tools/internal/specgen/recursive_schema_test.go @@ -0,0 +1,47 @@ +package specgen + +import ( + "testing" + + "github.com/santhosh-tekuri/jsonschema/v6" +) + +func TestDereferenceResourceLocalRecursion(t *testing.T) { + repo := schemaRepository{"Node": { + "$id": "https://example.test/node.json", + "type": "object", + "required": []any{"value"}, + "properties": object{ + "value": object{"type": "integer"}, + "child": object{"$ref": "#"}, + }, + }} + // Exercise embedding: # must resolve to the node resource, not the envelope. + input := object{"type": "object", "properties": object{"node": object{"$ref": "#/components/schemas/Node"}}} + got, err := (&Generator{}).expandSchema(input, repo) + if err != nil { + t.Fatal(err) + } + compiler := jsonschema.NewCompiler() + if err := compiler.AddResource("https://example.test/root.json", got); err != nil { + t.Fatal(err) + } + compiled, err := compiler.Compile("https://example.test/root.json") + if err != nil { + t.Fatal(err) + } + good := object{"node": object{"value": 1, "child": object{"value": 2}}} + if err := compiled.Validate(good); err != nil { + t.Fatal(err) + } + bad := object{"node": object{"value": 1, "child": object{"value": "wrong"}}} + if err := compiled.Validate(bad); err == nil { + t.Fatal("nested child escaped validation") + } +} + +func TestDereferenceRejectsUnscopedSelfReference(t *testing.T) { + if _, err := dereference(object{"$ref": "#"}, schemaRepository{}); err == nil { + t.Fatal("unscoped self-reference must be rejected") + } +} diff --git a/tools/internal/specgen/specgen.go b/tools/internal/specgen/specgen.go index c1c81d8a2..e635c27c8 100644 --- a/tools/internal/specgen/specgen.go +++ b/tools/internal/specgen/specgen.go @@ -146,7 +146,8 @@ func (s *Generator) ResolveErrorGroups() error { return nil } -// Dereference removes all $ref pointers and ensures the spec and does not use the `allOf` +// Dereference expands component references (preserving resource-local recursion) and removes `allOf`. +// The spec does not otherwise use the `allOf` // schema feature. This exists to simplify the spec for compatibility with some tools. func (s *Generator) Dereference() error { // Pre-resolve all type schemas: dereference $ref and merge allOf. diff --git a/wordlist.txt b/wordlist.txt index 8e86c9f63..ae4c6039b 100644 --- a/wordlist.txt +++ b/wordlist.txt @@ -31,6 +31,7 @@ configurationv CRC crypto DocToc +DUPn eg eip eips @@ -44,11 +45,13 @@ EOA EOA's ERC erigon +Erigon's eth ethereum ethereumjs EVM exitv +EXTCODECOPY FCU FCUs feeRecipient @@ -58,38 +61,47 @@ Fulu getblobsbundlev getblobsv getclientversionv +Geth getinclusionlistv getInclusionListV graphql greppable gwei https +idx interop ipc js json JWT +keccak KiB kzg +MCOPY +mem mempool merkle merkleization MiB +MLOAD MSM MUL multicallV natively npm +ommer ommers openrpc params pos pre +precheck prev prevrandao PRs pyspelling randao +Reth rlp RLP's rpc @@ -105,9 +117,11 @@ src ssz statev statusv +SWAPn TCP teku TLS +TSTORE TTL txpool txs