From 57d3efb46f32398de12c49c6b56c2e09bfb867c8 Mon Sep 17 00:00:00 2001 From: Termina1 Date: Mon, 23 Feb 2026 16:27:58 +0100 Subject: [PATCH 1/4] Add admin_capabilities OpenRPC method with routing capabilities --- Makefile | 1 + src/admin/capabilities.yaml | 41 ++++++++++ src/schemas/admin.yaml | 81 +++++++++++++++++++ .../get-capabilities-disabled-logs.io | 3 + tests/admin_capabilities/get-capabilities.io | 3 + 5 files changed, 129 insertions(+) create mode 100644 src/admin/capabilities.yaml create mode 100644 src/schemas/admin.yaml create mode 100644 tests/admin_capabilities/get-capabilities-disabled-logs.io create mode 100644 tests/admin_capabilities/get-capabilities.io diff --git a/Makefile b/Makefile index f49b4b4fc..a00e92000 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/admin' \ -methods 'src/engine/openrpc/methods' diff --git a/src/admin/capabilities.yaml b/src/admin/capabilities.yaml new file mode 100644 index 000000000..c247e4f90 --- /dev/null +++ b/src/admin/capabilities.yaml @@ -0,0 +1,41 @@ +- name: admin_capabilities + summary: Returns a client-specific config snapshot and effective capabilities for routing decisions. + params: [] + result: + name: Capabilities + schema: + $ref: '#/components/schemas/AdminCapabilities' + examples: + - name: admin_capabilities example + params: [] + result: + name: Capabilities + value: + config: + gethCli: + --state.scheme: path + --history.state: 90000 + effective: + state: + disabled: false + oldestBlock: '0x12ab34' + deleteStrategy: + type: window + retentionBlocks: 90000 + tx: + disabled: false + oldestBlock: '0xf00aa' + deleteStrategy: + type: window + retentionBlocks: 2350000 + logs: + disabled: false + oldestBlock: '0xf00aa' + deleteStrategy: + type: window + retentionBlocks: 2350000 + blocks: + disabled: false + oldestBlock: '0x0' + deleteStrategy: + type: none diff --git a/src/schemas/admin.yaml b/src/schemas/admin.yaml new file mode 100644 index 000000000..453dcb3cc --- /dev/null +++ b/src/schemas/admin.yaml @@ -0,0 +1,81 @@ +AdminCapabilities: + title: Admin capabilities + type: object + additionalProperties: false + required: + - config + - effective + properties: + config: + $ref: '#/components/schemas/AdminCapabilitiesConfig' + effective: + $ref: '#/components/schemas/AdminCapabilitiesEffective' + +AdminCapabilitiesConfig: + title: Client config snapshot + type: object + additionalProperties: + type: object + +AdminCapabilitiesEffective: + title: Effective routing capabilities + type: object + additionalProperties: false + required: + - state + - tx + - logs + - blocks + properties: + state: + $ref: '#/components/schemas/AdminCapabilitiesEffectiveResource' + tx: + $ref: '#/components/schemas/AdminCapabilitiesEffectiveResource' + logs: + $ref: '#/components/schemas/AdminCapabilitiesEffectiveResource' + blocks: + $ref: '#/components/schemas/AdminCapabilitiesEffectiveResource' + +AdminCapabilitiesEffectiveResource: + title: Effective resource capability + type: object + additionalProperties: false + required: + - disabled + - oldestBlock + - deleteStrategy + properties: + disabled: + type: boolean + oldestBlock: + $ref: '#/components/schemas/uint' + deleteStrategy: + $ref: '#/components/schemas/AdminCapabilitiesDeleteStrategy' + +AdminCapabilitiesDeleteStrategy: + title: Delete strategy + oneOf: + - title: No deletion + type: object + additionalProperties: false + required: + - type + properties: + type: + type: string + enum: + - none + - title: Sliding window deletion + type: object + additionalProperties: false + required: + - type + - retentionBlocks + properties: + type: + type: string + enum: + - window + retentionBlocks: + type: integer + minimum: 0 diff --git a/tests/admin_capabilities/get-capabilities-disabled-logs.io b/tests/admin_capabilities/get-capabilities-disabled-logs.io new file mode 100644 index 000000000..8419fa3fb --- /dev/null +++ b/tests/admin_capabilities/get-capabilities-disabled-logs.io @@ -0,0 +1,3 @@ +// Returns routing-focused effective capabilities when logs are unavailable. +>> {"jsonrpc":"2.0","id":1,"method":"admin_capabilities"} +<< {"jsonrpc":"2.0","id":1,"result":{"config":{"gethCli":{"--state.scheme":"path","--history.state":50000}},"effective":{"state":{"disabled":false,"oldestBlock":"0x1a2b3c","deleteStrategy":{"type":"window","retentionBlocks":50000}},"tx":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"logs":{"disabled":true,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}}}}} diff --git a/tests/admin_capabilities/get-capabilities.io b/tests/admin_capabilities/get-capabilities.io new file mode 100644 index 000000000..db1bd1541 --- /dev/null +++ b/tests/admin_capabilities/get-capabilities.io @@ -0,0 +1,3 @@ +// Returns effective routing capabilities and a client-specific config snapshot. +>> {"jsonrpc":"2.0","id":1,"method":"admin_capabilities"} +<< {"jsonrpc":"2.0","id":1,"result":{"config":{"gethCli":{"--state.scheme":"path","--history.state":90000}},"effective":{"state":{"disabled":false,"oldestBlock":"0x12ab34","deleteStrategy":{"type":"window","retentionBlocks":90000}},"tx":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"logs":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}}}}} From e00b79673c9c60d23ff29727efaaeeade437001d Mon Sep 17 00:00:00 2001 From: Termina1 Date: Tue, 24 Feb 2026 13:51:12 +0100 Subject: [PATCH 2/4] Move capabilities to eth namespace and add trienodes/receipts/logs --- Makefile | 1 - src/{admin => eth}/capabilities.yaml | 18 +++++++++-- src/schemas/{admin.yaml => capabilities.yaml} | 32 +++++++++++-------- .../get-capabilities-disabled-logs.io | 3 -- .../get-capabilities-disabled-trienodes.io | 3 ++ .../get-capabilities.io | 4 +-- 6 files changed, 39 insertions(+), 22 deletions(-) rename src/{admin => eth}/capabilities.yaml (68%) rename src/schemas/{admin.yaml => capabilities.yaml} (60%) delete mode 100644 tests/admin_capabilities/get-capabilities-disabled-logs.io create mode 100644 tests/eth_capabilities/get-capabilities-disabled-trienodes.io rename tests/{admin_capabilities => eth_capabilities}/get-capabilities.io (58%) diff --git a/Makefile b/Makefile index a00e92000..f49b4b4fc 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,6 @@ SPECFLAGS := -schemas 'src/schemas' \ -schemas 'src/engine/openrpc/schemas' \ -methods 'src/eth' \ -methods 'src/debug' \ - -methods 'src/admin' \ -methods 'src/engine/openrpc/methods' diff --git a/src/admin/capabilities.yaml b/src/eth/capabilities.yaml similarity index 68% rename from src/admin/capabilities.yaml rename to src/eth/capabilities.yaml index c247e4f90..4b9a41d1d 100644 --- a/src/admin/capabilities.yaml +++ b/src/eth/capabilities.yaml @@ -1,12 +1,12 @@ -- name: admin_capabilities +- name: eth_capabilities summary: Returns a client-specific config snapshot and effective capabilities for routing decisions. params: [] result: name: Capabilities schema: - $ref: '#/components/schemas/AdminCapabilities' + $ref: '#/components/schemas/EthCapabilities' examples: - - name: admin_capabilities example + - name: eth_capabilities example params: [] result: name: Capabilities @@ -34,8 +34,20 @@ deleteStrategy: type: window retentionBlocks: 2350000 + receipts: + disabled: false + oldestBlock: '0xf00aa' + deleteStrategy: + type: window + retentionBlocks: 2350000 blocks: disabled: false oldestBlock: '0x0' deleteStrategy: type: none + trienodes: + disabled: false + oldestBlock: '0x120000' + deleteStrategy: + type: window + retentionBlocks: 90000 diff --git a/src/schemas/admin.yaml b/src/schemas/capabilities.yaml similarity index 60% rename from src/schemas/admin.yaml rename to src/schemas/capabilities.yaml index 453dcb3cc..e3b8f9511 100644 --- a/src/schemas/admin.yaml +++ b/src/schemas/capabilities.yaml @@ -1,5 +1,5 @@ -AdminCapabilities: - title: Admin capabilities +EthCapabilities: + title: Eth capabilities type: object additionalProperties: false required: @@ -7,17 +7,17 @@ AdminCapabilities: - effective properties: config: - $ref: '#/components/schemas/AdminCapabilitiesConfig' + $ref: '#/components/schemas/EthCapabilitiesConfig' effective: - $ref: '#/components/schemas/AdminCapabilitiesEffective' + $ref: '#/components/schemas/EthCapabilitiesEffective' -AdminCapabilitiesConfig: +EthCapabilitiesConfig: title: Client config snapshot type: object additionalProperties: type: object -AdminCapabilitiesEffective: +EthCapabilitiesEffective: title: Effective routing capabilities type: object additionalProperties: false @@ -25,18 +25,24 @@ AdminCapabilitiesEffective: - state - tx - logs + - receipts - blocks + - trienodes properties: state: - $ref: '#/components/schemas/AdminCapabilitiesEffectiveResource' + $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' tx: - $ref: '#/components/schemas/AdminCapabilitiesEffectiveResource' + $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' logs: - $ref: '#/components/schemas/AdminCapabilitiesEffectiveResource' + $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' + receipts: + $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' blocks: - $ref: '#/components/schemas/AdminCapabilitiesEffectiveResource' + $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' + trienodes: + $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' -AdminCapabilitiesEffectiveResource: +EthCapabilitiesEffectiveResource: title: Effective resource capability type: object additionalProperties: false @@ -50,9 +56,9 @@ AdminCapabilitiesEffectiveResource: oldestBlock: $ref: '#/components/schemas/uint' deleteStrategy: - $ref: '#/components/schemas/AdminCapabilitiesDeleteStrategy' + $ref: '#/components/schemas/EthCapabilitiesDeleteStrategy' -AdminCapabilitiesDeleteStrategy: +EthCapabilitiesDeleteStrategy: title: Delete strategy oneOf: - title: No deletion diff --git a/tests/admin_capabilities/get-capabilities-disabled-logs.io b/tests/admin_capabilities/get-capabilities-disabled-logs.io deleted file mode 100644 index 8419fa3fb..000000000 --- a/tests/admin_capabilities/get-capabilities-disabled-logs.io +++ /dev/null @@ -1,3 +0,0 @@ -// Returns routing-focused effective capabilities when logs are unavailable. ->> {"jsonrpc":"2.0","id":1,"method":"admin_capabilities"} -<< {"jsonrpc":"2.0","id":1,"result":{"config":{"gethCli":{"--state.scheme":"path","--history.state":50000}},"effective":{"state":{"disabled":false,"oldestBlock":"0x1a2b3c","deleteStrategy":{"type":"window","retentionBlocks":50000}},"tx":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"logs":{"disabled":true,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}}}}} diff --git a/tests/eth_capabilities/get-capabilities-disabled-trienodes.io b/tests/eth_capabilities/get-capabilities-disabled-trienodes.io new file mode 100644 index 000000000..fec4f7793 --- /dev/null +++ b/tests/eth_capabilities/get-capabilities-disabled-trienodes.io @@ -0,0 +1,3 @@ +// Returns routing-focused effective capabilities when trie nodes are unavailable. +>> {"jsonrpc":"2.0","id":1,"method":"eth_capabilities"} +<< {"jsonrpc":"2.0","id":1,"result":{"config":{"gethCli":{"--state.scheme":"path","--history.state":50000}},"effective":{"state":{"disabled":false,"oldestBlock":"0x1a2b3c","deleteStrategy":{"type":"window","retentionBlocks":50000}},"tx":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"logs":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"receipts":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"trienodes":{"disabled":true,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}}}}} diff --git a/tests/admin_capabilities/get-capabilities.io b/tests/eth_capabilities/get-capabilities.io similarity index 58% rename from tests/admin_capabilities/get-capabilities.io rename to tests/eth_capabilities/get-capabilities.io index db1bd1541..88bcc8ddf 100644 --- a/tests/admin_capabilities/get-capabilities.io +++ b/tests/eth_capabilities/get-capabilities.io @@ -1,3 +1,3 @@ // Returns effective routing capabilities and a client-specific config snapshot. ->> {"jsonrpc":"2.0","id":1,"method":"admin_capabilities"} -<< {"jsonrpc":"2.0","id":1,"result":{"config":{"gethCli":{"--state.scheme":"path","--history.state":90000}},"effective":{"state":{"disabled":false,"oldestBlock":"0x12ab34","deleteStrategy":{"type":"window","retentionBlocks":90000}},"tx":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"logs":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}}}}} +>> {"jsonrpc":"2.0","id":1,"method":"eth_capabilities"} +<< {"jsonrpc":"2.0","id":1,"result":{"config":{"gethCli":{"--state.scheme":"path","--history.state":90000}},"effective":{"state":{"disabled":false,"oldestBlock":"0x12ab34","deleteStrategy":{"type":"window","retentionBlocks":90000}},"tx":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"logs":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"receipts":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"trienodes":{"disabled":false,"oldestBlock":"0x120000","deleteStrategy":{"type":"window","retentionBlocks":90000}}}}} From ec005a5c4186e8f9989e17b9a99719f672287bd5 Mon Sep 17 00:00:00 2001 From: Termina1 Date: Tue, 3 Mar 2026 19:05:24 +0100 Subject: [PATCH 3/4] remove configuration api --- src/eth/capabilities.yaml | 77 +++++++++---------- src/schemas/capabilities.yaml | 19 ----- .../get-capabilities-disabled-trienodes.io | 4 +- tests/eth_capabilities/get-capabilities.io | 4 +- 4 files changed, 40 insertions(+), 64 deletions(-) diff --git a/src/eth/capabilities.yaml b/src/eth/capabilities.yaml index 4b9a41d1d..cdfabece8 100644 --- a/src/eth/capabilities.yaml +++ b/src/eth/capabilities.yaml @@ -1,5 +1,5 @@ - name: eth_capabilities - summary: Returns a client-specific config snapshot and effective capabilities for routing decisions. + summary: Returns effective capabilities for routing decisions. params: [] result: name: Capabilities @@ -11,43 +11,38 @@ result: name: Capabilities value: - config: - gethCli: - --state.scheme: path - --history.state: 90000 - effective: - state: - disabled: false - oldestBlock: '0x12ab34' - deleteStrategy: - type: window - retentionBlocks: 90000 - tx: - disabled: false - oldestBlock: '0xf00aa' - deleteStrategy: - type: window - retentionBlocks: 2350000 - logs: - disabled: false - oldestBlock: '0xf00aa' - deleteStrategy: - type: window - retentionBlocks: 2350000 - receipts: - disabled: false - oldestBlock: '0xf00aa' - deleteStrategy: - type: window - retentionBlocks: 2350000 - blocks: - disabled: false - oldestBlock: '0x0' - deleteStrategy: - type: none - trienodes: - disabled: false - oldestBlock: '0x120000' - deleteStrategy: - type: window - retentionBlocks: 90000 + state: + disabled: false + oldestBlock: '0x12ab34' + deleteStrategy: + type: window + retentionBlocks: 90000 + tx: + disabled: false + oldestBlock: '0xf00aa' + deleteStrategy: + type: window + retentionBlocks: 2350000 + logs: + disabled: false + oldestBlock: '0xf00aa' + deleteStrategy: + type: window + retentionBlocks: 2350000 + receipts: + disabled: false + oldestBlock: '0xf00aa' + deleteStrategy: + type: window + retentionBlocks: 2350000 + blocks: + disabled: false + oldestBlock: '0x0' + deleteStrategy: + type: none + trienodes: + disabled: false + oldestBlock: '0x120000' + deleteStrategy: + type: window + retentionBlocks: 90000 diff --git a/src/schemas/capabilities.yaml b/src/schemas/capabilities.yaml index e3b8f9511..3a84e3366 100644 --- a/src/schemas/capabilities.yaml +++ b/src/schemas/capabilities.yaml @@ -1,23 +1,4 @@ EthCapabilities: - title: Eth capabilities - type: object - additionalProperties: false - required: - - config - - effective - properties: - config: - $ref: '#/components/schemas/EthCapabilitiesConfig' - effective: - $ref: '#/components/schemas/EthCapabilitiesEffective' - -EthCapabilitiesConfig: - title: Client config snapshot - type: object - additionalProperties: - type: object - -EthCapabilitiesEffective: title: Effective routing capabilities type: object additionalProperties: false diff --git a/tests/eth_capabilities/get-capabilities-disabled-trienodes.io b/tests/eth_capabilities/get-capabilities-disabled-trienodes.io index fec4f7793..fe3e7d71a 100644 --- a/tests/eth_capabilities/get-capabilities-disabled-trienodes.io +++ b/tests/eth_capabilities/get-capabilities-disabled-trienodes.io @@ -1,3 +1,3 @@ -// Returns routing-focused effective capabilities when trie nodes are unavailable. +// Returns effective capabilities when trie nodes are unavailable. >> {"jsonrpc":"2.0","id":1,"method":"eth_capabilities"} -<< {"jsonrpc":"2.0","id":1,"result":{"config":{"gethCli":{"--state.scheme":"path","--history.state":50000}},"effective":{"state":{"disabled":false,"oldestBlock":"0x1a2b3c","deleteStrategy":{"type":"window","retentionBlocks":50000}},"tx":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"logs":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"receipts":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"trienodes":{"disabled":true,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}}}}} +<< {"jsonrpc":"2.0","id":1,"result":{"state":{"disabled":false,"oldestBlock":"0x1a2b3c","deleteStrategy":{"type":"window","retentionBlocks":50000}},"tx":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"logs":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"receipts":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"trienodes":{"disabled":true,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}}}} diff --git a/tests/eth_capabilities/get-capabilities.io b/tests/eth_capabilities/get-capabilities.io index 88bcc8ddf..90939895e 100644 --- a/tests/eth_capabilities/get-capabilities.io +++ b/tests/eth_capabilities/get-capabilities.io @@ -1,3 +1,3 @@ -// Returns effective routing capabilities and a client-specific config snapshot. +// Returns effective routing capabilities. >> {"jsonrpc":"2.0","id":1,"method":"eth_capabilities"} -<< {"jsonrpc":"2.0","id":1,"result":{"config":{"gethCli":{"--state.scheme":"path","--history.state":90000}},"effective":{"state":{"disabled":false,"oldestBlock":"0x12ab34","deleteStrategy":{"type":"window","retentionBlocks":90000}},"tx":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"logs":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"receipts":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"trienodes":{"disabled":false,"oldestBlock":"0x120000","deleteStrategy":{"type":"window","retentionBlocks":90000}}}}} +<< {"jsonrpc":"2.0","id":1,"result":{"state":{"disabled":false,"oldestBlock":"0x12ab34","deleteStrategy":{"type":"window","retentionBlocks":90000}},"tx":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"logs":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"receipts":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"trienodes":{"disabled":false,"oldestBlock":"0x120000","deleteStrategy":{"type":"window","retentionBlocks":90000}}}} From 9f870b29799ae8e6e0ce1124bcf728cda4c0392d Mon Sep 17 00:00:00 2001 From: Termina1 Date: Mon, 9 Mar 2026 19:33:00 +0100 Subject: [PATCH 4/4] Rename trienodes to stateproofs, add head block info and resource descriptions --- src/eth/capabilities.yaml | 9 +++++- src/schemas/capabilities.yaml | 31 +++++++++++++++++-- .../get-capabilities-disabled-stateproofs.io | 3 ++ .../get-capabilities-disabled-trienodes.io | 3 -- tests/eth_capabilities/get-capabilities.io | 2 +- 5 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 tests/eth_capabilities/get-capabilities-disabled-stateproofs.io delete mode 100644 tests/eth_capabilities/get-capabilities-disabled-trienodes.io diff --git a/src/eth/capabilities.yaml b/src/eth/capabilities.yaml index cdfabece8..9211f3237 100644 --- a/src/eth/capabilities.yaml +++ b/src/eth/capabilities.yaml @@ -1,5 +1,9 @@ - name: eth_capabilities summary: Returns effective capabilities for routing decisions. + description: | + Returns information about the data available on this node, including the + current head block and retention policies for each resource type. This is + useful for RPC routers to determine which historical queries a node can serve. params: [] result: name: Capabilities @@ -11,6 +15,9 @@ result: name: Capabilities value: + head: + blockNumber: '0x13f8e3a' + blockHash: '0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3' state: disabled: false oldestBlock: '0x12ab34' @@ -40,7 +47,7 @@ oldestBlock: '0x0' deleteStrategy: type: none - trienodes: + stateproofs: disabled: false oldestBlock: '0x120000' deleteStrategy: diff --git a/src/schemas/capabilities.yaml b/src/schemas/capabilities.yaml index 3a84e3366..670f4f429 100644 --- a/src/schemas/capabilities.yaml +++ b/src/schemas/capabilities.yaml @@ -1,26 +1,38 @@ EthCapabilities: title: Effective routing capabilities + description: Describes the data available on the node. Each resource reports the oldest available block and the deletion strategy, allowing RPC routers to determine which historical queries a node can serve. type: object additionalProperties: false required: + - head - state - tx - logs - receipts - blocks - - trienodes + - stateproofs properties: + head: + title: Current head block + description: The latest block known to the node, useful for determining sync status. + $ref: '#/components/schemas/EthCapabilitiesHead' state: + description: "Account and contract state including balances, nonces, code, and storage. Determines the available range for historical state queries. Affects: eth_getBalance, eth_getCode, eth_getStorageAt, eth_getTransactionCount, eth_call, eth_estimateGas, eth_createAccessList." $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' tx: + description: "Transaction data and lookup indices. Determines the available range for transaction lookups by hash or block position. Affects: eth_getTransactionByHash, eth_getTransactionByBlockHashAndIndex, eth_getTransactionByBlockNumberAndIndex." $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' logs: + description: "Event logs emitted by smart contracts. Determines the available block range for log queries and filters. Affects: eth_getLogs, eth_getFilterLogs, eth_getFilterChanges, eth_newFilter." $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' receipts: + description: "Transaction execution receipts including status, gas used, and logs bloom. Determines the available range for receipt lookups. Affects: eth_getTransactionReceipt, eth_getBlockReceipts." $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' blocks: + description: "Block headers and bodies including transactions and uncles. Determines the available range for block retrieval. Affects: eth_getBlockByHash, eth_getBlockByNumber, eth_getBlockTransactionCountByHash, eth_getBlockTransactionCountByNumber, eth_getUncleCountByBlockHash, eth_getUncleCountByBlockNumber." $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' - trienodes: + stateproofs: + description: "Merkle proofs for account and storage state. Determines the available range for proof generation. Affects: eth_getProof." $ref: '#/components/schemas/EthCapabilitiesEffectiveResource' EthCapabilitiesEffectiveResource: @@ -39,6 +51,21 @@ EthCapabilitiesEffectiveResource: deleteStrategy: $ref: '#/components/schemas/EthCapabilitiesDeleteStrategy' +EthCapabilitiesHead: + title: Current head block + type: object + additionalProperties: false + required: + - blockNumber + - blockHash + properties: + blockNumber: + title: Head block number + $ref: '#/components/schemas/uint' + blockHash: + title: Head block hash + $ref: '#/components/schemas/hash32' + EthCapabilitiesDeleteStrategy: title: Delete strategy oneOf: diff --git a/tests/eth_capabilities/get-capabilities-disabled-stateproofs.io b/tests/eth_capabilities/get-capabilities-disabled-stateproofs.io new file mode 100644 index 000000000..c32ba77f2 --- /dev/null +++ b/tests/eth_capabilities/get-capabilities-disabled-stateproofs.io @@ -0,0 +1,3 @@ +// Returns effective capabilities when state proofs are unavailable. +>> {"jsonrpc":"2.0","id":1,"method":"eth_capabilities"} +<< {"jsonrpc":"2.0","id":1,"result":{"head":{"blockNumber":"0x13f8e3a","blockHash":"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3"},"state":{"disabled":false,"oldestBlock":"0x1a2b3c","deleteStrategy":{"type":"window","retentionBlocks":50000}},"tx":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"logs":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"receipts":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"stateproofs":{"disabled":true,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}}}} diff --git a/tests/eth_capabilities/get-capabilities-disabled-trienodes.io b/tests/eth_capabilities/get-capabilities-disabled-trienodes.io deleted file mode 100644 index fe3e7d71a..000000000 --- a/tests/eth_capabilities/get-capabilities-disabled-trienodes.io +++ /dev/null @@ -1,3 +0,0 @@ -// Returns effective capabilities when trie nodes are unavailable. ->> {"jsonrpc":"2.0","id":1,"method":"eth_capabilities"} -<< {"jsonrpc":"2.0","id":1,"result":{"state":{"disabled":false,"oldestBlock":"0x1a2b3c","deleteStrategy":{"type":"window","retentionBlocks":50000}},"tx":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"logs":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"receipts":{"disabled":false,"oldestBlock":"0x10203","deleteStrategy":{"type":"window","retentionBlocks":1200000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"trienodes":{"disabled":true,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}}}} diff --git a/tests/eth_capabilities/get-capabilities.io b/tests/eth_capabilities/get-capabilities.io index 90939895e..a78108d82 100644 --- a/tests/eth_capabilities/get-capabilities.io +++ b/tests/eth_capabilities/get-capabilities.io @@ -1,3 +1,3 @@ // Returns effective routing capabilities. >> {"jsonrpc":"2.0","id":1,"method":"eth_capabilities"} -<< {"jsonrpc":"2.0","id":1,"result":{"state":{"disabled":false,"oldestBlock":"0x12ab34","deleteStrategy":{"type":"window","retentionBlocks":90000}},"tx":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"logs":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"receipts":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"trienodes":{"disabled":false,"oldestBlock":"0x120000","deleteStrategy":{"type":"window","retentionBlocks":90000}}}} +<< {"jsonrpc":"2.0","id":1,"result":{"head":{"blockNumber":"0x13f8e3a","blockHash":"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3"},"state":{"disabled":false,"oldestBlock":"0x12ab34","deleteStrategy":{"type":"window","retentionBlocks":90000}},"tx":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"logs":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"receipts":{"disabled":false,"oldestBlock":"0xf00aa","deleteStrategy":{"type":"window","retentionBlocks":2350000}},"blocks":{"disabled":false,"oldestBlock":"0x0","deleteStrategy":{"type":"none"}},"stateproofs":{"disabled":false,"oldestBlock":"0x120000","deleteStrategy":{"type":"window","retentionBlocks":90000}}}}