diff --git a/content/api-reference/arc/arc-api-overview.mdx b/content/api-reference/arc/arc-api-overview.mdx index 94f18a823..a8f541bc5 100644 --- a/content/api-reference/arc/arc-api-overview.mdx +++ b/content/api-reference/arc/arc-api-overview.mdx @@ -11,31 +11,36 @@ slug: docs/arc/arc-api-overview | | | | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`arc_getCertificate`](/docs/chains/arc/arc-api-endpoints/arc-get-certificate) | [`debug_executionWitness`](/docs/chains/arc/arc-api-endpoints/debug-execution-witness) | | [`eth_accounts`](/docs/chains/arc/arc-api-endpoints/eth-accounts) | [`eth_blobBaseFee`](/docs/chains/arc/arc-api-endpoints/eth-blob-base-fee) | | [`eth_blockNumber`](/docs/chains/arc/arc-api-endpoints/eth-block-number) | [`eth_call`](/docs/chains/arc/arc-api-endpoints/eth-call) | | [`eth_callBundle`](/docs/chains/arc/arc-api-endpoints/eth-call-bundle) | [`eth_callMany`](/docs/chains/arc/arc-api-endpoints/eth-call-many) | -| [`eth_chainId`](/docs/chains/arc/arc-api-endpoints/eth-chain-id) | [`eth_createAccessList`](/docs/chains/arc/arc-api-endpoints/eth-create-access-list) | -| [`eth_estimateGas`](/docs/chains/arc/arc-api-endpoints/eth-estimate-gas) | [`eth_feeHistory`](/docs/chains/arc/arc-api-endpoints/eth-fee-history) | +| [`eth_chainId`](/docs/chains/arc/arc-api-endpoints/eth-chain-id) | [`eth_config`](/docs/chains/arc/arc-api-endpoints/eth-config) | +| [`eth_createAccessList`](/docs/chains/arc/arc-api-endpoints/eth-create-access-list) | [`eth_estimateGas`](/docs/chains/arc/arc-api-endpoints/eth-estimate-gas) | +| [`eth_feeHistory`](/docs/chains/arc/arc-api-endpoints/eth-fee-history) | [`eth_fillTransaction`](/docs/chains/arc/arc-api-endpoints/eth-fill-transaction) | | [`eth_gasPrice`](/docs/chains/arc/arc-api-endpoints/eth-gas-price) | [`eth_getAccount`](/docs/chains/arc/arc-api-endpoints/eth-get-account) | | [`eth_getAccountInfo`](/docs/chains/arc/arc-api-endpoints/eth-get-account-info) | [`eth_getBalance`](/docs/chains/arc/arc-api-endpoints/eth-get-balance) | | [`eth_getBlockByHash`](/docs/chains/arc/arc-api-endpoints/eth-get-block-by-hash) | [`eth_getBlockByNumber`](/docs/chains/arc/arc-api-endpoints/eth-get-block-by-number) | | [`eth_getBlockReceipts`](/docs/chains/arc/arc-api-endpoints/eth-get-block-receipts) | [`eth_getBlockTransactionCountByHash`](/docs/chains/arc/arc-api-endpoints/eth-get-block-transaction-count-by-hash) | | [`eth_getBlockTransactionCountByNumber`](/docs/chains/arc/arc-api-endpoints/eth-get-block-transaction-count-by-number) | [`eth_getCode`](/docs/chains/arc/arc-api-endpoints/eth-get-code) | | [`eth_getFilterChanges`](/docs/chains/arc/arc-api-endpoints/eth-get-filter-changes) | [`eth_getFilterLogs`](/docs/chains/arc/arc-api-endpoints/eth-get-filter-logs) | +| [`eth_getHeaderByHash`](/docs/chains/arc/arc-api-endpoints/eth-get-header-by-hash) | [`eth_getHeaderByNumber`](/docs/chains/arc/arc-api-endpoints/eth-get-header-by-number) | | [`eth_getLogs`](/docs/chains/arc/arc-api-endpoints/eth-get-logs) | [`eth_getProof`](/docs/chains/arc/arc-api-endpoints/eth-get-proof) | | [`eth_getRawTransactionByHash`](/docs/chains/arc/arc-api-endpoints/eth-get-raw-transaction-by-hash) | [`eth_getStorageAt`](/docs/chains/arc/arc-api-endpoints/eth-get-storage-at) | | [`eth_getTransactionByBlockHashAndIndex`](/docs/chains/arc/arc-api-endpoints/eth-get-transaction-by-block-hash-and-index) | [`eth_getTransactionByBlockNumberAndIndex`](/docs/chains/arc/arc-api-endpoints/eth-get-transaction-by-block-number-and-index) | -| [`eth_getTransactionByHash`](/docs/chains/arc/arc-api-endpoints/eth-get-transaction-by-hash) | [`eth_getTransactionCount`](/docs/chains/arc/arc-api-endpoints/eth-get-transaction-count) | -| [`eth_getTransactionReceipt`](/docs/chains/arc/arc-api-endpoints/eth-get-transaction-receipt) | [`eth_getUncleByBlockHashAndIndex`](/docs/chains/arc/arc-api-endpoints/eth-get-uncle-by-block-hash-and-index) | -| [`eth_getUncleByBlockNumberAndIndex`](/docs/chains/arc/arc-api-endpoints/eth-get-uncle-by-block-number-and-index) | [`eth_getUncleCountByBlockHash`](/docs/chains/arc/arc-api-endpoints/eth-get-uncle-count-by-block-hash) | -| [`eth_getUncleCountByBlockNumber`](/docs/chains/arc/arc-api-endpoints/eth-get-uncle-count-by-block-number) | [`eth_maxPriorityFeePerGas`](/docs/chains/arc/arc-api-endpoints/eth-max-priority-fee-per-gas) | -| [`eth_newBlockFilter`](/docs/chains/arc/arc-api-endpoints/eth-new-block-filter) | [`eth_newFilter`](/docs/chains/arc/arc-api-endpoints/eth-new-filter) | -| [`eth_newPendingTransactionFilter`](/docs/chains/arc/arc-api-endpoints/eth-new-pending-transaction-filter) | [`eth_protocolVersion`](/docs/chains/arc/arc-api-endpoints/eth-protocol-version) | -| [`eth_sendRawTransaction`](/docs/chains/arc/arc-api-endpoints/eth-send-raw-transaction) | [`eth_sendRawTransactionSync`](/docs/chains/arc/arc-api-endpoints/eth-send-raw-transaction-sync) | -| [`eth_simulateV1`](/docs/chains/arc/arc-api-endpoints/eth-simulate-v-1) | [`eth_submitWork`](/docs/chains/arc/arc-api-endpoints/eth-submit-work) | -| [`eth_subscribe`](/docs/chains/arc/arc-api-endpoints/eth-subscribe) | [`eth_syncing`](/docs/chains/arc/arc-api-endpoints/eth-syncing) | -| [`eth_uninstallFilter`](/docs/chains/arc/arc-api-endpoints/eth-uninstall-filter) | [`eth_unsubscribe`](/docs/chains/arc/arc-api-endpoints/eth-unsubscribe) | -| [`net_version`](/docs/chains/arc/arc-api-endpoints/net-version) | [`web3_clientVersion`](/docs/chains/arc/arc-api-endpoints/web-3-client-version) | +| [`eth_getTransactionByHash`](/docs/chains/arc/arc-api-endpoints/eth-get-transaction-by-hash) | [`eth_getTransactionBySenderAndNonce`](/docs/chains/arc/arc-api-endpoints/eth-get-transaction-by-sender-and-nonce) | +| [`eth_getTransactionCount`](/docs/chains/arc/arc-api-endpoints/eth-get-transaction-count) | [`eth_getTransactionReceipt`](/docs/chains/arc/arc-api-endpoints/eth-get-transaction-receipt) | +| [`eth_getUncleByBlockHashAndIndex`](/docs/chains/arc/arc-api-endpoints/eth-get-uncle-by-block-hash-and-index) | [`eth_getUncleByBlockNumberAndIndex`](/docs/chains/arc/arc-api-endpoints/eth-get-uncle-by-block-number-and-index) | +| [`eth_getUncleCountByBlockHash`](/docs/chains/arc/arc-api-endpoints/eth-get-uncle-count-by-block-hash) | [`eth_getUncleCountByBlockNumber`](/docs/chains/arc/arc-api-endpoints/eth-get-uncle-count-by-block-number) | +| [`eth_maxPriorityFeePerGas`](/docs/chains/arc/arc-api-endpoints/eth-max-priority-fee-per-gas) | [`eth_newBlockFilter`](/docs/chains/arc/arc-api-endpoints/eth-new-block-filter) | +| [`eth_newFilter`](/docs/chains/arc/arc-api-endpoints/eth-new-filter) | [`eth_newPendingTransactionFilter`](/docs/chains/arc/arc-api-endpoints/eth-new-pending-transaction-filter) | +| [`eth_protocolVersion`](/docs/chains/arc/arc-api-endpoints/eth-protocol-version) | [`eth_sendRawTransaction`](/docs/chains/arc/arc-api-endpoints/eth-send-raw-transaction) | +| [`eth_sendRawTransactionSync`](/docs/chains/arc/arc-api-endpoints/eth-send-raw-transaction-sync) | [`eth_simulateV1`](/docs/chains/arc/arc-api-endpoints/eth-simulate-v-1) | +| [`eth_submitWork`](/docs/chains/arc/arc-api-endpoints/eth-submit-work) | [`eth_subscribe`](/docs/chains/arc/arc-api-endpoints/eth-subscribe) | +| [`eth_syncing`](/docs/chains/arc/arc-api-endpoints/eth-syncing) | [`eth_uninstallFilter`](/docs/chains/arc/arc-api-endpoints/eth-uninstall-filter) | +| [`eth_unsubscribe`](/docs/chains/arc/arc-api-endpoints/eth-unsubscribe) | [`net_listening`](/docs/chains/arc/arc-api-endpoints/net-listening) | +| [`net_peerCount`](/docs/chains/arc/arc-api-endpoints/net-peer-count) | [`net_version`](/docs/chains/arc/arc-api-endpoints/net-version) | +| [`txpool_content`](/docs/chains/arc/arc-api-endpoints/txpool-content) | [`web3_clientVersion`](/docs/chains/arc/arc-api-endpoints/web-3-client-version) | | [`web3_sha3`](/docs/chains/arc/arc-api-endpoints/web-3-sha-3) | | ## Related APIs diff --git a/src/openrpc/chains/_components/custom/methods.yaml b/src/openrpc/chains/_components/custom/methods.yaml index 50efb59e1..3a29c9569 100644 --- a/src/openrpc/chains/_components/custom/methods.yaml +++ b/src/openrpc/chains/_components/custom/methods.yaml @@ -1,6 +1,117 @@ # These methods are only supported by specific chains/networks components: methods: + # Arc methods + # (Arc's Malachite BFT consensus layer surfaces a custom `arc_` JSON-RPC + # namespace alongside the standard `eth_*` methods.) + arc_getCertificate: + name: arc_getCertificate + summary: Returns the Malachite BFT commit certificate for a finalized Arc block at the given height. + description: >- + Returns the Malachite BFT commit certificate for a finalized block on + Arc. The certificate contains the consensus round, the finalized block + hash, and the base64-encoded validator signatures that decided the + block. It is produced by Arc's Malachite consensus layer and is only + available for blocks that have already been finalized. + + + Because Arc has deterministic finality on inclusion, once a certificate + exists for a given height it is immutable and safe to cache + indefinitely. + + + See the [Arc node RPC reference](https://docs.arc.io/arc/tutorials/run-an-arc-node) + for background on the `arc` namespace. + x-compute-units: 20 + params: + - name: Block height + required: true + description: >- + The block height to fetch the certificate for. Accepts either a + decimal integer (for example `7`) or a hex-encoded quantity + string (for example `"0x7"`). Must be greater than or equal to + `1`. + schema: + oneOf: + - title: Block height (decimal) + type: integer + minimum: 1 + - title: Block height (hex quantity) + type: string + pattern: "^0[xX][0-9a-fA-F]+$" + result: + name: Commit certificate + description: The commit certificate for the requested block height. + schema: + title: Commit certificate + type: object + required: + - height + - round + - block_hash + - signatures + properties: + height: + title: Block height + description: The block height this certificate finalizes. + type: integer + minimum: 1 + round: + title: Consensus round + description: The Malachite consensus round in which the block was decided. + type: integer + minimum: 0 + block_hash: + title: Block hash + description: The 32-byte hash of the block finalized at this height. + type: string + pattern: "^0x[0-9a-fA-F]{64}$" + signatures: + title: Validator signatures + description: One entry per validator that signed the commit certificate. + type: array + items: + title: Validator signature + type: object + required: + - address + - signature + properties: + address: + title: Validator address + description: The 20-byte validator address. + type: string + pattern: "^0x[0-9a-fA-F]{40}$" + signature: + title: Signature + description: >- + Standard padded Base64 encoding of the 64-byte + validator signature. + type: string + examples: + - name: arc_getCertificate example + params: + - name: Block height + value: "0x7" + result: + name: Commit certificate + value: + height: 7 + round: 0 + block_hash: "0x751ccaee8df96f648c9ab00121a4ac1a1bcafc0c8e8cb0d205c67346edb37af2" + signatures: + - address: "0x602930d1ab44f1744f42e842b701c2b149c5da4f" + signature: "K3SKb2xKYGWLZ9eMIXtXYckACgU6AaOVwmymD4nIVT6GXvQ9UylllQpSWhTZfuV7oDjo75ynruLh4xHv++jQBA==" + - address: "0x6791e002c8419e8a2fa5266e2951ed1780bc2295" + signature: "uNmquXJkx+4NyNnkLUnnRY+1ZZygb5drQbh9ya50oW0z0H9HS21R7PyueayfHoADnJT9DqbDF+D8KECLmy3+Cw==" + - address: "0x2e78053671f707844a631bc907d4855894848fe3" + signature: "2/52ncq8uRzHMiBiVxTFk10BzEq9InHfHckBu/qK9fomDNmgOPSuwWURu49EGPDti7Q60If4n7/Qt3dLa2N7CQ==" + errors: + - code: -32004 + message: Certificate not found + - code: -32602 + message: Invalid params (height must be >= 1) + # EVM Methods # Block methods eth_getUncleCountByBlockHash: diff --git a/src/openrpc/chains/arc/arc.yaml b/src/openrpc/chains/arc/arc.yaml index e6c2dfd71..b5a4a760f 100644 --- a/src/openrpc/chains/arc/arc.yaml +++ b/src/openrpc/chains/arc/arc.yaml @@ -10,17 +10,27 @@ servers: - url: https://arc-testnet.g.alchemy.com/v2 name: Arc Testnet methods: + - $ref: ../_components/custom/methods.yaml#/components/methods/arc_getCertificate + - $ref: >- + ../_components/custom/methods.yaml#/components/methods/debug_executionWitness - $ref: ../_components/custom/methods.yaml#/components/methods/eth_accounts - $ref: ../_components/custom/methods.yaml#/components/methods/eth_blobBaseFee - $ref: ../_components/custom/methods.yaml#/components/methods/eth_callBundle - $ref: ../_components/custom/methods.yaml#/components/methods/eth_callMany + - $ref: ../_components/custom/methods.yaml#/components/methods/eth_config - $ref: >- ../_components/custom/methods.yaml#/components/methods/eth_createAccessList - $ref: ../_components/custom/methods.yaml#/components/methods/eth_feeHistory + - $ref: ../_components/custom/methods.yaml#/components/methods/eth_fillTransaction - $ref: ../_components/custom/methods.yaml#/components/methods/eth_getAccountInfo - $ref: >- ../_components/custom/methods.yaml#/components/methods/eth_getBlockReceipts + - $ref: ../_components/custom/methods.yaml#/components/methods/eth_getHeaderByHash + - $ref: >- + ../_components/custom/methods.yaml#/components/methods/eth_getHeaderByNumber - $ref: ../_components/custom/methods.yaml#/components/methods/eth_getProof + - $ref: >- + ../_components/custom/methods.yaml#/components/methods/eth_getTransactionBySenderAndNonce - $ref: >- ../_components/custom/methods.yaml#/components/methods/eth_getUncleByBlockHashAndIndex - $ref: >- @@ -38,6 +48,9 @@ methods: ../_components/custom/methods.yaml#/components/methods/eth_sendRawTransactionSync - $ref: ../_components/custom/methods.yaml#/components/methods/eth_simulateV1 - $ref: ../_components/custom/methods.yaml#/components/methods/eth_syncing + - $ref: ../_components/custom/methods.yaml#/components/methods/net_listening + - $ref: ../_components/custom/methods.yaml#/components/methods/net_peerCount + - $ref: ../_components/custom/methods.yaml#/components/methods/txpool_content - $ref: ../_components/evm/methods.yaml#/components/methods/eth_blockNumber - $ref: ../_components/evm/methods.yaml#/components/methods/eth_call - $ref: ../_components/evm/methods.yaml#/components/methods/eth_chainId