# SPDX-License-Identifier: CC-BY-NC-SA-4.0 arazzo: 1.0.1 info: title: Ethereum JSON-RPC core conformance version: 1.0.0 summary: Identify the chain, read its head, then read the block at that head. description: 'Three core methods in the order a real client uses them, each depending on the last. Read-only throughout: no transaction is submitted, and nothing here costs gas. A provider that completes the flow serves the interoperable core of the Ethereum JSON-RPC interface. Note that every step must check the body, not the status code. A JSON-RPC endpoint returns 200 for a method it does not implement, with error -32601 in the body — so a flow that asserts only on status passes against a server that implements nothing.' sourceDescriptions: - name: profile url: ./openapi.yml type: openapi workflows: - workflowId: core-conformance summary: eth_chainId, then eth_blockNumber, then eth_getBlockByNumber at that height. description: The three highest-served core methods, chained so each step consumes the previous one's output. inputs: type: object properties: {} steps: - stepId: chainId description: eth_chainId — identify which chain answered. operationId: $sourceDescriptions.profile.jsonRpcCall requestBody: contentType: application/json payload: jsonrpc: '2.0' id: 1 method: eth_chainId params: [] successCriteria: - condition: $statusCode == 200 - context: $response.body condition: $.result type: jsonpath outputs: chainId: $response.body#/result - stepId: blockNumber description: eth_blockNumber — read the current head. operationId: $sourceDescriptions.profile.jsonRpcCall requestBody: contentType: application/json payload: jsonrpc: '2.0' id: 2 method: eth_blockNumber params: [] successCriteria: - condition: $statusCode == 200 - context: $response.body condition: $.result type: jsonpath outputs: height: $response.body#/result - stepId: getBlock description: eth_getBlockByNumber at the height the previous step returned. operationId: $sourceDescriptions.profile.jsonRpcCall requestBody: contentType: application/json payload: jsonrpc: '2.0' id: 3 method: eth_getBlockByNumber params: - $steps.blockNumber.outputs.height - false successCriteria: - condition: $statusCode == 200 - context: $response.body condition: $.result.hash type: jsonpath outputs: blockHash: $response.body#/result/hash outputs: chainId: $steps.chainId.outputs.chainId height: $steps.blockNumber.outputs.height blockHash: $steps.getBlock.outputs.blockHash