From d128e54133e1b14c883b68c967b7fa1806f60b2e Mon Sep 17 00:00:00 2001 From: Zeke Mostov <32168567+emostov@users.noreply.github.com> Date: Tue, 24 Nov 2020 09:08:18 -0800 Subject: [PATCH] fix: Catch errors decoding opaque calls (#347) * fix: Catch errors decoding opaque calls * Add docs to explain the undecoded opaquecalls are not valid * Builld docs * Update docs/src/openapi-v1.yaml Co-authored-by: David * Update src/controllers/blocks/BlocksController.ts Co-authored-by: David Co-authored-by: David --- docs/dist/app.bundle.js | 2 +- docs/src/openapi-v1.yaml | 5 ++++- src/controllers/blocks/BlocksController.ts | 4 +++- src/services/blocks/BlocksService.ts | 14 ++++++++++++-- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/docs/dist/app.bundle.js b/docs/dist/app.bundle.js index f3c8684d1..7f1a935ac 100644 --- a/docs/dist/app.bundle.js +++ b/docs/dist/app.bundle.js @@ -10695,7 +10695,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var swag /*! no static exports found */ /***/ (function(module, exports) { -eval("module.exports = {\"openapi\":\"3.0.0\",\"info\":{\"title\":\"Substrate API Sidecar v1.\",\"description\":\"Substrate API Sidecar is a REST service that makes it easy to interact with blockchain nodes built using Substrate's FRAME framework.\",\"contact\":{\"url\":\"https://github.com/paritytech/substrate-api-sidecar\"},\"license\":{\"name\":\"GPL-3.0-or-later\",\"url\":\"https://github.com/paritytech/substrate-api-sidecar/blob/master/LICENSE\"},\"version\":\"1.0.0-oas3\"},\"tags\":[{\"name\":\"accounts\"},{\"name\":\"blocks\"},{\"name\":\"node\",\"description\":\"node connected to sidecar\"},{\"name\":\"pallets\",\"description\":\"pallets employed in the runtime\"},{\"name\":\"runtime\"},{\"name\":\"transaction\"}],\"paths\":{\"/accounts/{accountId}/balance-info\":{\"get\":{\"tags\":[\"accounts\"],\"summary\":\"Get balance information for an account.\",\"description\":\"Returns information about an account's balance. Replaces `/balance/{address}` from versions < v1.0.0.\",\"operationId\":\"getAccountBalanceInfo\",\"parameters\":[{\"name\":\"accountId\",\"in\":\"path\",\"description\":\"SS58 address of the account.\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^[1-9A-HJ-NP-Za-km-z]{8,64}$\"}},{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to query balance info for the specified account.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block height (as a non-negative integer) or hash (as a hex string).\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AccountBalanceInfo\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}},\"404\":{\"description\":\"account not found\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/accounts/{accountId}/staking-info\":{\"get\":{\"tags\":[\"staking\"],\"summary\":\"Get staking information for a _Stash_ account.\",\"description\":\"Returns information about a _Stash_ account's staking activity. Replaces `/staking/{address}` from versions < v1.0.0.\",\"operationId\":\"getStakingSummaryByAccountId\",\"parameters\":[{\"name\":\"accountId\",\"in\":\"path\",\"description\":\"SS58 address of the account. Must be a _Stash_ account.\",\"required\":true,\"schema\":{\"pattern\":\"^[1-9A-HJ-NP-Za-km-z]{8,64}$\",\"type\":\"string\"}},{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to query the staking info for the specified account.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AccountStakingInfo\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}},\"404\":{\"description\":\"account not found\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/accounts/{accountId}/staking-payouts\":{\"get\":{\"tags\":[\"staking\"],\"summary\":\"Get payout information for a _Stash_ account.\",\"description\":\"Returns payout information for the last specified eras. If specifying both the depth and era query params, this endpoint will return information for (era - depth) through era. (i.e. if depth=5 and era=20 information will be returned for eras 16 through 20). N.B. You cannot query eras less then `current_era - HISTORY_DEPTH`. N.B. The `nominator*` fields correspond to the address being queried, even if it is a validator's _Stash_ address. This is because a validator is technically nominating itself.\",\"operationId\":\"getStakingPayoutsByAccountId\",\"parameters\":[{\"name\":\"accountId\",\"in\":\"path\",\"description\":\"SS58 address of the account. Must be a _Stash_ account.\",\"required\":true,\"schema\":{\"pattern\":\"^[1-9A-HJ-NP-Za-km-z]{8,64}$\",\"type\":\"string\"}},{\"name\":\"depth\",\"in\":\"query\",\"description\":\"The number of eras to query for payouts of. Must be less than or equal to `HISTORY_DEPTH`. In cases where `era - (depth -1)` is less than 0, the first era queried will be 0.\",\"required\":false,\"schema\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"default\":1}},{\"name\":\"era\",\"in\":\"query\",\"description\":\"The era to query at.\",\"required\":false,\"schema\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"default\":\"`active_era - 1`\"}},{\"name\":\"unclaimedOnly\",\"in\":\"query\",\"description\":\"Only return unclaimed rewards.\",\"required\":false,\"schema\":{\"type\":\"string\",\"format\":\"boolean\",\"default\":true}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AccountStakingPayouts\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}},\"404\":{\"description\":\"account not found\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/accounts/{accountId}/vesting-info\":{\"get\":{\"tags\":[\"accounts\"],\"summary\":\"Get vesting information for an account.\",\"description\":\"Returns the vesting schedule for an account. Replaces `/vesting/{address}` from versions < v1.0.0.\",\"operationId\":\"getVestingSummaryByAccountId\",\"parameters\":[{\"name\":\"accountId\",\"in\":\"path\",\"description\":\"SS58 address of the account.\",\"required\":true,\"schema\":{\"pattern\":\"^[1-9A-HJ-NP-Za-km-z]{8,64}$\",\"type\":\"string\"}},{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to query the vesting info for the specified account.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AccountVestingInfo\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}},\"404\":{\"description\":\"account not found\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/blocks/{blockId}\":{\"get\":{\"tags\":[\"blocks\"],\"summary\":\"Get a block by its height or hash.\",\"description\":\"Returns a single block. BlockId can either be a block hash or a block height. Replaces `/block/{number}` from versions < v1.0.0.\",\"operationId\":\"getBlockById\",\"parameters\":[{\"name\":\"blockId\",\"in\":\"path\",\"description\":\"Block identifier, as the block height or block hash.\",\"required\":true,\"schema\":{\"pattern\":\"a-km-zA-HJ-NP-Z1-9{8,64}\",\"type\":\"string\"}},{\"name\":\"eventDocs\",\"in\":\"query\",\"description\":\"When set to `true`, every event will have an extra `docs` property with a string of the events documentation.\",\"required\":false,\"schema\":{\"type\":\"boolean\",\"default\":false}},{\"name\":\"extrinsicDocs\",\"in\":\"query\",\"description\":\"When set to `true`, every extrinsic will have an extra `docs` property with a string of the extrinsics documentation.\",\"required\":false,\"schema\":{\"type\":\"boolean\",\"default\":false}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Block\"}}}},\"400\":{\"description\":\"invalid Block identifier supplied\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/blocks/head\":{\"get\":{\"tags\":[\"blocks\"],\"summary\":\"Get the most recently finalized block.\",\"description\":\"Returns the most recently finalized block. Replaces `/block` from versions < v1.0.0.\",\"operationId\":\"getHeadBlock\",\"parameters\":[{\"name\":\"finalized\",\"in\":\"query\",\"description\":\"Boolean representing whether or not to get the finalized head. If it is not set the value defaults to true. When set to false it will attempt to get the newest known block, which may not be finalized.\",\"required\":false,\"schema\":{\"type\":\"boolean\",\"default\":true}},{\"name\":\"eventDocs\",\"in\":\"query\",\"description\":\"When set to `true`, every event will have an extra `docs` property with a string of the events documentation.\",\"required\":false,\"schema\":{\"type\":\"boolean\",\"default\":false}},{\"name\":\"extrinsicDocs\",\"in\":\"query\",\"description\":\"When set to `true`, every extrinsic will have an extra `docs` property with a string of the extrinsics documentation.\",\"required\":false,\"schema\":{\"type\":\"boolean\",\"default\":false}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Block\"}}}}}}},\"/node/network\":{\"get\":{\"tags\":[\"node\"],\"summary\":\"Get information about the Substrate node's activity in the peer-to-peer network.\",\"description\":\"Returns network related information of the node.\",\"operationId\":\"getNodeNetworking\",\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/NodeNetwork\"}}}}}}},\"/node/transaction-pool\":{\"get\":{\"tags\":[\"node\"],\"summary\":\"Get pending extrinsics from the Substrate node.\",\"description\":\"Returns the extrinsics that the node knows of that have not been included in a block.\",\"operationId\":\"getNodeTransactionPool\",\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionPool\"}}}}}}},\"/node/version\":{\"get\":{\"tags\":[\"node\"],\"summary\":\"Get information about the Substrates node's implementation and versioning.\",\"description\":\"Returns versioning information of the node.\",\"operationId\":\"getNodeVersion\",\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/NodeVersion\"}}}}}}},\"/transaction\":{\"post\":{\"tags\":[\"transaction\"],\"summary\":\"Submit a transaction to the node's transaction pool.\",\"description\":\"Accepts a valid signed extrinsic. Replaces `/tx` from versions < v1.0.0.\",\"operationId\":\"submitTransaction\",\"requestBody\":{\"$ref\":\"#/components/requestBodies/Transaction\"},\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionSuccess\"}}}},\"400\":{\"description\":\"failed to parse or submit transaction\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionFailure\"}}}}}}},\"/transaction/dry-run\":{\"post\":{\"tags\":[\"transaction\"],\"summary\":\"Dry run an extrinsic.\",\"description\":\"Use the dryrun call to practice submission of a transaction.\",\"operationId\":\"dryrunTransaction\",\"requestBody\":{\"$ref\":\"#/components/requestBodies/Transaction\"},\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionDryRun\"}}}},\"500\":{\"description\":\"failed to dry-run transaction\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionFailure\"}}}}}}},\"/transaction/fee-estimate\":{\"post\":{\"tags\":[\"transaction\"],\"summary\":\"Receive a fee estimate for a transaction.\",\"description\":\"Send a serialized transaction and receive back a naive fee estimate. Note: `partialFee` does not include any tips that you may add to increase a transaction's priority. See the reference on `compute_fee`. Replaces `/tx/fee-estimate` from versions < v1.0.0. Substrate Reference: - `RuntimeDispatchInfo`: https://crates.parity.io/pallet_transaction_payment_rpc_runtime_api/struct.RuntimeDispatchInfo.html - `query_info`: https://crates.parity.io/pallet_transaction_payment/struct.Module.html#method.query_info - `compute_fee`: https://crates.parity.io/pallet_transaction_payment/struct.Module.html#method.compute_fee\",\"operationId\":\"feeEstimateTransaction\",\"requestBody\":{\"$ref\":\"#/components/requestBodies/Transaction\"},\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionFeeEstimate\"}}}},\"500\":{\"description\":\"fee estimation failure\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionFeeEstimateFailure\"}}}}}}},\"/transaction/material\":{\"get\":{\"tags\":[\"transaction\"],\"summary\":\"Get all the network information needed to construct a transaction offline.\",\"description\":\"Returns the material that is universal to constructing any signed transaction offline. Replaces `/tx/artifacts` from versions < v1.0.0.\",\"operationId\":\"getTransactionMaterial\",\"parameters\":[{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to retrieve the transaction construction material.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}},{\"name\":\"noMeta\",\"in\":\"query\",\"schema\":{\"type\":\"boolean\",\"description\":\"If true, does not return metadata hex. This is useful when metadata is not needed and response time is a concern. Defaults to false.\",\"default\":false}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionMaterial\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/pallets/staking/progress\":{\"get\":{\"tags\":[\"staking\",\"pallets\"],\"summary\":\"Get progress on the general Staking pallet system.\",\"description\":\"Returns information on the progress of key components of the staking system and estimates of future points of interest. Replaces `/staking-info` from versions < v1.0.0.\",\"operationId\":\"getStakingProgress\",\"parameters\":[{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to retrieve a staking progress report.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/StakingProgress\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/runtime/metadata\":{\"get\":{\"tags\":[\"runtime\"],\"summary\":\"Get the runtime metadata in decoded, JSON form.\",\"description\":\"Returns the runtime metadata as a JSON object. Substrate Reference: - FRAME Support: https://crates.parity.io/frame_support/metadata/index.html - Knowledge Base: https://substrate.dev/docs/en/knowledgebase/runtime/metadata\",\"parameters\":[{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to retrieve the metadata at.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"description\":\"Response is dependent on the runtime metadata contents.\"}}}}}}},\"/runtime/code\":{\"get\":{\"tags\":[\"runtime\"],\"summary\":\"Get the runtime wasm blob.\",\"description\":\"Returns the runtime Wasm blob in hex format.\",\"parameters\":[{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to retrieve the runtime wasm blob at.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RuntimeCode\"}}}}}}},\"/runtime/spec\":{\"get\":{\"tags\":[\"runtime\"],\"summary\":\"Get version information of the Substrate runtime.\",\"description\":\"Returns version information related to the runtime.\",\"parameters\":[{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to retrieve runtime version information at.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RuntimeSpec\"}}}}}}},\"/pallets/{palletId}/storage/{storageItemId}\":{\"get\":{\"tags\":[\"pallets\"],\"summary\":\"Get the value of a storage item.\",\"description\":\"Returns the value stored under the storageItemId. If it is a map, query param key1 is required. If the storage item is double map query params key1 and key2 are required.\",\"parameters\":[{\"name\":\"palletId\",\"in\":\"path\",\"description\":\"Name or index of the pallet to query the storage of.\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"name\":\"storageItemId\",\"in\":\"path\",\"description\":\"Id of the storage item to query for.\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"name\":\"key1\",\"in\":\"query\",\"description\":\"Key for a map, or first key for a double map. Required for querying a map.\",\"required\":false,\"schema\":{\"type\":\"string\"}},{\"name\":\"key2\",\"in\":\"query\",\"description\":\"Second key for a double map. Required for querying a double map.\",\"required\":false,\"schema\":{\"type\":\"string\"}},{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to query the storage item at.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}},{\"name\":\"metadata\",\"in\":\"query\",\"description\":\"Include the storage items metadata (including documentation) if set to true.\",\"required\":false,\"schema\":{\"default\":false,\"type\":\"boolean\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/PalletStorageItem\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}},\"404\":{\"description\":\"could not find resource with with id\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}}},\"components\":{\"schemas\":{\"BalanceLock\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"An identifier for this lock. Only one lock may be in existence for each identifier.\"},\"amount\":{\"type\":\"string\",\"description\":\"The amount below which the free balance may not drop with this lock in effect.\",\"format\":\"unsignedInteger\"},\"reasons\":{\"type\":\"string\",\"description\":\"Reasons for withdrawing balance.\",\"enum\":[\"Fee = 0\",\"Misc = 1\",\"All = 2\"]}}},\"AccountBalanceInfo\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"nonce\":{\"type\":\"string\",\"description\":\"Account nonce.\",\"format\":\"unsignedInteger\"},\"free\":{\"type\":\"string\",\"description\":\"Free balance of the account. Not equivalent to _spendable_ balance. This is the only balance that matters in terms of most operations on tokens.\",\"format\":\"unsignedInteger\"},\"reserved\":{\"type\":\"string\",\"description\":\"Reserved balance of the account.\",\"format\":\"unsignedInteger\"},\"miscFrozen\":{\"type\":\"string\",\"description\":\"The amount that `free` may not drop below when withdrawing for anything except transaction fee payment.\",\"format\":\"unsignedInteger\"},\"feeFrozen\":{\"type\":\"string\",\"description\":\"The amount that `free` may not drop below when withdrawing specifically for transaction fee payment.\",\"format\":\"unsignedInteger\"},\"locks\":{\"type\":\"array\",\"description\":\"Array of locks on a balance. There can be many of these on an account and they \\\"overlap\\\", so the same balance is frozen by multiple locks\",\"items\":{\"$ref\":\"#/components/schemas/BalanceLock\"}}}},\"StakingLedger\":{\"type\":\"object\",\"properties\":{\"stash\":{\"type\":\"string\",\"description\":\"The _Stash_ account whose balance is actually locked and at stake.\",\"format\":\"ss58\"},\"total\":{\"type\":\"string\",\"description\":\"The total amount of the _Stash_'s balance that we are currently accounting for. Simply `active + unlocking`.\",\"format\":\"unsignedInteger\"},\"active\":{\"type\":\"string\",\"description\":\"The total amount of the _Stash_'s balance that will be at stake in any forthcoming eras.\",\"format\":\"unsignedInteger\"},\"unlocking\":{\"type\":\"string\",\"description\":\"Any balance that is becoming free, which may eventually be transferred out of the _Stash_ (assuming it doesn't get slashed first). Represented as an array of objects, each with an `era` at which `value` will be unlocked.\",\"format\":\"unsignedInteger\"},\"claimedRewards\":{\"type\":\"array\",\"description\":\"Array of eras for which the stakers behind a validator have claimed rewards. Only updated for _validators._\",\"items\":{\"type\":\"string\",\"format\":\"unsignedInteger\"}}},\"description\":\"The staking ledger.\"},\"Nominations\":{\"type\":\"object\",\"properties\":{\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"The targets of the nomination.\"},\"submittedIn\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"The era the nominations were submitted. (Except for initial nominations which are considered submitted at era 0.)\"},\"suppressed\":{\"type\":\"boolean\",\"description\":\"Whether the nominations have been suppressed.\"}}},\"AccountStakingInfo\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"rewardDestination\":{\"type\":\"string\",\"description\":\"The account to which rewards will be paid. Can be 'Staked' (Stash account, adding to the amount at stake), 'Stash' (Stash address, not adding to the amount at stake), or 'Controller' (Controller address).\",\"format\":\"ss58\",\"enum\":[\"Staked\",\"Stash\",\"Controller\"]},\"controller\":{\"type\":\"string\",\"description\":\"Controller address for the given Stash.\",\"format\":\"ss58\"},\"numSlashingSpans\":{\"type\":\"string\",\"description\":\"Number of slashing spans on Stash account; `null` if provided address is not a Controller.\",\"format\":\"unsignedInteger\"},\"nominations\":{\"$ref\":\"#/components/schemas/Nominations\"},\"stakingLedger\":{\"$ref\":\"#/components/schemas/StakingLedger\"}},\"description\":\"Note: Runtime versions of Kusama less than 1062 will either have `lastReward` in place of `claimedRewards`, or no field at all. This is related to changes in reward distribution. See: [Lazy Payouts](https://github.com/paritytech/substrate/pull/4474), [Simple Payouts](https://github.com/paritytech/substrate/pull/5406)\"},\"Payouts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"validatorId\":{\"type\":\"string\",\"description\":\"AccountId of the validator the payout is coming from.\"},\"nominatorStakingPayout\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"Payout for the reward destination associated with the accountId the query was made for.\"},\"claimed\":{\"type\":\"boolean\",\"description\":\"Whether or not the reward has been claimed.\"},\"totalValidatorRewardPoints\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"Number of reward points earned by the validator.\"},\"validatorCommission\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"The percentage of the total payout that the validator takes as commission, expressed as a Perbill.\"},\"totalValidatorExposure\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"The sum of the validator's and its nominators' stake.\"},\"nominatorExposure\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"The amount of stake the nominator has behind the validator.\"}},\"description\":\"Payout for a nominating _Stash_ address and information about the validator they were nominating.\"}},\"AccountStakingPayouts\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"erasPayouts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"era\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"Era this information is associated with.\"},\"totalEraRewardPoints\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"Total reward points for the era. Equals the sum of reward points for all the validators in the set.\"},\"totalEraPayout\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"Total payout for the era. Validators split the payout based on the portion of `totalEraRewardPoints` they have.\"},\"payouts\":{\"$ref\":\"#/components/schemas/Payouts\"}}}}}},\"VestingSchedule\":{\"type\":\"object\",\"properties\":{\"locked\":{\"type\":\"string\",\"description\":\"Number of tokens locked at start.\",\"format\":\"unsignedInteger\"},\"perBlock\":{\"type\":\"string\",\"description\":\"Number of tokens that gets unlocked every block after `startingBlock`.\",\"format\":\"unsignedInteger\"},\"startingBlock\":{\"type\":\"string\",\"description\":\"Starting block for unlocking (vesting).\",\"format\":\"unsignedInteger\"}},\"description\":\"Vesting schedule for an account.\"},\"AccountVestingInfo\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"vesting\":{\"$ref\":\"#/components/schemas/VestingSchedule\"}}},\"BlockIdentifiers\":{\"type\":\"object\",\"properties\":{\"hash\":{\"type\":\"string\",\"description\":\"The block's hash.\",\"format\":\"hex\"},\"height\":{\"type\":\"string\",\"description\":\"The block's height.\",\"format\":\"unsignedInteger\"}},\"description\":\"Block number and hash at which the call was made.\"},\"DigestItem\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\"},\"index\":{\"type\":\"string\",\"format\":\"unsignedInteger\"},\"value\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}}},\"SanitizedEvent\":{\"type\":\"object\",\"properties\":{\"method\":{\"type\":\"string\"},\"data\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}}},\"Signature\":{\"type\":\"object\",\"properties\":{\"signature\":{\"type\":\"string\",\"format\":\"hex\"},\"signer\":{\"type\":\"string\",\"format\":\"ss58\"}},\"description\":\"Object with `signature` and `signer`, or `null` if unsigned.\"},\"RuntimeDispatchInfo\":{\"type\":\"object\",\"properties\":{\"weight\":{\"type\":\"string\",\"description\":\"Extrinsic weight.\"},\"class\":{\"type\":\"string\",\"description\":\"Extrinsic class.\",\"enum\":[\"Normal\",\"Operational\",\"Mandatory\"]},\"partialFee\":{\"type\":\"string\",\"description\":\"The _inclusion fee_ of a transaction, i.e. the minimum fee required for a transaction. Includes weight and encoded length fees, but does not have access to any signed extensions, e.g. the `tip`.\",\"format\":\"unsignedInteger\"}},\"description\":\"RuntimeDispatchInfo for the transaction. Includes the `partialFee`.\"},\"ExtrinsicMethod\":{\"type\":\"object\",\"properties\":{\"pallet\":{\"type\":\"string\"},\"methodName\":{\"type\":\"string\"}},\"description\":\"Extrinsic method\"},\"Extrinsic\":{\"type\":\"object\",\"properties\":{\"method\":{\"$ref\":\"#/components/schemas/ExtrinsicMethod\"},\"signature\":{\"$ref\":\"#/components/schemas/Signature\"},\"nonce\":{\"type\":\"string\",\"description\":\"Account nonce, if applicable.\",\"format\":\"unsignedInteger\"},\"args\":{\"type\":\"object\",\"description\":\"Object of arguments keyed by parameter name.\"},\"tip\":{\"type\":\"string\",\"description\":\"Any tip added to the transaction.\",\"format\":\"unsignedInteger\"},\"hash\":{\"type\":\"string\",\"description\":\"The transaction's hash.\",\"format\":\"hex\"},\"info\":{\"$ref\":\"#/components/schemas/RuntimeDispatchInfo\"},\"events\":{\"type\":\"array\",\"description\":\"An array of `SanitizedEvent`s that occurred during extrinsic execution.\",\"items\":{\"$ref\":\"#/components/schemas/SanitizedEvent\"}},\"success\":{\"type\":\"boolean\",\"description\":\"Whether or not the extrinsic succeeded.\"},\"paysFee\":{\"type\":\"boolean\",\"description\":\"Whether the extrinsic requires a fee. Careful! This field relates to whether or not the extrinsic requires a fee if called as a transaction. Block authors could insert the extrinsic as an inherent in the block and not pay a fee. Always check that `paysFee` is `true` and that the extrinsic is signed when reconciling old blocks.\"}}},\"BlockInitialize\":{\"type\":\"object\",\"properties\":{\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/SanitizedEvent\"}}},\"description\":\"Object with an array of `SanitizedEvent`s that occurred during block initialization with the `method` and `data` for each.\"},\"BlockFinalize\":{\"type\":\"object\",\"properties\":{\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/SanitizedEvent\"}}},\"description\":\"Object with an array of `SanitizedEvent`s that occurred during block construction finalization with the `method` and `data` for each.\"},\"Block\":{\"type\":\"object\",\"properties\":{\"hash\":{\"type\":\"string\",\"description\":\"The block's hash.\",\"format\":\"hex\"},\"height\":{\"type\":\"string\",\"description\":\"The block's height.\",\"format\":\"unsignedInteger\"},\"parentHash\":{\"type\":\"string\",\"description\":\"The hash of the parent block.\",\"format\":\"hex\"},\"stateRoot\":{\"type\":\"string\",\"description\":\"The state root after executing this block.\",\"format\":\"hex\"},\"extrinsicRoot\":{\"type\":\"string\",\"description\":\"The Merkle root of the extrinsics.\",\"format\":\"hex\"},\"authorId\":{\"type\":\"string\",\"description\":\"The account ID of the block author (may be undefined for some chains).\",\"format\":\"ss58\"},\"logs\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/DigestItem\"},\"description\":\"Array of `DigestItem`s associated with the block.\"},\"onInitialize\":{\"$ref\":\"#/components/schemas/BlockInitialize\"},\"extrinsics\":{\"type\":\"array\",\"description\":\"Array of extrinsics (inherents and transactions) within the block.\",\"items\":{\"$ref\":\"#/components/schemas/Extrinsic\"}},\"onFinalize\":{\"$ref\":\"#/components/schemas/BlockFinalize\"}},\"description\":\"Note: Block finalization does not correspond to consensus, i.e. whether the block is in the canonical chain. It denotes the finalization of block _construction._\"},\"NodeVersion\":{\"type\":\"object\",\"properties\":{\"clientVersion\":{\"type\":\"string\",\"description\":\"Node's binary version.\"},\"clientImplName\":{\"type\":\"string\",\"description\":\"Node's implementation name.\"},\"chain\":{\"type\":\"string\",\"description\":\"Node's chain name.\"}},\"description\":\"Version information of the node.\"},\"NodeRole\":{\"type\":\"string\",\"description\":\"Role of this node. (N.B. Sentry nodes are being deprecated.)\",\"enum\":[\"Full\",\"LightClient\",\"Authority\",\"Sentry\"]},\"PeerInfo\":{\"type\":\"object\",\"properties\":{\"peerId\":{\"type\":\"string\",\"description\":\"Peer ID.\"},\"roles\":{\"type\":\"string\",\"description\":\"Roles the peer is running\"},\"protocolVersion\":{\"type\":\"string\",\"description\":\"Peer's protocol version.\",\"format\":\"unsignedInteger\"},\"bestHash\":{\"type\":\"string\",\"description\":\"Hash of the best block on the peer's canon chain.\",\"format\":\"hex\"},\"bestNumber\":{\"type\":\"string\",\"description\":\"Height of the best block on the peer's canon chain.\",\"format\":\"unsignedInteger\"}}},\"NodeNetwork\":{\"type\":\"object\",\"properties\":{\"nodeRoles\":{\"$ref\":\"#/components/schemas/NodeRole\"},\"numPeers\":{\"type\":\"string\",\"description\":\"Number of peers the node is connected to.\",\"format\":\"unsignedInteger\"},\"isSyncing\":{\"type\":\"boolean\",\"description\":\"Whether or not the node is syncing. `False` indicates that the node is in sync.\"},\"shouldHavePeers\":{\"type\":\"boolean\",\"description\":\"Whether or not the node should be connected to peers. Might be false for local chains or when running without discovery.\"},\"localPeerId\":{\"type\":\"string\",\"description\":\"Local copy of the `PeerId`.\"},\"localListenAddresses\":{\"type\":\"array\",\"description\":\"Multiaddresses that the local node is listening on. The addresses include a trailing `/p2p/` with the local PeerId, and are thus suitable to be passed to `system_addReservedPeer` or as a bootnode address for example.\",\"items\":{\"type\":\"string\"}},\"peersInfo\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/PeerInfo\"}}}},\"RuntimeSpec\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"authoringVersion\":{\"type\":\"string\",\"description\":\"The version of the authorship interface. An authoring node will not attempt to author blocks unless this is equal to its native runtime.\"},\"chainType\":{\"type\":\"string\",\"description\":\"Type of the chain.\",\"enum\":[\"Development\",\"Local\",\"Live\"]},\"implVersion\":{\"type\":\"string\",\"description\":\"Version of the implementation specification. Non-consensus-breaking optimizations are about the only changes that could be made which would result in only the `impl_version` changing. The `impl_version` is set to 0 when `spec_version` is incremented.\"},\"specName\":{\"type\":\"string\",\"description\":\"Identifies the different Substrate runtimes.\"},\"specVersion\":{\"type\":\"string\",\"description\":\"Version of the runtime specification.\"},\"transactionVersion\":{\"type\":\"string\",\"description\":\"All existing dispatches are fully compatible when this number doesn't change. This number must change when an existing dispatchable (module ID, dispatch ID) is changed, either through an alteration in its user-level semantics, a parameter added/removed/changed, a dispatchable being removed, a module being removed, or a dispatchable/module changing its index.\"},\"properties\":{\"type\":\"object\",\"description\":\"Arbitrary properties defined in the chain spec.\"}},\"description\":\"Version information related to the runtime.\"},\"UnappliedSlash\":{\"type\":\"object\",\"properties\":{\"validator\":{\"type\":\"string\",\"description\":\"Stash account ID of the offending validator.\",\"format\":\"ss58\"},\"own\":{\"type\":\"string\",\"description\":\"The amount the validator will be slashed.\",\"format\":\"unsignedInteger\"},\"others\":{\"type\":\"array\",\"description\":\"Array of tuples(`[accountId, amount]`) representing all the stashes of other slashed stakers and the amount they will be slashed.\",\"items\":{\"type\":\"string\",\"format\":\"tuple[ss58, unsignedInteger]\"}},\"reporters\":{\"type\":\"array\",\"description\":\"Array of account IDs of the reporters of the offense.\",\"items\":{\"type\":\"string\",\"format\":\"ss58\"}},\"payout\":{\"type\":\"string\",\"description\":\"Amount of bounty payout to reporters.\",\"format\":\"unsignedInteger\"}}},\"ElectionStatus\":{\"type\":\"object\",\"properties\":{\"status\":{\"type\":\"object\",\"description\":\"Era election status: either `Close: null` or `Open: `. A status of `Close` indicates that the submission window for solutions from off-chain Phragmen is not open. A status of `Open` indicates that the submission window for off-chain Phragmen solutions has been open since BlockNumber. N.B. when the submission window is open, certain extrinsics are not allowed because they would mutate the state that the off-chain Phragmen calculation relies on for calculating results.\"},\"toggleEstimate\":{\"type\":\"string\",\"description\":\"Upper bound estimate of the block height at which the `status` will switch.\",\"format\":\"unsignedInteger\"}},\"description\":\"Information about the off-chain election. Not included in response when `forceEra.isForceNone`.\"},\"StakingProgress\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"activeEra\":{\"type\":\"string\",\"description\":\"`EraIndex` of the era being rewarded.\\n\",\"format\":\"unsignedInteger\"},\"forceEra\":{\"type\":\"string\",\"description\":\"Current status of era forcing.\",\"enum\":[\"ForceNone\",\"NotForcing\",\"ForceAlways\",\"ForceNew\"]},\"nextActiveEraEstimate\":{\"type\":\"string\",\"description\":\"Upper bound estimate of the block height at which the next active era will start. Not included in response when `forceEra.isForceNone`.\",\"format\":\"unsignedInteger\"},\"nextSessionEstimate\":{\"type\":\"string\",\"description\":\"Upper bound estimate of the block height at which the next session will start.\",\"format\":\"unsignedInteger\"},\"unappliedSlashes\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/UnappliedSlash\"},\"description\":\"Array of upcoming `UnappliedSlash` indexed by era.\"},\"electionStatus\":{\"$ref\":\"#/components/schemas/ElectionStatus\"},\"idealValidatorCount\":{\"type\":\"string\",\"description\":\"Upper bound of validator set size; considered the ideal size. Not included in response when `forceEra.isForceNone`.\",\"format\":\"unsignedInteger\"},\"validatorSet\":{\"type\":\"array\",\"description\":\"Stash account IDs of the validators for the current session. Not included in response when `forceEra.isForceNone`.\",\"items\":{\"type\":\"string\",\"format\":\"ss58\"}}}},\"TransactionDryRun\":{\"type\":\"object\",\"properties\":{\"resultType\":{\"type\":\"string\",\"enum\":[\"DispatchOutcome\",\"TransactionValidityError\"],\"description\":\"Either `DispatchOutcome` if the transaction is valid or `TransactionValidityError` if the result is invalid.\"},\"result\":{\"type\":\"string\",\"enum\":[\"Ok\",\"CannotLookup\",\"NoUnsignedValidator\",\"Custom(u8)\",\"Call\",\"Payment\",\"Future\",\"Stale\",\"BadProof\",\"AncientBirthBlock\",\"ExhaustsResources\",\"BadMandatory\",\"MandatoryDispatch\"],\"description\":\"If there was an error it will be the cause of the error. If the transaction executed correctly it will be `Ok: []`\"},\"validityErrorType\":{\"type\":\"string\",\"enum\":[\"InvalidTransaction\",\"UnknownTransaction\"]}},\"description\":\"References: - `UnknownTransaction`: https://crates.parity.io/sp_runtime/transaction_validity/enum.UnknownTransaction.html - `InvalidTransaction`: https://crates.parity.io/sp_runtime/transaction_validity/enum.InvalidTransaction.html\"},\"Transaction\":{\"type\":\"object\",\"properties\":{\"tx\":{\"type\":\"string\",\"format\":\"hex\"}}},\"TransactionMaterial\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"genesisHash\":{\"type\":\"string\",\"description\":\"The hash of the chain's genesis block.\",\"format\":\"blockHash\"},\"chainName\":{\"type\":\"string\",\"description\":\"The chain's name.\"},\"specName\":{\"type\":\"string\",\"description\":\"The chain's spec.\"},\"specVersion\":{\"type\":\"string\",\"description\":\"The spec version. Always increased in a runtime upgrade.\"},\"txVersion\":{\"type\":\"string\",\"description\":\"The transaction version. Common `txVersion` numbers indicate that the transaction encoding format and method indices are the same. Needed for decoding in an offline environment. Adding new transactions does not change `txVersion`.\"},\"metadata\":{\"type\":\"string\",\"description\":\"The chain's metadata in hex format.\",\"format\":\"hex\"}},\"description\":\"Note: `chainName`, `specName`, and `specVersion` are used to define a type registry with a set of signed extensions and types. For Polkadot and Kusama, `chainName` is not used in defining this registry, but in other Substrate-based chains that re-launch their network without changing the `specName`, the `chainName` would be needed to create the correct registry. Substrate Reference: - `RuntimeVersion`: https://crates.parity.io/sp_version/struct.RuntimeVersion.html - `SignedExtension`: https://crates.parity.io/sp_runtime/traits/trait.SignedExtension.html - FRAME Support: https://crates.parity.io/frame_support/metadata/index.html\"},\"TransactionSuccess\":{\"type\":\"object\",\"properties\":{\"hash\":{\"type\":\"string\",\"description\":\"The hash of the encoded transaction.\"}}},\"TransactionFailedToParse\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"number\"},\"error\":{\"type\":\"string\",\"description\":\"`Failed to parse a tx.`\"},\"transaction\":{\"type\":\"string\",\"format\":\"hex\"},\"cause\":{\"type\":\"string\"},\"stack\":{\"type\":\"string\"}},\"description\":\"Error message when Sidecar fails to parse the transaction.\"},\"TransactionFailedToSubmit\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"number\"},\"error\":{\"type\":\"string\",\"description\":\"Failed to submit transaction.\"},\"transaction\":{\"type\":\"string\",\"format\":\"hex\"},\"cause\":{\"type\":\"string\"},\"stack\":{\"type\":\"string\"}},\"description\":\"Error message when the node rejects the submitted transaction.\"},\"TransactionFailure\":{\"oneOf\":[{\"$ref\":\"#/components/schemas/TransactionFailedToSubmit\"},{\"$ref\":\"#/components/schemas/TransactionFailedToParse\"}]},\"TransactionFeeEstimateFailure\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"number\"},\"at\":{\"type\":\"object\",\"properties\":{\"hash\":{\"type\":\"string\"}}},\"error\":{\"type\":\"string\",\"description\":\"Error description.\"},\"transaction\":{\"type\":\"string\",\"format\":\"hex\"},\"block\":{\"type\":\"string\",\"description\":\"Block hash of the block fee estimation was attempted at.\"},\"cause\":{\"type\":\"string\",\"description\":\"Error message from the client.\"},\"stack\":{\"type\":\"string\"}}},\"TransactionFeeEstimate\":{\"type\":\"object\",\"properties\":{\"weight\":{\"type\":\"string\",\"description\":\"Extrinsic weight.\"},\"class\":{\"type\":\"string\",\"description\":\"Extrinsic class.\",\"enum\":[\"Normal\",\"Operational\",\"Mandatory\"]},\"partialFee\":{\"type\":\"string\",\"description\":\"Expected inclusion fee for the transaction. Note that the fee rate changes up to 30% in a 24 hour period and this will not be the exact fee.\",\"format\":\"unsignedInteger\"}},\"description\":\"Note: `partialFee` does not include any tips that you may add to increase a transaction's priority. See [compute_fee](https://crates.parity.io/pallet_transaction_payment/struct.Module.html#method.compute_fee).\"},\"TransactionPool\":{\"type\":\"object\",\"properties\":{\"pool\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hash\":{\"type\":\"string\",\"format\":\"hex\",\"description\":\"H256 hash of the extrinsic.\"},\"encodedExtrinsic\":{\"type\":\"string\",\"format\":\"hex\",\"description\":\"Scale encoded extrinsic.\"}}}}}},\"RuntimeCode\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"code\":{\"type\":\"string\",\"format\":\"hex\"}}},\"Error\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"number\"},\"message\":{\"type\":\"string\"},\"stack\":{\"type\":\"string\"}}},\"PalletStorageType\":{\"type\":\"object\",\"description\":\"Info about the data structure used for storage.\",\"example\":{\"Map\":{\"hasher\":\"Twox64Concat\",\"key\":{\"example\":\"ReferendumIndex\"},\"value\":\"ReferendumInfo\",\"linked\":false}}},\"PalletStorageItemMetadata\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"example\":\"ReferendumInfoOf\"},\"modifier\":{\"type\":\"string\",\"example\":\"Optional\"},\"type\":{\"$ref\":\"#/components/schemas/PalletStorageType\"},\"fallback\":{\"type\":\"string\",\"example\":\"0x00\"},\"documentation\":{\"type\":\"string\",\"example\":\" Information concerning any given referendum.\\n\\n TWOX-NOTE: SAFE as indexes are not under an attacker’s control.\"}},\"description\":\"Metadata of a storage item from a FRAME pallet.\"},\"PalletStorageItem\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"pallet\":{\"type\":\"string\",\"description\":\"Name of the pallet.\",\"example\":\"democracy\"},\"palletIndex\":{\"type\":\"string\",\"description\":\"Index of the pallet for looking up storage.\",\"example\":\"15\"},\"storageItem\":{\"type\":\"string\",\"description\":\"Name of the storage item.\",\"example\":\"referendumInfoOf\"},\"key1\":{\"type\":\"string\",\"description\":\"Key1 query param. Will not show up in response unless it was passed as part of the URI.\",\"example\":\"2\"},\"key2\":{\"type\":\"string\",\"description\":\"Key2 query param. Will not show up in response if not defined in URI.\",\"example\":\"\"},\"value\":{\"type\":\"object\",\"description\":\"Value returned by this storage query.\",\"example\":{\"Ongoing\":{\"end\":\"1612800\",\"proposalHash\":\"0x7de70fc8be782076d0b5772be77153d172a5381c72dd56d3385e25f62abf507e\",\"threshold\":\"Supermajorityapproval\",\"delay\":\"403200\",\"tally\":{\"ayes\":\"41925212461400000\",\"nays\":\"214535586500000\",\"turnout\":\"34485320658000000\"}}}},\"metadata\":{\"$ref\":\"#/components/schemas/PalletStorageItemMetadata\"}}}},\"requestBodies\":{\"Transaction\":{\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Transaction\"}}},\"required\":true}}}}\n\n//# sourceURL=webpack:///./src/openapi-v1.yaml?"); +eval("module.exports = {\"openapi\":\"3.0.0\",\"info\":{\"title\":\"Substrate API Sidecar v1.\",\"description\":\"Substrate API Sidecar is a REST service that makes it easy to interact with blockchain nodes built using Substrate's FRAME framework.\",\"contact\":{\"url\":\"https://github.com/paritytech/substrate-api-sidecar\"},\"license\":{\"name\":\"GPL-3.0-or-later\",\"url\":\"https://github.com/paritytech/substrate-api-sidecar/blob/master/LICENSE\"},\"version\":\"1.0.0-oas3\"},\"tags\":[{\"name\":\"accounts\"},{\"name\":\"blocks\"},{\"name\":\"node\",\"description\":\"node connected to sidecar\"},{\"name\":\"pallets\",\"description\":\"pallets employed in the runtime\"},{\"name\":\"runtime\"},{\"name\":\"transaction\"}],\"paths\":{\"/accounts/{accountId}/balance-info\":{\"get\":{\"tags\":[\"accounts\"],\"summary\":\"Get balance information for an account.\",\"description\":\"Returns information about an account's balance. Replaces `/balance/{address}` from versions < v1.0.0.\",\"operationId\":\"getAccountBalanceInfo\",\"parameters\":[{\"name\":\"accountId\",\"in\":\"path\",\"description\":\"SS58 address of the account.\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^[1-9A-HJ-NP-Za-km-z]{8,64}$\"}},{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to query balance info for the specified account.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block height (as a non-negative integer) or hash (as a hex string).\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AccountBalanceInfo\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}},\"404\":{\"description\":\"account not found\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/accounts/{accountId}/staking-info\":{\"get\":{\"tags\":[\"staking\"],\"summary\":\"Get staking information for a _Stash_ account.\",\"description\":\"Returns information about a _Stash_ account's staking activity. Replaces `/staking/{address}` from versions < v1.0.0.\",\"operationId\":\"getStakingSummaryByAccountId\",\"parameters\":[{\"name\":\"accountId\",\"in\":\"path\",\"description\":\"SS58 address of the account. Must be a _Stash_ account.\",\"required\":true,\"schema\":{\"pattern\":\"^[1-9A-HJ-NP-Za-km-z]{8,64}$\",\"type\":\"string\"}},{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to query the staking info for the specified account.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AccountStakingInfo\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}},\"404\":{\"description\":\"account not found\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/accounts/{accountId}/staking-payouts\":{\"get\":{\"tags\":[\"staking\"],\"summary\":\"Get payout information for a _Stash_ account.\",\"description\":\"Returns payout information for the last specified eras. If specifying both the depth and era query params, this endpoint will return information for (era - depth) through era. (i.e. if depth=5 and era=20 information will be returned for eras 16 through 20). N.B. You cannot query eras less then `current_era - HISTORY_DEPTH`. N.B. The `nominator*` fields correspond to the address being queried, even if it is a validator's _Stash_ address. This is because a validator is technically nominating itself.\",\"operationId\":\"getStakingPayoutsByAccountId\",\"parameters\":[{\"name\":\"accountId\",\"in\":\"path\",\"description\":\"SS58 address of the account. Must be a _Stash_ account.\",\"required\":true,\"schema\":{\"pattern\":\"^[1-9A-HJ-NP-Za-km-z]{8,64}$\",\"type\":\"string\"}},{\"name\":\"depth\",\"in\":\"query\",\"description\":\"The number of eras to query for payouts of. Must be less than or equal to `HISTORY_DEPTH`. In cases where `era - (depth -1)` is less than 0, the first era queried will be 0.\",\"required\":false,\"schema\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"default\":1}},{\"name\":\"era\",\"in\":\"query\",\"description\":\"The era to query at.\",\"required\":false,\"schema\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"default\":\"`active_era - 1`\"}},{\"name\":\"unclaimedOnly\",\"in\":\"query\",\"description\":\"Only return unclaimed rewards.\",\"required\":false,\"schema\":{\"type\":\"string\",\"format\":\"boolean\",\"default\":true}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AccountStakingPayouts\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}},\"404\":{\"description\":\"account not found\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/accounts/{accountId}/vesting-info\":{\"get\":{\"tags\":[\"accounts\"],\"summary\":\"Get vesting information for an account.\",\"description\":\"Returns the vesting schedule for an account. Replaces `/vesting/{address}` from versions < v1.0.0.\",\"operationId\":\"getVestingSummaryByAccountId\",\"parameters\":[{\"name\":\"accountId\",\"in\":\"path\",\"description\":\"SS58 address of the account.\",\"required\":true,\"schema\":{\"pattern\":\"^[1-9A-HJ-NP-Za-km-z]{8,64}$\",\"type\":\"string\"}},{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to query the vesting info for the specified account.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AccountVestingInfo\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}},\"404\":{\"description\":\"account not found\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/blocks/{blockId}\":{\"get\":{\"tags\":[\"blocks\"],\"summary\":\"Get a block by its height or hash.\",\"description\":\"Returns a single block. BlockId can either be a block hash or a block height. Replaces `/block/{number}` from versions < v1.0.0.\",\"operationId\":\"getBlockById\",\"parameters\":[{\"name\":\"blockId\",\"in\":\"path\",\"description\":\"Block identifier, as the block height or block hash.\",\"required\":true,\"schema\":{\"pattern\":\"a-km-zA-HJ-NP-Z1-9{8,64}\",\"type\":\"string\"}},{\"name\":\"eventDocs\",\"in\":\"query\",\"description\":\"When set to `true`, every event will have an extra `docs` property with a string of the events documentation.\",\"required\":false,\"schema\":{\"type\":\"boolean\",\"default\":false}},{\"name\":\"extrinsicDocs\",\"in\":\"query\",\"description\":\"When set to `true`, every extrinsic will have an extra `docs` property with a string of the extrinsics documentation.\",\"required\":false,\"schema\":{\"type\":\"boolean\",\"default\":false}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Block\"}}}},\"400\":{\"description\":\"invalid Block identifier supplied\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/blocks/head\":{\"get\":{\"tags\":[\"blocks\"],\"summary\":\"Get the most recently finalized block.\",\"description\":\"Returns the most recently finalized block. Replaces `/block` from versions < v1.0.0.\",\"operationId\":\"getHeadBlock\",\"parameters\":[{\"name\":\"finalized\",\"in\":\"query\",\"description\":\"Boolean representing whether or not to get the finalized head. If it is not set the value defaults to true. When set to false it will attempt to get the newest known block, which may not be finalized.\",\"required\":false,\"schema\":{\"type\":\"boolean\",\"default\":true}},{\"name\":\"eventDocs\",\"in\":\"query\",\"description\":\"When set to `true`, every event will have an extra `docs` property with a string of the events documentation.\",\"required\":false,\"schema\":{\"type\":\"boolean\",\"default\":false}},{\"name\":\"extrinsicDocs\",\"in\":\"query\",\"description\":\"When set to `true`, every extrinsic will have an extra `docs` property with a string of the extrinsics documentation.\",\"required\":false,\"schema\":{\"type\":\"boolean\",\"default\":false}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Block\"}}}}}}},\"/node/network\":{\"get\":{\"tags\":[\"node\"],\"summary\":\"Get information about the Substrate node's activity in the peer-to-peer network.\",\"description\":\"Returns network related information of the node.\",\"operationId\":\"getNodeNetworking\",\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/NodeNetwork\"}}}}}}},\"/node/transaction-pool\":{\"get\":{\"tags\":[\"node\"],\"summary\":\"Get pending extrinsics from the Substrate node.\",\"description\":\"Returns the extrinsics that the node knows of that have not been included in a block.\",\"operationId\":\"getNodeTransactionPool\",\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionPool\"}}}}}}},\"/node/version\":{\"get\":{\"tags\":[\"node\"],\"summary\":\"Get information about the Substrates node's implementation and versioning.\",\"description\":\"Returns versioning information of the node.\",\"operationId\":\"getNodeVersion\",\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/NodeVersion\"}}}}}}},\"/transaction\":{\"post\":{\"tags\":[\"transaction\"],\"summary\":\"Submit a transaction to the node's transaction pool.\",\"description\":\"Accepts a valid signed extrinsic. Replaces `/tx` from versions < v1.0.0.\",\"operationId\":\"submitTransaction\",\"requestBody\":{\"$ref\":\"#/components/requestBodies/Transaction\"},\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionSuccess\"}}}},\"400\":{\"description\":\"failed to parse or submit transaction\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionFailure\"}}}}}}},\"/transaction/dry-run\":{\"post\":{\"tags\":[\"transaction\"],\"summary\":\"Dry run an extrinsic.\",\"description\":\"Use the dryrun call to practice submission of a transaction.\",\"operationId\":\"dryrunTransaction\",\"requestBody\":{\"$ref\":\"#/components/requestBodies/Transaction\"},\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionDryRun\"}}}},\"500\":{\"description\":\"failed to dry-run transaction\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionFailure\"}}}}}}},\"/transaction/fee-estimate\":{\"post\":{\"tags\":[\"transaction\"],\"summary\":\"Receive a fee estimate for a transaction.\",\"description\":\"Send a serialized transaction and receive back a naive fee estimate. Note: `partialFee` does not include any tips that you may add to increase a transaction's priority. See the reference on `compute_fee`. Replaces `/tx/fee-estimate` from versions < v1.0.0. Substrate Reference: - `RuntimeDispatchInfo`: https://crates.parity.io/pallet_transaction_payment_rpc_runtime_api/struct.RuntimeDispatchInfo.html - `query_info`: https://crates.parity.io/pallet_transaction_payment/struct.Module.html#method.query_info - `compute_fee`: https://crates.parity.io/pallet_transaction_payment/struct.Module.html#method.compute_fee\",\"operationId\":\"feeEstimateTransaction\",\"requestBody\":{\"$ref\":\"#/components/requestBodies/Transaction\"},\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionFeeEstimate\"}}}},\"500\":{\"description\":\"fee estimation failure\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionFeeEstimateFailure\"}}}}}}},\"/transaction/material\":{\"get\":{\"tags\":[\"transaction\"],\"summary\":\"Get all the network information needed to construct a transaction offline.\",\"description\":\"Returns the material that is universal to constructing any signed transaction offline. Replaces `/tx/artifacts` from versions < v1.0.0.\",\"operationId\":\"getTransactionMaterial\",\"parameters\":[{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to retrieve the transaction construction material.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}},{\"name\":\"noMeta\",\"in\":\"query\",\"schema\":{\"type\":\"boolean\",\"description\":\"If true, does not return metadata hex. This is useful when metadata is not needed and response time is a concern. Defaults to false.\",\"default\":false}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TransactionMaterial\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/pallets/staking/progress\":{\"get\":{\"tags\":[\"staking\",\"pallets\"],\"summary\":\"Get progress on the general Staking pallet system.\",\"description\":\"Returns information on the progress of key components of the staking system and estimates of future points of interest. Replaces `/staking-info` from versions < v1.0.0.\",\"operationId\":\"getStakingProgress\",\"parameters\":[{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to retrieve a staking progress report.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/StakingProgress\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}},\"/runtime/metadata\":{\"get\":{\"tags\":[\"runtime\"],\"summary\":\"Get the runtime metadata in decoded, JSON form.\",\"description\":\"Returns the runtime metadata as a JSON object. Substrate Reference: - FRAME Support: https://crates.parity.io/frame_support/metadata/index.html - Knowledge Base: https://substrate.dev/docs/en/knowledgebase/runtime/metadata\",\"parameters\":[{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to retrieve the metadata at.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"description\":\"Response is dependent on the runtime metadata contents.\"}}}}}}},\"/runtime/code\":{\"get\":{\"tags\":[\"runtime\"],\"summary\":\"Get the runtime wasm blob.\",\"description\":\"Returns the runtime Wasm blob in hex format.\",\"parameters\":[{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to retrieve the runtime wasm blob at.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RuntimeCode\"}}}}}}},\"/runtime/spec\":{\"get\":{\"tags\":[\"runtime\"],\"summary\":\"Get version information of the Substrate runtime.\",\"description\":\"Returns version information related to the runtime.\",\"parameters\":[{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to retrieve runtime version information at.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RuntimeSpec\"}}}}}}},\"/pallets/{palletId}/storage/{storageItemId}\":{\"get\":{\"tags\":[\"pallets\"],\"summary\":\"Get the value of a storage item.\",\"description\":\"Returns the value stored under the storageItemId. If it is a map, query param key1 is required. If the storage item is double map query params key1 and key2 are required.\",\"parameters\":[{\"name\":\"palletId\",\"in\":\"path\",\"description\":\"Name or index of the pallet to query the storage of.\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"name\":\"storageItemId\",\"in\":\"path\",\"description\":\"Id of the storage item to query for.\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"name\":\"key1\",\"in\":\"query\",\"description\":\"Key for a map, or first key for a double map. Required for querying a map.\",\"required\":false,\"schema\":{\"type\":\"string\"}},{\"name\":\"key2\",\"in\":\"query\",\"description\":\"Second key for a double map. Required for querying a double map.\",\"required\":false,\"schema\":{\"type\":\"string\"}},{\"name\":\"at\",\"in\":\"query\",\"description\":\"Block at which to query the storage item at.\",\"required\":false,\"schema\":{\"type\":\"string\",\"description\":\"Block identifier, as the block height or block hash.\",\"format\":\"unsignedInteger or $hex\"}},{\"name\":\"metadata\",\"in\":\"query\",\"description\":\"Include the storage items metadata (including documentation) if set to true.\",\"required\":false,\"schema\":{\"default\":false,\"type\":\"boolean\"}}],\"responses\":{\"200\":{\"description\":\"successful operation\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/PalletStorageItem\"}}}},\"400\":{\"description\":\"invalid blockId supplied for at query param\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}},\"404\":{\"description\":\"could not find resource with with id\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Error\"}}}}}}}},\"components\":{\"schemas\":{\"BalanceLock\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"An identifier for this lock. Only one lock may be in existence for each identifier.\"},\"amount\":{\"type\":\"string\",\"description\":\"The amount below which the free balance may not drop with this lock in effect.\",\"format\":\"unsignedInteger\"},\"reasons\":{\"type\":\"string\",\"description\":\"Reasons for withdrawing balance.\",\"enum\":[\"Fee = 0\",\"Misc = 1\",\"All = 2\"]}}},\"AccountBalanceInfo\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"nonce\":{\"type\":\"string\",\"description\":\"Account nonce.\",\"format\":\"unsignedInteger\"},\"free\":{\"type\":\"string\",\"description\":\"Free balance of the account. Not equivalent to _spendable_ balance. This is the only balance that matters in terms of most operations on tokens.\",\"format\":\"unsignedInteger\"},\"reserved\":{\"type\":\"string\",\"description\":\"Reserved balance of the account.\",\"format\":\"unsignedInteger\"},\"miscFrozen\":{\"type\":\"string\",\"description\":\"The amount that `free` may not drop below when withdrawing for anything except transaction fee payment.\",\"format\":\"unsignedInteger\"},\"feeFrozen\":{\"type\":\"string\",\"description\":\"The amount that `free` may not drop below when withdrawing specifically for transaction fee payment.\",\"format\":\"unsignedInteger\"},\"locks\":{\"type\":\"array\",\"description\":\"Array of locks on a balance. There can be many of these on an account and they \\\"overlap\\\", so the same balance is frozen by multiple locks\",\"items\":{\"$ref\":\"#/components/schemas/BalanceLock\"}}}},\"StakingLedger\":{\"type\":\"object\",\"properties\":{\"stash\":{\"type\":\"string\",\"description\":\"The _Stash_ account whose balance is actually locked and at stake.\",\"format\":\"ss58\"},\"total\":{\"type\":\"string\",\"description\":\"The total amount of the _Stash_'s balance that we are currently accounting for. Simply `active + unlocking`.\",\"format\":\"unsignedInteger\"},\"active\":{\"type\":\"string\",\"description\":\"The total amount of the _Stash_'s balance that will be at stake in any forthcoming eras.\",\"format\":\"unsignedInteger\"},\"unlocking\":{\"type\":\"string\",\"description\":\"Any balance that is becoming free, which may eventually be transferred out of the _Stash_ (assuming it doesn't get slashed first). Represented as an array of objects, each with an `era` at which `value` will be unlocked.\",\"format\":\"unsignedInteger\"},\"claimedRewards\":{\"type\":\"array\",\"description\":\"Array of eras for which the stakers behind a validator have claimed rewards. Only updated for _validators._\",\"items\":{\"type\":\"string\",\"format\":\"unsignedInteger\"}}},\"description\":\"The staking ledger.\"},\"Nominations\":{\"type\":\"object\",\"properties\":{\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"The targets of the nomination.\"},\"submittedIn\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"The era the nominations were submitted. (Except for initial nominations which are considered submitted at era 0.)\"},\"suppressed\":{\"type\":\"boolean\",\"description\":\"Whether the nominations have been suppressed.\"}}},\"AccountStakingInfo\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"rewardDestination\":{\"type\":\"string\",\"description\":\"The account to which rewards will be paid. Can be 'Staked' (Stash account, adding to the amount at stake), 'Stash' (Stash address, not adding to the amount at stake), or 'Controller' (Controller address).\",\"format\":\"ss58\",\"enum\":[\"Staked\",\"Stash\",\"Controller\"]},\"controller\":{\"type\":\"string\",\"description\":\"Controller address for the given Stash.\",\"format\":\"ss58\"},\"numSlashingSpans\":{\"type\":\"string\",\"description\":\"Number of slashing spans on Stash account; `null` if provided address is not a Controller.\",\"format\":\"unsignedInteger\"},\"nominations\":{\"$ref\":\"#/components/schemas/Nominations\"},\"stakingLedger\":{\"$ref\":\"#/components/schemas/StakingLedger\"}},\"description\":\"Note: Runtime versions of Kusama less than 1062 will either have `lastReward` in place of `claimedRewards`, or no field at all. This is related to changes in reward distribution. See: [Lazy Payouts](https://github.com/paritytech/substrate/pull/4474), [Simple Payouts](https://github.com/paritytech/substrate/pull/5406)\"},\"Payouts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"validatorId\":{\"type\":\"string\",\"description\":\"AccountId of the validator the payout is coming from.\"},\"nominatorStakingPayout\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"Payout for the reward destination associated with the accountId the query was made for.\"},\"claimed\":{\"type\":\"boolean\",\"description\":\"Whether or not the reward has been claimed.\"},\"totalValidatorRewardPoints\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"Number of reward points earned by the validator.\"},\"validatorCommission\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"The percentage of the total payout that the validator takes as commission, expressed as a Perbill.\"},\"totalValidatorExposure\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"The sum of the validator's and its nominators' stake.\"},\"nominatorExposure\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"The amount of stake the nominator has behind the validator.\"}},\"description\":\"Payout for a nominating _Stash_ address and information about the validator they were nominating.\"}},\"AccountStakingPayouts\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"erasPayouts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"era\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"Era this information is associated with.\"},\"totalEraRewardPoints\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"Total reward points for the era. Equals the sum of reward points for all the validators in the set.\"},\"totalEraPayout\":{\"type\":\"string\",\"format\":\"unsignedInteger\",\"description\":\"Total payout for the era. Validators split the payout based on the portion of `totalEraRewardPoints` they have.\"},\"payouts\":{\"$ref\":\"#/components/schemas/Payouts\"}}}}}},\"VestingSchedule\":{\"type\":\"object\",\"properties\":{\"locked\":{\"type\":\"string\",\"description\":\"Number of tokens locked at start.\",\"format\":\"unsignedInteger\"},\"perBlock\":{\"type\":\"string\",\"description\":\"Number of tokens that gets unlocked every block after `startingBlock`.\",\"format\":\"unsignedInteger\"},\"startingBlock\":{\"type\":\"string\",\"description\":\"Starting block for unlocking (vesting).\",\"format\":\"unsignedInteger\"}},\"description\":\"Vesting schedule for an account.\"},\"AccountVestingInfo\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"vesting\":{\"$ref\":\"#/components/schemas/VestingSchedule\"}}},\"BlockIdentifiers\":{\"type\":\"object\",\"properties\":{\"hash\":{\"type\":\"string\",\"description\":\"The block's hash.\",\"format\":\"hex\"},\"height\":{\"type\":\"string\",\"description\":\"The block's height.\",\"format\":\"unsignedInteger\"}},\"description\":\"Block number and hash at which the call was made.\"},\"DigestItem\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\"},\"index\":{\"type\":\"string\",\"format\":\"unsignedInteger\"},\"value\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}}},\"SanitizedEvent\":{\"type\":\"object\",\"properties\":{\"method\":{\"type\":\"string\"},\"data\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}}},\"Signature\":{\"type\":\"object\",\"properties\":{\"signature\":{\"type\":\"string\",\"format\":\"hex\"},\"signer\":{\"type\":\"string\",\"format\":\"ss58\"}},\"description\":\"Object with `signature` and `signer`, or `null` if unsigned.\"},\"RuntimeDispatchInfo\":{\"type\":\"object\",\"properties\":{\"weight\":{\"type\":\"string\",\"description\":\"Extrinsic weight.\"},\"class\":{\"type\":\"string\",\"description\":\"Extrinsic class.\",\"enum\":[\"Normal\",\"Operational\",\"Mandatory\"]},\"partialFee\":{\"type\":\"string\",\"description\":\"The _inclusion fee_ of a transaction, i.e. the minimum fee required for a transaction. Includes weight and encoded length fees, but does not have access to any signed extensions, e.g. the `tip`.\",\"format\":\"unsignedInteger\"}},\"description\":\"RuntimeDispatchInfo for the transaction. Includes the `partialFee`.\"},\"ExtrinsicMethod\":{\"type\":\"object\",\"properties\":{\"pallet\":{\"type\":\"string\"},\"methodName\":{\"type\":\"string\"}},\"description\":\"Extrinsic method\"},\"Extrinsic\":{\"type\":\"object\",\"properties\":{\"method\":{\"$ref\":\"#/components/schemas/ExtrinsicMethod\"},\"signature\":{\"$ref\":\"#/components/schemas/Signature\"},\"nonce\":{\"type\":\"string\",\"description\":\"Account nonce, if applicable.\",\"format\":\"unsignedInteger\"},\"args\":{\"type\":\"object\",\"description\":\"Object of arguments keyed by parameter name. Note: if you are expecting a [`OpaqueCall`](https://substrate.dev/rustdocs/v2.0.0/pallet_multisig/type.OpaqueCall.html) and it is not decoded in the response (i.e. it is just a hex string), then Sidecar was not able to decode it and likely that it is not a valid call for the runtime.\"},\"tip\":{\"type\":\"string\",\"description\":\"Any tip added to the transaction.\",\"format\":\"unsignedInteger\"},\"hash\":{\"type\":\"string\",\"description\":\"The transaction's hash.\",\"format\":\"hex\"},\"info\":{\"$ref\":\"#/components/schemas/RuntimeDispatchInfo\"},\"events\":{\"type\":\"array\",\"description\":\"An array of `SanitizedEvent`s that occurred during extrinsic execution.\",\"items\":{\"$ref\":\"#/components/schemas/SanitizedEvent\"}},\"success\":{\"type\":\"boolean\",\"description\":\"Whether or not the extrinsic succeeded.\"},\"paysFee\":{\"type\":\"boolean\",\"description\":\"Whether the extrinsic requires a fee. Careful! This field relates to whether or not the extrinsic requires a fee if called as a transaction. Block authors could insert the extrinsic as an inherent in the block and not pay a fee. Always check that `paysFee` is `true` and that the extrinsic is signed when reconciling old blocks.\"}}},\"BlockInitialize\":{\"type\":\"object\",\"properties\":{\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/SanitizedEvent\"}}},\"description\":\"Object with an array of `SanitizedEvent`s that occurred during block initialization with the `method` and `data` for each.\"},\"BlockFinalize\":{\"type\":\"object\",\"properties\":{\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/SanitizedEvent\"}}},\"description\":\"Object with an array of `SanitizedEvent`s that occurred during block construction finalization with the `method` and `data` for each.\"},\"Block\":{\"type\":\"object\",\"properties\":{\"hash\":{\"type\":\"string\",\"description\":\"The block's hash.\",\"format\":\"hex\"},\"height\":{\"type\":\"string\",\"description\":\"The block's height.\",\"format\":\"unsignedInteger\"},\"parentHash\":{\"type\":\"string\",\"description\":\"The hash of the parent block.\",\"format\":\"hex\"},\"stateRoot\":{\"type\":\"string\",\"description\":\"The state root after executing this block.\",\"format\":\"hex\"},\"extrinsicRoot\":{\"type\":\"string\",\"description\":\"The Merkle root of the extrinsics.\",\"format\":\"hex\"},\"authorId\":{\"type\":\"string\",\"description\":\"The account ID of the block author (may be undefined for some chains).\",\"format\":\"ss58\"},\"logs\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/DigestItem\"},\"description\":\"Array of `DigestItem`s associated with the block.\"},\"onInitialize\":{\"$ref\":\"#/components/schemas/BlockInitialize\"},\"extrinsics\":{\"type\":\"array\",\"description\":\"Array of extrinsics (inherents and transactions) within the block.\",\"items\":{\"$ref\":\"#/components/schemas/Extrinsic\"}},\"onFinalize\":{\"$ref\":\"#/components/schemas/BlockFinalize\"}},\"description\":\"Note: Block finalization does not correspond to consensus, i.e. whether the block is in the canonical chain. It denotes the finalization of block _construction._\"},\"NodeVersion\":{\"type\":\"object\",\"properties\":{\"clientVersion\":{\"type\":\"string\",\"description\":\"Node's binary version.\"},\"clientImplName\":{\"type\":\"string\",\"description\":\"Node's implementation name.\"},\"chain\":{\"type\":\"string\",\"description\":\"Node's chain name.\"}},\"description\":\"Version information of the node.\"},\"NodeRole\":{\"type\":\"string\",\"description\":\"Role of this node. (N.B. Sentry nodes are being deprecated.)\",\"enum\":[\"Full\",\"LightClient\",\"Authority\",\"Sentry\"]},\"PeerInfo\":{\"type\":\"object\",\"properties\":{\"peerId\":{\"type\":\"string\",\"description\":\"Peer ID.\"},\"roles\":{\"type\":\"string\",\"description\":\"Roles the peer is running\"},\"protocolVersion\":{\"type\":\"string\",\"description\":\"Peer's protocol version.\",\"format\":\"unsignedInteger\"},\"bestHash\":{\"type\":\"string\",\"description\":\"Hash of the best block on the peer's canon chain.\",\"format\":\"hex\"},\"bestNumber\":{\"type\":\"string\",\"description\":\"Height of the best block on the peer's canon chain.\",\"format\":\"unsignedInteger\"}}},\"NodeNetwork\":{\"type\":\"object\",\"properties\":{\"nodeRoles\":{\"$ref\":\"#/components/schemas/NodeRole\"},\"numPeers\":{\"type\":\"string\",\"description\":\"Number of peers the node is connected to.\",\"format\":\"unsignedInteger\"},\"isSyncing\":{\"type\":\"boolean\",\"description\":\"Whether or not the node is syncing. `False` indicates that the node is in sync.\"},\"shouldHavePeers\":{\"type\":\"boolean\",\"description\":\"Whether or not the node should be connected to peers. Might be false for local chains or when running without discovery.\"},\"localPeerId\":{\"type\":\"string\",\"description\":\"Local copy of the `PeerId`.\"},\"localListenAddresses\":{\"type\":\"array\",\"description\":\"Multiaddresses that the local node is listening on. The addresses include a trailing `/p2p/` with the local PeerId, and are thus suitable to be passed to `system_addReservedPeer` or as a bootnode address for example.\",\"items\":{\"type\":\"string\"}},\"peersInfo\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/PeerInfo\"}}}},\"RuntimeSpec\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"authoringVersion\":{\"type\":\"string\",\"description\":\"The version of the authorship interface. An authoring node will not attempt to author blocks unless this is equal to its native runtime.\"},\"chainType\":{\"type\":\"string\",\"description\":\"Type of the chain.\",\"enum\":[\"Development\",\"Local\",\"Live\"]},\"implVersion\":{\"type\":\"string\",\"description\":\"Version of the implementation specification. Non-consensus-breaking optimizations are about the only changes that could be made which would result in only the `impl_version` changing. The `impl_version` is set to 0 when `spec_version` is incremented.\"},\"specName\":{\"type\":\"string\",\"description\":\"Identifies the different Substrate runtimes.\"},\"specVersion\":{\"type\":\"string\",\"description\":\"Version of the runtime specification.\"},\"transactionVersion\":{\"type\":\"string\",\"description\":\"All existing dispatches are fully compatible when this number doesn't change. This number must change when an existing dispatchable (module ID, dispatch ID) is changed, either through an alteration in its user-level semantics, a parameter added/removed/changed, a dispatchable being removed, a module being removed, or a dispatchable/module changing its index.\"},\"properties\":{\"type\":\"object\",\"description\":\"Arbitrary properties defined in the chain spec.\"}},\"description\":\"Version information related to the runtime.\"},\"UnappliedSlash\":{\"type\":\"object\",\"properties\":{\"validator\":{\"type\":\"string\",\"description\":\"Stash account ID of the offending validator.\",\"format\":\"ss58\"},\"own\":{\"type\":\"string\",\"description\":\"The amount the validator will be slashed.\",\"format\":\"unsignedInteger\"},\"others\":{\"type\":\"array\",\"description\":\"Array of tuples(`[accountId, amount]`) representing all the stashes of other slashed stakers and the amount they will be slashed.\",\"items\":{\"type\":\"string\",\"format\":\"tuple[ss58, unsignedInteger]\"}},\"reporters\":{\"type\":\"array\",\"description\":\"Array of account IDs of the reporters of the offense.\",\"items\":{\"type\":\"string\",\"format\":\"ss58\"}},\"payout\":{\"type\":\"string\",\"description\":\"Amount of bounty payout to reporters.\",\"format\":\"unsignedInteger\"}}},\"ElectionStatus\":{\"type\":\"object\",\"properties\":{\"status\":{\"type\":\"object\",\"description\":\"Era election status: either `Close: null` or `Open: `. A status of `Close` indicates that the submission window for solutions from off-chain Phragmen is not open. A status of `Open` indicates that the submission window for off-chain Phragmen solutions has been open since BlockNumber. N.B. when the submission window is open, certain extrinsics are not allowed because they would mutate the state that the off-chain Phragmen calculation relies on for calculating results.\"},\"toggleEstimate\":{\"type\":\"string\",\"description\":\"Upper bound estimate of the block height at which the `status` will switch.\",\"format\":\"unsignedInteger\"}},\"description\":\"Information about the off-chain election. Not included in response when `forceEra.isForceNone`.\"},\"StakingProgress\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"activeEra\":{\"type\":\"string\",\"description\":\"`EraIndex` of the era being rewarded.\\n\",\"format\":\"unsignedInteger\"},\"forceEra\":{\"type\":\"string\",\"description\":\"Current status of era forcing.\",\"enum\":[\"ForceNone\",\"NotForcing\",\"ForceAlways\",\"ForceNew\"]},\"nextActiveEraEstimate\":{\"type\":\"string\",\"description\":\"Upper bound estimate of the block height at which the next active era will start. Not included in response when `forceEra.isForceNone`.\",\"format\":\"unsignedInteger\"},\"nextSessionEstimate\":{\"type\":\"string\",\"description\":\"Upper bound estimate of the block height at which the next session will start.\",\"format\":\"unsignedInteger\"},\"unappliedSlashes\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/UnappliedSlash\"},\"description\":\"Array of upcoming `UnappliedSlash` indexed by era.\"},\"electionStatus\":{\"$ref\":\"#/components/schemas/ElectionStatus\"},\"idealValidatorCount\":{\"type\":\"string\",\"description\":\"Upper bound of validator set size; considered the ideal size. Not included in response when `forceEra.isForceNone`.\",\"format\":\"unsignedInteger\"},\"validatorSet\":{\"type\":\"array\",\"description\":\"Stash account IDs of the validators for the current session. Not included in response when `forceEra.isForceNone`.\",\"items\":{\"type\":\"string\",\"format\":\"ss58\"}}}},\"TransactionDryRun\":{\"type\":\"object\",\"properties\":{\"resultType\":{\"type\":\"string\",\"enum\":[\"DispatchOutcome\",\"TransactionValidityError\"],\"description\":\"Either `DispatchOutcome` if the transaction is valid or `TransactionValidityError` if the result is invalid.\"},\"result\":{\"type\":\"string\",\"enum\":[\"Ok\",\"CannotLookup\",\"NoUnsignedValidator\",\"Custom(u8)\",\"Call\",\"Payment\",\"Future\",\"Stale\",\"BadProof\",\"AncientBirthBlock\",\"ExhaustsResources\",\"BadMandatory\",\"MandatoryDispatch\"],\"description\":\"If there was an error it will be the cause of the error. If the transaction executed correctly it will be `Ok: []`\"},\"validityErrorType\":{\"type\":\"string\",\"enum\":[\"InvalidTransaction\",\"UnknownTransaction\"]}},\"description\":\"References: - `UnknownTransaction`: https://crates.parity.io/sp_runtime/transaction_validity/enum.UnknownTransaction.html - `InvalidTransaction`: https://crates.parity.io/sp_runtime/transaction_validity/enum.InvalidTransaction.html\"},\"Transaction\":{\"type\":\"object\",\"properties\":{\"tx\":{\"type\":\"string\",\"format\":\"hex\"}}},\"TransactionMaterial\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"genesisHash\":{\"type\":\"string\",\"description\":\"The hash of the chain's genesis block.\",\"format\":\"blockHash\"},\"chainName\":{\"type\":\"string\",\"description\":\"The chain's name.\"},\"specName\":{\"type\":\"string\",\"description\":\"The chain's spec.\"},\"specVersion\":{\"type\":\"string\",\"description\":\"The spec version. Always increased in a runtime upgrade.\"},\"txVersion\":{\"type\":\"string\",\"description\":\"The transaction version. Common `txVersion` numbers indicate that the transaction encoding format and method indices are the same. Needed for decoding in an offline environment. Adding new transactions does not change `txVersion`.\"},\"metadata\":{\"type\":\"string\",\"description\":\"The chain's metadata in hex format.\",\"format\":\"hex\"}},\"description\":\"Note: `chainName`, `specName`, and `specVersion` are used to define a type registry with a set of signed extensions and types. For Polkadot and Kusama, `chainName` is not used in defining this registry, but in other Substrate-based chains that re-launch their network without changing the `specName`, the `chainName` would be needed to create the correct registry. Substrate Reference: - `RuntimeVersion`: https://crates.parity.io/sp_version/struct.RuntimeVersion.html - `SignedExtension`: https://crates.parity.io/sp_runtime/traits/trait.SignedExtension.html - FRAME Support: https://crates.parity.io/frame_support/metadata/index.html\"},\"TransactionSuccess\":{\"type\":\"object\",\"properties\":{\"hash\":{\"type\":\"string\",\"description\":\"The hash of the encoded transaction.\"}}},\"TransactionFailedToParse\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"number\"},\"error\":{\"type\":\"string\",\"description\":\"`Failed to parse a tx.`\"},\"transaction\":{\"type\":\"string\",\"format\":\"hex\"},\"cause\":{\"type\":\"string\"},\"stack\":{\"type\":\"string\"}},\"description\":\"Error message when Sidecar fails to parse the transaction.\"},\"TransactionFailedToSubmit\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"number\"},\"error\":{\"type\":\"string\",\"description\":\"Failed to submit transaction.\"},\"transaction\":{\"type\":\"string\",\"format\":\"hex\"},\"cause\":{\"type\":\"string\"},\"stack\":{\"type\":\"string\"}},\"description\":\"Error message when the node rejects the submitted transaction.\"},\"TransactionFailure\":{\"oneOf\":[{\"$ref\":\"#/components/schemas/TransactionFailedToSubmit\"},{\"$ref\":\"#/components/schemas/TransactionFailedToParse\"}]},\"TransactionFeeEstimateFailure\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"number\"},\"at\":{\"type\":\"object\",\"properties\":{\"hash\":{\"type\":\"string\"}}},\"error\":{\"type\":\"string\",\"description\":\"Error description.\"},\"transaction\":{\"type\":\"string\",\"format\":\"hex\"},\"block\":{\"type\":\"string\",\"description\":\"Block hash of the block fee estimation was attempted at.\"},\"cause\":{\"type\":\"string\",\"description\":\"Error message from the client.\"},\"stack\":{\"type\":\"string\"}}},\"TransactionFeeEstimate\":{\"type\":\"object\",\"properties\":{\"weight\":{\"type\":\"string\",\"description\":\"Extrinsic weight.\"},\"class\":{\"type\":\"string\",\"description\":\"Extrinsic class.\",\"enum\":[\"Normal\",\"Operational\",\"Mandatory\"]},\"partialFee\":{\"type\":\"string\",\"description\":\"Expected inclusion fee for the transaction. Note that the fee rate changes up to 30% in a 24 hour period and this will not be the exact fee.\",\"format\":\"unsignedInteger\"}},\"description\":\"Note: `partialFee` does not include any tips that you may add to increase a transaction's priority. See [compute_fee](https://crates.parity.io/pallet_transaction_payment/struct.Module.html#method.compute_fee).\"},\"TransactionPool\":{\"type\":\"object\",\"properties\":{\"pool\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"hash\":{\"type\":\"string\",\"format\":\"hex\",\"description\":\"H256 hash of the extrinsic.\"},\"encodedExtrinsic\":{\"type\":\"string\",\"format\":\"hex\",\"description\":\"Scale encoded extrinsic.\"}}}}}},\"RuntimeCode\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"code\":{\"type\":\"string\",\"format\":\"hex\"}}},\"Error\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"number\"},\"message\":{\"type\":\"string\"},\"stack\":{\"type\":\"string\"}}},\"PalletStorageType\":{\"type\":\"object\",\"description\":\"Info about the data structure used for storage.\",\"example\":{\"Map\":{\"hasher\":\"Twox64Concat\",\"key\":{\"example\":\"ReferendumIndex\"},\"value\":\"ReferendumInfo\",\"linked\":false}}},\"PalletStorageItemMetadata\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"example\":\"ReferendumInfoOf\"},\"modifier\":{\"type\":\"string\",\"example\":\"Optional\"},\"type\":{\"$ref\":\"#/components/schemas/PalletStorageType\"},\"fallback\":{\"type\":\"string\",\"example\":\"0x00\"},\"documentation\":{\"type\":\"string\",\"example\":\" Information concerning any given referendum.\\n\\n TWOX-NOTE: SAFE as indexes are not under an attacker’s control.\"}},\"description\":\"Metadata of a storage item from a FRAME pallet.\"},\"PalletStorageItem\":{\"type\":\"object\",\"properties\":{\"at\":{\"$ref\":\"#/components/schemas/BlockIdentifiers\"},\"pallet\":{\"type\":\"string\",\"description\":\"Name of the pallet.\",\"example\":\"democracy\"},\"palletIndex\":{\"type\":\"string\",\"description\":\"Index of the pallet for looking up storage.\",\"example\":\"15\"},\"storageItem\":{\"type\":\"string\",\"description\":\"Name of the storage item.\",\"example\":\"referendumInfoOf\"},\"key1\":{\"type\":\"string\",\"description\":\"Key1 query param. Will not show up in response unless it was passed as part of the URI.\",\"example\":\"2\"},\"key2\":{\"type\":\"string\",\"description\":\"Key2 query param. Will not show up in response if not defined in URI.\",\"example\":\"\"},\"value\":{\"type\":\"object\",\"description\":\"Value returned by this storage query.\",\"example\":{\"Ongoing\":{\"end\":\"1612800\",\"proposalHash\":\"0x7de70fc8be782076d0b5772be77153d172a5381c72dd56d3385e25f62abf507e\",\"threshold\":\"Supermajorityapproval\",\"delay\":\"403200\",\"tally\":{\"ayes\":\"41925212461400000\",\"nays\":\"214535586500000\",\"turnout\":\"34485320658000000\"}}}},\"metadata\":{\"$ref\":\"#/components/schemas/PalletStorageItemMetadata\"}}}},\"requestBodies\":{\"Transaction\":{\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Transaction\"}}},\"required\":true}}}}\n\n//# sourceURL=webpack:///./src/openapi-v1.yaml?"); /***/ }), diff --git a/docs/src/openapi-v1.yaml b/docs/src/openapi-v1.yaml index 7087483f1..f02675b2b 100755 --- a/docs/src/openapi-v1.yaml +++ b/docs/src/openapi-v1.yaml @@ -936,7 +936,10 @@ components: format: unsignedInteger args: type: object - description: Object of arguments keyed by parameter name. + description: >- + Object of arguments keyed by parameter name. Note: if you are expecting an [`OpaqueCall`](https://substrate.dev/rustdocs/v2.0.0/pallet_multisig/type.OpaqueCall.html) + and it is not decoded in the response (i.e. it is just a hex string), then Sidecar was + not able to decode it and likely that it is not a valid call for the runtime. tip: type: string description: Any tip added to the transaction. diff --git a/src/controllers/blocks/BlocksController.ts b/src/controllers/blocks/BlocksController.ts index 19b5a5e2b..0beaa711b 100644 --- a/src/controllers/blocks/BlocksController.ts +++ b/src/controllers/blocks/BlocksController.ts @@ -38,7 +38,9 @@ import AbstractController from '../AbstractController'; * - `method`: Extrinsic method. * - `signature`: Object with `signature` and `signer`, or `null` if unsigned. * - `nonce`: Account nonce, if applicable. - * - `args`: Array of arguments. + * - `args`: Array of arguments. Note: if you are expecting an [`OpaqueCall`](https://substrate.dev/rustdocs/v2.0.0/pallet_multisig/type.OpaqueCall.html) + * and it is not decoded in the response (i.e. it is just a hex string), then Sidecar was not + * able to decode it and likely that it is not a valid call for the runtime. * - `tip`: Any tip added to the transaction. * - `hash`: The transaction's hash. * - `info`: `RuntimeDispatchInfo` for the transaction. Includes the `partialFee`. diff --git a/src/services/blocks/BlocksService.ts b/src/services/blocks/BlocksService.ts index e87f28804..507277dea 100644 --- a/src/services/blocks/BlocksService.ts +++ b/src/services/blocks/BlocksService.ts @@ -448,8 +448,18 @@ export class BlocksService extends AbstractService { ) { // multiSig.asMulti.args.call is an OpaqueCall (Vec) that we // serialize to a polkadot-js Call and parse so it is not a hex blob. - const call = registry.createType('Call', argument.toHex()); - newArgs[paramName] = this.parseGenericCall(call, registry); + try { + const call = registry.createType( + 'Call', + argument.toHex() + ); + newArgs[paramName] = this.parseGenericCall( + call, + registry + ); + } catch { + newArgs[paramName] = argument; + } } else { newArgs[paramName] = argument; }