pub(crate) const V2_OPENAPI: &str = "{\n \"components\": {\n \"schemas\": {\n \"AdvzCommon\": {\n \"description\": \"Parameters of the legacy ADVZ scheme, with the two commitments exactly as v1 renders them\",\n \"properties\": {\n \"allEvalsDigest\": {\n \"description\": \"TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"multiplicity\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"numStorageNodes\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"payloadByteLen\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"polyCommits\": {\n \"description\": \"KZG commitments to the payload polynomials, all in one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"AdvzMerkleNode\": {\n \"description\": \"One node of a jellyfish Merkle proof. v1 spells the third arm `ForgettenSubtree`, which is\\nupstream\'s misspelling; only the wire name here is corrected.\",\n \"properties\": {\n \"branch\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AdvzMerkleNodeBranch\"\n }\n ],\n \"description\": \"Member of oneof `node`.\"\n },\n \"empty\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AdvzMerkleNodeEmpty\"\n }\n ],\n \"description\": \"Member of oneof `node`.\"\n },\n \"forgottenSubtree\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AdvzMerkleNodeForgottenSubtree\"\n }\n ],\n \"description\": \"Member of oneof `node`.\"\n },\n \"leaf\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AdvzMerkleNodeLeaf\"\n }\n ],\n \"description\": \"Member of oneof `node`.\"\n }\n },\n \"type\": \"object\"\n },\n \"AdvzMerkleNodeBranch\": {\n \"properties\": {\n \"children\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/AdvzMerkleNode\"\n },\n \"type\": \"array\"\n },\n \"value\": {\n \"description\": \"The branch\'s hash, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"AdvzMerkleNodeEmpty\": {\n \"description\": \"A missing subtree. The arm is present and its object empty\",\n \"properties\": {},\n \"type\": \"object\"\n },\n \"AdvzMerkleNodeForgottenSubtree\": {\n \"properties\": {\n \"value\": {\n \"description\": \"The subtree\'s hash, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"AdvzMerkleNodeLeaf\": {\n \"properties\": {\n \"elem\": {\n \"description\": \"The leaf element, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"pos\": {\n \"description\": \"The leaf\'s index, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"value\": {\n \"description\": \"The leaf\'s hash, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"AdvzMerkleProof\": {\n \"properties\": {\n \"pos\": {\n \"description\": \"The index this proof is for, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"proof\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/AdvzMerkleNode\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"AdvzNsProof\": {\n \"description\": \"Legacy ADVZ namespace proof\",\n \"properties\": {\n \"nsIndex\": {\n \"description\": \"Position of the namespace in the namespace table, 4 bytes\",\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"nsPayload\": {\n \"description\": \"The namespace\'s bytes, base64 in JSON\",\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"nsProof\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/LargeRangeProof\"\n }\n ],\n \"description\": \"Absent when the namespace is empty\"\n }\n },\n \"type\": \"object\"\n },\n \"AdvzTxProof\": {\n \"description\": \"Legacy ADVZ inclusion proof, with the index and table entries in v1\'s byte encodings\",\n \"properties\": {\n \"payloadNumTxs\": {\n \"description\": \"Transaction count of the namespace, in its payload byte encoding\",\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"payloadProofNumTxs\": {\n \"$ref\": \"#/components/schemas/SmallRangeProof\"\n },\n \"payloadProofTx\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/SmallRangeProof\"\n }\n ],\n \"description\": \"Absent when the transaction is empty\"\n },\n \"payloadProofTxTableEntries\": {\n \"$ref\": \"#/components/schemas/SmallRangeProof\"\n },\n \"payloadTxTableEntries\": {\n \"description\": \"The transaction\'s table entries, in their payload byte encoding\",\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"txIndex\": {\n \"description\": \"Position of the transaction in its namespace, 4 bytes\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"AdvzVidShare\": {\n \"description\": \"Legacy ADVZ share, which only a 0.1 or 0.2 block carries\",\n \"properties\": {\n \"aggregateProofs\": {\n \"description\": \"ark-serialized, one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"evals\": {\n \"description\": \"ark-serialized, one TaggedBase64 `FIELD~`. jf-advz documents this as carrying nothing\\nmeaningful; it is served for v1 parity\",\n \"type\": \"string\"\n },\n \"evalsProof\": {\n \"$ref\": \"#/components/schemas/AdvzMerkleProof\"\n },\n \"index\": {\n \"description\": \"Which storage node\'s share this is\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n },\n \"ApiModules\": {\n \"description\": \"Which API modules the node serves. A module that is off answers 404 for every route it owns,\\nso a client can tell a disabled module from a missing one\",\n \"properties\": {\n \"catchup\": {\n \"type\": \"boolean\"\n },\n \"config\": {\n \"type\": \"boolean\"\n },\n \"explorer\": {\n \"type\": \"boolean\"\n },\n \"hotshotEvents\": {\n \"type\": \"boolean\"\n },\n \"http\": {\n \"$ref\": \"#/components/schemas/HttpModule\"\n },\n \"lightClient\": {\n \"type\": \"boolean\"\n },\n \"query\": {\n \"$ref\": \"#/components/schemas/QueryModule\"\n },\n \"status\": {\n \"type\": \"boolean\"\n },\n \"submit\": {\n \"type\": \"boolean\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmBadEncodingNsProof\": {\n \"properties\": {\n \"nsCommit\": {\n \"description\": \"Commitment the shares were checked against, TaggedBase64 `AvidMCommit~`\",\n \"type\": \"string\"\n },\n \"nsIndex\": {\n \"description\": \"Position of the namespace in the namespace table\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"nsMtProof\": {\n \"description\": \"Proof of the namespace commitment in the payload commitment, TaggedBase64 `MERKLE_PROOF~`\",\n \"type\": \"string\"\n },\n \"nsProof\": {\n \"$ref\": \"#/components/schemas/AvidmBadEncodingProof\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmBadEncodingProof\": {\n \"description\": \"Evidence that an AvidM disperser encoded a namespace incorrectly: the polynomial recovered from\\nthe shares, and the shares\' Merkle proofs against the commitment that does not match it\",\n \"properties\": {\n \"rawShares\": {\n \"description\": \"(share index, Merkle proof) pairs, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"recoveredPoly\": {\n \"description\": \"Field elements, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmCommon\": {\n \"description\": \"The two AvidM schemes\' parameters and transaction proofs have the same shape today but are\\nseparate messages, since the field numbers freeze per scheme and the schemes are versioned\\nindependently\",\n \"properties\": {\n \"recoveryThreshold\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"totalWeights\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmGf2Common\": {\n \"properties\": {\n \"nsCommits\": {\n \"description\": \"One commitment per namespace, TaggedBase64 `AvidmGf2Commit~`\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"nsLens\": {\n \"description\": \"Payload bytes per namespace, aligned with ns_commits\",\n \"items\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"param\": {\n \"$ref\": \"#/components/schemas/AvidmGf2Param\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmGf2Namespace\": {\n \"properties\": {\n \"mtProofs\": {\n \"description\": \"One `MERKLE_PROOF~` TaggedBase64 per shard\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"payload\": {\n \"description\": \"One entry per shard in the range, each the shard\'s raw bytes. Base64 in JSON, where v1\\nserved an array of numbers\",\n \"items\": {\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"range\": {\n \"$ref\": \"#/components/schemas/ShardRange\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmGf2Param\": {\n \"properties\": {\n \"recoveryThreshold\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"totalWeights\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmGf2TxProof\": {\n \"properties\": {\n \"nsProof\": {\n \"$ref\": \"#/components/schemas/NsProofPayload\"\n },\n \"txIndex\": {\n \"description\": \"Position of the transaction in its namespace, 4 bytes\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmGf2VidShare\": {\n \"properties\": {\n \"namespaces\": {\n \"description\": \"One entry per namespace of the block\",\n \"items\": {\n \"$ref\": \"#/components/schemas/AvidmGf2Namespace\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmShareContent\": {\n \"properties\": {\n \"mtProofs\": {\n \"description\": \"The share\'s Merkle proofs, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"payload\": {\n \"description\": \"The share\'s field elements, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"range\": {\n \"$ref\": \"#/components/schemas/ShardRange\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmTxProof\": {\n \"properties\": {\n \"nsProof\": {\n \"$ref\": \"#/components/schemas/NsProofPayload\"\n },\n \"txIndex\": {\n \"description\": \"Position of the transaction in its namespace, 4 bytes\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"AvidmVidShare\": {\n \"description\": \"Both AvidM schemes disperse per namespace, so a share carries one entry per namespace of the\\nblock rather than one for the whole payload. The per-namespace lists line up only for a share\\nthat passed VID verification, which this endpoint does not repeat.\",\n \"properties\": {\n \"content\": {\n \"description\": \"One entry per namespace, aligned with ns_commits\",\n \"items\": {\n \"$ref\": \"#/components/schemas/AvidmShareContent\"\n },\n \"type\": \"array\"\n },\n \"index\": {\n \"description\": \"Which storage node\'s share this is\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"nsCommits\": {\n \"description\": \"TaggedBase64 `AvidMCommit~`, one per namespace\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"nsLens\": {\n \"description\": \"Payload bytes in each namespace, aligned with ns_commits\",\n \"items\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"BLSPublicKey\": {\n \"properties\": {\n \"key\": {\n \"description\": \"TaggedBase64, e.g. \\\"BLS_VER_KEY~AAA...\\\"\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"BlockHeightResponse\": {\n \"properties\": {\n \"height\": {\n \"description\": \"Height of the latest decided block\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"BlockRangeResponse\": {\n \"properties\": {\n \"blocks\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/BlockResponse\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"BlockResponse\": {\n \"properties\": {\n \"hash\": {\n \"description\": \"Hash of the header, which is how a block is identified. TaggedBase64 `BLOCK~`\",\n \"type\": \"string\"\n },\n \"header\": {\n \"$ref\": \"#/components/schemas/HeaderResponse\"\n },\n \"numTransactions\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"payload\": {\n \"$ref\": \"#/components/schemas/Payload\"\n },\n \"size\": {\n \"description\": \"Payload size in bytes\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"BlockRewardResponse\": {\n \"properties\": {\n \"amount\": {\n \"description\": \"Reward distributed per block, in wei (decimal string); absent when the node does not know\\na reward for the epoch\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"BlockSummaryRangeResponse\": {\n \"properties\": {\n \"summaries\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/BlockSummaryResponse\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"BlockSummaryResponse\": {\n \"properties\": {\n \"hash\": {\n \"description\": \"TaggedBase64 `BLOCK~`\",\n \"type\": \"string\"\n },\n \"header\": {\n \"$ref\": \"#/components/schemas/HeaderResponse\"\n },\n \"namespaces\": {\n \"additionalProperties\": {\n \"$ref\": \"#/components/schemas/NamespaceInfo\"\n },\n \"description\": \"Per-namespace transaction count and byte size, keyed by namespace id. A namespace with no\\ntransactions in this block is absent\",\n \"type\": \"object\"\n },\n \"numTransactions\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"size\": {\n \"description\": \"Payload size in bytes\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"Bn254G1Point\": {\n \"description\": \"Coordinates are `0x`-prefixed hex, as v1 serves them\",\n \"properties\": {\n \"x\": {\n \"type\": \"string\"\n },\n \"y\": {\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"Bn254G2Point\": {\n \"description\": \"Coordinates are `0x`-prefixed hex, as v1 serves them\",\n \"properties\": {\n \"x0\": {\n \"type\": \"string\"\n },\n \"x1\": {\n \"type\": \"string\"\n },\n \"y0\": {\n \"type\": \"string\"\n },\n \"y1\": {\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"BuilderSignature\": {\n \"properties\": {\n \"r\": {\n \"description\": \"0x-prefixed hex quantity, so shorter than 64 digits when it has leading zeros\",\n \"type\": \"string\"\n },\n \"s\": {\n \"description\": \"0x-prefixed hex quantity, so shorter than 64 digits when it has leading zeros\",\n \"type\": \"string\"\n },\n \"v\": {\n \"description\": \"Recovery id, 27 or 28\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n },\n \"BuilderType\": {\n \"description\": \"- `BUILDER_TYPE_EXTERNAL`: Blocks come from the builders at `builder_urls`\\n- `BUILDER_TYPE_SIMPLE`: Each node runs its own builder\\n- `BUILDER_TYPE_RANDOM`: Each node runs a builder that produces random transactions\",\n \"enum\": [\n \"BUILDER_TYPE_UNSPECIFIED\",\n \"BUILDER_TYPE_EXTERNAL\",\n \"BUILDER_TYPE_SIMPLE\",\n \"BUILDER_TYPE_RANDOM\"\n ],\n \"type\": \"string\"\n },\n \"CatchupChainConfigResponse\": {\n \"properties\": {\n \"chainConfig\": {\n \"$ref\": \"#/components/schemas/ChainConfig\"\n }\n },\n \"type\": \"object\"\n },\n \"CatchupLeafChainResponse\": {\n \"properties\": {\n \"leaves\": {\n \"description\": \"Oldest first, as v1 orders them\",\n \"items\": {\n \"$ref\": \"#/components/schemas/Leaf2\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"Cert2Response\": {\n \"properties\": {\n \"certificate\": {\n \"$ref\": \"#/components/schemas/Certificate2\"\n }\n },\n \"type\": \"object\"\n },\n \"Certificate2\": {\n \"description\": \"The new protocol\'s phase-2 certificate, which finalizes a leaf\",\n \"properties\": {\n \"data\": {\n \"$ref\": \"#/components/schemas/Vote2Data\"\n },\n \"signatures\": {\n \"$ref\": \"#/components/schemas/QuorumSignatures\"\n },\n \"viewNumber\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"voteCommitment\": {\n \"description\": \"TaggedBase64 `COMMIT~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"CertificatePair\": {\n \"description\": \"A QC, paired with the next epoch\'s QC for the same leaf when the leaf hands over an epoch\",\n \"properties\": {\n \"nextEpochQc\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/QuorumCertificate2\"\n }\n ],\n \"description\": \"Only on a leaf that hands over an epoch\"\n },\n \"qc\": {\n \"$ref\": \"#/components/schemas/QuorumCertificate2\"\n }\n },\n \"type\": \"object\"\n },\n \"ChainConfig\": {\n \"properties\": {\n \"baseFee\": {\n \"description\": \"Smallest fee in wei per payload byte. A 256-bit number, so a decimal string\",\n \"type\": \"string\"\n },\n \"chainId\": {\n \"description\": \"Espresso chain ID. A 256-bit number, so a decimal string rather than an integer\",\n \"type\": \"string\"\n },\n \"feeContract\": {\n \"description\": \"L1 fee contract, absent while fees are switched off, so that turning them off needs no\\ndeployment\",\n \"type\": \"string\"\n },\n \"feeRecipient\": {\n \"description\": \"Account credited with every sequencing fee, whether or not a fee contract is deployed\",\n \"type\": \"string\"\n },\n \"maxBlockSize\": {\n \"description\": \"Largest block payload in bytes\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"stakeTableContract\": {\n \"description\": \"L1 stake table proxy, absent while proof of stake is switched off, so that turning it off\\nneeds no deployment, and always absent on a 0.1 or 0.2 header, whose chain config predates\\nthe field\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"CirculatingSupplyEthereumResponse\": {\n \"properties\": {\n \"amount\": {\n \"description\": \"Circulating supply of ESP tokens on Ethereum L1, in ESP (decimal string):\\ntotal_supply_l1 - locked\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"CirculatingSupplyResponse\": {\n \"properties\": {\n \"amount\": {\n \"description\": \"Circulating supply in ESP (decimal string): initial_supply + reward_distributed -\\nlocked, following the mainnet unlock schedule\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"CombinedNetworkConfig\": {\n \"deprecated\": true,\n \"description\": \"Never served: kept so `combined_network_config` keeps its type\",\n \"properties\": {\n \"delayDurationMs\": {\n \"description\": \"Wait before a message also goes out over the secondary network\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"CommissionUpdated\": {\n \"properties\": {\n \"newCommission\": {\n \"description\": \"In basis points\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"oldCommission\": {\n \"description\": \"In basis points\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"timestamp\": {\n \"description\": \"Unix timestamp in seconds, as a decimal string\",\n \"type\": \"string\"\n },\n \"validator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ConsensusKeysUpdated\": {\n \"properties\": {\n \"account\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"blsVk\": {\n \"$ref\": \"#/components/schemas/Bn254G2Point\"\n },\n \"schnorrVk\": {\n \"$ref\": \"#/components/schemas/EdOnBn254Point\"\n }\n },\n \"type\": \"object\"\n },\n \"ConsensusKeysUpdatedV2\": {\n \"properties\": {\n \"account\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"blsSig\": {\n \"$ref\": \"#/components/schemas/Bn254G1Point\"\n },\n \"blsVk\": {\n \"$ref\": \"#/components/schemas/Bn254G2Point\"\n },\n \"schnorrSig\": {\n \"description\": \"The signature bytes the contract event carries, base64 in JSON, not TaggedBase64\",\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"schnorrVk\": {\n \"$ref\": \"#/components/schemas/EdOnBn254Point\"\n }\n },\n \"type\": \"object\"\n },\n \"ConsensusPruningConfig\": {\n \"description\": \"Retention policy for consensus storage\",\n \"properties\": {\n \"minimumRetention\": {\n \"description\": \"Views\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"targetRetention\": {\n \"description\": \"Views\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"targetUsage\": {\n \"description\": \"Bytes retained before garbage collection gets more aggressive\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"Delegated\": {\n \"properties\": {\n \"amount\": {\n \"description\": \"In wei, as a decimal string\",\n \"type\": \"string\"\n },\n \"delegator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"validator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"Delegator\": {\n \"properties\": {\n \"account\": {\n \"description\": \"0x-prefixed hex\",\n \"type\": \"string\"\n },\n \"amount\": {\n \"description\": \"0x-prefixed hex quantity\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"EdOnBn254Point\": {\n \"description\": \"Coordinates are `0x`-prefixed hex, as v1 serves them\",\n \"properties\": {\n \"x\": {\n \"type\": \"string\"\n },\n \"y\": {\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"EnvResponse\": {\n \"properties\": {\n \"variables\": {\n \"description\": \"Only the variables the node\'s public-env-vars.toml allowlists\",\n \"items\": {\n \"$ref\": \"#/components/schemas/EnvVar\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"EnvVar\": {\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"value\": {\n \"description\": \"Empty when unset or set to the empty string, which are not distinguished\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"Error\": {\n \"description\": \"Error response following the Google API error model\",\n \"properties\": {\n \"error\": {\n \"properties\": {\n \"code\": {\n \"description\": \"HTTP status code\",\n \"type\": \"integer\"\n },\n \"message\": {\n \"type\": \"string\"\n },\n \"status\": {\n \"description\": \"gRPC status name, e.g. NOT_FOUND\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerBlockDetail\": {\n \"description\": \"A block the explorer describes in full\",\n \"properties\": {\n \"blockReward\": {\n \"description\": \"Amounts with their currency code, separated by a non-breaking space (U+00A0), e.g.\\n\\\"ETH\u{a0}0.000000000000000455\\\" as JSON writes it\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"feeRecipient\": {\n \"description\": \"The builder fee accounts of the block, 0x-prefixed hex\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"hash\": {\n \"description\": \"TaggedBase64 `BLOCK~`\",\n \"type\": \"string\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"numTransactions\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"proposerId\": {\n \"description\": \"The builder fee accounts of the block, 0x-prefixed hex\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"size\": {\n \"description\": \"Block size in bytes\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"time\": {\n \"description\": \"RFC 3339 timestamp\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerBlockDetailResponse\": {\n \"properties\": {\n \"blockDetail\": {\n \"$ref\": \"#/components/schemas/ExplorerBlockDetail\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerBlockSummariesResponse\": {\n \"properties\": {\n \"blockSummaries\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/ExplorerBlockSummary\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerBlockSummary\": {\n \"description\": \"A block as it appears in a list, without the fee recipient or the reward\",\n \"properties\": {\n \"hash\": {\n \"description\": \"TaggedBase64 `BLOCK~`\",\n \"type\": \"string\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"numTransactions\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"proposerId\": {\n \"description\": \"The builder fee accounts of the block, 0x-prefixed hex\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"size\": {\n \"description\": \"Block size in bytes\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"time\": {\n \"description\": \"RFC 3339 timestamp\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerFeeAttribution\": {\n \"description\": \"Fees attributed to one layer, such as the sequencer or the DA layer\",\n \"properties\": {\n \"fees\": {\n \"description\": \"Amounts with their currency code, separated by a non-breaking space (U+00A0)\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"target\": {\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerGenesisOverview\": {\n \"properties\": {\n \"blocks\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"rollups\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"transactions\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerHistogramPoint\": {\n \"description\": \"One block\'s point in the explorer\'s histograms\",\n \"properties\": {\n \"blockSize\": {\n \"description\": \"Block size in bytes, absent when the block was not resolved\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"blockTime\": {\n \"description\": \"Seconds since the previous block, absent for the genesis block\",\n \"type\": \"number\"\n },\n \"blockTransactions\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerSearchResponse\": {\n \"properties\": {\n \"blocks\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/ExplorerBlockSummary\"\n },\n \"type\": \"array\"\n },\n \"transactions\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/ExplorerTransactionSummary\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerSummaryResponse\": {\n \"properties\": {\n \"genesisOverview\": {\n \"$ref\": \"#/components/schemas/ExplorerGenesisOverview\"\n },\n \"histograms\": {\n \"description\": \"Oldest first\",\n \"items\": {\n \"$ref\": \"#/components/schemas/ExplorerHistogramPoint\"\n },\n \"type\": \"array\"\n },\n \"latestBlock\": {\n \"$ref\": \"#/components/schemas/ExplorerBlockDetail\"\n },\n \"latestBlocks\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/ExplorerBlockSummary\"\n },\n \"type\": \"array\"\n },\n \"latestTransactions\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/ExplorerTransactionSummary\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerTransactionDetail\": {\n \"properties\": {\n \"blockConfirmed\": {\n \"type\": \"boolean\"\n },\n \"feeDetails\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/ExplorerFeeAttribution\"\n },\n \"type\": \"array\"\n },\n \"hash\": {\n \"description\": \"TaggedBase64 `TX~`\",\n \"type\": \"string\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"numTransactions\": {\n \"description\": \"Transactions in the block this one belongs to, not in this transaction\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"offset\": {\n \"description\": \"Position of the transaction within its block\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"sequencingFees\": {\n \"description\": \"Amounts with their currency code, separated by a non-breaking space (U+00A0)\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"size\": {\n \"description\": \"Transaction size in bytes\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"time\": {\n \"description\": \"RFC 3339 timestamp\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerTransactionDetailResponse\": {\n \"properties\": {\n \"data\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/Transaction\"\n },\n \"type\": \"array\"\n },\n \"details\": {\n \"$ref\": \"#/components/schemas/ExplorerTransactionDetail\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerTransactionSummariesResponse\": {\n \"properties\": {\n \"transactionSummaries\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/ExplorerTransactionSummary\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"ExplorerTransactionSummary\": {\n \"description\": \"A transaction as it appears in a list\",\n \"properties\": {\n \"hash\": {\n \"description\": \"TaggedBase64 `TX~`\",\n \"type\": \"string\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"numTransactions\": {\n \"description\": \"Transactions in the block this one belongs to, not in this transaction\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"offset\": {\n \"description\": \"Position of the transaction within its block. Under a `namespace` filter, the position among\\nthat namespace\'s transactions in the block\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"rollups\": {\n \"description\": \"The namespace of the transaction\",\n \"items\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"time\": {\n \"description\": \"RFC 3339 timestamp\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"FeeAccountProof\": {\n \"properties\": {\n \"account\": {\n \"description\": \"Account the proof is for, lowercase `0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"proof\": {\n \"$ref\": \"#/components/schemas/FeeMerkleProof\"\n }\n },\n \"type\": \"object\"\n },\n \"FeeAccountProofResponse\": {\n \"properties\": {\n \"balance\": {\n \"description\": \"Balance in wei, as a decimal string, matching how the reward balances are served. v1 serves\\nthis one as `0x`-prefixed hex, since it is a bare `U256` there. An absent account proves a\\nzero balance, so this is `0` rather than missing\",\n \"type\": \"string\"\n },\n \"proof\": {\n \"$ref\": \"#/components/schemas/FeeAccountProof\"\n }\n },\n \"type\": \"object\"\n },\n \"FeeBalanceResponse\": {\n \"properties\": {\n \"balance\": {\n \"description\": \"Balance in wei (decimal string), zero for an account the tree holds no entry for\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"FeeInfo\": {\n \"properties\": {\n \"account\": {\n \"description\": \"Account charged for sequencing the block\",\n \"type\": \"string\"\n },\n \"amount\": {\n \"description\": \"Fee paid in wei. A 256-bit number, so a decimal string\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"FeeMerkleProof\": {\n \"description\": \"Mirrors the tree\'s own presence or absence proof. Exactly one arm is set\",\n \"properties\": {\n \"absence\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/MerklePathResponse\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n },\n \"presence\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/MerklePathResponse\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n }\n },\n \"type\": \"object\"\n },\n \"FeeMerkleTreeResponse\": {\n \"properties\": {\n \"tree\": {\n \"description\": \"bincode-serialized `FeeMerkleTree` holding only the requested accounts, base64 in JSON\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"FinalityAssumption\": {\n \"description\": \"The client already trusts the leaf at the requested finalized height, whose parent is the last\\nleaf of the chain\",\n \"properties\": {},\n \"type\": \"object\"\n },\n \"FinalityProof\": {\n \"description\": \"Evidence that the last leaf of a leaf chain is finalized. The arm names the commit rule\",\n \"properties\": {\n \"assumption\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/FinalityAssumption\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n },\n \"hotStuff\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HotStuffFinality\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n },\n \"hotStuff2\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HotStuff2Finality\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n },\n \"newProtocol\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/NewProtocolFinality\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n }\n },\n \"type\": \"object\"\n },\n \"FollowerModule\": {\n \"properties\": {\n \"maxBlocksPerPoll\": {\n \"description\": \"The most blocks ingested per poll; the query service backfills older heights\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"pollIntervalMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"FsStorage\": {\n \"properties\": {\n \"consensusViewRetention\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"path\": {\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"GetBlockRangesRequest\": {\n \"properties\": {\n \"ranges\": {\n \"description\": \"Ascending and disjoint, and together bounded by the large-object range limit\",\n \"items\": {\n \"$ref\": \"#/components/schemas/HeightRange\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"GetCatchupFeeAccountsRequest\": {\n \"properties\": {\n \"addresses\": {\n \"description\": \"Accounts to include in the returned tree, hex with an optional `0x` prefix\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"height\": {\n \"description\": \"Height the asking node is replaying. Required\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"view\": {\n \"description\": \"View the asking node is replaying. Required\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"GetCatchupRewardAccountsRequest\": {\n \"properties\": {\n \"addresses\": {\n \"description\": \"Accounts to include in the returned tree, hex with an optional `0x` prefix\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"height\": {\n \"description\": \"Height the asking node is replaying. Required\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"view\": {\n \"description\": \"View the asking node is replaying. Required\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"GetLeafRangesRequest\": {\n \"properties\": {\n \"ranges\": {\n \"description\": \"Ascending and disjoint, and together bounded by the small-object range limit\",\n \"items\": {\n \"$ref\": \"#/components/schemas/HeightRange\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"GetLightClientNamespacesProofRangeRequest\": {\n \"properties\": {\n \"from\": {\n \"description\": \"Required, the first height in the range (inclusive), below `until`\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"namespaces\": {\n \"description\": \"Namespaces to prove, each a 32-bit id, at most 100 of them after duplicates are dropped\",\n \"items\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"until\": {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"GetLightClientPayloadProofRangesRequest\": {\n \"properties\": {\n \"ranges\": {\n \"description\": \"Each non-empty, ascending and disjoint, and together bounded by the large-object range limit\",\n \"items\": {\n \"$ref\": \"#/components/schemas/HeightRange\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"GetVidCommonRangesRequest\": {\n \"properties\": {\n \"ranges\": {\n \"description\": \"Ascending and disjoint, and together bounded by the small-object range limit\",\n \"items\": {\n \"$ref\": \"#/components/schemas/HeightRange\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"HeaderRangeResponse\": {\n \"properties\": {\n \"headers\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/HeaderResponse\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"HeaderResponse\": {\n \"description\": \"The arm names the protocol version that produced the header. Versions sharing a shape share a\\nmessage: 0.2 uses the 0.1 shape and 0.6 and 0.7 the 0.5 shape\",\n \"properties\": {\n \"v1\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HeaderV1\"\n }\n ],\n \"description\": \"Member of oneof `header`.\"\n },\n \"v2\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HeaderV1\"\n }\n ],\n \"description\": \"Member of oneof `header`.\"\n },\n \"v3\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HeaderV3\"\n }\n ],\n \"description\": \"Member of oneof `header`.\"\n },\n \"v4\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HeaderV4\"\n }\n ],\n \"description\": \"Member of oneof `header`.\"\n },\n \"v5\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HeaderV5\"\n }\n ],\n \"description\": \"Member of oneof `header`.\"\n },\n \"v6\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HeaderV5\"\n }\n ],\n \"description\": \"Member of oneof `header`.\"\n },\n \"v7\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HeaderV5\"\n }\n ],\n \"description\": \"Member of oneof `header`.\"\n }\n },\n \"type\": \"object\"\n },\n \"HeaderV1\": {\n \"description\": \"The header shape introduced in protocol version 0.1, also used by 0.2\",\n \"properties\": {\n \"blockMerkleTreeRoot\": {\n \"description\": \"TaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"builderCommitment\": {\n \"description\": \"TaggedBase64 `BUILDER_COMMITMENT~`\",\n \"type\": \"string\"\n },\n \"builderSignature\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/BuilderSignature\"\n }\n ],\n \"description\": \"Evidence that fee_info is correct. Absent when the builder did not sign, and never part of\\nthe header commitment, since consensus has already checked it\"\n },\n \"chainConfig\": {\n \"$ref\": \"#/components/schemas/ResolvableChainConfig\"\n },\n \"feeInfo\": {\n \"$ref\": \"#/components/schemas/FeeInfo\"\n },\n \"feeMerkleTreeRoot\": {\n \"description\": \"TaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"l1Finalized\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/L1BlockInfo\"\n }\n ],\n \"description\": \"Latest L1 block finalized when the block was proposed, absent when none was\"\n },\n \"l1Head\": {\n \"description\": \"L1 block this header was built against\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"nsTable\": {\n \"$ref\": \"#/components/schemas/NsTable\"\n },\n \"payloadCommitment\": {\n \"description\": \"TaggedBase64 `HASH~`\",\n \"type\": \"string\"\n },\n \"timestamp\": {\n \"description\": \"Unix seconds\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"HeaderV3\": {\n \"description\": \"The header shape introduced in protocol version 0.3, which added the reward merkle tree\",\n \"properties\": {\n \"blockMerkleTreeRoot\": {\n \"description\": \"TaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"builderCommitment\": {\n \"description\": \"TaggedBase64 `BUILDER_COMMITMENT~`\",\n \"type\": \"string\"\n },\n \"builderSignature\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/BuilderSignature\"\n }\n ],\n \"description\": \"Evidence that fee_info is correct. Absent when the builder did not sign, and never part\\nof the header commitment, since consensus has already checked it\"\n },\n \"chainConfig\": {\n \"$ref\": \"#/components/schemas/ResolvableChainConfig\"\n },\n \"feeInfo\": {\n \"$ref\": \"#/components/schemas/FeeInfo\"\n },\n \"feeMerkleTreeRoot\": {\n \"description\": \"TaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"l1Finalized\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/L1BlockInfo\"\n }\n ],\n \"description\": \"Latest L1 block finalized when the block was proposed, absent when none was\"\n },\n \"l1Head\": {\n \"description\": \"L1 block this header was built against\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"nsTable\": {\n \"$ref\": \"#/components/schemas/NsTable\"\n },\n \"payloadCommitment\": {\n \"description\": \"TaggedBase64 `AvidMCommit~`\",\n \"type\": \"string\"\n },\n \"rewardMerkleTreeRoot\": {\n \"description\": \"Root of the first reward merkle tree. TaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"timestamp\": {\n \"description\": \"Unix seconds\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"HeaderV4\": {\n \"description\": \"The header shape introduced in protocol version 0.4, which moved to the second reward merkle\\ntree and added millisecond timestamps, distributed rewards and the next stake table hash\",\n \"properties\": {\n \"blockMerkleTreeRoot\": {\n \"description\": \"TaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"builderCommitment\": {\n \"description\": \"TaggedBase64 `BUILDER_COMMITMENT~`\",\n \"type\": \"string\"\n },\n \"builderSignature\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/BuilderSignature\"\n }\n ],\n \"description\": \"Evidence that fee_info is correct. Absent when the builder did not sign, and never part\\nof the header commitment, since consensus has already checked it\"\n },\n \"chainConfig\": {\n \"$ref\": \"#/components/schemas/ResolvableChainConfig\"\n },\n \"feeInfo\": {\n \"$ref\": \"#/components/schemas/FeeInfo\"\n },\n \"feeMerkleTreeRoot\": {\n \"description\": \"TaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"l1Finalized\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/L1BlockInfo\"\n }\n ],\n \"description\": \"Latest L1 block finalized when the block was proposed, absent when none was\"\n },\n \"l1Head\": {\n \"description\": \"L1 block this header was built against\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"nextStakeTableHash\": {\n \"description\": \"Stake table taking effect next epoch. TaggedBase64 `STAKE_TABLE~`. Absent outside an epoch\\nboundary\",\n \"type\": \"string\"\n },\n \"nsTable\": {\n \"$ref\": \"#/components/schemas/NsTable\"\n },\n \"payloadCommitment\": {\n \"description\": \"TaggedBase64 `AvidMCommit~`\",\n \"type\": \"string\"\n },\n \"rewardMerkleTreeRoot\": {\n \"description\": \"Root of the second reward merkle tree, which replaced the first in this version.\\nTaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"timestamp\": {\n \"description\": \"Unix seconds\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"timestampMillis\": {\n \"description\": \"Unix milliseconds. Clamped separately from `timestamp`, so it is not guaranteed to be\\n`timestamp * 1000`\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"totalRewardDistributed\": {\n \"description\": \"Rewards distributed since genesis, in wei. A 256-bit number, so a decimal string\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"HeaderV5\": {\n \"description\": \"The header shape introduced in protocol version 0.5, which added leader counts. Also used by\\n0.6 and 0.7\",\n \"properties\": {\n \"blockMerkleTreeRoot\": {\n \"description\": \"TaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"builderCommitment\": {\n \"description\": \"TaggedBase64 `BUILDER_COMMITMENT~`. Empty on 0.7, whose headers carry none\",\n \"type\": \"string\"\n },\n \"builderSignature\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/BuilderSignature\"\n }\n ],\n \"description\": \"Evidence that fee_info is correct. Absent when the builder did not sign, and never part\\nof the header commitment, since consensus has already checked it\"\n },\n \"chainConfig\": {\n \"$ref\": \"#/components/schemas/ResolvableChainConfig\"\n },\n \"feeInfo\": {\n \"$ref\": \"#/components/schemas/FeeInfo\"\n },\n \"feeMerkleTreeRoot\": {\n \"description\": \"TaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"l1Finalized\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/L1BlockInfo\"\n }\n ],\n \"description\": \"Latest L1 block finalized when the block was proposed, absent when none was\"\n },\n \"l1Head\": {\n \"description\": \"L1 block this header was built against\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"leaderCounts\": {\n \"description\": \"Blocks each validator proposed this epoch, indexed by its position in the epoch\'s stake\\ntable. A view whose leader proposed nothing is not counted. Always 100 entries, the cap on\\nthe active validator set\",\n \"items\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"type\": \"array\"\n },\n \"nextStakeTableHash\": {\n \"description\": \"Stake table taking effect next epoch. TaggedBase64 `STAKE_TABLE~`. Absent outside an epoch\\nboundary\",\n \"type\": \"string\"\n },\n \"nsTable\": {\n \"$ref\": \"#/components/schemas/NsTable\"\n },\n \"payloadCommitment\": {\n \"description\": \"TaggedBase64. `AvidMCommit~` on 0.5 and `AvidmGf2Commit~` on 0.6 and 0.7, which share\\nthis message\",\n \"type\": \"string\"\n },\n \"rewardMerkleTreeRoot\": {\n \"description\": \"Root of the second reward merkle tree, which replaced the first in 0.4.\\nTaggedBase64 `MERKLE_COMM~`\",\n \"type\": \"string\"\n },\n \"timestamp\": {\n \"description\": \"Unix seconds\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"timestampMillis\": {\n \"description\": \"Unix milliseconds. Clamped separately from `timestamp`, so it is not guaranteed to be\\n`timestamp * 1000`\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"totalRewardDistributed\": {\n \"description\": \"Rewards distributed since genesis, in wei. A 256-bit number, so a decimal string\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"HeaderWindowResponse\": {\n \"properties\": {\n \"next\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HeaderResponse\"\n }\n ],\n \"description\": \"The header after the window. Absent both when the window reaches the chain tip and when it\\nwas truncated at the limit `/v2/node/limits` reports, so a `window` of exactly that many\\nentries means there is more to fetch rather than nothing after it\"\n },\n \"prev\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/HeaderResponse\"\n }\n ],\n \"description\": \"The header before the window, absent at the start of the chain\"\n },\n \"window\": {\n \"description\": \"Headers whose timestamps fall in the window\",\n \"items\": {\n \"$ref\": \"#/components/schemas/HeaderResponse\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"HeightRange\": {\n \"description\": \"A half-open range of heights, one entry of a batch request\'s body\",\n \"properties\": {\n \"from\": {\n \"description\": \"Required, the first height in the range (inclusive)\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"until\": {\n \"description\": \"Required, the height just past the last one in the range (exclusive)\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"HotStuff2Finality\": {\n \"description\": \"A 2-chain of QCs under the HotStuff2 commit rule\",\n \"properties\": {\n \"committingQc\": {\n \"$ref\": \"#/components/schemas/CertificatePair\"\n },\n \"decidingQc\": {\n \"$ref\": \"#/components/schemas/CertificatePair\"\n }\n },\n \"type\": \"object\"\n },\n \"HotStuffFinality\": {\n \"description\": \"A 3-chain of QCs under the original HotStuff commit rule\",\n \"properties\": {\n \"committingQc\": {\n \"$ref\": \"#/components/schemas/CertificatePair\"\n },\n \"decidingQc\": {\n \"$ref\": \"#/components/schemas/CertificatePair\"\n },\n \"precommitQc\": {\n \"$ref\": \"#/components/schemas/CertificatePair\"\n }\n },\n \"type\": \"object\"\n },\n \"HotshotConfigResponse\": {\n \"description\": \"The consensus parameters this node runs with.\\n\\nv1 wraps these in the orchestrator\'s `NetworkConfig`, which repeats several of the timings and\\nthe bootstrap count at the outer level with the values the orchestrator was configured with\\nrather than the ones consensus runs on. Only the operative values are served here. Also not\\ncarried over: the orchestrator\'s own run parameters (`seed`, `node_index`, `rounds`,\\n`transactions_per_round`, `transaction_size`, `random_builder`), its masked\\n`manual_start_password`, and `key_type_name`, which names a Rust type.\\n\\nIn the four upgrade windows below, a stop at or before its start means this node does not\\npropose, or does not vote for, the upgrade at all. A time bound of 0 or 18446744073709551615\\n(u64::MAX) means the window is not bounded in time\",\n \"properties\": {\n \"builder\": {\n \"$ref\": \"#/components/schemas/BuilderType\"\n },\n \"builderTimeoutMs\": {\n \"description\": \"Longest a leader waits for a builder\'s block before proposing without one\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"builderUrls\": {\n \"description\": \"Builders consensus runs with: `--builder-urls` when given, else the network config\'s\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"cdnMarshalAddress\": {\n \"deprecated\": true,\n \"description\": \"Always absent: the CDN marshal went with the networks consensus ran on before protocol 0.6\",\n \"type\": \"string\"\n },\n \"combinedNetworkConfig\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/CombinedNetworkConfig\"\n }\n ],\n \"deprecated\": true,\n \"description\": \"Always absent: the combined network went with the networks consensus ran on before protocol 0.6\"\n },\n \"commitSha\": {\n \"description\": \"Git SHA the node was built from; empty when the build stamped none\",\n \"type\": \"string\"\n },\n \"daCommittees\": {\n \"description\": \"DA committee overrides that take effect at a given version and epoch\",\n \"items\": {\n \"$ref\": \"#/components/schemas/VersionedDaCommittee\"\n },\n \"type\": \"array\"\n },\n \"daStakedCommitteeSize\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"dataRequestDelayMs\": {\n \"description\": \"Wait before requesting the data behind a proposal from peers\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"drbDifficulty\": {\n \"description\": \"Iterations of the DRB computation\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"drbUpgradeDifficulty\": {\n \"description\": \"Iterations of the DRB computation after the DRB upgrade\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"epochHeight\": {\n \"description\": \"Blocks per epoch; zero before proof of stake\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"epochStartBlock\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"fixedLeaderForGpuvid\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"indexedDa\": {\n \"description\": \"When true the first nodes to register form the DA committee; when false a node asks to join\",\n \"type\": \"boolean\"\n },\n \"knownDaNodes\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/PeerConfig\"\n },\n \"type\": \"array\"\n },\n \"knownNodesWithStake\": {\n \"description\": \"Every node the network was started with, with its stake and network address. The live stake\\ntable is served by `/v2/node/stake-table`; this is the genesis membership\",\n \"items\": {\n \"$ref\": \"#/components/schemas/PeerConfig\"\n },\n \"type\": \"array\"\n },\n \"libp2pConfig\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/Libp2pNetworkConfig\"\n }\n ],\n \"deprecated\": true,\n \"description\": \"Always absent: libp2p went with the networks consensus ran on before protocol 0.6\"\n },\n \"nextViewTimeoutMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"numBootstrap\": {\n \"description\": \"How many bootstrap nodes this node dials on startup\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"numNodesWithStake\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"stakeTableCapacity\": {\n \"description\": \"Stake table size the light-client circuit is built for\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"startProposingTime\": {\n \"description\": \"Unix seconds from which this node proposes a consensus upgrade\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"startProposingView\": {\n \"description\": \"View from which this node proposes a consensus upgrade\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"startThresholdDenominator\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"startThresholdNumerator\": {\n \"description\": \"Fraction of nodes, by count rather than by stake, that the orchestrator waits for before\\nsignalling the start of consensus. Nodes joining through config peers never consult it\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"startVotingTime\": {\n \"description\": \"Unix seconds from which this node votes for a consensus upgrade\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"startVotingView\": {\n \"description\": \"View from which this node votes for a consensus upgrade\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"stopProposingTime\": {\n \"description\": \"Unix seconds\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"stopProposingView\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"stopVotingTime\": {\n \"description\": \"Unix seconds\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"stopVotingView\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"viewSyncTimeoutMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"HttpModule\": {\n \"properties\": {\n \"maxConnections\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"port\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"tonicPort\": {\n \"description\": \"Absent unless the node also serves v2 over gRPC\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n },\n \"IncorrectEncodingProofResponse\": {\n \"properties\": {\n \"proof\": {\n \"$ref\": \"#/components/schemas/AvidmBadEncodingNsProof\"\n }\n },\n \"type\": \"object\"\n },\n \"L1BlockInfo\": {\n \"properties\": {\n \"hash\": {\n \"description\": \"32-byte block hash, 0x-prefixed and always 64 hex digits, not a quantity\",\n \"type\": \"string\"\n },\n \"number\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"timestamp\": {\n \"description\": \"Unix seconds, hex-encoded as on v1 rather than decimal\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"LargeRangeProof\": {\n \"description\": \"A jellyfish range proof over a namespace\'s bytes, as v1 encodes it\",\n \"properties\": {\n \"prefixBytes\": {\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"prefixElems\": {\n \"description\": \"Field elements, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"suffixBytes\": {\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"suffixElems\": {\n \"description\": \"Field elements, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"Leaf2\": {\n \"properties\": {\n \"blockHeader\": {\n \"$ref\": \"#/components/schemas/HeaderResponse\"\n },\n \"blockPayload\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/Payload\"\n }\n ],\n \"description\": \"Absent from served leaves: the payload is stored and fetched separately\"\n },\n \"justifyQc\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/QuorumCertificate2\"\n }\n ],\n \"description\": \"The QC this leaf chains from\"\n },\n \"nextDrbResult\": {\n \"description\": \"32-byte DRB result for the next epoch, base64 in JSON, only on an epoch\'s last block\",\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"nextEpochJustifyQc\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/QuorumCertificate2\"\n }\n ],\n \"description\": \"Formed by the next epoch\'s nodes, only on the leaves that hand over an epoch\"\n },\n \"parentCommitment\": {\n \"description\": \"TaggedBase64 `COMMIT~`\",\n \"type\": \"string\"\n },\n \"upgradeCertificate\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/UpgradeCertificate\"\n }\n ],\n \"description\": \"Only when the proposal for this view carried one\"\n },\n \"viewChangeEvidence\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/ViewChangeEvidence2\"\n }\n ],\n \"description\": \"Only when the justify QC is not from the preceding view\"\n },\n \"viewNumber\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"withEpoch\": {\n \"description\": \"Whether epochs were enabled when this leaf was proposed\",\n \"type\": \"boolean\"\n }\n },\n \"type\": \"object\"\n },\n \"LeafRangeResponse\": {\n \"properties\": {\n \"leaves\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/LeafResponse\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"LeafResponse\": {\n \"properties\": {\n \"leaf\": {\n \"$ref\": \"#/components/schemas/Leaf2\"\n },\n \"qc\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/QuorumCertificate2\"\n }\n ],\n \"description\": \"The QC that certifies this leaf\"\n }\n },\n \"type\": \"object\"\n },\n \"Libp2pBootstrapNode\": {\n \"deprecated\": true,\n \"description\": \"Never served: kept so `libp2p_config` keeps its type\",\n \"properties\": {\n \"multiaddr\": {\n \"type\": \"string\"\n },\n \"peerId\": {\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"Libp2pNetworkConfig\": {\n \"deprecated\": true,\n \"description\": \"Never served: kept so `libp2p_config` keeps its type\",\n \"properties\": {\n \"bootstrapNodes\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/Libp2pBootstrapNode\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientDbOptions\": {\n \"properties\": {\n \"lcPath\": {\n \"description\": \"Absent when the light-client database is in a temporary directory\",\n \"type\": \"string\"\n },\n \"numConnections\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"numLeaves\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientHeaderProofResponse\": {\n \"properties\": {\n \"header\": {\n \"$ref\": \"#/components/schemas/HeaderResponse\"\n },\n \"proof\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/MerklePathResponse\"\n }\n ],\n \"description\": \"Membership of `header` in the block merkle tree\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientLeafProofResponse\": {\n \"properties\": {\n \"leaves\": {\n \"description\": \"Chronological, joined by `parent_commitment`: the first is the requested leaf, the last is\\nthe one `proof` shows finalized\",\n \"items\": {\n \"$ref\": \"#/components/schemas/Leaf2\"\n },\n \"type\": \"array\"\n },\n \"proof\": {\n \"$ref\": \"#/components/schemas/FinalityProof\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientModuleOptions\": {\n \"properties\": {\n \"numStakeTablesInMemory\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientNamespaceProofContents\": {\n \"properties\": {\n \"proof\": {\n \"$ref\": \"#/components/schemas/NsProof\"\n },\n \"vidCommon\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/VidCommon\"\n }\n ],\n \"description\": \"What the client checks `proof` against, with the header\'s payload commitment\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientNamespaceProofRangeResponse\": {\n \"properties\": {\n \"proofs\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/LightClientNamespaceProofResponse\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientNamespaceProofResponse\": {\n \"properties\": {\n \"contents\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/LightClientNamespaceProofContents\"\n }\n ],\n \"description\": \"Absent claims the namespace is not in the block, which the client checks against the header\'s\\nnamespace table\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientNamespacesProof\": {\n \"properties\": {\n \"proofs\": {\n \"additionalProperties\": {\n \"$ref\": \"#/components/schemas/LightClientNamespaceProofContents\"\n },\n \"description\": \"Keyed by namespace, with an entry only for a requested namespace the block\'s namespace table\\nholds. A missing one claims the namespace is not in the block, which the client checks\\nagainst that table\",\n \"type\": \"object\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientNamespacesProofRangeResponse\": {\n \"properties\": {\n \"blocks\": {\n \"description\": \"One per block in the range, in height order\",\n \"items\": {\n \"$ref\": \"#/components/schemas/LightClientNamespacesProof\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientPayloadProofRangeResponse\": {\n \"properties\": {\n \"proofs\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/LightClientPayloadProofResponse\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientPayloadProofResponse\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"#/components/schemas/Payload\"\n },\n \"vidCommon\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/VidCommon\"\n }\n ],\n \"description\": \"What the client recomputes the header\'s payload commitment from\"\n }\n },\n \"type\": \"object\"\n },\n \"LightClientStakeTableResponse\": {\n \"properties\": {\n \"events\": {\n \"description\": \"In L1 order: replaying them onto the previous epoch\'s stake table gives this epoch\'s\",\n \"items\": {\n \"$ref\": \"#/components/schemas/StakeTableEvent\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"LimitsResponse\": {\n \"properties\": {\n \"largeObjectRangeLimit\": {\n \"description\": \"Most blocks, payloads, headers or block summaries one range query may return. Headers and\\nsummaries count as large because serving one loads its whole block\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"namespaceProofRangeLimit\": {\n \"description\": \"Most blocks one namespace-proof range query may cover\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"smallObjectRangeLimit\": {\n \"description\": \"Most leaves or VID common objects one range query may return\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"LockView\": {\n \"description\": \"A lock, ordered by epoch, then view\",\n \"properties\": {\n \"epoch\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"view\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"MerklePathResponse\": {\n \"properties\": {\n \"pos\": {\n \"description\": \"Index the path was looked up for, ark-serialized, TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"proof\": {\n \"description\": \"The path, leaf first and root last. A leaf first means the key is in the tree, and anything\\nelse first means it is not and the path proves that. The node messages are the ones VID shares\\nuse, since both are jellyfish Merkle nodes\",\n \"items\": {\n \"$ref\": \"#/components/schemas/AdvzMerkleNode\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"MigrationStatus\": {\n \"properties\": {\n \"completedAt\": {\n \"description\": \"RFC 3339 timestamp; absent while the migration is still running\",\n \"type\": \"string\"\n },\n \"lastOffset\": {\n \"description\": \"Offset of the last processed batch. The runner writes 0 when it registers the migration and\\nupdates this after every batch, so a migration it tracks always carries one\",\n \"format\": \"int64\",\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"startedAt\": {\n \"description\": \"RFC 3339 timestamp\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"MigrationStatusResponse\": {\n \"properties\": {\n \"migrations\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/MigrationStatus\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"NamespaceInfo\": {\n \"properties\": {\n \"numTransactions\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"size\": {\n \"description\": \"Size of this namespace\'s share of the payload, in bytes\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"NamespaceProofRangeResponse\": {\n \"properties\": {\n \"proofs\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/NamespaceProofResponse\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"NamespaceProofResponse\": {\n \"properties\": {\n \"proof\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/NsProof\"\n }\n ],\n \"description\": \"Absent when the block has no such namespace\"\n },\n \"transactions\": {\n \"description\": \"The namespace\'s transactions, in block order\",\n \"items\": {\n \"$ref\": \"#/components/schemas/Transaction\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"NewProtocolFinality\": {\n \"description\": \"A phase-2 certificate under the new protocol\",\n \"properties\": {\n \"cert2\": {\n \"$ref\": \"#/components/schemas/Certificate2\"\n },\n \"leafQc\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/QuorumCertificate2\"\n }\n ],\n \"description\": \"The QC certifying the leaf `cert2` commits, needed to rebuild the leaf\'s query data\"\n }\n },\n \"type\": \"object\"\n },\n \"NodeBlockHeightResponse\": {\n \"properties\": {\n \"height\": {\n \"description\": \"The current height of the chain as this node sees it\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"NodeIdentity\": {\n \"properties\": {\n \"companyName\": {\n \"type\": \"string\"\n },\n \"companyWebsite\": {\n \"type\": \"string\"\n },\n \"countryCode\": {\n \"description\": \"ISO 3166-1 alpha-2\",\n \"type\": \"string\"\n },\n \"icon14x141x\": {\n \"description\": \"Operator-supplied logos for public dashboards, at two sizes and three pixel densities\",\n \"type\": \"string\"\n },\n \"icon14x142x\": {\n \"type\": \"string\"\n },\n \"icon14x143x\": {\n \"type\": \"string\"\n },\n \"icon24x241x\": {\n \"type\": \"string\"\n },\n \"icon24x242x\": {\n \"type\": \"string\"\n },\n \"icon24x243x\": {\n \"type\": \"string\"\n },\n \"latitude\": {\n \"type\": \"number\"\n },\n \"longitude\": {\n \"type\": \"number\"\n },\n \"networkType\": {\n \"type\": \"string\"\n },\n \"nodeDescription\": {\n \"type\": \"string\"\n },\n \"nodeName\": {\n \"type\": \"string\"\n },\n \"nodeType\": {\n \"description\": \"Binary name and version unless the operator overrode it\",\n \"type\": \"string\"\n },\n \"operatingSystem\": {\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"NodeKeysResponse\": {\n \"properties\": {\n \"consensusKey\": {\n \"$ref\": \"#/components/schemas/BLSPublicKey\"\n },\n \"ethAccount\": {\n \"description\": \"Ethereum account associated with this node, 0x-prefixed hex\",\n \"type\": \"string\"\n },\n \"p2pAddr\": {\n \"description\": \"Cliquenet address peers dial, host:port: the configured advertise address, unset when none is configured\",\n \"type\": \"string\"\n },\n \"stateVerKey\": {\n \"$ref\": \"#/components/schemas/SchnorrPublicKey\"\n },\n \"x25519Key\": {\n \"description\": \"X25519 public key for cliquenet, TaggedBase64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"NodeLimitsResponse\": {\n \"properties\": {\n \"windowLimit\": {\n \"description\": \"Most headers a header window request may return\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"NodeStorage\": {\n \"description\": \"`fs` and `sql` follow `backend`, and both are absent when the default filesystem backend was\\nnever given a path\",\n \"properties\": {\n \"backend\": {\n \"$ref\": \"#/components/schemas/StorageBackend\"\n },\n \"fs\": {\n \"$ref\": \"#/components/schemas/FsStorage\"\n },\n \"sql\": {\n \"$ref\": \"#/components/schemas/SqlStorage\"\n }\n },\n \"type\": \"object\"\n },\n \"NsProof\": {\n \"description\": \"The arm names the VID scheme, and v1_incorrect_encoding is an AvidM block whose disperser cheated\",\n \"properties\": {\n \"v0\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AdvzNsProof\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n },\n \"v1\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/NsProofPayload\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n },\n \"v1IncorrectEncoding\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AvidmBadEncodingNsProof\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n },\n \"v2\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/NsProofPayload\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n }\n },\n \"type\": \"object\"\n },\n \"NsProofPayload\": {\n \"description\": \"A namespace\'s proof against the payload commitment, for the AvidM and AvidmGf2 schemes\",\n \"properties\": {\n \"nsIndex\": {\n \"description\": \"Position of the namespace in the namespace table\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"nsPayload\": {\n \"description\": \"The namespace\'s bytes, base64 in JSON\",\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"nsProof\": {\n \"description\": \"Merkle proof of those bytes, TaggedBase64 `MERKLE_PROOF~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"NsTable\": {\n \"properties\": {\n \"bytes\": {\n \"description\": \"The namespace table in its canonical byte encoding, base64 in JSON\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"P2pAddrUpdated\": {\n \"properties\": {\n \"p2pAddr\": {\n \"type\": \"string\"\n },\n \"validator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ParticipationEntry\": {\n \"properties\": {\n \"key\": {\n \"$ref\": \"#/components/schemas/BLSPublicKey\"\n },\n \"participation\": {\n \"description\": \"From 0 to 1; see the rpc for what it is a fraction of\",\n \"type\": \"number\"\n }\n },\n \"type\": \"object\"\n },\n \"ParticipationResponse\": {\n \"properties\": {\n \"participation\": {\n \"description\": \"Sorted by key; v1 reports a map, which has no order\",\n \"items\": {\n \"$ref\": \"#/components/schemas/ParticipationEntry\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"Payload\": {\n \"properties\": {\n \"nsTable\": {\n \"$ref\": \"#/components/schemas/NsTable\"\n },\n \"rawPayload\": {\n \"description\": \"The block\'s transactions in their canonical byte encoding, base64 in JSON\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"PayloadRangeResponse\": {\n \"properties\": {\n \"payloads\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/PayloadResponse\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"PayloadResponse\": {\n \"properties\": {\n \"blockHash\": {\n \"description\": \"TaggedBase64 `BLOCK~`\",\n \"type\": \"string\"\n },\n \"data\": {\n \"$ref\": \"#/components/schemas/Payload\"\n },\n \"hash\": {\n \"description\": \"VID commitment to the payload, the TaggedBase64 tag names the VID scheme\",\n \"type\": \"string\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"size\": {\n \"description\": \"Payload size in bytes\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"PayloadSizeResponse\": {\n \"properties\": {\n \"size\": {\n \"description\": \"Cumulative payload size in bytes\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"PeerConfig\": {\n \"properties\": {\n \"connectInfo\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/PeerConnectInfo\"\n }\n ],\n \"description\": \"Absent for a peer that published no network address\"\n },\n \"stakeTableEntry\": {\n \"$ref\": \"#/components/schemas/StakeTableEntry\"\n },\n \"stateVerKey\": {\n \"$ref\": \"#/components/schemas/SchnorrPublicKey\"\n }\n },\n \"type\": \"object\"\n },\n \"PeerConnectInfo\": {\n \"properties\": {\n \"p2pAddr\": {\n \"description\": \"\\\"host:port\\\", with an IPv6 literal left unbracketed as v1 writes it\",\n \"type\": \"string\"\n },\n \"x25519Key\": {\n \"description\": \"X25519 public key for cliquenet, TaggedBase64 rather than x25519\'s own base58\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ProtocolVersion\": {\n \"properties\": {\n \"major\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"minor\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n }\n },\n \"type\": \"object\"\n },\n \"PruningConfig\": {\n \"description\": \"Retention policy for the archival tables. Durations are whole milliseconds, rounded down\",\n \"properties\": {\n \"batchSize\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"intervalMs\": {\n \"description\": \"How often the pruner runs\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"maxUsage\": {\n \"description\": \"Disk usage in basis points, so 8000 is 80%\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"minimumRetentionMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"pages\": {\n \"description\": \"SQLite pages vacuumed from the freelist per pruner cycle; unused on Postgres\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"pruningThreshold\": {\n \"description\": \"Disk usage, in bytes, above which pruning starts\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"targetRetentionMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"QueryModule\": {\n \"properties\": {\n \"lightClient\": {\n \"$ref\": \"#/components/schemas/LightClientModuleOptions\"\n },\n \"lightClientDb\": {\n \"$ref\": \"#/components/schemas/LightClientDbOptions\"\n },\n \"peers\": {\n \"description\": \"Peers this node fetches missing data from\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"QuorumCertificate2\": {\n \"description\": \"A certificate is its voted data plus the signatures over the commitment of that data. One\\nmessage per data type, the shape is otherwise the same\",\n \"properties\": {\n \"data\": {\n \"$ref\": \"#/components/schemas/QuorumData2\"\n },\n \"signatures\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/QuorumSignatures\"\n }\n ],\n \"description\": \"Absent on the genesis certificate, which nobody signed\"\n },\n \"viewNumber\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"voteCommitment\": {\n \"description\": \"Commitment to the versioned vote, which the signatures are over. TaggedBase64 `COMMIT~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"QuorumData2\": {\n \"properties\": {\n \"blockNumber\": {\n \"description\": \"Absent before proof of stake\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"epoch\": {\n \"description\": \"Absent before proof of stake\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"leafCommit\": {\n \"description\": \"Commitment to the leaf voted on, TaggedBase64 `COMMIT~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"QuorumSignatures\": {\n \"description\": \"The aggregate signature on a certificate and who contributed to it\",\n \"properties\": {\n \"signature\": {\n \"description\": \"Aggregate BLS signature, TaggedBase64 `BLS_SIG~`\",\n \"type\": \"string\"\n },\n \"signers\": {\n \"description\": \"Which validators signed, by position in the stake table\",\n \"items\": {\n \"type\": \"boolean\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"ResolvableChainConfig\": {\n \"description\": \"A header carries either the chain config itself or a commitment the caller resolves elsewhere\",\n \"properties\": {\n \"commitment\": {\n \"description\": \"TaggedBase64 `CHAIN_CONFIG~` Member of oneof `chain_config`.\",\n \"type\": \"string\"\n },\n \"full\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/ChainConfig\"\n }\n ],\n \"description\": \"Member of oneof `chain_config`.\"\n }\n },\n \"type\": \"object\"\n },\n \"ResourceSyncStatus\": {\n \"properties\": {\n \"missing\": {\n \"description\": \"Number of missing objects, not counting pruned ones\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"ranges\": {\n \"description\": \"Contiguous height ranges sharing one status, in ascending order\",\n \"items\": {\n \"$ref\": \"#/components/schemas/SyncStatusRange\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"RewardAccountProof\": {\n \"properties\": {\n \"account\": {\n \"description\": \"Account the proof is for, `0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"proof\": {\n \"$ref\": \"#/components/schemas/RewardMerkleProof\"\n }\n },\n \"type\": \"object\"\n },\n \"RewardAccountProofResponse\": {\n \"properties\": {\n \"balance\": {\n \"description\": \"Lifetime rewards in wei, as a decimal string, where v1 serves `0x` hex. For an account with no\\nentry, the merklized-state routes answer not found and the catchup routes answer with an\\nabsence proof and `0`\",\n \"type\": \"string\"\n },\n \"proof\": {\n \"$ref\": \"#/components/schemas/RewardAccountProof\"\n }\n },\n \"type\": \"object\"\n },\n \"RewardAmountPair\": {\n \"properties\": {\n \"address\": {\n \"description\": \"Account the amount belongs to, `0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"amount\": {\n \"description\": \"Rewards in wei, as a decimal string\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"RewardAmountsResponse\": {\n \"properties\": {\n \"amounts\": {\n \"description\": \"In the tree\'s own order, the one `offset` counts in\",\n \"items\": {\n \"$ref\": \"#/components/schemas/RewardAmountPair\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"RewardBalanceResponse\": {\n \"properties\": {\n \"balance\": {\n \"description\": \"Lifetime rewards in wei, as a decimal string. An account with no entry is not found\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"RewardClaimInputResponse\": {\n \"properties\": {\n \"authData\": {\n \"description\": \"ABI-encoded authentication data for the L1 claimRewards call, `0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"lifetimeRewards\": {\n \"description\": \"Lifetime rewards in wei, as a decimal string, where v1 serves `0x` hex\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"RewardMerkleProof\": {\n \"description\": \"Mirrors the tree\'s own presence or absence proof. Exactly one arm is set\",\n \"properties\": {\n \"absence\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/MerklePathResponse\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n },\n \"presence\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/MerklePathResponse\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n }\n },\n \"type\": \"object\"\n },\n \"RewardMerkleTreeV1Response\": {\n \"properties\": {\n \"tree\": {\n \"description\": \"bincode-serialized `RewardMerkleTreeV1` holding only the requested accounts, base64 in JSON\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"RewardMerkleTreeV2Response\": {\n \"properties\": {\n \"tree\": {\n \"description\": \"bincode-serialized `RewardMerkleTreeV2Data`, base64 in JSON\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"RuntimeConfigResponse\": {\n \"description\": \"The node\'s effective runtime configuration: CLI flags, environment and defaults merged. The\\ngenesis and the catchup, proposal-fetcher and L1 tuning stay on v1. No credential this\\nnode holds is served, but a URL an operator configured with userinfo is served as given, as v1\\nserves it\",\n \"properties\": {\n \"builderUrls\": {\n \"description\": \"Builders given with `--builder-urls`, empty when consensus runs with the network config\'s\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"cdnEndpoint\": {\n \"deprecated\": true,\n \"description\": \"Always empty: the CDN went with the networks consensus ran on before protocol 0.6\",\n \"type\": \"string\"\n },\n \"cliquenetAdvertiseAddress\": {\n \"description\": \"\\\"host:port\\\", with an IPv6 literal left unbracketed as v1 writes it\",\n \"type\": \"string\"\n },\n \"cliquenetBindAddress\": {\n \"description\": \"\\\"host:port\\\", with an IPv6 literal left unbracketed as v1 writes it\",\n \"type\": \"string\"\n },\n \"configPeers\": {\n \"description\": \"Empty when not configured\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"follower\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/FollowerModule\"\n }\n ],\n \"description\": \"Unset on a validator. A follower verifies the chain from the query module\'s peers\"\n },\n \"genesisFile\": {\n \"description\": \"Path or URL the genesis was loaded from\",\n \"type\": \"string\"\n },\n \"identity\": {\n \"$ref\": \"#/components/schemas/NodeIdentity\"\n },\n \"isDa\": {\n \"type\": \"boolean\"\n },\n \"l1ProviderCount\": {\n \"description\": \"How many L1 RPC endpoints are configured. These URLs are the ones most often given an API\\nkey, so only the count is served\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"l1WsProviderCount\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"libp2pAdvertiseAddress\": {\n \"deprecated\": true,\n \"description\": \"Always absent: libp2p went with the networks consensus ran on before protocol 0.6\",\n \"type\": \"string\"\n },\n \"libp2pBindAddress\": {\n \"deprecated\": true,\n \"description\": \"Always empty: libp2p went with the networks consensus ran on before protocol 0.6\",\n \"type\": \"string\"\n },\n \"libp2pBootstrapNodes\": {\n \"deprecated\": true,\n \"description\": \"Always empty: libp2p went with the networks consensus ran on before protocol 0.6\",\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"modules\": {\n \"$ref\": \"#/components/schemas/ApiModules\"\n },\n \"orchestratorUrl\": {\n \"type\": \"string\"\n },\n \"publicApiUrl\": {\n \"type\": \"string\"\n },\n \"statePeers\": {\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n },\n \"stateRelayServerUrl\": {\n \"type\": \"string\"\n },\n \"storage\": {\n \"$ref\": \"#/components/schemas/NodeStorage\"\n }\n },\n \"type\": \"object\"\n },\n \"SchnorrPublicKey\": {\n \"properties\": {\n \"key\": {\n \"description\": \"TaggedBase64, e.g. \\\"SCHNORR_VER_KEY~AAA...\\\"\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ShardRange\": {\n \"description\": \"Half-open range of shard indices this share holds in the encoded payload. Its length is the\\nstorage node\'s VID weight\",\n \"properties\": {\n \"end\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"start\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"SmallRangeProof\": {\n \"description\": \"A jellyfish range proof over a few payload bytes, as v1 encodes it\",\n \"properties\": {\n \"prefixBytes\": {\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"proofs\": {\n \"description\": \"KZG proofs, ark-serialized into one TaggedBase64 `FIELD~`\",\n \"type\": \"string\"\n },\n \"suffixBytes\": {\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"SqlStorage\": {\n \"description\": \"Durations are whole milliseconds, rounded down\",\n \"properties\": {\n \"activeFetchDelayMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"archive\": {\n \"type\": \"boolean\"\n },\n \"chunkFetchDelayMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"connectionTimeoutMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"consensusPruning\": {\n \"$ref\": \"#/components/schemas/ConsensusPruningConfig\"\n },\n \"disableProactiveFetching\": {\n \"type\": \"boolean\"\n },\n \"fetchRateLimit\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"idleConnectionTimeoutMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"lightweight\": {\n \"type\": \"boolean\"\n },\n \"maxConnections\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"minConnections\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"proactiveScanChunkSize\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"proactiveScanIntervalMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"prune\": {\n \"type\": \"boolean\"\n },\n \"pruning\": {\n \"$ref\": \"#/components/schemas/PruningConfig\"\n },\n \"queryMaxConnections\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"queryMinConnections\": {\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"slowStatementThresholdMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"statementTimeoutMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"syncStatusChunkSize\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"syncStatusTtlMs\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"StakeTableEntry\": {\n \"properties\": {\n \"stakeAmount\": {\n \"description\": \"0x-prefixed hex quantity, as v1 renders a U256\",\n \"type\": \"string\"\n },\n \"stakeKey\": {\n \"$ref\": \"#/components/schemas/BLSPublicKey\"\n }\n },\n \"type\": \"object\"\n },\n \"StakeTableEvent\": {\n \"description\": \"One stake table contract event. The arm names the event and its version\",\n \"properties\": {\n \"commissionUpdate\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/CommissionUpdated\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"delegate\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/Delegated\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"deregister\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/ValidatorExit\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"deregisterV2\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/ValidatorExitV2\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"keyUpdate\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/ConsensusKeysUpdated\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"keyUpdateV2\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/ConsensusKeysUpdatedV2\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"p2pAddrUpdate\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/P2pAddrUpdated\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"register\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/ValidatorRegistered\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"registerV2\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/ValidatorRegisteredV2\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"registerV3\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/ValidatorRegisteredV3\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"undelegate\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/Undelegated\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"undelegateV2\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/UndelegatedV2\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n },\n \"x25519KeyUpdate\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/X25519KeyUpdated\"\n }\n ],\n \"description\": \"Member of oneof `event`.\"\n }\n },\n \"type\": \"object\"\n },\n \"StakeTableResponse\": {\n \"properties\": {\n \"epoch\": {\n \"description\": \"The epoch this table is for: the one requested, or the current one. Absent on a network\\nwithout epochs. v1 reports it only on its `current` route.\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"stakeTable\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/PeerConfig\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"StateCertV1Response\": {\n \"description\": \"The certificate a light client uses to advance past an epoch boundary, first form\",\n \"properties\": {\n \"epoch\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"lightClientState\": {\n \"description\": \"TaggedBase64 `LIGHT_CLIENT_STATE~`\",\n \"type\": \"string\"\n },\n \"nextStakeTableState\": {\n \"description\": \"TaggedBase64 `STAKE_TABLE_STATE~`\",\n \"type\": \"string\"\n },\n \"signatures\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/StateSignatureV1\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"StateCertV2Response\": {\n \"description\": \"The certificate a light client uses to advance past an epoch boundary, with the LCV2 and LCV3\\nsignatures side by side\",\n \"properties\": {\n \"authRoot\": {\n \"description\": \"32 bytes, 0x-prefixed and always 64 hex digits, not a quantity\",\n \"type\": \"string\"\n },\n \"epoch\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"lightClientState\": {\n \"description\": \"TaggedBase64 `LIGHT_CLIENT_STATE~`\",\n \"type\": \"string\"\n },\n \"nextStakeTableState\": {\n \"description\": \"TaggedBase64 `STAKE_TABLE_STATE~`\",\n \"type\": \"string\"\n },\n \"signatures\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/StateSignatureV2\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"StateHeightResponse\": {\n \"properties\": {\n \"height\": {\n \"description\": \"Height of the newest block whose merklized state is persisted. A snapshot above it is not\\nfound\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"StateSignatureResponse\": {\n \"description\": \"This node\'s signature over the light client state at one block, in the form the state relay\\nserver receives it. A node keeps these only for recent blocks, so an older height is a 404\",\n \"properties\": {\n \"authRoot\": {\n \"description\": \"32 bytes, 0x-prefixed hex\",\n \"type\": \"string\"\n },\n \"key\": {\n \"description\": \"Schnorr verification key, TaggedBase64 `SCHNORR_VER_KEY~`\",\n \"type\": \"string\"\n },\n \"lcv2Signature\": {\n \"description\": \"Signature for the LCV2 light-client contract, TaggedBase64 `SCHNORR_SIG~`\",\n \"type\": \"string\"\n },\n \"lcv3Signature\": {\n \"description\": \"Signature for the LCV3 light-client contract, over the state, the next stake table and the\\nauth root, TaggedBase64 `SCHNORR_SIG~`\",\n \"type\": \"string\"\n },\n \"lightClientState\": {\n \"description\": \"TaggedBase64 `LIGHT_CLIENT_STATE~`\",\n \"type\": \"string\"\n },\n \"nextStakeTableState\": {\n \"description\": \"Stake table backing the next block, TaggedBase64 `STAKE_TABLE_STATE~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"StateSignatureV1\": {\n \"properties\": {\n \"key\": {\n \"description\": \"Schnorr verification key, TaggedBase64 `SCHNORR_VER_KEY~`\",\n \"type\": \"string\"\n },\n \"signature\": {\n \"description\": \"TaggedBase64 `SCHNORR_SIG~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"StateSignatureV2\": {\n \"properties\": {\n \"key\": {\n \"description\": \"Schnorr verification key, TaggedBase64 `SCHNORR_VER_KEY~`\",\n \"type\": \"string\"\n },\n \"lcv2Signature\": {\n \"description\": \"Signature for the LCV2 light-client contract, TaggedBase64 `SCHNORR_SIG~`\",\n \"type\": \"string\"\n },\n \"lcv3Signature\": {\n \"description\": \"Signature for the LCV3 light-client contract, TaggedBase64 `SCHNORR_SIG~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"StorageBackend\": {\n \"description\": \"- `STORAGE_BACKEND_FS_DEFAULT`: Filesystem storage with default settings, used when no storage flag was given\",\n \"enum\": [\n \"STORAGE_BACKEND_UNSPECIFIED\",\n \"STORAGE_BACKEND_SQL\",\n \"STORAGE_BACKEND_FS\",\n \"STORAGE_BACKEND_FS_DEFAULT\"\n ],\n \"type\": \"string\"\n },\n \"SubmitTransactionRequest\": {\n \"properties\": {\n \"namespace\": {\n \"description\": \"Namespace the transaction is sequenced in. Required, and at most u32::MAX\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"payload\": {\n \"description\": \"Transaction payload, base64 in JSON. Required, and may be empty\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"SubmitTransactionResponse\": {\n \"properties\": {\n \"hash\": {\n \"description\": \"Commitment to the accepted transaction, TaggedBase64 `TX~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"SuccessRateResponse\": {\n \"properties\": {\n \"rate\": {\n \"description\": \"Fraction of views in which this node decided a block. Node-local, not a network measure.\\nZero before the node has seen any view, so a fresh node reports zero rather than an\\nundefined ratio.\",\n \"type\": \"number\"\n }\n },\n \"type\": \"object\"\n },\n \"SyncStatus\": {\n \"description\": \"Whether this node stores an object, still has to fetch it, or deleted it on purpose\\n\\n- `SYNC_STATUS_UNSPECIFIED`: Never returned; proto3 requires a zero value\\n- `SYNC_STATUS_MISSING`: Not stored yet; the node fetches it from peers in the background\\n- `SYNC_STATUS_PRUNED`: Deleted by the pruner; the node will not fetch it again\",\n \"enum\": [\n \"SYNC_STATUS_UNSPECIFIED\",\n \"SYNC_STATUS_PRESENT\",\n \"SYNC_STATUS_MISSING\",\n \"SYNC_STATUS_PRUNED\"\n ],\n \"type\": \"string\"\n },\n \"SyncStatusRange\": {\n \"properties\": {\n \"end\": {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"start\": {\n \"description\": \"First height in the range (inclusive)\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"status\": {\n \"$ref\": \"#/components/schemas/SyncStatus\"\n }\n },\n \"type\": \"object\"\n },\n \"SyncStatusResponse\": {\n \"properties\": {\n \"blocks\": {\n \"$ref\": \"#/components/schemas/ResourceSyncStatus\"\n },\n \"leaves\": {\n \"$ref\": \"#/components/schemas/ResourceSyncStatus\"\n },\n \"prunedHeight\": {\n \"description\": \"Height of the last pruned object: everything at or below it is pruned rather than missing.\\nAbsent when nothing has been pruned\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"vidCommon\": {\n \"$ref\": \"#/components/schemas/ResourceSyncStatus\"\n }\n },\n \"type\": \"object\"\n },\n \"TableSize\": {\n \"properties\": {\n \"rowCount\": {\n \"description\": \"Live row count: an estimate from Postgres\' cumulative statistics, an exact count on SQLite\",\n \"format\": \"int64\",\n \"type\": \"string\"\n },\n \"tableName\": {\n \"type\": \"string\"\n },\n \"totalSizeBytes\": {\n \"description\": \"On-disk size including indexes, in bytes; absent when the backend does not report it\",\n \"format\": \"int64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"TableSizesResponse\": {\n \"properties\": {\n \"tables\": {\n \"description\": \"Largest first on Postgres, by name on SQLite\",\n \"items\": {\n \"$ref\": \"#/components/schemas/TableSize\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"TimeSinceLastDecideResponse\": {\n \"properties\": {\n \"seconds\": {\n \"description\": \"Seconds elapsed since this node last decided a block\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"TimeoutCertificate2\": {\n \"properties\": {\n \"data\": {\n \"$ref\": \"#/components/schemas/TimeoutData2\"\n },\n \"signatures\": {\n \"$ref\": \"#/components/schemas/QuorumSignatures\"\n },\n \"viewNumber\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"voteCommitment\": {\n \"description\": \"TaggedBase64 `COMMIT~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"TimeoutCertificate3\": {\n \"description\": \"The timeout certificate the new protocol carries, whose epoch is always known.\\nEvery signer signs the lock it holds; the certificate\'s lock is the latest, and\\nis that of `lock_cert`.\",\n \"properties\": {\n \"earlier\": {\n \"description\": \"The signers holding earlier locks, one aggregate signature per lock, earliest first\",\n \"items\": {\n \"$ref\": \"#/components/schemas/TimeoutSignatures\"\n },\n \"type\": \"array\"\n },\n \"epoch\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"lockCert\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/QuorumCertificate2\"\n }\n ],\n \"description\": \"The certificate of the latest lock its signers hold, absent if that lock is genesis\"\n },\n \"signatures\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/QuorumSignatures\"\n }\n ],\n \"description\": \"The signers holding that lock\"\n },\n \"viewNumber\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"TimeoutData2\": {\n \"properties\": {\n \"epoch\": {\n \"description\": \"Absent before proof of stake\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"view\": {\n \"description\": \"View that timed out\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"TimeoutSignatures\": {\n \"description\": \"The signers of a timeout certificate that hold the same lock, earlier than the certificate\'s\",\n \"properties\": {\n \"lock\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/LockView\"\n }\n ],\n \"description\": \"Absent for the signers locked on nothing but genesis\"\n },\n \"signatures\": {\n \"$ref\": \"#/components/schemas/QuorumSignatures\"\n }\n },\n \"type\": \"object\"\n },\n \"TotalIssuedSupplyResponse\": {\n \"properties\": {\n \"amount\": {\n \"description\": \"Total issued supply in ESP (decimal string): initial_supply +\\ntotal_reward_distributed, including rewards not yet claimed on Ethereum\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"TotalMintedSupplyResponse\": {\n \"properties\": {\n \"amount\": {\n \"description\": \"Total supply of the ESP token minted on Ethereum, in ESP (decimal string);\\nexcludes unclaimed rewards\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"TotalRewardDistributedResponse\": {\n \"properties\": {\n \"amount\": {\n \"description\": \"Total rewards distributed by consensus, in ESP (decimal string), including rewards\\nnot yet claimed on Ethereum\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"Transaction\": {\n \"properties\": {\n \"namespace\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"payload\": {\n \"description\": \"Transaction bytes, base64 in JSON\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"TransactionCountResponse\": {\n \"properties\": {\n \"count\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"TransactionResponse\": {\n \"properties\": {\n \"blockHash\": {\n \"description\": \"TaggedBase64 `BLOCK~`\",\n \"type\": \"string\"\n },\n \"blockHeight\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"hash\": {\n \"description\": \"TaggedBase64 `TX~`\",\n \"type\": \"string\"\n },\n \"index\": {\n \"description\": \"Position of the transaction in the block\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"namespace\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"posInNamespace\": {\n \"description\": \"Position of the transaction within its namespace\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"transaction\": {\n \"$ref\": \"#/components/schemas/Transaction\"\n }\n },\n \"type\": \"object\"\n },\n \"TransactionWithProofResponse\": {\n \"properties\": {\n \"blockHash\": {\n \"description\": \"TaggedBase64 `BLOCK~`\",\n \"type\": \"string\"\n },\n \"blockHeight\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"hash\": {\n \"description\": \"TaggedBase64 `TX~`\",\n \"type\": \"string\"\n },\n \"index\": {\n \"description\": \"Position of the transaction in the block\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"namespace\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"posInNamespace\": {\n \"description\": \"Position of the transaction within its namespace\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"proof\": {\n \"$ref\": \"#/components/schemas/TxProof\"\n },\n \"transaction\": {\n \"$ref\": \"#/components/schemas/Transaction\"\n }\n },\n \"type\": \"object\"\n },\n \"TxProof\": {\n \"description\": \"The arm names the VID scheme the block was disseminated with\",\n \"properties\": {\n \"v0\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AdvzTxProof\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n },\n \"v1\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AvidmTxProof\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n },\n \"v2\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AvidmGf2TxProof\"\n }\n ],\n \"description\": \"Member of oneof `proof`.\"\n }\n },\n \"type\": \"object\"\n },\n \"Undelegated\": {\n \"properties\": {\n \"amount\": {\n \"description\": \"In wei, as a decimal string\",\n \"type\": \"string\"\n },\n \"delegator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"validator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"UndelegatedV2\": {\n \"properties\": {\n \"amount\": {\n \"description\": \"In wei, as a decimal string\",\n \"type\": \"string\"\n },\n \"delegator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"undelegationId\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"unlocksAt\": {\n \"description\": \"Unix timestamp in seconds, as a decimal string\",\n \"type\": \"string\"\n },\n \"validator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"UpgradeCertificate\": {\n \"properties\": {\n \"data\": {\n \"$ref\": \"#/components/schemas/UpgradeProposalData\"\n },\n \"signatures\": {\n \"$ref\": \"#/components/schemas/QuorumSignatures\"\n },\n \"viewNumber\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"voteCommitment\": {\n \"description\": \"TaggedBase64 `COMMIT~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"UpgradeProposalData\": {\n \"properties\": {\n \"decideBy\": {\n \"description\": \"Last view in which the upgrade may still be decided, discarded after it\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"newVersion\": {\n \"$ref\": \"#/components/schemas/ProtocolVersion\"\n },\n \"newVersionFirstView\": {\n \"description\": \"First view the new version governs\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"newVersionHash\": {\n \"description\": \"Identifies the protocol being voted on, base64 in JSON\",\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"oldVersion\": {\n \"$ref\": \"#/components/schemas/ProtocolVersion\"\n },\n \"oldVersionLastView\": {\n \"description\": \"Last view the old version governs\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"Validator\": {\n \"properties\": {\n \"account\": {\n \"description\": \"0x-prefixed hex\",\n \"type\": \"string\"\n },\n \"authenticated\": {\n \"description\": \"Whether the contract verified the registration signature\",\n \"type\": \"boolean\"\n },\n \"commission\": {\n \"description\": \"Hundredths of a percent, so 10000 is the whole reward\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"delegators\": {\n \"description\": \"Sorted by account; v1 reports a map, which has no order\",\n \"items\": {\n \"$ref\": \"#/components/schemas/Delegator\"\n },\n \"type\": \"array\"\n },\n \"p2pAddr\": {\n \"description\": \"\\\"host:port\\\", with an IPv6 literal left unbracketed. Absent for a validator that registered\\nno network address\",\n \"type\": \"string\"\n },\n \"stake\": {\n \"description\": \"Total delegated stake, a 0x-prefixed hex quantity\",\n \"type\": \"string\"\n },\n \"stakeTableKey\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/BLSPublicKey\"\n }\n ],\n \"description\": \"Absent for a validator registered without one\"\n },\n \"stateVerKey\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/SchnorrPublicKey\"\n }\n ],\n \"description\": \"Absent for a validator registered without one\"\n },\n \"x25519Key\": {\n \"description\": \"X25519 public key for cliquenet, TaggedBase64 rather than x25519\'s own base58. Absent for a\\nvalidator that registered no network address\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ValidatorExit\": {\n \"properties\": {\n \"validator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ValidatorExitV2\": {\n \"properties\": {\n \"unlocksAt\": {\n \"description\": \"Unix timestamp in seconds, as a decimal string\",\n \"type\": \"string\"\n },\n \"validator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ValidatorRegistered\": {\n \"properties\": {\n \"account\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"blsVk\": {\n \"$ref\": \"#/components/schemas/Bn254G2Point\"\n },\n \"commission\": {\n \"description\": \"In basis points\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"schnorrVk\": {\n \"$ref\": \"#/components/schemas/EdOnBn254Point\"\n }\n },\n \"type\": \"object\"\n },\n \"ValidatorRegisteredV2\": {\n \"properties\": {\n \"account\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"blsSig\": {\n \"$ref\": \"#/components/schemas/Bn254G1Point\"\n },\n \"blsVk\": {\n \"$ref\": \"#/components/schemas/Bn254G2Point\"\n },\n \"commission\": {\n \"description\": \"In basis points\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"metadataUri\": {\n \"type\": \"string\"\n },\n \"schnorrSig\": {\n \"description\": \"The signature bytes the contract event carries, base64 in JSON, not TaggedBase64\",\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"schnorrVk\": {\n \"$ref\": \"#/components/schemas/EdOnBn254Point\"\n }\n },\n \"type\": \"object\"\n },\n \"ValidatorRegisteredV3\": {\n \"properties\": {\n \"account\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"blsSig\": {\n \"$ref\": \"#/components/schemas/Bn254G1Point\"\n },\n \"blsVk\": {\n \"$ref\": \"#/components/schemas/Bn254G2Point\"\n },\n \"commission\": {\n \"description\": \"In basis points\",\n \"format\": \"uint32\",\n \"type\": \"integer\"\n },\n \"metadataUri\": {\n \"type\": \"string\"\n },\n \"p2pAddr\": {\n \"type\": \"string\"\n },\n \"schnorrSig\": {\n \"description\": \"The signature bytes the contract event carries, base64 in JSON, not TaggedBase64\",\n \"format\": \"byte\",\n \"type\": \"string\"\n },\n \"schnorrVk\": {\n \"$ref\": \"#/components/schemas/EdOnBn254Point\"\n },\n \"x25519Key\": {\n \"description\": \"The 32 key bytes the contract event carries, base64 in JSON, not the TaggedBase64 form the\\nnode module serves\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ValidatorsResponse\": {\n \"properties\": {\n \"validators\": {\n \"description\": \"Sorted by account, since v1 keys these by account and a map has no order\",\n \"items\": {\n \"$ref\": \"#/components/schemas/Validator\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"VersionedDaCommittee\": {\n \"properties\": {\n \"committee\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/PeerConfig\"\n },\n \"type\": \"array\"\n },\n \"startEpoch\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"startVersion\": {\n \"description\": \"Version the committee takes effect at, e.g. \\\"0.6\\\"\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"VidCommon\": {\n \"properties\": {\n \"v0\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AdvzCommon\"\n }\n ],\n \"description\": \"Member of oneof `common`.\"\n },\n \"v1\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AvidmCommon\"\n }\n ],\n \"description\": \"Member of oneof `common`.\"\n },\n \"v2\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AvidmGf2Common\"\n }\n ],\n \"description\": \"Member of oneof `common`.\"\n }\n },\n \"type\": \"object\"\n },\n \"VidCommonRangeResponse\": {\n \"properties\": {\n \"vidCommon\": {\n \"items\": {\n \"$ref\": \"#/components/schemas/VidCommonResponse\"\n },\n \"type\": \"array\"\n }\n },\n \"type\": \"object\"\n },\n \"VidCommonResponse\": {\n \"properties\": {\n \"blockHash\": {\n \"description\": \"TaggedBase64 `BLOCK~`\",\n \"type\": \"string\"\n },\n \"common\": {\n \"$ref\": \"#/components/schemas/VidCommon\"\n },\n \"height\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"payloadHash\": {\n \"description\": \"VID commitment to the payload, the TaggedBase64 tag names the scheme\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"VidShareResponse\": {\n \"description\": \"The arm names the VID scheme the block was disseminated with\",\n \"properties\": {\n \"v0\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AdvzVidShare\"\n }\n ],\n \"description\": \"Member of oneof `share`.\"\n },\n \"v1\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AvidmVidShare\"\n }\n ],\n \"description\": \"Member of oneof `share`.\"\n },\n \"v2\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/AvidmGf2VidShare\"\n }\n ],\n \"description\": \"Member of oneof `share`.\"\n }\n },\n \"type\": \"object\"\n },\n \"ViewChangeEvidence2\": {\n \"description\": \"Why a proposal\'s justify QC is not from the immediately preceding view\",\n \"properties\": {\n \"timeout\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/TimeoutCertificate2\"\n }\n ],\n \"description\": \"Member of oneof `evidence`.\"\n },\n \"timeout3\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/TimeoutCertificate3\"\n }\n ],\n \"description\": \"Member of oneof `evidence`.\"\n },\n \"viewSync\": {\n \"allOf\": [\n {\n \"$ref\": \"#/components/schemas/ViewSyncFinalizeCertificate2\"\n }\n ],\n \"description\": \"Member of oneof `evidence`.\"\n }\n },\n \"type\": \"object\"\n },\n \"ViewSyncFinalizeCertificate2\": {\n \"properties\": {\n \"data\": {\n \"$ref\": \"#/components/schemas/ViewSyncFinalizeData2\"\n },\n \"signatures\": {\n \"$ref\": \"#/components/schemas/QuorumSignatures\"\n },\n \"viewNumber\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"voteCommitment\": {\n \"description\": \"TaggedBase64 `COMMIT~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"ViewSyncFinalizeData2\": {\n \"properties\": {\n \"epoch\": {\n \"description\": \"Absent before proof of stake\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"relay\": {\n \"description\": \"Relay that coordinated the view sync\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"round\": {\n \"description\": \"View the sync finalized on\",\n \"format\": \"uint64\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"Vote2Data\": {\n \"properties\": {\n \"blockNumber\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"epoch\": {\n \"format\": \"uint64\",\n \"type\": \"string\"\n },\n \"leafCommit\": {\n \"description\": \"Commitment to the leaf voted on, TaggedBase64 `COMMIT~`\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"X25519KeyUpdated\": {\n \"properties\": {\n \"validator\": {\n \"description\": \"`0x`-prefixed hex\",\n \"type\": \"string\"\n },\n \"x25519Key\": {\n \"description\": \"The 32 key bytes the contract event carries, base64 in JSON, not the TaggedBase64 form the\\nnode module serves\",\n \"format\": \"byte\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n }\n }\n },\n \"info\": {\n \"description\": \"Generated from the proto definitions in crates/espresso/api/proto/v2. JSON follows canonical protoJSON: camelCase field names, 64-bit integers as decimal strings, bytes as base64, enums as their value names, oneofs flattened, defaults omitted. Query parameters accept both the proto field name and its camelCase form.\",\n \"title\": \"Espresso Node API v2\",\n \"version\": \"2\"\n },\n \"openapi\": \"3.0.3\",\n \"paths\": {\n \"/v2/availability/block\": {\n \"get\": {\n \"description\": \"Get one block, header and payload together. Exactly one of height, hash or payload_hash selects it. None or several is a 400\",\n \"operationId\": \"GetBlock\",\n \"parameters\": [\n {\n \"description\": \"Look up by block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by block hash, TaggedBase64 `BLOCK~`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Look up by payload hash, which may match several blocks, the first is returned\",\n \"in\": \"query\",\n \"name\": \"payload_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/BlockResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get one block, header and payload together.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/block-range\": {\n \"get\": {\n \"operationId\": \"GetBlockRange\",\n \"parameters\": [\n {\n \"description\": \"First height in the range (inclusive)\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"in\": \"query\",\n \"name\": \"until\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/BlockRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the blocks of a height range, bounded by the large-object range limit\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/block-ranges\": {\n \"post\": {\n \"description\": \"Get the blocks of several height ranges in one request, for peers catching up. The whole set is served or none of it, in the order the ranges were given\",\n \"operationId\": \"GetBlockRanges\",\n \"parameters\": [],\n \"requestBody\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/GetBlockRangesRequest\"\n }\n }\n },\n \"required\": true\n },\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/BlockRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the blocks of several height ranges in one request, for peers catching up.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/block-summary\": {\n \"get\": {\n \"operationId\": \"GetBlockSummary\",\n \"parameters\": [\n {\n \"description\": \"Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/BlockSummaryResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a block\'s header with its hash, size and transaction count, without the payload\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/block-summary-range\": {\n \"get\": {\n \"operationId\": \"GetBlockSummaryRange\",\n \"parameters\": [\n {\n \"description\": \"First height in the range (inclusive)\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"in\": \"query\",\n \"name\": \"until\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/BlockSummaryRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the block summaries of a height range, bounded by the large-object range limit\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/cert2\": {\n \"get\": {\n \"description\": \"Get the new protocol\'s phase-2 certificate for a height. Not found before the new protocol took over, or while the node is still fetching it\",\n \"operationId\": \"GetCert2\",\n \"parameters\": [\n {\n \"description\": \"Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Cert2Response\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the new protocol\'s phase-2 certificate for a height.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/header\": {\n \"get\": {\n \"description\": \"Get one block header. Exactly one of height, hash or payload_hash selects the block. None or several is a 400\",\n \"operationId\": \"GetHeader\",\n \"parameters\": [\n {\n \"description\": \"Look up by block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by block hash, TaggedBase64 `BLOCK~`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Look up by payload hash, which may match several blocks, the first is returned\",\n \"in\": \"query\",\n \"name\": \"payload_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/HeaderResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get one block header.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/header-range\": {\n \"get\": {\n \"operationId\": \"GetHeaderRange\",\n \"parameters\": [\n {\n \"description\": \"First height in the range (inclusive)\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"in\": \"query\",\n \"name\": \"until\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/HeaderRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the headers of a height range, bounded by the large-object range limit\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/incorrect-encoding-proof\": {\n \"get\": {\n \"operationId\": \"GetIncorrectEncodingProof\",\n \"parameters\": [\n {\n \"description\": \"Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Required, a 32-bit namespace id\",\n \"in\": \"query\",\n \"name\": \"namespace\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/IncorrectEncodingProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the proof that an AvidM block\'s disperser encoded a namespace incorrectly\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/leaf\": {\n \"get\": {\n \"description\": \"Get one leaf with the QC certifying it. Exactly one of height or hash selects it. None or both is a 400\",\n \"operationId\": \"GetLeaf\",\n \"parameters\": [\n {\n \"description\": \"Look up by block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by leaf hash, TaggedBase64 `COMMIT~`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LeafResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get one leaf with the QC certifying it.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/leaf-range\": {\n \"get\": {\n \"operationId\": \"GetLeafRange\",\n \"parameters\": [\n {\n \"description\": \"First height in the range (inclusive)\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"in\": \"query\",\n \"name\": \"until\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LeafRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the leaves of a height range, bounded by the small-object range limit\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/leaf-ranges\": {\n \"post\": {\n \"description\": \"Get the leaves of several height ranges in one request, for peers catching up. The whole set is served or none of it, in the order the ranges were given\",\n \"operationId\": \"GetLeafRanges\",\n \"parameters\": [],\n \"requestBody\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/GetLeafRangesRequest\"\n }\n }\n },\n \"required\": true\n },\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LeafRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the leaves of several height ranges in one request, for peers catching up.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/limits\": {\n \"get\": {\n \"operationId\": \"GetLimits\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LimitsResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the most objects one range query may load, per object class\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/namespace-proof\": {\n \"get\": {\n \"description\": \"Get a namespace\'s transactions and its proof against one block\'s payload commitment. Exactly one of height, hash or payload_hash selects the block. None or several is a 400\",\n \"operationId\": \"GetNamespaceProof\",\n \"parameters\": [\n {\n \"description\": \"Look up by block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by block hash, TaggedBase64 `BLOCK~`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Look up by payload hash, which may match several blocks, the first is returned\",\n \"in\": \"query\",\n \"name\": \"payload_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Required, a 32-bit namespace id\",\n \"in\": \"query\",\n \"name\": \"namespace\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/NamespaceProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a namespace\'s transactions and its proof against one block\'s payload commitment.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/namespace-proof-range\": {\n \"get\": {\n \"operationId\": \"GetNamespaceProofRange\",\n \"parameters\": [\n {\n \"description\": \"First height in the range (inclusive)\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"in\": \"query\",\n \"name\": \"until\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Required, a 32-bit namespace id\",\n \"in\": \"query\",\n \"name\": \"namespace\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/NamespaceProofRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a namespace\'s proofs over a height range, bounded by the namespace-proof range limit\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/payload\": {\n \"get\": {\n \"description\": \"Get one payload. Exactly one of height, hash or block_hash selects it. None or several is a 400\",\n \"operationId\": \"GetPayload\",\n \"parameters\": [\n {\n \"description\": \"Look up by block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by payload hash (the VID commitment), which may match several blocks, the first is\\nreturned\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Look up by the hash of the block carrying the payload, TaggedBase64 `BLOCK~`\",\n \"in\": \"query\",\n \"name\": \"block_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/PayloadResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get one payload.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/payload-range\": {\n \"get\": {\n \"operationId\": \"GetPayloadRange\",\n \"parameters\": [\n {\n \"description\": \"First height in the range (inclusive)\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"in\": \"query\",\n \"name\": \"until\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/PayloadRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the payloads of a height range, bounded by the large-object range limit\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/state-cert\": {\n \"get\": {\n \"operationId\": \"GetStateCert\",\n \"parameters\": [\n {\n \"description\": \"Required\",\n \"in\": \"query\",\n \"name\": \"epoch\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/StateCertV1Response\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the light-client state certificate finalizing an epoch, in its first form\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/state-cert-v2\": {\n \"get\": {\n \"operationId\": \"GetStateCertV2\",\n \"parameters\": [\n {\n \"description\": \"Required\",\n \"in\": \"query\",\n \"name\": \"epoch\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/StateCertV2Response\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the light-client state certificate finalizing an epoch, with both contract signatures\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/stream/blocks\": {\n \"get\": {\n \"operationId\": \"StreamBlocks\",\n \"parameters\": [\n {\n \"description\": \"Required, the first height to deliver\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"text/event-stream\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/BlockResponse\"\n }\n }\n },\n \"description\": \"Server-sent events: one `data:` frame per item holding the JSON of the response message, with keep-alive comments between items. An error is an `event: error` frame holding the error envelope, and ends the stream\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Subscribe to blocks from a height onward, as server-sent events\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/stream/headers\": {\n \"get\": {\n \"operationId\": \"StreamHeaders\",\n \"parameters\": [\n {\n \"description\": \"Required, the first height to deliver\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"text/event-stream\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/HeaderResponse\"\n }\n }\n },\n \"description\": \"Server-sent events: one `data:` frame per item holding the JSON of the response message, with keep-alive comments between items. An error is an `event: error` frame holding the error envelope, and ends the stream\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Subscribe to headers from a height onward, as server-sent events\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/stream/leaves\": {\n \"get\": {\n \"description\": \"Subscribe to leaves from a height onward. Over REST this is server-sent events, one JSON `data:` frame per leaf. A stream follows the chain head and never ends on its own\",\n \"operationId\": \"StreamLeaves\",\n \"parameters\": [\n {\n \"description\": \"Required, the first height to deliver\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"text/event-stream\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LeafResponse\"\n }\n }\n },\n \"description\": \"Server-sent events: one `data:` frame per item holding the JSON of the response message, with keep-alive comments between items. An error is an `event: error` frame holding the error envelope, and ends the stream\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Subscribe to leaves from a height onward.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/stream/namespace-proofs\": {\n \"get\": {\n \"operationId\": \"StreamNamespaceProofs\",\n \"parameters\": [\n {\n \"description\": \"Required, the first height to deliver\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Required, a 32-bit namespace id\",\n \"in\": \"query\",\n \"name\": \"namespace\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"text/event-stream\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/NamespaceProofResponse\"\n }\n }\n },\n \"description\": \"Server-sent events: one `data:` frame per item holding the JSON of the response message, with keep-alive comments between items. An error is an `event: error` frame holding the error envelope, and ends the stream\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Subscribe to one namespace\'s proofs from a height onward, as server-sent events\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/stream/payloads\": {\n \"get\": {\n \"operationId\": \"StreamPayloads\",\n \"parameters\": [\n {\n \"description\": \"Required, the first height to deliver\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"text/event-stream\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/PayloadResponse\"\n }\n }\n },\n \"description\": \"Server-sent events: one `data:` frame per item holding the JSON of the response message, with keep-alive comments between items. An error is an `event: error` frame holding the error envelope, and ends the stream\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Subscribe to payloads from a height onward, as server-sent events\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/stream/transactions\": {\n \"get\": {\n \"operationId\": \"StreamTransactions\",\n \"parameters\": [\n {\n \"description\": \"Required, the first height to deliver\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Deliver only this namespace\'s transactions (a 32-bit id), every namespace when absent\",\n \"in\": \"query\",\n \"name\": \"namespace\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"text/event-stream\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/TransactionResponse\"\n }\n }\n },\n \"description\": \"Server-sent events: one `data:` frame per item holding the JSON of the response message, with keep-alive comments between items. An error is an `event: error` frame holding the error envelope, and ends the stream\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Subscribe to transactions from a height onward, optionally of one namespace, as server-sent events\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/stream/vid-common\": {\n \"get\": {\n \"operationId\": \"StreamVidCommon\",\n \"parameters\": [\n {\n \"description\": \"Required, the first height to deliver\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"text/event-stream\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/VidCommonResponse\"\n }\n }\n },\n \"description\": \"Server-sent events: one `data:` frame per item holding the JSON of the response message, with keep-alive comments between items. An error is an `event: error` frame holding the error envelope, and ends the stream\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Subscribe to VID common data from a height onward, as server-sent events\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/transaction\": {\n \"get\": {\n \"description\": \"Get one transaction. Either height and index together, or hash, selects it. Anything else is a 400\",\n \"operationId\": \"GetTransaction\",\n \"parameters\": [\n {\n \"description\": \"Look up by position: the block height, together with index\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by position: the transaction\'s index in the block, together with height\",\n \"in\": \"query\",\n \"name\": \"index\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by transaction hash, TaggedBase64 `TX~`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/TransactionResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get one transaction.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/transaction-proof\": {\n \"get\": {\n \"description\": \"Get one transaction with its inclusion proof. Either height and index together, or hash, selects it. Anything else is a 400\",\n \"operationId\": \"GetTransactionProof\",\n \"parameters\": [\n {\n \"description\": \"Look up by position: the block height, together with index\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by position: the transaction\'s index in the block, together with height\",\n \"in\": \"query\",\n \"name\": \"index\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by transaction hash, TaggedBase64 `TX~`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/TransactionWithProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get one transaction with its inclusion proof.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/vid-common\": {\n \"get\": {\n \"description\": \"Get the VID common data of one block. Exactly one of height, hash or payload_hash selects the block. None or several is a 400\",\n \"operationId\": \"GetVidCommon\",\n \"parameters\": [\n {\n \"description\": \"Look up by block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by block hash, TaggedBase64 `BLOCK~`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Look up by payload hash, which may match several blocks, the first is returned\",\n \"in\": \"query\",\n \"name\": \"payload_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/VidCommonResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the VID common data of one block.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/vid-common-range\": {\n \"get\": {\n \"operationId\": \"GetVidCommonRange\",\n \"parameters\": [\n {\n \"description\": \"First height in the range (inclusive)\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"in\": \"query\",\n \"name\": \"until\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/VidCommonRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the VID common data of a height range, bounded by the small-object range limit\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/availability/vid-common-ranges\": {\n \"post\": {\n \"description\": \"Get the VID common data of several height ranges in one request, for peers catching up. The whole set is served or none of it, in the order the ranges were given\",\n \"operationId\": \"GetVidCommonRanges\",\n \"parameters\": [],\n \"requestBody\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/GetVidCommonRangesRequest\"\n }\n }\n },\n \"required\": true\n },\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/VidCommonRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the VID common data of several height ranges in one request, for peers catching up.\",\n \"tags\": [\n \"Availability\"\n ]\n }\n },\n \"/v2/catchup/blocks-frontier\": {\n \"get\": {\n \"operationId\": \"GetCatchupBlocksFrontier\",\n \"parameters\": [\n {\n \"description\": \"Height the asking node is replaying. Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"View the asking node is replaying. Required\",\n \"in\": \"query\",\n \"name\": \"view\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/MerklePathResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the block merkle tree frontier at a height and view\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/catchup/cert2\": {\n \"get\": {\n \"operationId\": \"GetCatchupCert2\",\n \"parameters\": [\n {\n \"description\": \"Height the certificate finalizes. Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Cert2Response\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the phase-2 certificate finalizing a height\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/catchup/chain-config\": {\n \"get\": {\n \"operationId\": \"GetCatchupChainConfig\",\n \"parameters\": [\n {\n \"description\": \"Commitment of the configuration to resolve, TaggedBase64 `CHAIN_CONFIG~`. Required\",\n \"in\": \"query\",\n \"name\": \"commitment\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/CatchupChainConfigResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Resolve a chain configuration by its commitment\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/catchup/fee-account\": {\n \"get\": {\n \"operationId\": \"GetCatchupFeeAccount\",\n \"parameters\": [\n {\n \"description\": \"Height the asking node is replaying. Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"View the asking node is replaying. Required\",\n \"in\": \"query\",\n \"name\": \"view\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Account to prove, hex with an optional `0x` prefix. Required\",\n \"in\": \"query\",\n \"name\": \"address\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/FeeAccountProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Prove one fee account\'s balance at a height and view\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/catchup/fee-accounts\": {\n \"post\": {\n \"operationId\": \"GetCatchupFeeAccounts\",\n \"parameters\": [],\n \"requestBody\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/GetCatchupFeeAccountsRequest\"\n }\n }\n },\n \"required\": true\n },\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/FeeMerkleTreeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the fee merkle tree holding the given accounts at a height and view\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/catchup/leaf-chain\": {\n \"get\": {\n \"operationId\": \"GetCatchupLeafChain\",\n \"parameters\": [\n {\n \"description\": \"Height of the chain\'s first leaf, the one the chain proves decided. Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/CatchupLeafChainResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the leaves from the given height up to the next decide\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/catchup/reward-account\": {\n \"get\": {\n \"description\": \"Prove one reward account\'s balance in the v1 tree. An account with no entry gets an absence proof and a zero balance\",\n \"operationId\": \"GetCatchupRewardAccount\",\n \"parameters\": [\n {\n \"description\": \"Height the asking node is replaying. Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"View the asking node is replaying. Required\",\n \"in\": \"query\",\n \"name\": \"view\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Account to prove, hex with an optional `0x` prefix. Required\",\n \"in\": \"query\",\n \"name\": \"address\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/RewardAccountProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Prove one reward account\'s balance in the v1 tree.\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/catchup/reward-account-v2\": {\n \"get\": {\n \"description\": \"Prove one reward account\'s balance in the v2 tree. An account with no entry gets an absence proof and a zero balance\",\n \"operationId\": \"GetCatchupRewardAccountV2\",\n \"parameters\": [\n {\n \"description\": \"Height the asking node is replaying. Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"View the asking node is replaying. Required\",\n \"in\": \"query\",\n \"name\": \"view\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Account to prove, hex with an optional `0x` prefix. Required\",\n \"in\": \"query\",\n \"name\": \"address\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/RewardAccountProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Prove one reward account\'s balance in the v2 tree.\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/catchup/reward-accounts\": {\n \"post\": {\n \"operationId\": \"GetCatchupRewardAccounts\",\n \"parameters\": [],\n \"requestBody\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/GetCatchupRewardAccountsRequest\"\n }\n }\n },\n \"required\": true\n },\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/RewardMerkleTreeV1Response\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the v1 reward merkle tree holding the given accounts\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/catchup/reward-merkle-tree-v2\": {\n \"get\": {\n \"operationId\": \"GetCatchupRewardMerkleTreeV2\",\n \"parameters\": [\n {\n \"description\": \"Height the asking node is replaying. Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"View the asking node is replaying. Required\",\n \"in\": \"query\",\n \"name\": \"view\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/RewardMerkleTreeV2Response\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the whole v2 reward merkle tree at a height and view, in the serialized form the merklized-state reward tree route serves\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/catchup/state-cert\": {\n \"get\": {\n \"operationId\": \"GetCatchupStateCert\",\n \"parameters\": [\n {\n \"description\": \"Epoch the certificate closes. Required\",\n \"in\": \"query\",\n \"name\": \"epoch\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/StateCertV2Response\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the certificate closing an epoch\",\n \"tags\": [\n \"Catchup\"\n ]\n }\n },\n \"/v2/config/env\": {\n \"get\": {\n \"operationId\": \"GetEnv\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/EnvResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the allowlisted environment variables of this node, set or not\",\n \"tags\": [\n \"Config\"\n ]\n }\n },\n \"/v2/config/hotshot\": {\n \"get\": {\n \"operationId\": \"GetHotshotConfig\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/HotshotConfigResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the consensus parameters this node runs with\",\n \"tags\": [\n \"Config\"\n ]\n }\n },\n \"/v2/config/runtime\": {\n \"get\": {\n \"operationId\": \"GetRuntimeConfig\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/RuntimeConfigResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the node\'s effective runtime configuration\",\n \"tags\": [\n \"Config\"\n ]\n }\n },\n \"/v2/database/migration-status\": {\n \"get\": {\n \"operationId\": \"GetMigrationStatus\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/MigrationStatusResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the progress of the deferred background migrations\",\n \"tags\": [\n \"Database\"\n ]\n }\n },\n \"/v2/database/table-sizes\": {\n \"get\": {\n \"operationId\": \"GetTableSizes\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/TableSizesResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the row count and disk usage of every database table\",\n \"tags\": [\n \"Database\"\n ]\n }\n },\n \"/v2/explorer/block\": {\n \"get\": {\n \"operationId\": \"GetExplorerBlockDetail\",\n \"parameters\": [\n {\n \"description\": \"Height of the block. Absent with `hash` absent too means the latest block\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"TaggedBase64 `BLOCK~`, an alternative to `height`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/ExplorerBlockDetailResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get one block in full\",\n \"tags\": [\n \"Explorer\"\n ]\n }\n },\n \"/v2/explorer/blocks\": {\n \"get\": {\n \"operationId\": \"GetExplorerBlockSummaries\",\n \"parameters\": [\n {\n \"description\": \"How many blocks to return, counting back from the target, at most 100. Required\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height of the newest block to return. Absent with `hash` absent too means the latest block\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"TaggedBase64 `BLOCK~`, an alternative to `height`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/ExplorerBlockSummariesResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a window of blocks ending at the target block\",\n \"tags\": [\n \"Explorer\"\n ]\n }\n },\n \"/v2/explorer/search\": {\n \"get\": {\n \"operationId\": \"GetExplorerSearch\",\n \"parameters\": [\n {\n \"description\": \"A block hash, TaggedBase64 `BLOCK~`, or a transaction hash, TaggedBase64 `TX~`. Required\",\n \"in\": \"query\",\n \"name\": \"query\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/ExplorerSearchResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Search the chain for blocks and transactions matching a hash\",\n \"tags\": [\n \"Explorer\"\n ]\n }\n },\n \"/v2/explorer/summary\": {\n \"get\": {\n \"operationId\": \"GetExplorerSummary\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/ExplorerSummaryResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get an at-a-glance snapshot of the chain\",\n \"tags\": [\n \"Explorer\"\n ]\n }\n },\n \"/v2/explorer/transaction\": {\n \"get\": {\n \"operationId\": \"GetExplorerTransactionDetail\",\n \"parameters\": [\n {\n \"description\": \"Height of the block holding the transaction, paired with `offset`\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Position of the transaction within its block, paired with `height`\",\n \"in\": \"query\",\n \"name\": \"offset\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"TaggedBase64 `TX~`, an alternative to `height` and `offset`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/ExplorerTransactionDetailResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get one transaction in full, with its payloads\",\n \"tags\": [\n \"Explorer\"\n ]\n }\n },\n \"/v2/explorer/transactions\": {\n \"get\": {\n \"operationId\": \"GetExplorerTransactionSummaries\",\n \"parameters\": [\n {\n \"description\": \"How many transactions to return, counting back from the target, at most 100. Required\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height of the block to start from, paired with `offset`\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"How many transactions to skip back from the last transaction of the block at `height`, paired\\nwith `height`\",\n \"in\": \"query\",\n \"name\": \"offset\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"TaggedBase64 `TX~`, an alternative to `height` and `offset`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Return only transactions in the block at this height. Mutually exclusive with `namespace`\",\n \"in\": \"query\",\n \"name\": \"block\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Return only transactions in this namespace, a 32-bit id. Mutually exclusive with `block`\",\n \"in\": \"query\",\n \"name\": \"namespace\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/ExplorerTransactionSummariesResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a window of transactions ending at the target transaction\",\n \"tags\": [\n \"Explorer\"\n ]\n }\n },\n \"/v2/light-client/header\": {\n \"get\": {\n \"operationId\": \"GetLightClientHeaderProof\",\n \"parameters\": [\n {\n \"description\": \"Height of the block merkle tree root the proof is against, which the client already trusts.\\nRequired, and must be above the requested header\",\n \"in\": \"query\",\n \"name\": \"root\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by block hash, TaggedBase64 `BLOCK~`\",\n \"in\": \"query\",\n \"name\": \"block_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Look up by payload hash, which may match several blocks, of which the first is used\",\n \"in\": \"query\",\n \"name\": \"payload_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LightClientHeaderProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a header with a proof of membership under a trusted block merkle tree root\",\n \"tags\": [\n \"LightClient\"\n ]\n }\n },\n \"/v2/light-client/leaf\": {\n \"get\": {\n \"operationId\": \"GetLightClientLeafProof\",\n \"parameters\": [\n {\n \"description\": \"Look up by block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Look up by leaf hash, TaggedBase64 `COMMIT~`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Look up by block hash, TaggedBase64 `BLOCK~`\",\n \"in\": \"query\",\n \"name\": \"block_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Look up by payload hash, which may match several blocks, of which the first is used\",\n \"in\": \"query\",\n \"name\": \"payload_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"A height the client already trusts as finalized, which must be above the requested one. The\\nleaf chain then stops at the parent of the leaf at this height, which the client checks\\nagainst the leaf it trusts, with a `FinalityAssumption` proof, unless certificates prove\\nfinality sooner. It is ignored when it lies further past the requested height than one proof\\nmay span, and on a new-protocol chain when a stored cert2 gives a shorter chain\",\n \"in\": \"query\",\n \"name\": \"finalized\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LightClientLeafProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a leaf with a proof that it is finalized\",\n \"tags\": [\n \"LightClient\"\n ]\n }\n },\n \"/v2/light-client/namespace\": {\n \"get\": {\n \"operationId\": \"GetLightClientNamespaceProof\",\n \"parameters\": [\n {\n \"description\": \"Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Required, a 32-bit id\",\n \"in\": \"query\",\n \"name\": \"namespace\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LightClientNamespaceProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a proof of one namespace\'s transactions in a block, checked against its header\",\n \"tags\": [\n \"LightClient\"\n ]\n }\n },\n \"/v2/light-client/namespace-range\": {\n \"get\": {\n \"operationId\": \"GetLightClientNamespaceProofRange\",\n \"parameters\": [\n {\n \"description\": \"Required, the first height in the range (inclusive), below `until`\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"in\": \"query\",\n \"name\": \"until\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Required, a 32-bit id\",\n \"in\": \"query\",\n \"name\": \"namespace\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LightClientNamespaceProofRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get one namespace\'s proofs for a range of blocks\",\n \"tags\": [\n \"LightClient\"\n ]\n }\n },\n \"/v2/light-client/namespaces-range\": {\n \"post\": {\n \"operationId\": \"GetLightClientNamespacesProofRange\",\n \"parameters\": [],\n \"requestBody\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/GetLightClientNamespacesProofRangeRequest\"\n }\n }\n },\n \"required\": true\n },\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LightClientNamespacesProofRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get several namespaces\' proofs for a range of blocks\",\n \"tags\": [\n \"LightClient\"\n ]\n }\n },\n \"/v2/light-client/payload\": {\n \"get\": {\n \"operationId\": \"GetLightClientPayloadProof\",\n \"parameters\": [\n {\n \"description\": \"Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LightClientPayloadProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a block payload with the data to check it against its header\",\n \"tags\": [\n \"LightClient\"\n ]\n }\n },\n \"/v2/light-client/payload-range\": {\n \"get\": {\n \"operationId\": \"GetLightClientPayloadProofRange\",\n \"parameters\": [\n {\n \"description\": \"Required, the first height in the range (inclusive), below `until`\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Height just past the last one in the range (exclusive)\",\n \"in\": \"query\",\n \"name\": \"until\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LightClientPayloadProofRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get payload proofs for a range of blocks\",\n \"tags\": [\n \"LightClient\"\n ]\n }\n },\n \"/v2/light-client/payload-ranges\": {\n \"post\": {\n \"operationId\": \"GetLightClientPayloadProofRanges\",\n \"parameters\": [],\n \"requestBody\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/GetLightClientPayloadProofRangesRequest\"\n }\n }\n },\n \"required\": true\n },\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LightClientPayloadProofRangeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get payload proofs for several ranges of blocks in one request\",\n \"tags\": [\n \"LightClient\"\n ]\n }\n },\n \"/v2/light-client/stake-table\": {\n \"get\": {\n \"operationId\": \"GetLightClientStakeTable\",\n \"parameters\": [\n {\n \"description\": \"Required, and at least two past the first epoch\",\n \"in\": \"query\",\n \"name\": \"epoch\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/LightClientStakeTableResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the stake table events that turn the previous epoch\'s stake table into this epoch\'s\",\n \"tags\": [\n \"LightClient\"\n ]\n }\n },\n \"/v2/merklized-state/block/path\": {\n \"get\": {\n \"description\": \"Get the Merkle path to one leaf of the block merkle tree, which commits to past block headers. Exactly one of height or commit selects the snapshot. None or both is a 400\",\n \"operationId\": \"GetBlockStatePath\",\n \"parameters\": [\n {\n \"description\": \"Required, the block height to look up. A snapshot at height `h` commits to the headers below\\n`h`, so a key at or above the snapshot height gets a non-membership path\",\n \"in\": \"query\",\n \"name\": \"key\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Snapshot the tree as of this block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Snapshot the tree at this root, TaggedBase64 `MERKLE_COMM~`\",\n \"in\": \"query\",\n \"name\": \"commit\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/MerklePathResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the Merkle path to one leaf of the block merkle tree, which commits to past block headers.\",\n \"tags\": [\n \"MerklizedState\"\n ]\n }\n },\n \"/v2/merklized-state/fee/balance\": {\n \"get\": {\n \"operationId\": \"GetLatestFeeBalance\",\n \"parameters\": [\n {\n \"description\": \"Required, the account to look up, `0x`-prefixed hex\",\n \"in\": \"query\",\n \"name\": \"address\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/FeeBalanceResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get an account\'s fee balance in the newest persisted state\",\n \"tags\": [\n \"MerklizedState\"\n ]\n }\n },\n \"/v2/merklized-state/fee/path\": {\n \"get\": {\n \"description\": \"Get the Merkle path to one account of the fee merkle tree, which holds the fee balances. Exactly one of height or commit selects the snapshot. None or both is a 400\",\n \"operationId\": \"GetFeeStatePath\",\n \"parameters\": [\n {\n \"description\": \"Required, the account to look up, `0x`-prefixed hex\",\n \"in\": \"query\",\n \"name\": \"address\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Snapshot the tree as of this block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Snapshot the tree at this root, TaggedBase64 `MERKLE_COMM~`\",\n \"in\": \"query\",\n \"name\": \"commit\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/MerklePathResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the Merkle path to one account of the fee merkle tree, which holds the fee balances.\",\n \"tags\": [\n \"MerklizedState\"\n ]\n }\n },\n \"/v2/merklized-state/height\": {\n \"get\": {\n \"operationId\": \"GetStateHeight\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/StateHeightResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the height of the newest persisted merklized state, which every tree shares\",\n \"tags\": [\n \"MerklizedState\"\n ]\n }\n },\n \"/v2/merklized-state/reward/amounts\": {\n \"get\": {\n \"operationId\": \"GetRewardAmounts\",\n \"parameters\": [\n {\n \"description\": \"Required, a block height at which this node stored the tree. Any other height is not found\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Required, the index of the first entry to return. Past the last entry is not found\",\n \"in\": \"query\",\n \"name\": \"offset\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Required, the most entries to return, at most 10000\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/RewardAmountsResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a page of reward amounts at a block height\",\n \"tags\": [\n \"RewardState\"\n ]\n }\n },\n \"/v2/merklized-state/reward/balance\": {\n \"get\": {\n \"operationId\": \"GetRewardBalance\",\n \"parameters\": [\n {\n \"description\": \"Required, the account to look up, hex with an optional `0x` prefix\",\n \"in\": \"query\",\n \"name\": \"address\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"A block height the light client contract finalized, at which this node stored the account\'s\\nproof. Absent means the newest such height. Any other height is not found\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/RewardBalanceResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get an account\'s lifetime rewards at a height finalized by the light client contract, or at the newest one\",\n \"tags\": [\n \"RewardState\"\n ]\n }\n },\n \"/v2/merklized-state/reward/claim-input\": {\n \"get\": {\n \"operationId\": \"GetRewardClaimInput\",\n \"parameters\": [\n {\n \"description\": \"Required, the account to claim for, hex with an optional `0x` prefix\",\n \"in\": \"query\",\n \"name\": \"address\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Required, and must match the height finalized in the light client contract\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/RewardClaimInputResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get everything needed to call claimRewards on the L1 contract\",\n \"tags\": [\n \"RewardState\"\n ]\n }\n },\n \"/v2/merklized-state/reward/proof\": {\n \"get\": {\n \"operationId\": \"GetRewardAccountProof\",\n \"parameters\": [\n {\n \"description\": \"Required, the account to look up, hex with an optional `0x` prefix\",\n \"in\": \"query\",\n \"name\": \"address\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"A block height the light client contract finalized, at which this node stored the account\'s\\nproof. Absent means the newest such height. Any other height is not found\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/RewardAccountProofResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get an account\'s lifetime rewards with the Merkle proof backing them, at a height finalized by the light client contract, or at the newest one\",\n \"tags\": [\n \"RewardState\"\n ]\n }\n },\n \"/v2/merklized-state/reward/tree\": {\n \"get\": {\n \"operationId\": \"GetRewardMerkleTreeV2\",\n \"parameters\": [\n {\n \"description\": \"Required, a block height at which this node stored the tree. Any other height is not found\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/RewardMerkleTreeV2Response\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get this node\'s serialized RewardMerkleTreeV2 snapshot at a block height\",\n \"tags\": [\n \"RewardState\"\n ]\n }\n },\n \"/v2/node/all-validators\": {\n \"get\": {\n \"operationId\": \"GetAllValidators\",\n \"parameters\": [\n {\n \"description\": \"Epoch whose registered validators to page through. Required\",\n \"in\": \"query\",\n \"name\": \"epoch\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Registered validators are ordered by account, so a page is stable. Required\",\n \"in\": \"query\",\n \"name\": \"offset\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Validators to return, at most 1000. Required\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/ValidatorsResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get a page of every registered validator in an epoch, eligible or not\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/block-height\": {\n \"get\": {\n \"description\": \"Get the height of the chain as this node sees it. `/v2/status/block-height` answers the same question; both exist because v1 has both, and a client watching one module should not have to call into another.\",\n \"operationId\": \"GetNodeBlockHeight\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/NodeBlockHeightResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the height of the chain as this node sees it.\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/block-reward\": {\n \"get\": {\n \"operationId\": \"GetBlockReward\",\n \"parameters\": [\n {\n \"description\": \"Epoch whose block reward to report; when absent, the protocol-wide reward used before\\nrewards became epoch-dependent\",\n \"in\": \"query\",\n \"name\": \"epoch\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/BlockRewardResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the block reward for an epoch\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/header-window\": {\n \"get\": {\n \"description\": \"Get the headers whose timestamps fall in a window, plus the headers either side of it. The window starts at exactly one of start_time, start_height or start_hash\",\n \"operationId\": \"GetHeaderWindow\",\n \"parameters\": [\n {\n \"description\": \"Start of the window, a Unix timestamp in seconds\",\n \"in\": \"query\",\n \"name\": \"start_time\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Start the window at this block, by height\",\n \"in\": \"query\",\n \"name\": \"start_height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Start the window at this block, named by its hash. TaggedBase64 `BLOCK~`\",\n \"in\": \"query\",\n \"name\": \"start_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"End of the window, a Unix timestamp in seconds. Required\",\n \"in\": \"query\",\n \"name\": \"end\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/HeaderWindowResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the headers whose timestamps fall in a window, plus the headers either side of it.\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/limits\": {\n \"get\": {\n \"operationId\": \"GetNodeLimits\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/NodeLimitsResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get this node\'s request limits\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/participation/proposal\": {\n \"get\": {\n \"operationId\": \"GetProposalParticipation\",\n \"parameters\": [\n {\n \"description\": \"The current epoch when absent\",\n \"in\": \"query\",\n \"name\": \"epoch\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/ParticipationResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get, per validator, the proposals it made as a fraction of the views it led in an epoch\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/participation/vote\": {\n \"get\": {\n \"operationId\": \"GetVoteParticipation\",\n \"parameters\": [\n {\n \"description\": \"The current epoch when absent\",\n \"in\": \"query\",\n \"name\": \"epoch\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/ParticipationResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get, per validator, the votes it cast as a fraction of an epoch\'s views\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/payload-size\": {\n \"get\": {\n \"operationId\": \"GetPayloadSize\",\n \"parameters\": [\n {\n \"description\": \"Lowest block height to include; the genesis block when absent\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Highest block height to include (inclusive); the latest aggregated block when absent,\\nwhich can lag the chain tip\",\n \"in\": \"query\",\n \"name\": \"to\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Measure only this namespace\'s payload data; every namespace when absent\",\n \"in\": \"query\",\n \"name\": \"namespace\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/PayloadSizeResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the cumulative payload size of a block range, optionally of one namespace\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/stake-table\": {\n \"get\": {\n \"operationId\": \"GetStakeTable\",\n \"parameters\": [\n {\n \"description\": \"The current epoch when absent\",\n \"in\": \"query\",\n \"name\": \"epoch\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/StakeTableResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the consensus stake table for an epoch\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/sync-status\": {\n \"get\": {\n \"operationId\": \"GetSyncStatus\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/SyncStatusResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get which blocks, leaves and VID common data this node stores, still fetches, or has pruned\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/transaction-count\": {\n \"get\": {\n \"operationId\": \"GetTransactionCount\",\n \"parameters\": [\n {\n \"description\": \"Lowest block height to include; the genesis block when absent\",\n \"in\": \"query\",\n \"name\": \"from\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Highest block height to include (inclusive); the latest aggregated block when absent,\\nwhich can lag the chain tip\",\n \"in\": \"query\",\n \"name\": \"to\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Count only this namespace\'s transactions; every namespace when absent\",\n \"in\": \"query\",\n \"name\": \"namespace\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/TransactionCountResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Count the transactions in a block range, optionally in one namespace\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/validators\": {\n \"get\": {\n \"operationId\": \"GetValidators\",\n \"parameters\": [\n {\n \"description\": \"Epoch whose eligible validators to report. Required\",\n \"in\": \"query\",\n \"name\": \"epoch\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/ValidatorsResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the validators eligible for consensus in an epoch\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/node/vid-share\": {\n \"get\": {\n \"operationId\": \"GetVidShare\",\n \"parameters\": [\n {\n \"description\": \"Block height\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Block hash, TaggedBase64 `BLOCK~`\",\n \"in\": \"query\",\n \"name\": \"hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Payload hash, which several blocks can share; the lowest wins. TaggedBase64, with the tag\\nset by the block\'s VID scheme, so pass a header\'s payload_commitment verbatim\",\n \"in\": \"query\",\n \"name\": \"payload_hash\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/VidShareResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get this node\'s VID share for a block, selected by exactly one of height, hash or payload_hash\",\n \"tags\": [\n \"Node\"\n ]\n }\n },\n \"/v2/state-signature/block\": {\n \"get\": {\n \"operationId\": \"GetStateSignature\",\n \"parameters\": [\n {\n \"description\": \"Block height the signature covers. Required\",\n \"in\": \"query\",\n \"name\": \"height\",\n \"required\": false,\n \"schema\": {\n \"format\": \"uint64\",\n \"type\": \"integer\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/StateSignatureResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get this node\'s light client state signature for a block\",\n \"tags\": [\n \"StateSignature\"\n ]\n }\n },\n \"/v2/status/block-height\": {\n \"get\": {\n \"operationId\": \"GetBlockHeight\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/BlockHeightResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the height of the latest decided block\",\n \"tags\": [\n \"Status\"\n ]\n }\n },\n \"/v2/status/keys\": {\n \"get\": {\n \"operationId\": \"GetNodeKeys\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/NodeKeysResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the node\'s public keys\",\n \"tags\": [\n \"Status\"\n ]\n }\n },\n \"/v2/status/success-rate\": {\n \"get\": {\n \"operationId\": \"GetSuccessRate\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/SuccessRateResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the fraction of views in which this node decided a block\",\n \"tags\": [\n \"Status\"\n ]\n }\n },\n \"/v2/status/time-since-last-decide\": {\n \"get\": {\n \"operationId\": \"GetTimeSinceLastDecide\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/TimeSinceLastDecideResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the seconds elapsed since this node last decided a block\",\n \"tags\": [\n \"Status\"\n ]\n }\n },\n \"/v2/submit/transaction\": {\n \"post\": {\n \"operationId\": \"SubmitTransaction\",\n \"parameters\": [],\n \"requestBody\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/SubmitTransactionRequest\"\n }\n }\n },\n \"required\": true\n },\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/SubmitTransactionResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Submit a transaction for sequencing\",\n \"tags\": [\n \"Submit\"\n ]\n }\n },\n \"/v2/token/circulating-supply\": {\n \"get\": {\n \"operationId\": \"GetCirculatingSupply\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/CirculatingSupplyResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the circulating supply, following the mainnet unlock schedule\",\n \"tags\": [\n \"Token\"\n ]\n }\n },\n \"/v2/token/circulating-supply-ethereum\": {\n \"get\": {\n \"operationId\": \"GetCirculatingSupplyEthereum\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/CirculatingSupplyEthereumResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the circulating supply of ESP tokens on Ethereum L1\",\n \"tags\": [\n \"Token\"\n ]\n }\n },\n \"/v2/token/total-issued-supply\": {\n \"get\": {\n \"operationId\": \"GetTotalIssuedSupply\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/TotalIssuedSupplyResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the total issued supply, including rewards not yet claimed on Ethereum\",\n \"tags\": [\n \"Token\"\n ]\n }\n },\n \"/v2/token/total-minted-supply\": {\n \"get\": {\n \"operationId\": \"GetTotalMintedSupply\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/TotalMintedSupplyResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the total supply of the ESP token minted on Ethereum; excludes unclaimed rewards\",\n \"tags\": [\n \"Token\"\n ]\n }\n },\n \"/v2/token/total-reward-distributed\": {\n \"get\": {\n \"operationId\": \"GetTotalRewardDistributed\",\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/TotalRewardDistributedResponse\"\n }\n }\n },\n \"description\": \"OK\"\n },\n \"default\": {\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/Error\"\n }\n }\n },\n \"description\": \"Error, following the Google API error model\"\n }\n },\n \"summary\": \"Get the total rewards distributed by consensus, including rewards not yet claimed on Ethereum\",\n \"tags\": [\n \"Token\"\n ]\n }\n }\n }\n}";Expand description
The v2 OpenAPI document, generated by the build script from the protos.