{
  "magicNumber": 1635018093,
  "metadata": {
    "v10": {
      "modules": [
        {
          "name": "System",
          "storage": {
            "prefix": "System",
            "items": [
              {
                "name": "AccountNonce",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "Index",
                    "linked": false
                  }
                },
                "fallback": "0x00000000",
                "docs": [
                  " Extrinsics nonce for accounts."
                ]
              },
              {
                "name": "ExtrinsicCount",
                "modifier": "Optional",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00",
                "docs": [
                  " Total extrinsics count for the current block."
                ]
              },
              {
                "name": "AllExtrinsicsWeight",
                "modifier": "Optional",
                "type": {
                  "plain": "Weight"
                },
                "fallback": "0x00",
                "docs": [
                  " Total weight for all extrinsics put together, for the current block."
                ]
              },
              {
                "name": "AllExtrinsicsLen",
                "modifier": "Optional",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00",
                "docs": [
                  " Total length (in bytes) for all extrinsics put together, for the current block."
                ]
              },
              {
                "name": "BlockHash",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "BlockNumber",
                    "value": "Hash",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " Map of block numbers to block hashes."
                ]
              },
              {
                "name": "ExtrinsicData",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "u32",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Extrinsics data for the current block (maps an extrinsic's index to its data)."
                ]
              },
              {
                "name": "Number",
                "modifier": "Default",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The current block number being processed. Set by `execute_block`."
                ]
              },
              {
                "name": "ParentHash",
                "modifier": "Default",
                "type": {
                  "plain": "Hash"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " Hash of the previous block."
                ]
              },
              {
                "name": "ExtrinsicsRoot",
                "modifier": "Default",
                "type": {
                  "plain": "Hash"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " Extrinsics root of the current block, also part of the block header."
                ]
              },
              {
                "name": "Digest",
                "modifier": "Default",
                "type": {
                  "plain": "DigestOf"
                },
                "fallback": "0x00",
                "docs": [
                  " Digest of the current block, also part of the block header."
                ]
              },
              {
                "name": "Events",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<EventRecord>"
                },
                "fallback": "0x00",
                "docs": [
                  " Events deposited for the current block."
                ]
              },
              {
                "name": "EventCount",
                "modifier": "Default",
                "type": {
                  "plain": "EventIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The number of events in the `Events<T>` list."
                ]
              },
              {
                "name": "EventTopics",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "Hash",
                    "value": "Vec<(BlockNumber,EventIndex)>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Mapping between a topic (represented by T::Hash) and a vector of indexes",
                  " of events in the `<Events<T>>` list.",
                  "",
                  " All topic vectors have deterministic storage locations depending on the topic. This",
                  " allows light-clients to leverage the changes trie storage tracking mechanism and",
                  " in case of changes fetch the list of events of interest.",
                  "",
                  " The value has the type `(T::BlockNumber, EventIndex)` because if we used only just",
                  " the `EventIndex` then in case if the topic has the same contents on the next block",
                  " no notification will be triggered thus the event might be lost."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "fill_block",
              "args": [],
              "docs": [
                " A big dispatch that will disallow any other transaction to be included."
              ]
            },
            {
              "name": "remark",
              "args": [
                {
                  "name": "_remark",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Make some on-chain remark."
              ]
            },
            {
              "name": "set_heap_pages",
              "args": [
                {
                  "name": "pages",
                  "type": "u64"
                }
              ],
              "docs": [
                " Set the number of pages in the WebAssembly environment's heap."
              ]
            },
            {
              "name": "set_code",
              "args": [
                {
                  "name": "code",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Set the new runtime code."
              ]
            },
            {
              "name": "set_code_without_checks",
              "args": [
                {
                  "name": "code",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Set the new runtime code without doing any checks of the given `code`."
              ]
            },
            {
              "name": "set_changes_trie_config",
              "args": [
                {
                  "name": "changes_trie_config",
                  "type": "Option<ChangesTrieConfiguration>"
                }
              ],
              "docs": [
                " Set the new changes trie configuration."
              ]
            },
            {
              "name": "set_storage",
              "args": [
                {
                  "name": "items",
                  "type": "Vec<KeyValue>"
                }
              ],
              "docs": [
                " Set some items of storage."
              ]
            },
            {
              "name": "kill_storage",
              "args": [
                {
                  "name": "keys",
                  "type": "Vec<Key>"
                }
              ],
              "docs": [
                " Kill some items from storage."
              ]
            },
            {
              "name": "kill_prefix",
              "args": [
                {
                  "name": "prefix",
                  "type": "Key"
                }
              ],
              "docs": [
                " Kill all storage items with a key that starts with the given prefix."
              ]
            }
          ],
          "events": [
            {
              "name": "ExtrinsicSuccess",
              "args": [
                "DispatchInfo"
              ],
              "docs": [
                " An extrinsic completed successfully."
              ]
            },
            {
              "name": "ExtrinsicFailed",
              "args": [
                "DispatchError",
                "DispatchInfo"
              ],
              "docs": [
                " An extrinsic failed."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "InvalidSpecName",
              "docs": [
                " The name of specification does not match between the current runtime",
                " and the new runtime."
              ]
            },
            {
              "name": "SpecVersionNotAllowedToDecrease",
              "docs": [
                " The specification version is not allowed to decrease between the current runtime",
                " and the new runtime."
              ]
            },
            {
              "name": "ImplVersionNotAllowedToDecrease",
              "docs": [
                " The implementation version is not allowed to decrease between the current runtime",
                " and the new runtime."
              ]
            },
            {
              "name": "SpecOrImplVersionNeedToIncrease",
              "docs": [
                " The specification or the implementation version need to increase between the",
                " current runtime and the new runtime."
              ]
            },
            {
              "name": "FailedToExtractRuntimeVersion",
              "docs": [
                " Failed to extract the runtime version from the new runtime.",
                "",
                " Either calling `Core_version` or decoding `RuntimeVersion` failed."
              ]
            }
          ]
        },
        {
          "name": "Utility",
          "storage": {
            "prefix": "Utility",
            "items": [
              {
                "name": "Multisigs",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "AccountId",
                    "key2": "[u8;32]",
                    "value": "Multisig",
                    "key2Hasher": "Blake2_128Concat"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The set of open multisig operations."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "batch",
              "args": [
                {
                  "name": "calls",
                  "type": "Vec<Call>"
                }
              ],
              "docs": [
                " Send a batch of dispatch calls.",
                "",
                " This will execute until the first one fails and then stop.",
                "",
                " May be called from any origin.",
                "",
                " - `calls`: The calls to be dispatched from the same origin.",
                "",
                " # <weight>",
                " - The sum of the weights of the `calls`.",
                " - One event.",
                " # </weight>",
                "",
                " This will return `Ok` in all circumstances. To determine the success of the batch, an",
                " event is deposited. If a call failed and the batch was interrupted, then the",
                " `BatchInterrupted` event is deposited, along with the number of successful calls made",
                " and the error of the failed call. If all were successful, then the `BatchCompleted`",
                " event is deposited."
              ]
            },
            {
              "name": "as_sub",
              "args": [
                {
                  "name": "index",
                  "type": "u16"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "docs": [
                " Send a call through an indexed pseudonym of the sender.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " # <weight>",
                " - The weight of the `call`.",
                " # </weight>"
              ]
            },
            {
              "name": "as_multi",
              "args": [
                {
                  "name": "threshold",
                  "type": "u16"
                },
                {
                  "name": "other_signatories",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "maybe_timepoint",
                  "type": "Option<Timepoint>"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "docs": [
                " Register approval for a dispatch to be made from a deterministic composite account if",
                " approved by a total of `threshold - 1` of `other_signatories`.",
                "",
                " If there are enough, then dispatch the call.",
                "",
                " Payment: `MultisigDepositBase` will be reserved if this is the first approval, plus",
                " `threshold` times `MultisigDepositFactor`. It is returned once this dispatch happens or",
                " is cancelled.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " - `threshold`: The total number of approvals for this dispatch before it is executed.",
                " - `other_signatories`: The accounts (other than the sender) who can approve this",
                " dispatch. May not be empty.",
                " - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is",
                " not the first approval, then it must be `Some`, with the timepoint (block number and",
                " transaction index) of the first approval transaction.",
                " - `call`: The call to be executed.",
                "",
                " NOTE: Unless this is the final approval, you will generally want to use",
                " `approve_as_multi` instead, since it only requires a hash of the call.",
                "",
                " Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise",
                " on success, result is `Ok` and the result from the interior call, if it was executed,",
                " may be found in the deposited `MultisigExecuted` event.",
                "",
                " # <weight>",
                " - `O(S + Z + Call)`.",
                " - Up to one balance-reserve or unreserve operation.",
                " - One passthrough operation, one insert, both `O(S)` where `S` is the number of",
                "   signatories. `S` is capped by `MaxSignatories`, with weight being proportional.",
                " - One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len.",
                " - One encode & hash, both of complexity `O(S)`.",
                " - Up to one binary search and insert (`O(logS + S)`).",
                " - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove.",
                " - One event.",
                " - The weight of the `call`.",
                " - Storage: inserts one item, value size bounded by `MaxSignatories`, with a",
                "   deposit taken for its lifetime of",
                "   `MultisigDepositBase + threshold * MultisigDepositFactor`.",
                " # </weight>"
              ]
            },
            {
              "name": "approve_as_multi",
              "args": [
                {
                  "name": "threshold",
                  "type": "u16"
                },
                {
                  "name": "other_signatories",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "maybe_timepoint",
                  "type": "Option<Timepoint>"
                },
                {
                  "name": "call_hash",
                  "type": "[u8;32]"
                }
              ],
              "docs": [
                " Register approval for a dispatch to be made from a deterministic composite account if",
                " approved by a total of `threshold - 1` of `other_signatories`.",
                "",
                " Payment: `MultisigDepositBase` will be reserved if this is the first approval, plus",
                " `threshold` times `MultisigDepositFactor`. It is returned once this dispatch happens or",
                " is cancelled.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " - `threshold`: The total number of approvals for this dispatch before it is executed.",
                " - `other_signatories`: The accounts (other than the sender) who can approve this",
                " dispatch. May not be empty.",
                " - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is",
                " not the first approval, then it must be `Some`, with the timepoint (block number and",
                " transaction index) of the first approval transaction.",
                " - `call_hash`: The hash of the call to be executed.",
                "",
                " NOTE: If this is the final approval, you will want to use `as_multi` instead.",
                "",
                " # <weight>",
                " - `O(S)`.",
                " - Up to one balance-reserve or unreserve operation.",
                " - One passthrough operation, one insert, both `O(S)` where `S` is the number of",
                "   signatories. `S` is capped by `MaxSignatories`, with weight being proportional.",
                " - One encode & hash, both of complexity `O(S)`.",
                " - Up to one binary search and insert (`O(logS + S)`).",
                " - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove.",
                " - One event.",
                " - Storage: inserts one item, value size bounded by `MaxSignatories`, with a",
                "   deposit taken for its lifetime of",
                "   `MultisigDepositBase + threshold * MultisigDepositFactor`.",
                " # </weight>"
              ]
            },
            {
              "name": "cancel_as_multi",
              "args": [
                {
                  "name": "threshold",
                  "type": "u16"
                },
                {
                  "name": "other_signatories",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "timepoint",
                  "type": "Timepoint"
                },
                {
                  "name": "call_hash",
                  "type": "[u8;32]"
                }
              ],
              "docs": [
                " Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously",
                " for this operation will be unreserved on success.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " - `threshold`: The total number of approvals for this dispatch before it is executed.",
                " - `other_signatories`: The accounts (other than the sender) who can approve this",
                " dispatch. May not be empty.",
                " - `timepoint`: The timepoint (block number and transaction index) of the first approval",
                " transaction for this dispatch.",
                " - `call_hash`: The hash of the call to be executed.",
                "",
                " # <weight>",
                " - `O(S)`.",
                " - Up to one balance-reserve or unreserve operation.",
                " - One passthrough operation, one insert, both `O(S)` where `S` is the number of",
                "   signatories. `S` is capped by `MaxSignatories`, with weight being proportional.",
                " - One encode & hash, both of complexity `O(S)`.",
                " - One event.",
                " - I/O: 1 read `O(S)`, one remove.",
                " - Storage: removes one item.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "BatchInterrupted",
              "args": [
                "u32",
                "DispatchError"
              ],
              "docs": [
                " Batch of dispatches did not complete fully. Index of first failing dispatch given, as",
                " well as the error."
              ]
            },
            {
              "name": "BatchCompleted",
              "args": [],
              "docs": [
                " Batch of dispatches completed fully with no error."
              ]
            },
            {
              "name": "NewMultisig",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "docs": [
                " A new multisig operation has begun. First param is the account that is approving,",
                " second is the multisig account."
              ]
            },
            {
              "name": "MultisigApproval",
              "args": [
                "AccountId",
                "Timepoint",
                "AccountId"
              ],
              "docs": [
                " A multisig operation has been approved by someone. First param is the account that is",
                " approving, third is the multisig account."
              ]
            },
            {
              "name": "MultisigExecuted",
              "args": [
                "AccountId",
                "Timepoint",
                "AccountId",
                "DispatchResult"
              ],
              "docs": [
                " A multisig operation has been executed. First param is the account that is",
                " approving, third is the multisig account."
              ]
            },
            {
              "name": "MultisigCancelled",
              "args": [
                "AccountId",
                "Timepoint",
                "AccountId"
              ],
              "docs": [
                " A multisig operation has been cancelled. First param is the account that is",
                " cancelling, third is the multisig account."
              ]
            }
          ],
          "constants": [],
          "errors": []
        },
        {
          "name": "Babe",
          "storage": {
            "prefix": "Babe",
            "items": [
              {
                "name": "EpochIndex",
                "modifier": "Default",
                "type": {
                  "plain": "u64"
                },
                "fallback": "0x0000000000000000",
                "docs": [
                  " Current epoch index."
                ]
              },
              {
                "name": "Authorities",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(AuthorityId,BabeAuthorityWeight)>"
                },
                "fallback": "0x00",
                "docs": [
                  " Current epoch authorities."
                ]
              },
              {
                "name": "GenesisSlot",
                "modifier": "Default",
                "type": {
                  "plain": "u64"
                },
                "fallback": "0x0000000000000000",
                "docs": [
                  " The slot at which the first epoch actually started. This is 0",
                  " until the first block of the chain."
                ]
              },
              {
                "name": "CurrentSlot",
                "modifier": "Default",
                "type": {
                  "plain": "u64"
                },
                "fallback": "0x0000000000000000",
                "docs": [
                  " Current slot number."
                ]
              },
              {
                "name": "Randomness",
                "modifier": "Default",
                "type": {
                  "plain": "[u8;32]"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " The epoch randomness for the *current* epoch.",
                  "",
                  " # Security",
                  "",
                  " This MUST NOT be used for gambling, as it can be influenced by a",
                  " malicious validator in the short term. It MAY be used in many",
                  " cryptographic protocols, however, so long as one remembers that this",
                  " (like everything else on-chain) it is public. For example, it can be",
                  " used where a number is needed that cannot have been chosen by an",
                  " adversary, for purposes such as public-coin zero-knowledge proofs."
                ]
              },
              {
                "name": "NextRandomness",
                "modifier": "Default",
                "type": {
                  "plain": "[u8;32]"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " Next epoch randomness."
                ]
              },
              {
                "name": "SegmentIndex",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Randomness under construction.",
                  "",
                  " We make a tradeoff between storage accesses and list length.",
                  " We store the under-construction randomness in segments of up to",
                  " `UNDER_CONSTRUCTION_SEGMENT_LENGTH`.",
                  "",
                  " Once a segment reaches this length, we begin the next one.",
                  " We reset all segments and return to `0` at the beginning of every",
                  " epoch."
                ]
              },
              {
                "name": "UnderConstruction",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "u32",
                    "value": "Vec<[u8;32]>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": []
              },
              {
                "name": "Initialized",
                "modifier": "Optional",
                "type": {
                  "plain": "MaybeVrf"
                },
                "fallback": "0x00",
                "docs": [
                  " Temporary value (cleared at block finalization) which is `Some`",
                  " if per-block initialization has already been called for current block."
                ]
              }
            ]
          },
          "calls": [],
          "events": null,
          "constants": [
            {
              "name": "EpochDuration",
              "type": "u64",
              "value": "0xc800000000000000",
              "docs": [
                " The number of **slots** that an epoch takes. We couple sessions to",
                " epochs, i.e. we start a new session once the new epoch begins."
              ]
            },
            {
              "name": "ExpectedBlockTime",
              "type": "Moment",
              "value": "0xb80b000000000000",
              "docs": [
                " The expected average block time at which BABE should be creating",
                " blocks. Since BABE is probabilistic it is not trivial to figure out",
                " what the expected average block time should be based on the slot",
                " duration and the security parameter `c` (where `1 - c` represents",
                " the probability of a slot being empty)."
              ]
            }
          ],
          "errors": []
        },
        {
          "name": "Timestamp",
          "storage": {
            "prefix": "Timestamp",
            "items": [
              {
                "name": "Now",
                "modifier": "Default",
                "type": {
                  "plain": "Moment"
                },
                "fallback": "0x0000000000000000",
                "docs": [
                  " Current time for the current block."
                ]
              },
              {
                "name": "DidUpdate",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " Did the timestamp get updated in this block?"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set",
              "args": [
                {
                  "name": "now",
                  "type": "Compact<Moment>"
                }
              ],
              "docs": [
                " Set the current time.",
                "",
                " This call should be invoked exactly once per block. It will panic at the finalization",
                " phase, if this call hasn't been invoked by that time.",
                "",
                " The timestamp should be greater than the previous one by the amount specified by",
                " `MinimumPeriod`.",
                "",
                " The dispatch origin for this call must be `Inherent`."
              ]
            }
          ],
          "events": null,
          "constants": [
            {
              "name": "MinimumPeriod",
              "type": "Moment",
              "value": "0xdc05000000000000",
              "docs": [
                " The minimum period between blocks. Beware that this is different to the *expected* period",
                " that the block production apparatus provides. Your chosen consensus system will generally",
                " work with this to determine a sensible block time. e.g. For Aura, it will be double this",
                " period on default settings."
              ]
            }
          ],
          "errors": []
        },
        {
          "name": "Authorship",
          "storage": {
            "prefix": "Authorship",
            "items": [
              {
                "name": "Uncles",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<UncleEntryItem>"
                },
                "fallback": "0x00",
                "docs": [
                  " Uncles"
                ]
              },
              {
                "name": "Author",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "docs": [
                  " Author of current block."
                ]
              },
              {
                "name": "DidSetUncles",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " Whether uncles were already set in this block."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_uncles",
              "args": [
                {
                  "name": "new_uncles",
                  "type": "Vec<Header>"
                }
              ],
              "docs": [
                " Provide a set of uncles."
              ]
            }
          ],
          "events": null,
          "constants": [],
          "errors": [
            {
              "name": "InvalidUncleParent",
              "docs": [
                " The uncle parent not in the chain."
              ]
            },
            {
              "name": "UnclesAlreadySet",
              "docs": [
                " Uncles already set in the block."
              ]
            },
            {
              "name": "TooManyUncles",
              "docs": [
                " Too many uncles."
              ]
            },
            {
              "name": "GenesisUncle",
              "docs": [
                " The uncle is genesis."
              ]
            },
            {
              "name": "TooHighUncle",
              "docs": [
                " The uncle is too high in chain."
              ]
            },
            {
              "name": "UncleAlreadyIncluded",
              "docs": [
                " The uncle is already included."
              ]
            },
            {
              "name": "OldUncle",
              "docs": [
                " The uncle isn't recent enough to be included."
              ]
            }
          ]
        },
        {
          "name": "Indices",
          "storage": {
            "prefix": "Indices",
            "items": [
              {
                "name": "NextEnumSet",
                "modifier": "Default",
                "type": {
                  "plain": "AccountIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The next free enumeration set."
                ]
              },
              {
                "name": "EnumSet",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountIndex",
                    "value": "Vec<AccountId>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The enumeration sets."
                ]
              }
            ]
          },
          "calls": [],
          "events": [
            {
              "name": "NewAccountIndex",
              "args": [
                "AccountId",
                "AccountIndex"
              ],
              "docs": [
                " A new account index was assigned.",
                "",
                " This event is not triggered when an existing index is reassigned",
                " to another `AccountId`."
              ]
            }
          ],
          "constants": [],
          "errors": []
        },
        {
          "name": "Balances",
          "storage": {
            "prefix": "Balances",
            "items": [
              {
                "name": "TotalIssuance",
                "modifier": "Default",
                "type": {
                  "plain": "Balance"
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " The total units issued in the system."
                ]
              },
              {
                "name": "Vesting",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "VestingSchedule",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Information regarding the vesting of a given account."
                ]
              },
              {
                "name": "FreeBalance",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "Balance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " The 'free' balance of a given account.",
                  "",
                  " This is the only balance that matters in terms of most operations on tokens. It",
                  " alone is used to determine the balance when in the contract execution environment. When this",
                  " balance falls below the value of `ExistentialDeposit`, then the 'current account' is",
                  " deleted: specifically `FreeBalance`. Further, the `OnFreeBalanceZero` callback",
                  " is invoked, giving a chance to external modules to clean up data associated with",
                  " the deleted account.",
                  "",
                  " `frame_system::AccountNonce` is also deleted if `ReservedBalance` is also zero (it also gets",
                  " collapsed to zero if it ever becomes less than `ExistentialDeposit`."
                ]
              },
              {
                "name": "ReservedBalance",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "Balance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " The amount of the balance of a given account that is externally reserved; this can still get",
                  " slashed, but gets slashed last of all.",
                  "",
                  " This balance is a 'reserve' balance that other subsystems use in order to set aside tokens",
                  " that are still 'owned' by the account holder, but which are suspendable.",
                  "",
                  " When this balance falls below the value of `ExistentialDeposit`, then this 'reserve account'",
                  " is deleted: specifically, `ReservedBalance`.",
                  "",
                  " `frame_system::AccountNonce` is also deleted if `FreeBalance` is also zero (it also gets",
                  " collapsed to zero if it ever becomes less than `ExistentialDeposit`.)"
                ]
              },
              {
                "name": "Locks",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "Vec<BalanceLock>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Any liquidity locks on some account balances."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "transfer",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "value",
                  "type": "Compact<Balance>"
                }
              ],
              "docs": [
                " Transfer some liquid free balance to another account.",
                "",
                " `transfer` will set the `FreeBalance` of the sender and receiver.",
                " It will decrease the total issuance of the system by the `TransferFee`.",
                " If the sender's account is below the existential deposit as a result",
                " of the transfer, the account will be reaped.",
                "",
                " The dispatch origin for this call must be `Signed` by the transactor.",
                "",
                " # <weight>",
                " - Dependent on arguments but not critical, given proper implementations for",
                "   input config types. See related functions below.",
                " - It contains a limited number of reads and writes internally and no complex computation.",
                "",
                " Related functions:",
                "",
                "   - `ensure_can_withdraw` is always called internally but has a bounded complexity.",
                "   - Transferring balances to accounts that did not exist before will cause",
                "      `T::OnNewAccount::on_new_account` to be called.",
                "   - Removing enough funds from an account will trigger",
                "     `T::DustRemoval::on_unbalanced` and `T::OnFreeBalanceZero::on_free_balance_zero`.",
                "   - `transfer_keep_alive` works the same way as `transfer`, but has an additional",
                "     check that the transfer will not kill the origin account.",
                "",
                " # </weight>"
              ]
            },
            {
              "name": "set_balance",
              "args": [
                {
                  "name": "who",
                  "type": "LookupSource"
                },
                {
                  "name": "new_free",
                  "type": "Compact<Balance>"
                },
                {
                  "name": "new_reserved",
                  "type": "Compact<Balance>"
                }
              ],
              "docs": [
                " Set the balances of a given account.",
                "",
                " This will alter `FreeBalance` and `ReservedBalance` in storage. it will",
                " also decrease the total issuance of the system (`TotalIssuance`).",
                " If the new free or reserved balance is below the existential deposit,",
                " it will reset the account nonce (`frame_system::AccountNonce`).",
                "",
                " The dispatch origin for this call is `root`.",
                "",
                " # <weight>",
                " - Independent of the arguments.",
                " - Contains a limited number of reads and writes.",
                " # </weight>"
              ]
            },
            {
              "name": "force_transfer",
              "args": [
                {
                  "name": "source",
                  "type": "LookupSource"
                },
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "value",
                  "type": "Compact<Balance>"
                }
              ],
              "docs": [
                " Exactly as `transfer`, except the origin must be root and the source account may be",
                " specified."
              ]
            },
            {
              "name": "transfer_keep_alive",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "value",
                  "type": "Compact<Balance>"
                }
              ],
              "docs": [
                " Same as the [`transfer`] call, but with a check that the transfer will not kill the",
                " origin account.",
                "",
                " 99% of the time you want [`transfer`] instead.",
                "",
                " [`transfer`]: struct.Module.html#method.transfer"
              ]
            }
          ],
          "events": [
            {
              "name": "NewAccount",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A new account was created."
              ]
            },
            {
              "name": "ReapedAccount",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " An account was reaped."
              ]
            },
            {
              "name": "Transfer",
              "args": [
                "AccountId",
                "AccountId",
                "Balance",
                "Balance"
              ],
              "docs": [
                " Transfer succeeded (from, to, value, fees)."
              ]
            },
            {
              "name": "BalanceSet",
              "args": [
                "AccountId",
                "Balance",
                "Balance"
              ],
              "docs": [
                " A balance was set by root (who, free, reserved)."
              ]
            },
            {
              "name": "Deposit",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " Some amount was deposited (e.g. for transaction fees)."
              ]
            }
          ],
          "constants": [
            {
              "name": "ExistentialDeposit",
              "type": "Balance",
              "value": "0x00407a10f35a00000000000000000000",
              "docs": [
                " The minimum amount required to keep an account open."
              ]
            },
            {
              "name": "TransferFee",
              "type": "Balance",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The fee required to make a transfer."
              ]
            },
            {
              "name": "CreationFee",
              "type": "Balance",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The fee required to create an account."
              ]
            }
          ],
          "errors": [
            {
              "name": "VestingBalance",
              "docs": [
                " Vesting balance too high to send value"
              ]
            },
            {
              "name": "LiquidityRestrictions",
              "docs": [
                " Account liquidity restrictions prevent withdrawal"
              ]
            },
            {
              "name": "Overflow",
              "docs": [
                " Got an overflow after adding"
              ]
            },
            {
              "name": "InsufficientBalance",
              "docs": [
                " Balance too low to send value"
              ]
            },
            {
              "name": "ExistentialDeposit",
              "docs": [
                " Value too low to create account due to existential deposit"
              ]
            },
            {
              "name": "KeepAlive",
              "docs": [
                " Transfer/payment would kill account"
              ]
            },
            {
              "name": "ExistingVestingSchedule",
              "docs": [
                " A vesting schedule already exists for this account"
              ]
            },
            {
              "name": "DeadAccount",
              "docs": [
                " Beneficiary account must pre-exist"
              ]
            }
          ]
        },
        {
          "name": "TransactionPayment",
          "storage": {
            "prefix": "Balances",
            "items": [
              {
                "name": "NextFeeMultiplier",
                "modifier": "Default",
                "type": {
                  "plain": "Multiplier"
                },
                "fallback": "0x0000000000000000",
                "docs": []
              }
            ]
          },
          "calls": null,
          "events": null,
          "constants": [
            {
              "name": "TransactionBaseFee",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The fee to be paid for making a transaction; the base."
              ]
            },
            {
              "name": "TransactionByteFee",
              "type": "BalanceOf",
              "value": "0x00e40b54020000000000000000000000",
              "docs": [
                " The fee to be paid for making a transaction; the per-byte portion."
              ]
            }
          ],
          "errors": []
        },
        {
          "name": "Staking",
          "storage": {
            "prefix": "Staking",
            "items": [
              {
                "name": "ValidatorCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The ideal number of staking participants."
                ]
              },
              {
                "name": "MinimumValidatorCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x04000000",
                "docs": [
                  " Minimum number of staking participants before emergency conditions are imposed."
                ]
              },
              {
                "name": "Invulnerables",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " Any validators that may never be slashed or forcibly kicked. It's a Vec since they're",
                  " easy to initialize and the performance hit is minimal (we expect no more than four",
                  " invulnerables) and restricted to testnets."
                ]
              },
              {
                "name": "Bonded",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "AccountId",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Map from all locked \"stash\" accounts to the controller account."
                ]
              },
              {
                "name": "Ledger",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "StakingLedger",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Map from all (unlocked) \"controller\" accounts to the info regarding the staking."
                ]
              },
              {
                "name": "Payee",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "RewardDestination",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Where the reward payment should be made. Keyed by stash."
                ]
              },
              {
                "name": "Validators",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "ValidatorPrefs",
                    "linked": true
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The map from (wannabe) validator stash key to the preferences of that validator."
                ]
              },
              {
                "name": "Nominators",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "Nominations",
                    "linked": true
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The map from nominator stash key to the set of stash keys of all validators to nominate.",
                  "",
                  " NOTE: is private so that we can ensure upgraded before all typical accesses.",
                  " Direct storage APIs can still bypass this protection."
                ]
              },
              {
                "name": "Stakers",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "Exposure",
                    "linked": false
                  }
                },
                "fallback": "0x000000",
                "docs": [
                  " Nominators for a particular account that is in action right now. You can't iterate",
                  " through validators here, but you can find them in the Session module.",
                  "",
                  " This is keyed by the stash account."
                ]
              },
              {
                "name": "CurrentElected",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The currently elected validator set keyed by stash account ID."
                ]
              },
              {
                "name": "CurrentEra",
                "modifier": "Default",
                "type": {
                  "plain": "EraIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The current era index."
                ]
              },
              {
                "name": "CurrentEraStart",
                "modifier": "Default",
                "type": {
                  "plain": "MomentOf"
                },
                "fallback": "0x0000000000000000",
                "docs": [
                  " The start of the current era."
                ]
              },
              {
                "name": "CurrentEraStartSessionIndex",
                "modifier": "Default",
                "type": {
                  "plain": "SessionIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The session index at which the current era started."
                ]
              },
              {
                "name": "CurrentEraPointsEarned",
                "modifier": "Default",
                "type": {
                  "plain": "EraPoints"
                },
                "fallback": "0x0000000000",
                "docs": [
                  " Rewards for the current era. Using indices of current elected set."
                ]
              },
              {
                "name": "SlotStake",
                "modifier": "Default",
                "type": {
                  "plain": "BalanceOf"
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " The amount of balance actively at stake for each validator slot, currently.",
                  "",
                  " This is used to derive rewards and punishments."
                ]
              },
              {
                "name": "ForceEra",
                "modifier": "Default",
                "type": {
                  "plain": "Forcing"
                },
                "fallback": "0x00",
                "docs": [
                  " True if the next session change will be a new era regardless of index."
                ]
              },
              {
                "name": "SlashRewardFraction",
                "modifier": "Default",
                "type": {
                  "plain": "Perbill"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The percentage of the slash that is distributed to reporters.",
                  "",
                  " The rest of the slashed value is handled by the `Slash`."
                ]
              },
              {
                "name": "CanceledSlashPayout",
                "modifier": "Default",
                "type": {
                  "plain": "BalanceOf"
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " The amount of currency given to reporters of a slash event which was",
                  " canceled by extraordinary circumstances (e.g. governance)."
                ]
              },
              {
                "name": "UnappliedSlashes",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "EraIndex",
                    "value": "Vec<UnappliedSlash>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " All unapplied slashes that are queued for later."
                ]
              },
              {
                "name": "BondedEras",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(EraIndex,SessionIndex)>"
                },
                "fallback": "0x00",
                "docs": [
                  " A mapping from still-bonded eras to the first session index of that era."
                ]
              },
              {
                "name": "ValidatorSlashInEra",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_256",
                    "key1": "EraIndex",
                    "key2": "AccountId",
                    "value": "(Perbill,BalanceOf)",
                    "key2Hasher": "Twox128"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " All slashing events on validators, mapped by era to the highest slash proportion",
                  " and slash value of the era."
                ]
              },
              {
                "name": "NominatorSlashInEra",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_256",
                    "key1": "EraIndex",
                    "key2": "AccountId",
                    "value": "BalanceOf",
                    "key2Hasher": "Twox128"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " All slashing events on nominators, mapped by era to the highest slash value of the era."
                ]
              },
              {
                "name": "SlashingSpans",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "SlashingSpans",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Slashing spans for stash accounts."
                ]
              },
              {
                "name": "SpanSlash",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "(AccountId,SpanIndex)",
                    "value": "SpanRecord",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " Records information about the maximum slash of a stash within a slashing span,",
                  " as well as how much reward has been paid out."
                ]
              },
              {
                "name": "EarliestUnappliedSlash",
                "modifier": "Optional",
                "type": {
                  "plain": "EraIndex"
                },
                "fallback": "0x00",
                "docs": [
                  " The earliest era for which we have a pending, unapplied slash."
                ]
              },
              {
                "name": "StorageVersion",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The version of storage for upgrade."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "bond",
              "args": [
                {
                  "name": "controller",
                  "type": "LookupSource"
                },
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "payee",
                  "type": "RewardDestination"
                }
              ],
              "docs": [
                " Take the origin account as a stash and lock up `value` of its balance. `controller` will",
                " be the account that controls it.",
                "",
                " `value` must be more than the `minimum_balance` specified by `T::Currency`.",
                "",
                " The dispatch origin for this call must be _Signed_ by the stash account.",
                "",
                " # <weight>",
                " - Independent of the arguments. Moderate complexity.",
                " - O(1).",
                " - Three extra DB entries.",
                "",
                " NOTE: Two of the storage writes (`Self::bonded`, `Self::payee`) are _never_ cleaned unless",
                " the `origin` falls below _existential deposit_ and gets removed as dust.",
                " # </weight>"
              ]
            },
            {
              "name": "bond_extra",
              "args": [
                {
                  "name": "max_additional",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Add some extra amount that have appeared in the stash `free_balance` into the balance up",
                " for staking.",
                "",
                " Use this if there are additional funds in your stash account that you wish to bond.",
                " Unlike [`bond`] or [`unbond`] this function does not impose any limitation on the amount",
                " that can be added.",
                "",
                " The dispatch origin for this call must be _Signed_ by the stash, not the controller.",
                "",
                " # <weight>",
                " - Independent of the arguments. Insignificant complexity.",
                " - O(1).",
                " - One DB entry.",
                " # </weight>"
              ]
            },
            {
              "name": "unbond",
              "args": [
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Schedule a portion of the stash to be unlocked ready for transfer out after the bond",
                " period ends. If this leaves an amount actively bonded less than",
                " T::Currency::minimum_balance(), then it is increased to the full amount.",
                "",
                " Once the unlock period is done, you can call `withdraw_unbonded` to actually move",
                " the funds out of management ready for transfer.",
                "",
                " No more than a limited number of unlocking chunks (see `MAX_UNLOCKING_CHUNKS`)",
                " can co-exists at the same time. In that case, [`Call::withdraw_unbonded`] need",
                " to be called first to remove some of the chunks (if possible).",
                "",
                " The dispatch origin for this call must be _Signed_ by the controller, not the stash.",
                "",
                " See also [`Call::withdraw_unbonded`].",
                "",
                " # <weight>",
                " - Independent of the arguments. Limited but potentially exploitable complexity.",
                " - Contains a limited number of reads.",
                " - Each call (requires the remainder of the bonded balance to be above `minimum_balance`)",
                "   will cause a new entry to be inserted into a vector (`Ledger.unlocking`) kept in storage.",
                "   The only way to clean the aforementioned storage item is also user-controlled via `withdraw_unbonded`.",
                " - One DB entry.",
                " </weight>"
              ]
            },
            {
              "name": "withdraw_unbonded",
              "args": [],
              "docs": [
                " Remove any unlocked chunks from the `unlocking` queue from our management.",
                "",
                " This essentially frees up that balance to be used by the stash account to do",
                " whatever it wants.",
                "",
                " The dispatch origin for this call must be _Signed_ by the controller, not the stash.",
                "",
                " See also [`Call::unbond`].",
                "",
                " # <weight>",
                " - Could be dependent on the `origin` argument and how much `unlocking` chunks exist.",
                "  It implies `consolidate_unlocked` which loops over `Ledger.unlocking`, which is",
                "  indirectly user-controlled. See [`unbond`] for more detail.",
                " - Contains a limited number of reads, yet the size of which could be large based on `ledger`.",
                " - Writes are limited to the `origin` account key.",
                " # </weight>"
              ]
            },
            {
              "name": "validate",
              "args": [
                {
                  "name": "prefs",
                  "type": "ValidatorPrefs"
                }
              ],
              "docs": [
                " Declare the desire to validate for the origin controller.",
                "",
                " Effects will be felt at the beginning of the next era.",
                "",
                " The dispatch origin for this call must be _Signed_ by the controller, not the stash.",
                "",
                " # <weight>",
                " - Independent of the arguments. Insignificant complexity.",
                " - Contains a limited number of reads.",
                " - Writes are limited to the `origin` account key.",
                " # </weight>"
              ]
            },
            {
              "name": "nominate",
              "args": [
                {
                  "name": "targets",
                  "type": "Vec<LookupSource>"
                }
              ],
              "docs": [
                " Declare the desire to nominate `targets` for the origin controller.",
                "",
                " Effects will be felt at the beginning of the next era.",
                "",
                " The dispatch origin for this call must be _Signed_ by the controller, not the stash.",
                "",
                " # <weight>",
                " - The transaction's complexity is proportional to the size of `targets`,",
                " which is capped at `MAX_NOMINATIONS`.",
                " - Both the reads and writes follow a similar pattern.",
                " # </weight>"
              ]
            },
            {
              "name": "chill",
              "args": [],
              "docs": [
                " Declare no desire to either validate or nominate.",
                "",
                " Effects will be felt at the beginning of the next era.",
                "",
                " The dispatch origin for this call must be _Signed_ by the controller, not the stash.",
                "",
                " # <weight>",
                " - Independent of the arguments. Insignificant complexity.",
                " - Contains one read.",
                " - Writes are limited to the `origin` account key.",
                " # </weight>"
              ]
            },
            {
              "name": "set_payee",
              "args": [
                {
                  "name": "payee",
                  "type": "RewardDestination"
                }
              ],
              "docs": [
                " (Re-)set the payment target for a controller.",
                "",
                " Effects will be felt at the beginning of the next era.",
                "",
                " The dispatch origin for this call must be _Signed_ by the controller, not the stash.",
                "",
                " # <weight>",
                " - Independent of the arguments. Insignificant complexity.",
                " - Contains a limited number of reads.",
                " - Writes are limited to the `origin` account key.",
                " # </weight>"
              ]
            },
            {
              "name": "set_controller",
              "args": [
                {
                  "name": "controller",
                  "type": "LookupSource"
                }
              ],
              "docs": [
                " (Re-)set the controller of a stash.",
                "",
                " Effects will be felt at the beginning of the next era.",
                "",
                " The dispatch origin for this call must be _Signed_ by the stash, not the controller.",
                "",
                " # <weight>",
                " - Independent of the arguments. Insignificant complexity.",
                " - Contains a limited number of reads.",
                " - Writes are limited to the `origin` account key.",
                " # </weight>"
              ]
            },
            {
              "name": "set_validator_count",
              "args": [
                {
                  "name": "new",
                  "type": "Compact<u32>"
                }
              ],
              "docs": [
                " The ideal number of validators."
              ]
            },
            {
              "name": "force_no_eras",
              "args": [],
              "docs": [
                " Force there to be no new eras indefinitely.",
                "",
                " # <weight>",
                " - No arguments.",
                " # </weight>"
              ]
            },
            {
              "name": "force_new_era",
              "args": [],
              "docs": [
                " Force there to be a new era at the end of the next session. After this, it will be",
                " reset to normal (non-forced) behaviour.",
                "",
                " # <weight>",
                " - No arguments.",
                " # </weight>"
              ]
            },
            {
              "name": "set_invulnerables",
              "args": [
                {
                  "name": "validators",
                  "type": "Vec<AccountId>"
                }
              ],
              "docs": [
                " Set the validators who cannot be slashed (if any)."
              ]
            },
            {
              "name": "force_unstake",
              "args": [
                {
                  "name": "stash",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Force a current staker to become completely unstaked, immediately."
              ]
            },
            {
              "name": "force_new_era_always",
              "args": [],
              "docs": [
                " Force there to be a new era at the end of sessions indefinitely.",
                "",
                " # <weight>",
                " - One storage write",
                " # </weight>"
              ]
            },
            {
              "name": "cancel_deferred_slash",
              "args": [
                {
                  "name": "era",
                  "type": "EraIndex"
                },
                {
                  "name": "slash_indices",
                  "type": "Vec<u32>"
                }
              ],
              "docs": [
                " Cancel enactment of a deferred slash. Can be called by either the root origin or",
                " the `T::SlashCancelOrigin`.",
                " passing the era and indices of the slashes for that era to kill.",
                "",
                " # <weight>",
                " - One storage write.",
                " # </weight>"
              ]
            },
            {
              "name": "rebond",
              "args": [
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Rebond a portion of the stash scheduled to be unlocked.",
                "",
                " # <weight>",
                " - Time complexity: O(1). Bounded by `MAX_UNLOCKING_CHUNKS`.",
                " - Storage changes: Can't increase storage, only decrease it.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Reward",
              "args": [
                "Balance",
                "Balance"
              ],
              "docs": [
                " All validators have been rewarded by the first balance; the second is the remainder",
                " from the maximum amount of reward."
              ]
            },
            {
              "name": "Slash",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " One validator (and its nominators) has been slashed by the given amount."
              ]
            },
            {
              "name": "OldSlashingReportDiscarded",
              "args": [
                "SessionIndex"
              ],
              "docs": [
                " An old slashing report from a prior era was discarded because it could",
                " not be processed."
              ]
            }
          ],
          "constants": [
            {
              "name": "SessionsPerEra",
              "type": "SessionIndex",
              "value": "0x06000000",
              "docs": [
                " Number of sessions per era."
              ]
            },
            {
              "name": "BondingDuration",
              "type": "EraIndex",
              "value": "0xa0020000",
              "docs": [
                " Number of eras that staked funds must remain bonded for."
              ]
            }
          ],
          "errors": [
            {
              "name": "NotController",
              "docs": [
                " Not a controller account."
              ]
            },
            {
              "name": "NotStash",
              "docs": [
                " Not a stash account."
              ]
            },
            {
              "name": "AlreadyBonded",
              "docs": [
                " Stash is already bonded."
              ]
            },
            {
              "name": "AlreadyPaired",
              "docs": [
                " Controller is already paired."
              ]
            },
            {
              "name": "EmptyTargets",
              "docs": [
                " Targets cannot be empty."
              ]
            },
            {
              "name": "DuplicateIndex",
              "docs": [
                " Duplicate index."
              ]
            },
            {
              "name": "InvalidSlashIndex",
              "docs": [
                " Slash record index out of bounds."
              ]
            },
            {
              "name": "InsufficientValue",
              "docs": [
                " Can not bond with value less than minimum balance."
              ]
            },
            {
              "name": "NoMoreChunks",
              "docs": [
                " Can not schedule more unlock chunks."
              ]
            },
            {
              "name": "NoUnlockChunk",
              "docs": [
                " Can not rebond without unlocking chunks."
              ]
            }
          ]
        },
        {
          "name": "Session",
          "storage": {
            "prefix": "Session",
            "items": [
              {
                "name": "Validators",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<ValidatorId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current set of validators."
                ]
              },
              {
                "name": "CurrentIndex",
                "modifier": "Default",
                "type": {
                  "plain": "SessionIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Current index of the session."
                ]
              },
              {
                "name": "QueuedChanged",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " True if the underlying economic identities or weighting behind the validators",
                  " has changed in the queued validator set."
                ]
              },
              {
                "name": "QueuedKeys",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(ValidatorId,Keys)>"
                },
                "fallback": "0x00",
                "docs": [
                  " The queued keys for the next session. When the next session begins, these keys",
                  " will be used to determine the validator's session keys."
                ]
              },
              {
                "name": "DisabledValidators",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<u32>"
                },
                "fallback": "0x00",
                "docs": [
                  " Indices of disabled validators.",
                  "",
                  " The set is cleared when `on_session_ending` returns a new set of identities."
                ]
              },
              {
                "name": "NextKeys",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "Bytes",
                    "key2": "ValidatorId",
                    "value": "Keys",
                    "key2Hasher": "Blake2_256"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The next session keys for a validator.",
                  "",
                  " The first key is always `DEDUP_KEY_PREFIX` to have all the data in the same branch of",
                  " the trie. Having all data in the same branch should prevent slowing down other queries."
                ]
              },
              {
                "name": "KeyOwner",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "Bytes",
                    "key2": "(KeyTypeId,Bytes)",
                    "value": "ValidatorId",
                    "key2Hasher": "Blake2_256"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The owner of a key. The second key is the `KeyTypeId` + the encoded key.",
                  "",
                  " The first key is always `DEDUP_KEY_PREFIX` to have all the data in the same branch of",
                  " the trie. Having all data in the same branch should prevent slowing down other queries."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_keys",
              "args": [
                {
                  "name": "keys",
                  "type": "Keys"
                },
                {
                  "name": "proof",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Sets the session key(s) of the function caller to `key`.",
                " Allows an account to set its session key prior to becoming a validator.",
                " This doesn't take effect until the next session.",
                "",
                " The dispatch origin of this function must be signed.",
                "",
                " # <weight>",
                " - O(log n) in number of accounts.",
                " - One extra DB entry.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "NewSession",
              "args": [
                "SessionIndex"
              ],
              "docs": [
                " New session has happened. Note that the argument is the session index, not the block",
                " number as the type might suggest."
              ]
            }
          ],
          "constants": [
            {
              "name": "DEDUP_KEY_PREFIX",
              "type": "Bytes",
              "value": "0x343a73657373696f6e3a6b657973",
              "docs": [
                " Used as first key for `NextKeys` and `KeyOwner` to put all the data into the same branch",
                " of the trie."
              ]
            }
          ],
          "errors": [
            {
              "name": "InvalidProof",
              "docs": [
                " Invalid ownership proof."
              ]
            },
            {
              "name": "NoAssociatedValidatorId",
              "docs": [
                " No associated validator ID for account."
              ]
            },
            {
              "name": "DuplicatedKey",
              "docs": [
                " Registered duplicate key."
              ]
            }
          ]
        },
        {
          "name": "Democracy",
          "storage": {
            "prefix": "Democracy",
            "items": [
              {
                "name": "PublicPropCount",
                "modifier": "Default",
                "type": {
                  "plain": "PropIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The number of (public) proposals that have been made so far."
                ]
              },
              {
                "name": "PublicProps",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(PropIndex,Hash,AccountId)>"
                },
                "fallback": "0x00",
                "docs": [
                  " The public proposals. Unsorted. The second item is the proposal's hash."
                ]
              },
              {
                "name": "Preimages",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "Hash",
                    "value": "(Bytes,AccountId,BalanceOf,BlockNumber)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Map of hashes to the proposal preimage, along with who registered it and their deposit.",
                  " The block number is the block at which it was deposited."
                ]
              },
              {
                "name": "DepositOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "PropIndex",
                    "value": "(BalanceOf,Vec<AccountId>)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Those who have locked a deposit."
                ]
              },
              {
                "name": "ReferendumCount",
                "modifier": "Default",
                "type": {
                  "plain": "ReferendumIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The next free referendum index, aka the number of referenda started so far."
                ]
              },
              {
                "name": "LowestUnbaked",
                "modifier": "Default",
                "type": {
                  "plain": "ReferendumIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The lowest referendum index representing an unbaked referendum. Equal to",
                  " `ReferendumCount` if there isn't a unbaked referendum."
                ]
              },
              {
                "name": "ReferendumInfoOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "ReferendumIndex",
                    "value": "ReferendumInfo",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Information concerning any given referendum."
                ]
              },
              {
                "name": "DispatchQueue",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(BlockNumber,Hash,ReferendumIndex)>"
                },
                "fallback": "0x00",
                "docs": [
                  " Queue of successful referenda to be dispatched. Stored ordered by block number."
                ]
              },
              {
                "name": "VotersFor",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "ReferendumIndex",
                    "value": "Vec<AccountId>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Get the voters for the current proposal."
                ]
              },
              {
                "name": "VoteOf",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "(ReferendumIndex,AccountId)",
                    "value": "Vote",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Get the vote in a given referendum of a particular voter. The result is meaningful only",
                  " if `voters_for` includes the voter when called with the referendum (you'll get the",
                  " default `Vote` value otherwise). If you don't want to check `voters_for`, then you can",
                  " also check for simple existence with `VoteOf::exists` first."
                ]
              },
              {
                "name": "Proxy",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "AccountId",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Who is able to vote for whom. Value is the fund-holding account, key is the",
                  " vote-transaction-sending account."
                ]
              },
              {
                "name": "Delegations",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "(AccountId,Conviction)",
                    "linked": true
                  }
                },
                "fallback": "0x000000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " Get the account (and lock periods) to which another account is delegating vote."
                ]
              },
              {
                "name": "LastTabledWasExternal",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " True if the last referendum tabled was submitted externally. False if it was a public",
                  " proposal."
                ]
              },
              {
                "name": "NextExternal",
                "modifier": "Optional",
                "type": {
                  "plain": "(Hash,VoteThreshold)"
                },
                "fallback": "0x00",
                "docs": [
                  " The referendum to be tabled whenever it would be valid to table an external proposal.",
                  " This happens when a referendum needs to be tabled and one of two conditions are met:",
                  " - `LastTabledWasExternal` is `false`; or",
                  " - `PublicProps` is empty."
                ]
              },
              {
                "name": "Blacklist",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "Hash",
                    "value": "(BlockNumber,Vec<AccountId>)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " A record of who vetoed what. Maps proposal hash to a possible existent block number",
                  " (until when it may not be resubmitted) and who vetoed it."
                ]
              },
              {
                "name": "Cancellations",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "Hash",
                    "value": "bool",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Record of all proposals that have been subject to emergency cancellation."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "propose",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Propose a sensitive action to be taken.",
                "",
                " # <weight>",
                " - O(1).",
                " - Two DB changes, one DB entry.",
                " # </weight>"
              ]
            },
            {
              "name": "second",
              "args": [
                {
                  "name": "proposal",
                  "type": "Compact<PropIndex>"
                }
              ],
              "docs": [
                " Propose a sensitive action to be taken.",
                "",
                " # <weight>",
                " - O(1).",
                " - One DB entry.",
                " # </weight>"
              ]
            },
            {
              "name": "vote",
              "args": [
                {
                  "name": "ref_index",
                  "type": "Compact<ReferendumIndex>"
                },
                {
                  "name": "vote",
                  "type": "Vote"
                }
              ],
              "docs": [
                " Vote in a referendum. If `vote.is_aye()`, the vote is to enact the proposal;",
                " otherwise it is a vote to keep the status quo.",
                "",
                " # <weight>",
                " - O(1).",
                " - One DB change, one DB entry.",
                " # </weight>"
              ]
            },
            {
              "name": "proxy_vote",
              "args": [
                {
                  "name": "ref_index",
                  "type": "Compact<ReferendumIndex>"
                },
                {
                  "name": "vote",
                  "type": "Vote"
                }
              ],
              "docs": [
                " Vote in a referendum on behalf of a stash. If `vote.is_aye()`, the vote is to enact",
                " the proposal; otherwise it is a vote to keep the status quo.",
                "",
                " # <weight>",
                " - O(1).",
                " - One DB change, one DB entry.",
                " # </weight>"
              ]
            },
            {
              "name": "emergency_cancel",
              "args": [
                {
                  "name": "ref_index",
                  "type": "ReferendumIndex"
                }
              ],
              "docs": [
                " Schedule an emergency cancellation of a referendum. Cannot happen twice to the same",
                " referendum."
              ]
            },
            {
              "name": "external_propose",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Schedule a referendum to be tabled once it is legal to schedule an external",
                " referendum."
              ]
            },
            {
              "name": "external_propose_majority",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Schedule a majority-carries referendum to be tabled next once it is legal to schedule",
                " an external referendum.",
                "",
                " Unlike `external_propose`, blacklisting has no effect on this and it may replace a",
                " pre-scheduled `external_propose` call."
              ]
            },
            {
              "name": "external_propose_default",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Schedule a negative-turnout-bias referendum to be tabled next once it is legal to",
                " schedule an external referendum.",
                "",
                " Unlike `external_propose`, blacklisting has no effect on this and it may replace a",
                " pre-scheduled `external_propose` call."
              ]
            },
            {
              "name": "fast_track",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "voting_period",
                  "type": "BlockNumber"
                },
                {
                  "name": "delay",
                  "type": "BlockNumber"
                }
              ],
              "docs": [
                " Schedule the currently externally-proposed majority-carries referendum to be tabled",
                " immediately. If there is no externally-proposed referendum currently, or if there is one",
                " but it is not a majority-carries referendum then it fails.",
                "",
                " - `proposal_hash`: The hash of the current external proposal.",
                " - `voting_period`: The period that is allowed for voting on this proposal. Increased to",
                "   `EmergencyVotingPeriod` if too low.",
                " - `delay`: The number of block after voting has ended in approval and this should be",
                "   enacted. This doesn't have a minimum amount."
              ]
            },
            {
              "name": "veto_external",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Veto and blacklist the external proposal hash."
              ]
            },
            {
              "name": "cancel_referendum",
              "args": [
                {
                  "name": "ref_index",
                  "type": "Compact<ReferendumIndex>"
                }
              ],
              "docs": [
                " Remove a referendum."
              ]
            },
            {
              "name": "cancel_queued",
              "args": [
                {
                  "name": "which",
                  "type": "ReferendumIndex"
                }
              ],
              "docs": [
                " Cancel a proposal queued for enactment."
              ]
            },
            {
              "name": "set_proxy",
              "args": [
                {
                  "name": "proxy",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Specify a proxy. Called by the stash.",
                "",
                " # <weight>",
                " - One extra DB entry.",
                " # </weight>"
              ]
            },
            {
              "name": "resign_proxy",
              "args": [],
              "docs": [
                " Clear the proxy. Called by the proxy.",
                "",
                " # <weight>",
                " - One DB clear.",
                " # </weight>"
              ]
            },
            {
              "name": "remove_proxy",
              "args": [
                {
                  "name": "proxy",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Clear the proxy. Called by the stash.",
                "",
                " # <weight>",
                " - One DB clear.",
                " # </weight>"
              ]
            },
            {
              "name": "delegate",
              "args": [
                {
                  "name": "to",
                  "type": "AccountId"
                },
                {
                  "name": "conviction",
                  "type": "Conviction"
                }
              ],
              "docs": [
                " Delegate vote.",
                "",
                " # <weight>",
                " - One extra DB entry.",
                " # </weight>"
              ]
            },
            {
              "name": "undelegate",
              "args": [],
              "docs": [
                " Undelegate vote.",
                "",
                " # <weight>",
                " - O(1).",
                " # </weight>"
              ]
            },
            {
              "name": "clear_public_proposals",
              "args": [],
              "docs": [
                " Veto and blacklist the proposal hash. Must be from Root origin."
              ]
            },
            {
              "name": "note_preimage",
              "args": [
                {
                  "name": "encoded_proposal",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Register the preimage for an upcoming proposal. This doesn't require the proposal to be",
                " in the dispatch queue but does require a deposit, returned once enacted."
              ]
            },
            {
              "name": "note_imminent_preimage",
              "args": [
                {
                  "name": "encoded_proposal",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Register the preimage for an upcoming proposal. This requires the proposal to be",
                " in the dispatch queue. No deposit is needed."
              ]
            },
            {
              "name": "reap_preimage",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Remove an expired proposal preimage and collect the deposit.",
                "",
                " This will only work after `VotingPeriod` blocks from the time that the preimage was",
                " noted, if it's the same account doing it. If it's a different account, then it'll only",
                " work an additional `EnactmentPeriod` later."
              ]
            }
          ],
          "events": [
            {
              "name": "Proposed",
              "args": [
                "PropIndex",
                "Balance"
              ],
              "docs": [
                " A motion has been proposed by a public account."
              ]
            },
            {
              "name": "Tabled",
              "args": [
                "PropIndex",
                "Balance",
                "Vec<AccountId>"
              ],
              "docs": [
                " A public proposal has been tabled for referendum vote."
              ]
            },
            {
              "name": "ExternalTabled",
              "args": [],
              "docs": [
                " An external proposal has been tabled."
              ]
            },
            {
              "name": "Started",
              "args": [
                "ReferendumIndex",
                "VoteThreshold"
              ],
              "docs": [
                " A referendum has begun."
              ]
            },
            {
              "name": "Passed",
              "args": [
                "ReferendumIndex"
              ],
              "docs": [
                " A proposal has been approved by referendum."
              ]
            },
            {
              "name": "NotPassed",
              "args": [
                "ReferendumIndex"
              ],
              "docs": [
                " A proposal has been rejected by referendum."
              ]
            },
            {
              "name": "Cancelled",
              "args": [
                "ReferendumIndex"
              ],
              "docs": [
                " A referendum has been cancelled."
              ]
            },
            {
              "name": "Executed",
              "args": [
                "ReferendumIndex",
                "bool"
              ],
              "docs": [
                " A proposal has been enacted."
              ]
            },
            {
              "name": "Delegated",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "docs": [
                " An account has delegated their vote to another account."
              ]
            },
            {
              "name": "Undelegated",
              "args": [
                "AccountId"
              ],
              "docs": [
                " An account has cancelled a previous delegation operation."
              ]
            },
            {
              "name": "Vetoed",
              "args": [
                "AccountId",
                "Hash",
                "BlockNumber"
              ],
              "docs": [
                " An external proposal has been vetoed."
              ]
            },
            {
              "name": "PreimageNoted",
              "args": [
                "Hash",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A proposal's preimage was noted, and the deposit taken."
              ]
            },
            {
              "name": "PreimageUsed",
              "args": [
                "Hash",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A proposal preimage was removed and used (the deposit was returned)."
              ]
            },
            {
              "name": "PreimageInvalid",
              "args": [
                "Hash",
                "ReferendumIndex"
              ],
              "docs": [
                " A proposal could not be executed because its preimage was invalid."
              ]
            },
            {
              "name": "PreimageMissing",
              "args": [
                "Hash",
                "ReferendumIndex"
              ],
              "docs": [
                " A proposal could not be executed because its preimage was missing."
              ]
            },
            {
              "name": "PreimageReaped",
              "args": [
                "Hash",
                "AccountId",
                "Balance",
                "AccountId"
              ],
              "docs": [
                " A registered preimage was removed and the deposit collected by the reaper (last item)."
              ]
            }
          ],
          "constants": [
            {
              "name": "EnactmentPeriod",
              "type": "BlockNumber",
              "value": "0x002f0d00",
              "docs": [
                " The minimum period of locking and the period between a proposal being approved and enacted.",
                "",
                " It should generally be a little more than the unstake period to ensure that",
                " voting stakers have an opportunity to remove themselves from the system in the case where",
                " they are on the losing side of a vote."
              ]
            },
            {
              "name": "LaunchPeriod",
              "type": "BlockNumber",
              "value": "0x004e0c00",
              "docs": [
                " How often (in blocks) new public referenda are launched."
              ]
            },
            {
              "name": "VotingPeriod",
              "type": "BlockNumber",
              "value": "0x004e0c00",
              "docs": [
                " How often (in blocks) to check for new votes."
              ]
            },
            {
              "name": "MinimumDeposit",
              "type": "BalanceOf",
              "value": "0x0000c16ff28623000000000000000000",
              "docs": [
                " The minimum amount to be used as a deposit for a public referendum proposal."
              ]
            },
            {
              "name": "EmergencyVotingPeriod",
              "type": "BlockNumber",
              "value": "0x80510100",
              "docs": [
                " Minimum voting period allowed for an emergency referendum."
              ]
            },
            {
              "name": "CooloffPeriod",
              "type": "BlockNumber",
              "value": "0x004e0c00",
              "docs": [
                " Period in blocks where an external proposal may not be re-submitted after being vetoed."
              ]
            },
            {
              "name": "PreimageByteDeposit",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The amount of balance that must be deposited per byte of preimage stored."
              ]
            }
          ],
          "errors": [
            {
              "name": "ValueLow",
              "docs": [
                " Value too low"
              ]
            },
            {
              "name": "ProposalMissing",
              "docs": [
                " Proposal does not exist"
              ]
            },
            {
              "name": "NotProxy",
              "docs": [
                " Not a proxy"
              ]
            },
            {
              "name": "BadIndex",
              "docs": [
                " Unknown index"
              ]
            },
            {
              "name": "AlreadyCanceled",
              "docs": [
                " Cannot cancel the same proposal twice"
              ]
            },
            {
              "name": "DuplicateProposal",
              "docs": [
                " Proposal already made"
              ]
            },
            {
              "name": "ProposalBlacklisted",
              "docs": [
                " Proposal still blacklisted"
              ]
            },
            {
              "name": "NotSimpleMajority",
              "docs": [
                " Next external proposal not simple majority"
              ]
            },
            {
              "name": "InvalidHash",
              "docs": [
                " Invalid hash"
              ]
            },
            {
              "name": "NoProposal",
              "docs": [
                " No external proposal"
              ]
            },
            {
              "name": "AlreadyVetoed",
              "docs": [
                " Identity may not veto a proposal twice"
              ]
            },
            {
              "name": "AlreadyProxy",
              "docs": [
                " Already a proxy"
              ]
            },
            {
              "name": "WrongProxy",
              "docs": [
                " Wrong proxy"
              ]
            },
            {
              "name": "NotDelegated",
              "docs": [
                " Not delegated"
              ]
            },
            {
              "name": "DuplicatePreimage",
              "docs": [
                " Preimage already noted"
              ]
            },
            {
              "name": "NotImminent",
              "docs": [
                " Not imminent"
              ]
            },
            {
              "name": "Early",
              "docs": [
                " Too early"
              ]
            },
            {
              "name": "Imminent",
              "docs": [
                " Imminent"
              ]
            },
            {
              "name": "PreimageMissing",
              "docs": [
                " Preimage not found"
              ]
            },
            {
              "name": "ReferendumInvalid",
              "docs": [
                " Vote given for invalid referendum"
              ]
            },
            {
              "name": "PreimageInvalid",
              "docs": [
                " Invalid preimage"
              ]
            },
            {
              "name": "NoneWaiting",
              "docs": [
                " No proposals waiting"
              ]
            }
          ]
        },
        {
          "name": "Council",
          "storage": {
            "prefix": "Instance1Collective",
            "items": [
              {
                "name": "Proposals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "docs": [
                  " The hashes of the active proposals."
                ]
              },
              {
                "name": "ProposalOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "Hash",
                    "value": "Proposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Actual proposal for a given hash, if it's current."
                ]
              },
              {
                "name": "Voting",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "Hash",
                    "value": "Votes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Votes on a given proposal, if it is ongoing."
                ]
              },
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Proposals so far."
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current members of the collective. This is stored sorted (just by value)."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_members",
              "args": [
                {
                  "name": "new_members",
                  "type": "Vec<AccountId>"
                }
              ],
              "docs": [
                " Set the collective's membership manually to `new_members`. Be nice to the chain and",
                " provide it pre-sorted.",
                "",
                " Requires root origin."
              ]
            },
            {
              "name": "execute",
              "args": [
                {
                  "name": "proposal",
                  "type": "Proposal"
                }
              ],
              "docs": [
                " Dispatch a proposal from a member using the `Member` origin.",
                "",
                " Origin must be a member of the collective."
              ]
            },
            {
              "name": "propose",
              "args": [
                {
                  "name": "threshold",
                  "type": "Compact<MemberCount>"
                },
                {
                  "name": "proposal",
                  "type": "Proposal"
                }
              ],
              "docs": [
                " # <weight>",
                " - Bounded storage reads and writes.",
                " - Argument `threshold` has bearing on weight.",
                " # </weight>"
              ]
            },
            {
              "name": "vote",
              "args": [
                {
                  "name": "proposal",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "Compact<ProposalIndex>"
                },
                {
                  "name": "approve",
                  "type": "bool"
                }
              ],
              "docs": [
                " # <weight>",
                " - Bounded storage read and writes.",
                " - Will be slightly heavier if the proposal is approved / disapproved after the vote.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Proposed",
              "args": [
                "AccountId",
                "ProposalIndex",
                "Hash",
                "MemberCount"
              ],
              "docs": [
                " A motion (given hash) has been proposed (by given account) with a threshold (given",
                " `MemberCount`)."
              ]
            },
            {
              "name": "Voted",
              "args": [
                "AccountId",
                "Hash",
                "bool",
                "MemberCount",
                "MemberCount"
              ],
              "docs": [
                " A motion (given hash) has been voted on by given account, leaving",
                " a tally (yes votes and no votes given respectively as `MemberCount`)."
              ]
            },
            {
              "name": "Approved",
              "args": [
                "Hash"
              ],
              "docs": [
                " A motion was approved by the required threshold."
              ]
            },
            {
              "name": "Disapproved",
              "args": [
                "Hash"
              ],
              "docs": [
                " A motion was not approved by the required threshold."
              ]
            },
            {
              "name": "Executed",
              "args": [
                "Hash",
                "bool"
              ],
              "docs": [
                " A motion was executed; `bool` is true if returned without error."
              ]
            },
            {
              "name": "MemberExecuted",
              "args": [
                "Hash",
                "bool"
              ],
              "docs": [
                " A single member did some action; `bool` is true if returned without error."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NotMember",
              "docs": [
                " Account is not a member"
              ]
            },
            {
              "name": "DuplicateProposal",
              "docs": [
                " Duplicate proposals not allowed"
              ]
            },
            {
              "name": "ProposalMissing",
              "docs": [
                " Proposal must exist"
              ]
            },
            {
              "name": "WrongIndex",
              "docs": [
                " Mismatched index"
              ]
            },
            {
              "name": "DuplicateVote",
              "docs": [
                " Duplicate vote ignored"
              ]
            },
            {
              "name": "AlreadyInitialized",
              "docs": [
                " Members are already initialized!"
              ]
            }
          ]
        },
        {
          "name": "TechnicalCommittee",
          "storage": {
            "prefix": "Instance2Collective",
            "items": [
              {
                "name": "Proposals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "docs": [
                  " The hashes of the active proposals."
                ]
              },
              {
                "name": "ProposalOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "Hash",
                    "value": "Proposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Actual proposal for a given hash, if it's current."
                ]
              },
              {
                "name": "Voting",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "Hash",
                    "value": "Votes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Votes on a given proposal, if it is ongoing."
                ]
              },
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Proposals so far."
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current members of the collective. This is stored sorted (just by value)."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_members",
              "args": [
                {
                  "name": "new_members",
                  "type": "Vec<AccountId>"
                }
              ],
              "docs": [
                " Set the collective's membership manually to `new_members`. Be nice to the chain and",
                " provide it pre-sorted.",
                "",
                " Requires root origin."
              ]
            },
            {
              "name": "execute",
              "args": [
                {
                  "name": "proposal",
                  "type": "Proposal"
                }
              ],
              "docs": [
                " Dispatch a proposal from a member using the `Member` origin.",
                "",
                " Origin must be a member of the collective."
              ]
            },
            {
              "name": "propose",
              "args": [
                {
                  "name": "threshold",
                  "type": "Compact<MemberCount>"
                },
                {
                  "name": "proposal",
                  "type": "Proposal"
                }
              ],
              "docs": [
                " # <weight>",
                " - Bounded storage reads and writes.",
                " - Argument `threshold` has bearing on weight.",
                " # </weight>"
              ]
            },
            {
              "name": "vote",
              "args": [
                {
                  "name": "proposal",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "Compact<ProposalIndex>"
                },
                {
                  "name": "approve",
                  "type": "bool"
                }
              ],
              "docs": [
                " # <weight>",
                " - Bounded storage read and writes.",
                " - Will be slightly heavier if the proposal is approved / disapproved after the vote.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Proposed",
              "args": [
                "AccountId",
                "ProposalIndex",
                "Hash",
                "MemberCount"
              ],
              "docs": [
                " A motion (given hash) has been proposed (by given account) with a threshold (given",
                " `MemberCount`)."
              ]
            },
            {
              "name": "Voted",
              "args": [
                "AccountId",
                "Hash",
                "bool",
                "MemberCount",
                "MemberCount"
              ],
              "docs": [
                " A motion (given hash) has been voted on by given account, leaving",
                " a tally (yes votes and no votes given respectively as `MemberCount`)."
              ]
            },
            {
              "name": "Approved",
              "args": [
                "Hash"
              ],
              "docs": [
                " A motion was approved by the required threshold."
              ]
            },
            {
              "name": "Disapproved",
              "args": [
                "Hash"
              ],
              "docs": [
                " A motion was not approved by the required threshold."
              ]
            },
            {
              "name": "Executed",
              "args": [
                "Hash",
                "bool"
              ],
              "docs": [
                " A motion was executed; `bool` is true if returned without error."
              ]
            },
            {
              "name": "MemberExecuted",
              "args": [
                "Hash",
                "bool"
              ],
              "docs": [
                " A single member did some action; `bool` is true if returned without error."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NotMember",
              "docs": [
                " Account is not a member"
              ]
            },
            {
              "name": "DuplicateProposal",
              "docs": [
                " Duplicate proposals not allowed"
              ]
            },
            {
              "name": "ProposalMissing",
              "docs": [
                " Proposal must exist"
              ]
            },
            {
              "name": "WrongIndex",
              "docs": [
                " Mismatched index"
              ]
            },
            {
              "name": "DuplicateVote",
              "docs": [
                " Duplicate vote ignored"
              ]
            },
            {
              "name": "AlreadyInitialized",
              "docs": [
                " Members are already initialized!"
              ]
            }
          ]
        },
        {
          "name": "Elections",
          "storage": {
            "prefix": "PhragmenElection",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(AccountId,BalanceOf)>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current elected membership. Sorted based on account id."
                ]
              },
              {
                "name": "RunnersUp",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(AccountId,BalanceOf)>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current runners_up. Sorted based on low to high merit (worse to best runner)."
                ]
              },
              {
                "name": "ElectionRounds",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The total number of vote rounds that have happened, excluding the upcoming one."
                ]
              },
              {
                "name": "VotesOf",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "Vec<AccountId>",
                    "linked": true
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Votes of a particular voter, with the round index of the votes."
                ]
              },
              {
                "name": "StakeOf",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "BalanceOf",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " Locked stake of a voter."
                ]
              },
              {
                "name": "Candidates",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The present candidate list. Sorted based on account-id. A current member or a runner can",
                  " never enter this vector and is always implicitly assumed to be a candidate."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "vote",
              "args": [
                {
                  "name": "votes",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Vote for a set of candidates for the upcoming round of election.",
                "",
                " The `votes` should:",
                "   - not be empty.",
                "   - be less than the number of candidates.",
                "",
                " Upon voting, `value` units of `who`'s balance is locked and a bond amount is reserved.",
                " It is the responsibility of the caller to not place all of their balance into the lock",
                " and keep some for further transactions.",
                "",
                " # <weight>",
                " #### State",
                " Reads: O(1)",
                " Writes: O(V) given `V` votes. V is bounded by 16.",
                " # </weight>"
              ]
            },
            {
              "name": "remove_voter",
              "args": [],
              "docs": [
                " Remove `origin` as a voter. This removes the lock and returns the bond.",
                "",
                " # <weight>",
                " #### State",
                " Reads: O(1)",
                " Writes: O(1)",
                " # </weight>"
              ]
            },
            {
              "name": "report_defunct_voter",
              "args": [
                {
                  "name": "target",
                  "type": "LookupSource"
                }
              ],
              "docs": [
                " Report `target` for being an defunct voter. In case of a valid report, the reporter is",
                " rewarded by the bond amount of `target`. Otherwise, the reporter itself is removed and",
                " their bond is slashed.",
                "",
                " A defunct voter is defined to be:",
                "   - a voter whose current submitted votes are all invalid. i.e. all of them are no",
                "     longer a candidate nor an active member.",
                "",
                " # <weight>",
                " #### State",
                " Reads: O(NLogM) given M current candidates and N votes for `target`.",
                " Writes: O(1)",
                " # </weight>"
              ]
            },
            {
              "name": "submit_candidacy",
              "args": [],
              "docs": [
                " Submit oneself for candidacy.",
                "",
                " A candidate will either:",
                "   - Lose at the end of the term and forfeit their deposit.",
                "   - Win and become a member. Members will eventually get their stash back.",
                "   - Become a runner-up. Runners-ups are reserved members in case one gets forcefully",
                "     removed.",
                "",
                " # <weight>",
                " #### State",
                " Reads: O(LogN) Given N candidates.",
                " Writes: O(1)",
                " # </weight>"
              ]
            },
            {
              "name": "renounce_candidacy",
              "args": [],
              "docs": [
                " Renounce one's intention to be a candidate for the next election round. 3 potential",
                " outcomes exist:",
                " - `origin` is a candidate and not elected in any set. In this case, the bond is",
                "   unreserved, returned and origin is removed as a candidate.",
                " - `origin` is a current runner up. In this case, the bond is unreserved, returned and",
                "   origin is removed as a runner.",
                " - `origin` is a current member. In this case, the bond is unreserved and origin is",
                "   removed as a member, consequently not being a candidate for the next round anymore.",
                "   Similar to [`remove_voter`], if replacement runners exists, they are immediately used."
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "LookupSource"
                }
              ],
              "docs": [
                " Remove a particular member from the set. This is effective immediately and the bond of",
                " the outgoing member is slashed.",
                "",
                " If a runner-up is available, then the best runner-up will be removed and replaces the",
                " outgoing member. Otherwise, a new phragmen round is started.",
                "",
                " Note that this does not affect the designated block number of the next election.",
                "",
                " # <weight>",
                " #### State",
                " Reads: O(do_phragmen)",
                " Writes: O(do_phragmen)",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "NewTerm",
              "args": [
                "Vec<(AccountId,Balance)>"
              ],
              "docs": [
                " A new term with new members. This indicates that enough candidates existed, not that",
                " enough have has been elected. The inner value must be examined for this purpose."
              ]
            },
            {
              "name": "EmptyTerm",
              "args": [],
              "docs": [
                " No (or not enough) candidates existed for this round."
              ]
            },
            {
              "name": "MemberKicked",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A member has been removed. This should always be followed by either `NewTerm` ot",
                " `EmptyTerm`."
              ]
            },
            {
              "name": "MemberRenounced",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A member has renounced their candidacy."
              ]
            },
            {
              "name": "VoterReported",
              "args": [
                "AccountId",
                "AccountId",
                "bool"
              ],
              "docs": [
                " A voter (first element) was reported (byt the second element) with the the report being",
                " successful or not (third element)."
              ]
            }
          ],
          "constants": [
            {
              "name": "CandidacyBond",
              "type": "BalanceOf",
              "value": "0x0080c6a47e8d03000000000000000000",
              "docs": []
            },
            {
              "name": "VotingBond",
              "type": "BalanceOf",
              "value": "0x00407a10f35a00000000000000000000",
              "docs": []
            },
            {
              "name": "DesiredMembers",
              "type": "u32",
              "value": "0x0d000000",
              "docs": []
            },
            {
              "name": "DesiredRunnersUp",
              "type": "u32",
              "value": "0x07000000",
              "docs": []
            },
            {
              "name": "TermDuration",
              "type": "BlockNumber",
              "value": "0x80130300",
              "docs": []
            }
          ],
          "errors": [
            {
              "name": "UnableToVote",
              "docs": [
                " Cannot vote when no candidates or members exist."
              ]
            },
            {
              "name": "NoVotes",
              "docs": [
                " Must vote for at least one candidate."
              ]
            },
            {
              "name": "TooManyVotes",
              "docs": [
                " Cannot vote more than candidates."
              ]
            },
            {
              "name": "MaximumVotesExceeded",
              "docs": [
                " Cannot vote more than maximum allowed."
              ]
            },
            {
              "name": "LowBalance",
              "docs": [
                " Cannot vote with stake less than minimum balance."
              ]
            },
            {
              "name": "UnableToPayBond",
              "docs": [
                " Voter can not pay voting bond."
              ]
            },
            {
              "name": "MustBeVoter",
              "docs": [
                " Must be a voter."
              ]
            },
            {
              "name": "ReportSelf",
              "docs": [
                " Cannot report self."
              ]
            },
            {
              "name": "DuplicatedCandidate",
              "docs": [
                " Duplicated candidate submission."
              ]
            },
            {
              "name": "MemberSubmit",
              "docs": [
                " Member cannot re-submit candidacy."
              ]
            },
            {
              "name": "RunnerSubmit",
              "docs": [
                " Runner cannot re-submit candidacy."
              ]
            },
            {
              "name": "InsufficientCandidateFunds",
              "docs": [
                " Candidate does not have enough funds."
              ]
            },
            {
              "name": "InvalidOrigin",
              "docs": [
                " Origin is not a candidate, member or a runner up."
              ]
            },
            {
              "name": "NotMember",
              "docs": [
                " Not a member."
              ]
            }
          ]
        },
        {
          "name": "TechnicalMembership",
          "storage": {
            "prefix": "Instance1Membership",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current membership, stored as an ordered Vec."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Add a member `who` to the set.",
                "",
                " May only be called from `AddOrigin` or root."
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Remove a member `who` from the set.",
                "",
                " May only be called from `RemoveOrigin` or root."
              ]
            },
            {
              "name": "swap_member",
              "args": [
                {
                  "name": "remove",
                  "type": "AccountId"
                },
                {
                  "name": "add",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Swap out one member `remove` for another `add`.",
                "",
                " May only be called from `SwapOrigin` or root."
              ]
            },
            {
              "name": "reset_members",
              "args": [
                {
                  "name": "members",
                  "type": "Vec<AccountId>"
                }
              ],
              "docs": [
                " Change the membership to a new set, disregarding the existing membership. Be nice and",
                " pass `members` pre-sorted.",
                "",
                " May only be called from `ResetOrigin` or root."
              ]
            },
            {
              "name": "change_key",
              "args": [
                {
                  "name": "new",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Swap out the sending member for some other key `new`.",
                "",
                " May only be called from `Signed` origin of a current member."
              ]
            }
          ],
          "events": [
            {
              "name": "MemberAdded",
              "args": [],
              "docs": [
                " The given member was added; see the transaction for who."
              ]
            },
            {
              "name": "MemberRemoved",
              "args": [],
              "docs": [
                " The given member was removed; see the transaction for who."
              ]
            },
            {
              "name": "MembersSwapped",
              "args": [],
              "docs": [
                " Two members were swapped; see the transaction for who."
              ]
            },
            {
              "name": "MembersReset",
              "args": [],
              "docs": [
                " The membership was reset; see the transaction for who the new set is."
              ]
            },
            {
              "name": "KeyChanged",
              "args": [],
              "docs": [
                " One of the members' keys changed."
              ]
            },
            {
              "name": "Dummy",
              "args": [
                "PhantomData"
              ],
              "docs": [
                " Phantom member, never used."
              ]
            }
          ],
          "constants": [],
          "errors": []
        },
        {
          "name": "FinalityTracker",
          "storage": null,
          "calls": [
            {
              "name": "final_hint",
              "args": [
                {
                  "name": "hint",
                  "type": "Compact<BlockNumber>"
                }
              ],
              "docs": [
                " Hint that the author of this block thinks the best finalized",
                " block is the given number."
              ]
            }
          ],
          "events": null,
          "constants": [
            {
              "name": "WindowSize",
              "type": "BlockNumber",
              "value": "0x65000000",
              "docs": [
                " The number of recent samples to keep from this chain. Default is 101."
              ]
            },
            {
              "name": "ReportLatency",
              "type": "BlockNumber",
              "value": "0xe8030000",
              "docs": [
                " The delay after which point things become suspicious. Default is 1000."
              ]
            }
          ],
          "errors": [
            {
              "name": "AlreadyUpdated",
              "docs": [
                " Final hint must be updated only once in the block"
              ]
            },
            {
              "name": "BadHint",
              "docs": [
                " Finalized height above block number"
              ]
            }
          ]
        },
        {
          "name": "Grandpa",
          "storage": {
            "prefix": "GrandpaFinality",
            "items": [
              {
                "name": "Authorities",
                "modifier": "Default",
                "type": {
                  "plain": "AuthorityList"
                },
                "fallback": "0x00",
                "docs": [
                  " DEPRECATED",
                  "",
                  " This used to store the current authority set, which has been migrated to the well-known",
                  " GRANDPA_AUTHORITES_KEY unhashed key."
                ]
              },
              {
                "name": "State",
                "modifier": "Default",
                "type": {
                  "plain": "StoredState"
                },
                "fallback": "0x00",
                "docs": [
                  " State of the current authority set."
                ]
              },
              {
                "name": "PendingChange",
                "modifier": "Optional",
                "type": {
                  "plain": "StoredPendingChange"
                },
                "fallback": "0x00",
                "docs": [
                  " Pending change: (signaled at, scheduled change)."
                ]
              },
              {
                "name": "NextForced",
                "modifier": "Optional",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00",
                "docs": [
                  " next block number where we can force a change."
                ]
              },
              {
                "name": "Stalled",
                "modifier": "Optional",
                "type": {
                  "plain": "(BlockNumber,BlockNumber)"
                },
                "fallback": "0x00",
                "docs": [
                  " `true` if we are currently stalled."
                ]
              },
              {
                "name": "CurrentSetId",
                "modifier": "Default",
                "type": {
                  "plain": "SetId"
                },
                "fallback": "0x0000000000000000",
                "docs": [
                  " The number of changes (both in terms of keys and underlying economic responsibilities)",
                  " in the \"set\" of Grandpa validators from genesis."
                ]
              },
              {
                "name": "SetIdSession",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "SetId",
                    "value": "SessionIndex",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " A mapping from grandpa set ID to the index of the *most recent* session for which its members were responsible."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "report_misbehavior",
              "args": [
                {
                  "name": "_report",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Report some misbehavior."
              ]
            }
          ],
          "events": [
            {
              "name": "NewAuthorities",
              "args": [
                "AuthorityList"
              ],
              "docs": [
                " New authority set has been applied."
              ]
            },
            {
              "name": "Paused",
              "args": [],
              "docs": [
                " Current authority set has been paused."
              ]
            },
            {
              "name": "Resumed",
              "args": [],
              "docs": [
                " Current authority set has been resumed."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "PauseFailed",
              "docs": [
                " Attempt to signal GRANDPA pause when the authority set isn't live",
                " (either paused or already pending pause)."
              ]
            },
            {
              "name": "ResumeFailed",
              "docs": [
                " Attempt to signal GRANDPA resume when the authority set isn't paused",
                " (either live or already pending resume)."
              ]
            },
            {
              "name": "ChangePending",
              "docs": [
                " Attempt to signal GRANDPA change with one already pending."
              ]
            },
            {
              "name": "TooSoon",
              "docs": [
                " Cannot signal forced change so soon after last."
              ]
            }
          ]
        },
        {
          "name": "Treasury",
          "storage": {
            "prefix": "Treasury",
            "items": [
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "ProposalIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Number of proposals that have been made."
                ]
              },
              {
                "name": "Proposals",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "ProposalIndex",
                    "value": "TreasuryProposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Proposals that have been made."
                ]
              },
              {
                "name": "Approvals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<ProposalIndex>"
                },
                "fallback": "0x00",
                "docs": [
                  " Proposal indices that have been approved but not yet awarded."
                ]
              },
              {
                "name": "Tips",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "Hash",
                    "value": "OpenTip",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Tips that are not yet completed. Keyed by the hash of `(reason, who)` from the value.",
                  " This has the insecure enumerable hash function since the key itself is already",
                  " guaranteed to be a secure hash."
                ]
              },
              {
                "name": "Reasons",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "Hash",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Simple preimage lookup from the reason's hash to the original data. Again, has an",
                  " insecure enumerable hash since the key is guaranteed to be the result of a secure hash."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "propose_spend",
              "args": [
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "beneficiary",
                  "type": "LookupSource"
                }
              ],
              "docs": [
                " Put forward a suggestion for spending. A deposit proportional to the value",
                " is reserved and slashed if the proposal is rejected. It is returned once the",
                " proposal is awarded.",
                "",
                " # <weight>",
                " - O(1).",
                " - Limited storage reads.",
                " - One DB change, one extra DB entry.",
                " # </weight>"
              ]
            },
            {
              "name": "reject_proposal",
              "args": [
                {
                  "name": "proposal_id",
                  "type": "Compact<ProposalIndex>"
                }
              ],
              "docs": [
                " Reject a proposed spend. The original deposit will be slashed.",
                "",
                " # <weight>",
                " - O(1).",
                " - Limited storage reads.",
                " - One DB clear.",
                " # </weight>"
              ]
            },
            {
              "name": "approve_proposal",
              "args": [
                {
                  "name": "proposal_id",
                  "type": "Compact<ProposalIndex>"
                }
              ],
              "docs": [
                " Approve a proposal. At a later time, the proposal will be allocated to the beneficiary",
                " and the original deposit will be returned.",
                "",
                " # <weight>",
                " - O(1).",
                " - Limited storage reads.",
                " - One DB change.",
                " # </weight>"
              ]
            },
            {
              "name": "report_awesome",
              "args": [
                {
                  "name": "reason",
                  "type": "Bytes"
                },
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Report something `reason` that deserves a tip and claim any eventual the finder's fee.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Payment: `TipReportDepositBase` will be reserved from the origin account, as well as",
                " `TipReportDepositPerByte` for each byte in `reason`.",
                "",
                " - `reason`: The reason for, or the thing that deserves, the tip; generally this will be",
                "   a UTF-8-encoded URL.",
                " - `who`: The account which should be credited for the tip.",
                "",
                " Emits `NewTip` if successful.",
                "",
                " # <weight>",
                " - `O(R)` where `R` length of `reason`.",
                " - One balance operation.",
                " - One storage mutation (codec `O(R)`).",
                " - One event.",
                " # </weight>"
              ]
            },
            {
              "name": "retract_tip",
              "args": [
                {
                  "name": "hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Retract a prior tip-report from `report_awesome`, and cancel the process of tipping.",
                "",
                " If successful, the original deposit will be unreserved.",
                "",
                " The dispatch origin for this call must be _Signed_ and the tip identified by `hash`",
                " must have been reported by the signing account through `report_awesome` (and not",
                " through `tip_new`).",
                "",
                " - `hash`: The identity of the open tip for which a tip value is declared. This is formed",
                "   as the hash of the tuple of the original tip `reason` and the beneficiary account ID.",
                "",
                " Emits `TipRetracted` if successful.",
                "",
                " # <weight>",
                " - `O(T)`",
                " - One balance operation.",
                " - Two storage removals (one read, codec `O(T)`).",
                " - One event.",
                " # </weight>"
              ]
            },
            {
              "name": "tip_new",
              "args": [
                {
                  "name": "reason",
                  "type": "Bytes"
                },
                {
                  "name": "who",
                  "type": "AccountId"
                },
                {
                  "name": "tip_value",
                  "type": "BalanceOf"
                }
              ],
              "docs": [
                " Give a tip for something new; no finder's fee will be taken.",
                "",
                " The dispatch origin for this call must be _Signed_ and the signing account must be a",
                " member of the `Tippers` set.",
                "",
                " - `reason`: The reason for, or the thing that deserves, the tip; generally this will be",
                "   a UTF-8-encoded URL.",
                " - `who`: The account which should be credited for the tip.",
                " - `tip_value`: The amount of tip that the sender would like to give. The median tip",
                "   value of active tippers will be given to the `who`.",
                "",
                " Emits `NewTip` if successful.",
                "",
                " # <weight>",
                " - `O(R + T)` where `R` length of `reason`, `T` is the number of tippers. `T` is",
                "   naturally capped as a membership set, `R` is limited through transaction-size.",
                " - Two storage insertions (codecs `O(R)`, `O(T)`), one read `O(1)`.",
                " - One event.",
                " # </weight>"
              ]
            },
            {
              "name": "tip",
              "args": [
                {
                  "name": "hash",
                  "type": "Hash"
                },
                {
                  "name": "tip_value",
                  "type": "BalanceOf"
                }
              ],
              "docs": [
                " Declare a tip value for an already-open tip.",
                "",
                " The dispatch origin for this call must be _Signed_ and the signing account must be a",
                " member of the `Tippers` set.",
                "",
                " - `hash`: The identity of the open tip for which a tip value is declared. This is formed",
                "   as the hash of the tuple of the hash of the original tip `reason` and the beneficiary",
                "   account ID.",
                " - `tip_value`: The amount of tip that the sender would like to give. The median tip",
                "   value of active tippers will be given to the `who`.",
                "",
                " Emits `TipClosing` if the threshold of tippers has been reached and the countdown period",
                " has started.",
                "",
                " # <weight>",
                " - `O(T)`",
                " - One storage mutation (codec `O(T)`), one storage read `O(1)`.",
                " - Up to one event.",
                " # </weight>"
              ]
            },
            {
              "name": "close_tip",
              "args": [
                {
                  "name": "hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Close and payout a tip.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " The tip identified by `hash` must have finished its countdown period.",
                "",
                " - `hash`: The identity of the open tip for which a tip value is declared. This is formed",
                "   as the hash of the tuple of the original tip `reason` and the beneficiary account ID.",
                "",
                " # <weight>",
                " - `O(T)`",
                " - One storage retrieval (codec `O(T)`) and two removals.",
                " - Up to three balance operations.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Proposed",
              "args": [
                "ProposalIndex"
              ],
              "docs": [
                " New proposal."
              ]
            },
            {
              "name": "Spending",
              "args": [
                "Balance"
              ],
              "docs": [
                " We have ended a spend period and will now allocate funds."
              ]
            },
            {
              "name": "Awarded",
              "args": [
                "ProposalIndex",
                "Balance",
                "AccountId"
              ],
              "docs": [
                " Some funds have been allocated."
              ]
            },
            {
              "name": "Rejected",
              "args": [
                "ProposalIndex",
                "Balance"
              ],
              "docs": [
                " A proposal was rejected; funds were slashed."
              ]
            },
            {
              "name": "Burnt",
              "args": [
                "Balance"
              ],
              "docs": [
                " Some of our funds have been burnt."
              ]
            },
            {
              "name": "Rollover",
              "args": [
                "Balance"
              ],
              "docs": [
                " Spending has finished; this is the amount that rolls over until next spend."
              ]
            },
            {
              "name": "Deposit",
              "args": [
                "Balance"
              ],
              "docs": [
                " Some funds have been deposited."
              ]
            },
            {
              "name": "NewTip",
              "args": [
                "Hash"
              ],
              "docs": [
                " A new tip suggestion has been opened."
              ]
            },
            {
              "name": "TipClosing",
              "args": [
                "Hash"
              ],
              "docs": [
                " A tip suggestion has reached threshold and is closing."
              ]
            },
            {
              "name": "TipClosed",
              "args": [
                "Hash",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A tip suggestion has been closed."
              ]
            },
            {
              "name": "TipRetracted",
              "args": [
                "Hash"
              ],
              "docs": [
                " A tip suggestion has been retracted."
              ]
            }
          ],
          "constants": [
            {
              "name": "ProposalBond",
              "type": "Permill",
              "value": "0x50c30000",
              "docs": [
                " Fraction of a proposal's value that should be bonded in order to place the proposal.",
                " An accepted proposal gets these back. A rejected proposal does not."
              ]
            },
            {
              "name": "ProposalBondMinimum",
              "type": "BalanceOf",
              "value": "0x00407a10f35a00000000000000000000",
              "docs": [
                " Minimum amount of funds that should be placed in a deposit for making a proposal."
              ]
            },
            {
              "name": "SpendPeriod",
              "type": "BlockNumber",
              "value": "0x80700000",
              "docs": [
                " Period between successive spends."
              ]
            },
            {
              "name": "Burn",
              "type": "Permill",
              "value": "0x20a10700",
              "docs": [
                " Percentage of spare funds (if any) that are burnt per spend period."
              ]
            },
            {
              "name": "TipCountdown",
              "type": "BlockNumber",
              "value": "0x80700000",
              "docs": [
                " The period for which a tip remains open after is has achieved threshold tippers."
              ]
            },
            {
              "name": "TipFindersFee",
              "type": "Percent",
              "value": "0x14",
              "docs": [
                " The amount of the final tip which goes to the original reporter of the tip."
              ]
            },
            {
              "name": "TipReportDepositBase",
              "type": "BalanceOf",
              "value": "0x00407a10f35a00000000000000000000",
              "docs": [
                " The amount held on deposit for placing a tip report."
              ]
            },
            {
              "name": "TipReportDepositPerByte",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The amount held on deposit per byte within the tip report reason."
              ]
            }
          ],
          "errors": [
            {
              "name": "InsufficientProposersBalance",
              "docs": [
                " Proposer's balance is too low."
              ]
            },
            {
              "name": "InvalidProposalIndex",
              "docs": [
                " No proposal at that index."
              ]
            },
            {
              "name": "ReasonTooBig",
              "docs": [
                " The reason given is just too big."
              ]
            },
            {
              "name": "AlreadyKnown",
              "docs": [
                " The tip was already found/started."
              ]
            },
            {
              "name": "UnknownTip",
              "docs": [
                " The tip hash is unknown."
              ]
            },
            {
              "name": "NotFinder",
              "docs": [
                " The account attempting to retract the tip is not the finder of the tip."
              ]
            },
            {
              "name": "StillOpen",
              "docs": [
                " The tip cannot be claimed/closed because there are not enough tippers yet."
              ]
            },
            {
              "name": "Premature",
              "docs": [
                " The tip cannot be claimed/closed because it's still in the countdown period."
              ]
            }
          ]
        },
        {
          "name": "Contracts",
          "storage": {
            "prefix": "Contract",
            "items": [
              {
                "name": "GasSpent",
                "modifier": "Default",
                "type": {
                  "plain": "Gas"
                },
                "fallback": "0x0000000000000000",
                "docs": [
                  " Gas spent so far in this block."
                ]
              },
              {
                "name": "CurrentSchedule",
                "modifier": "Default",
                "type": {
                  "plain": "Schedule"
                },
                "fallback": "0x0000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000008700000000000000af0000000000000001000000000000000100000000000000040000000000010010000000004000000020000000",
                "docs": [
                  " Current cost schedule for contracts."
                ]
              },
              {
                "name": "PristineCode",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "CodeHash",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " A mapping from an original code hash to the original code, untouched by instrumentation."
                ]
              },
              {
                "name": "CodeStorage",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "CodeHash",
                    "value": "PrefabWasmModule",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " A mapping between an original code hash and instrumented wasm code, ready for execution."
                ]
              },
              {
                "name": "AccountCounter",
                "modifier": "Default",
                "type": {
                  "plain": "u64"
                },
                "fallback": "0x0000000000000000",
                "docs": [
                  " The subtrie counter."
                ]
              },
              {
                "name": "ContractInfoOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "ContractInfo",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The code associated with a given account."
                ]
              },
              {
                "name": "GasPrice",
                "modifier": "Default",
                "type": {
                  "plain": "BalanceOf"
                },
                "fallback": "0x01000000000000000000000000000000",
                "docs": [
                  " The price of one unit of gas."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "update_schedule",
              "args": [
                {
                  "name": "schedule",
                  "type": "Schedule"
                }
              ],
              "docs": [
                " Updates the schedule for metering contracts.",
                "",
                " The schedule must have a greater version than the stored schedule."
              ]
            },
            {
              "name": "put_code",
              "args": [
                {
                  "name": "gas_limit",
                  "type": "Compact<Gas>"
                },
                {
                  "name": "code",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Stores the given binary Wasm code into the chain's storage and returns its `codehash`.",
                " You can instantiate contracts only with stored code."
              ]
            },
            {
              "name": "call",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "gas_limit",
                  "type": "Compact<Gas>"
                },
                {
                  "name": "data",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Makes a call to an account, optionally transferring some balance.",
                "",
                " * If the account is a smart-contract account, the associated code will be",
                " executed and any value will be transferred.",
                " * If the account is a regular account, any value will be transferred.",
                " * If no account exists and the call value is not less than `existential_deposit`,",
                " a regular account will be created and any value will be transferred."
              ]
            },
            {
              "name": "instantiate",
              "args": [
                {
                  "name": "endowment",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "gas_limit",
                  "type": "Compact<Gas>"
                },
                {
                  "name": "code_hash",
                  "type": "CodeHash"
                },
                {
                  "name": "data",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Instantiates a new contract from the `codehash` generated by `put_code`, optionally transferring some balance.",
                "",
                " Instantiation is executed as follows:",
                "",
                " - The destination address is computed based on the sender and hash of the code.",
                " - The smart-contract account is created at the computed address.",
                " - The `ctor_code` is executed in the context of the newly-created account. Buffer returned",
                "   after the execution is saved as the `code` of the account. That code will be invoked",
                "   upon any call received by this account.",
                " - The contract is initialized."
              ]
            },
            {
              "name": "claim_surcharge",
              "args": [
                {
                  "name": "dest",
                  "type": "AccountId"
                },
                {
                  "name": "aux_sender",
                  "type": "Option<AccountId>"
                }
              ],
              "docs": [
                " Allows block producers to claim a small reward for evicting a contract. If a block producer",
                " fails to do so, a regular users will be allowed to claim the reward.",
                "",
                " If contract is not evicted as a result of this call, no actions are taken and",
                " the sender is not eligible for the reward."
              ]
            }
          ],
          "events": [
            {
              "name": "Transfer",
              "args": [
                "AccountId",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " Transfer happened `from` to `to` with given `value` as part of a `call` or `instantiate`."
              ]
            },
            {
              "name": "Instantiated",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "docs": [
                " Contract deployed by address at the specified address."
              ]
            },
            {
              "name": "CodeStored",
              "args": [
                "Hash"
              ],
              "docs": [
                " Code with the specified hash has been stored."
              ]
            },
            {
              "name": "ScheduleUpdated",
              "args": [
                "u32"
              ],
              "docs": [
                " Triggered when the current schedule is updated."
              ]
            },
            {
              "name": "Dispatched",
              "args": [
                "AccountId",
                "bool"
              ],
              "docs": [
                " A call was dispatched from the given account. The bool signals whether it was",
                " successful execution or not."
              ]
            },
            {
              "name": "Contract",
              "args": [
                "AccountId",
                "Bytes"
              ],
              "docs": [
                " An event from contract of account."
              ]
            }
          ],
          "constants": [
            {
              "name": "SignedClaimHandicap",
              "type": "BlockNumber",
              "value": "0x02000000",
              "docs": [
                " Number of block delay an extrinsic claim surcharge has.",
                "",
                " When claim surcharge is called by an extrinsic the rent is checked",
                " for current_block - delay"
              ]
            },
            {
              "name": "TombstoneDeposit",
              "type": "BalanceOf",
              "value": "0x00407a10f35a00000000000000000000",
              "docs": [
                " The minimum amount required to generate a tombstone."
              ]
            },
            {
              "name": "StorageSizeOffset",
              "type": "u32",
              "value": "0x08000000",
              "docs": [
                " Size of a contract at the time of instantiaion. This is a simple way to ensure that",
                " empty contracts eventually gets deleted."
              ]
            },
            {
              "name": "RentByteFee",
              "type": "BalanceOf",
              "value": "0x00407a10f35a00000000000000000000",
              "docs": [
                " Price of a byte of storage per one block interval. Should be greater than 0."
              ]
            },
            {
              "name": "RentDepositOffset",
              "type": "BalanceOf",
              "value": "0x00008a5d784563010000000000000000",
              "docs": [
                " The amount of funds a contract should deposit in order to offset",
                " the cost of one byte.",
                "",
                " Let's suppose the deposit is 1,000 BU (balance units)/byte and the rent is 1 BU/byte/day,",
                " then a contract with 1,000,000 BU that uses 1,000 bytes of storage would pay no rent.",
                " But if the balance reduced to 500,000 BU and the storage stayed the same at 1,000,",
                " then it would pay 500 BU/day."
              ]
            },
            {
              "name": "SurchargeReward",
              "type": "BalanceOf",
              "value": "0x0080a1a76b4a35000000000000000000",
              "docs": [
                " Reward that is received by the party whose touch has led",
                " to removal of a contract."
              ]
            },
            {
              "name": "TransferFee",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The fee required to make a transfer."
              ]
            },
            {
              "name": "CreationFee",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The fee required to create an account."
              ]
            },
            {
              "name": "TransactionBaseFee",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The fee to be paid for making a transaction; the base."
              ]
            },
            {
              "name": "TransactionByteFee",
              "type": "BalanceOf",
              "value": "0x00e40b54020000000000000000000000",
              "docs": [
                " The fee to be paid for making a transaction; the per-byte portion."
              ]
            },
            {
              "name": "ContractFee",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The fee required to instantiate a contract instance. A reasonable default value",
                " is 21."
              ]
            },
            {
              "name": "CallBaseFee",
              "type": "Gas",
              "value": "0xe803000000000000",
              "docs": [
                " The base fee charged for calling into a contract. A reasonable default",
                " value is 135."
              ]
            },
            {
              "name": "InstantiateBaseFee",
              "type": "Gas",
              "value": "0xe803000000000000",
              "docs": [
                " The base fee charged for instantiating a contract. A reasonable default value",
                " is 175."
              ]
            },
            {
              "name": "MaxDepth",
              "type": "u32",
              "value": "0x20000000",
              "docs": [
                " The maximum nesting level of a call/instantiate stack. A reasonable default",
                " value is 100."
              ]
            },
            {
              "name": "MaxValueSize",
              "type": "u32",
              "value": "0x00400000",
              "docs": [
                " The maximum size of a storage value in bytes. A reasonable default is 16 KiB."
              ]
            },
            {
              "name": "BlockGasLimit",
              "type": "Gas",
              "value": "0x8096980000000000",
              "docs": [
                " The maximum amount of gas that could be expended per block. A reasonable",
                " default value is 10_000_000."
              ]
            }
          ],
          "errors": [
            {
              "name": "InvalidScheduleVersion",
              "docs": [
                " A new schedule must have a greater version than the current one."
              ]
            },
            {
              "name": "InvalidSurchargeClaim",
              "docs": [
                " An origin must be signed or inherent and auxiliary sender only provided on inherent."
              ]
            },
            {
              "name": "InvalidSourceContract",
              "docs": [
                " Cannot restore from nonexisting or tombstone contract."
              ]
            },
            {
              "name": "InvalidDestinationContract",
              "docs": [
                " Cannot restore to nonexisting or alive contract."
              ]
            },
            {
              "name": "InvalidTombstone",
              "docs": [
                " Tombstones don't match."
              ]
            },
            {
              "name": "InvalidContractOrigin",
              "docs": [
                " An origin TrieId written in the current block."
              ]
            }
          ]
        },
        {
          "name": "Sudo",
          "storage": {
            "prefix": "Sudo",
            "items": [
              {
                "name": "Key",
                "modifier": "Default",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " The `AccountId` of the sudo key."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "sudo",
              "args": [
                {
                  "name": "proposal",
                  "type": "Proposal"
                }
              ],
              "docs": [
                " Authenticates the sudo key and dispatches a function call with `Root` origin.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " # <weight>",
                " - O(1).",
                " - Limited storage reads.",
                " - One DB write (event).",
                " - Unknown weight of derivative `proposal` execution.",
                " # </weight>"
              ]
            },
            {
              "name": "set_key",
              "args": [
                {
                  "name": "new",
                  "type": "LookupSource"
                }
              ],
              "docs": [
                " Authenticates the current sudo key and sets the given AccountId (`new`) as the new sudo key.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " # <weight>",
                " - O(1).",
                " - Limited storage reads.",
                " - One DB change.",
                " # </weight>"
              ]
            },
            {
              "name": "sudo_as",
              "args": [
                {
                  "name": "who",
                  "type": "LookupSource"
                },
                {
                  "name": "proposal",
                  "type": "Proposal"
                }
              ],
              "docs": [
                " Authenticates the sudo key and dispatches a function call with `Signed` origin from",
                " a given account.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " # <weight>",
                " - O(1).",
                " - Limited storage reads.",
                " - One DB write (event).",
                " - Unknown weight of derivative `proposal` execution.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Sudid",
              "args": [
                "bool"
              ],
              "docs": [
                " A sudo just took place."
              ]
            },
            {
              "name": "KeyChanged",
              "args": [
                "AccountId"
              ],
              "docs": [
                " The sudoer just switched identity; the old key is supplied."
              ]
            },
            {
              "name": "SudoAsDone",
              "args": [
                "bool"
              ],
              "docs": [
                " A sudo just took place."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "RequireSudo",
              "docs": [
                " Sender must be the Sudo account"
              ]
            }
          ]
        },
        {
          "name": "ImOnline",
          "storage": {
            "prefix": "ImOnline",
            "items": [
              {
                "name": "GossipAt",
                "modifier": "Default",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The block number when we should gossip."
                ]
              },
              {
                "name": "Keys",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AuthorityId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current set of keys that may issue a heartbeat."
                ]
              },
              {
                "name": "ReceivedHeartbeats",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_256",
                    "key1": "SessionIndex",
                    "key2": "AuthIndex",
                    "value": "Bytes",
                    "key2Hasher": "Blake2_256"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " For each session index, we keep a mapping of `AuthIndex`",
                  " to `offchain::OpaqueNetworkState`."
                ]
              },
              {
                "name": "AuthoredBlocks",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_256",
                    "key1": "SessionIndex",
                    "key2": "ValidatorId",
                    "value": "u32",
                    "key2Hasher": "Blake2_256"
                  }
                },
                "fallback": "0x00000000",
                "docs": [
                  " For each session index, we keep a mapping of `T::ValidatorId` to the",
                  " number of blocks authored by the given authority."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "heartbeat",
              "args": [
                {
                  "name": "heartbeat",
                  "type": "Heartbeat"
                },
                {
                  "name": "_signature",
                  "type": "Signature"
                }
              ],
              "docs": []
            }
          ],
          "events": [
            {
              "name": "HeartbeatReceived",
              "args": [
                "AuthorityId"
              ],
              "docs": [
                " A new heartbeat was received from `AuthorityId`"
              ]
            },
            {
              "name": "AllGood",
              "args": [],
              "docs": [
                " At the end of the session, no offence was committed."
              ]
            },
            {
              "name": "SomeOffline",
              "args": [
                "Vec<IdentificationTuple>"
              ],
              "docs": [
                " At the end of the session, at least once validator was found to be offline."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "InvalidKey",
              "docs": [
                " Non existent public key."
              ]
            },
            {
              "name": "DuplicatedHeartbeat",
              "docs": [
                " Duplicated heartbeat."
              ]
            }
          ]
        },
        {
          "name": "AuthorityDiscovery",
          "storage": null,
          "calls": [],
          "events": null,
          "constants": [],
          "errors": []
        },
        {
          "name": "Offences",
          "storage": {
            "prefix": "Offences",
            "items": [
              {
                "name": "Reports",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "ReportIdOf",
                    "value": "OffenceDetails",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The primary structure that holds all offence records keyed by report identifiers."
                ]
              },
              {
                "name": "ConcurrentReportsIndex",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_256",
                    "key1": "Kind",
                    "key2": "OpaqueTimeSlot",
                    "value": "Vec<ReportIdOf>",
                    "key2Hasher": "Blake2_256"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " A vector of reports of the same kind that happened at the same time slot."
                ]
              },
              {
                "name": "ReportsByKindIndex",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "Kind",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Enumerates all reports of a kind along with the time they happened.",
                  "",
                  " All reports are sorted by the time of offence.",
                  "",
                  " Note that the actual type of this mapping is `Vec<u8>`, this is because values of",
                  " different types are not supported at the moment so we are doing the manual serialization."
                ]
              }
            ]
          },
          "calls": [],
          "events": [
            {
              "name": "Offence",
              "args": [
                "Kind",
                "OpaqueTimeSlot"
              ],
              "docs": [
                " There is an offence reported of the given `kind` happened at the `session_index` and",
                " (kind-specific) time slot. This event is not deposited for duplicate slashes."
              ]
            }
          ],
          "constants": [],
          "errors": []
        },
        {
          "name": "RandomnessCollectiveFlip",
          "storage": {
            "prefix": "RandomnessCollectiveFlip",
            "items": [
              {
                "name": "RandomMaterial",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "docs": [
                  " Series of block headers from the last 81 blocks that acts as random seed material. This",
                  " is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of",
                  " the oldest hash."
                ]
              }
            ]
          },
          "calls": [],
          "events": null,
          "constants": [],
          "errors": []
        },
        {
          "name": "Identity",
          "storage": {
            "prefix": "Sudo",
            "items": [
              {
                "name": "IdentityOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "Registration",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Information that is pertinent to identify the entity behind an account."
                ]
              },
              {
                "name": "SuperOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "(AccountId,Data)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The super-identity of an alternative \"sub\" identity together with its name, within that",
                  " context. If the account is not some other account's sub-identity, then just `None`."
                ]
              },
              {
                "name": "SubsOf",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "(BalanceOf,Vec<AccountId>)",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000",
                "docs": [
                  " Alternative \"sub\" identities of this account.",
                  "",
                  " The first item is the deposit, the second is a vector of the accounts."
                ]
              },
              {
                "name": "Registrars",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Option<RegistrarInfo>>"
                },
                "fallback": "0x00",
                "docs": [
                  " The set of registrars. Not expected to get very big as can only be added through a",
                  " special origin (likely a council motion).",
                  "",
                  " The index into this can be cast to `RegistrarIndex` to get a valid value."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_registrar",
              "args": [
                {
                  "name": "account",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Add a registrar to the system.",
                "",
                " The dispatch origin for this call must be `RegistrarOrigin` or `Root`.",
                "",
                " - `account`: the account of the registrar.",
                "",
                " Emits `RegistrarAdded` if successful.",
                "",
                " # <weight>",
                " - `O(R)` where `R` registrar-count (governance-bounded).",
                " - One storage mutation (codec `O(R)`).",
                " - One event.",
                " # </weight>"
              ]
            },
            {
              "name": "set_identity",
              "args": [
                {
                  "name": "info",
                  "type": "IdentityInfo"
                }
              ],
              "docs": [
                " Set an account's identity information and reserve the appropriate deposit.",
                "",
                " If the account already has identity information, the deposit is taken as part payment",
                " for the new deposit.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must have a registered",
                " identity.",
                "",
                " - `info`: The identity information.",
                "",
                " Emits `IdentitySet` if successful.",
                "",
                " # <weight>",
                " - `O(X + R)` where `X` additional-field-count (deposit-bounded).",
                " - At most two balance operations.",
                " - One storage mutation (codec `O(X + R)`).",
                " - One event.",
                " # </weight>"
              ]
            },
            {
              "name": "set_subs",
              "args": [
                {
                  "name": "subs",
                  "type": "Vec<(AccountId,Data)>"
                }
              ],
              "docs": [
                " Set the sub-accounts of the sender.",
                "",
                " Payment: Any aggregate balance reserved by previous `set_subs` calls will be returned",
                " and an amount `SubAccountDeposit` will be reserved for each item in `subs`.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must have a registered",
                " identity.",
                "",
                " - `subs`: The identity's sub-accounts.",
                "",
                " # <weight>",
                " - `O(S)` where `S` subs-count (hard- and deposit-bounded).",
                " - At most two balance operations.",
                " - At most O(2 * S + 1) storage mutations; codec complexity `O(1 * S + S * 1)`);",
                "   one storage-exists.",
                " # </weight>"
              ]
            },
            {
              "name": "clear_identity",
              "args": [],
              "docs": [
                " Clear an account's identity info and all sub-account and return all deposits.",
                "",
                " Payment: All reserved balances on the account are returned.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must have a registered",
                " identity.",
                "",
                " Emits `IdentityCleared` if successful.",
                "",
                " # <weight>",
                " - `O(R + S + X)`.",
                " - One balance-reserve operation.",
                " - `S + 2` storage deletions.",
                " - One event.",
                " # </weight>"
              ]
            },
            {
              "name": "request_judgement",
              "args": [
                {
                  "name": "reg_index",
                  "type": "Compact<RegistrarIndex>"
                },
                {
                  "name": "max_fee",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Request a judgement from a registrar.",
                "",
                " Payment: At most `max_fee` will be reserved for payment to the registrar if judgement",
                " given.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must have a",
                " registered identity.",
                "",
                " - `reg_index`: The index of the registrar whose judgement is requested.",
                " - `max_fee`: The maximum fee that may be paid. This should just be auto-populated as:",
                "",
                " ```nocompile",
                " Self::registrars(reg_index).uwnrap().fee",
                " ```",
                "",
                " Emits `JudgementRequested` if successful.",
                "",
                " # <weight>",
                " - `O(R + X)`.",
                " - One balance-reserve operation.",
                " - Storage: 1 read `O(R)`, 1 mutate `O(X + R)`.",
                " - One event.",
                " # </weight>"
              ]
            },
            {
              "name": "cancel_request",
              "args": [
                {
                  "name": "reg_index",
                  "type": "RegistrarIndex"
                }
              ],
              "docs": [
                " Cancel a previous request.",
                "",
                " Payment: A previously reserved deposit is returned on success.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must have a",
                " registered identity.",
                "",
                " - `reg_index`: The index of the registrar whose judgement is no longer requested.",
                "",
                " Emits `JudgementUnrequested` if successful.",
                "",
                " # <weight>",
                " - `O(R + X)`.",
                " - One balance-reserve operation.",
                " - One storage mutation `O(R + X)`.",
                " - One event.",
                " # </weight>"
              ]
            },
            {
              "name": "set_fee",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<RegistrarIndex>"
                },
                {
                  "name": "fee",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Set the fee required for a judgement to be requested from a registrar.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must be the account",
                " of the registrar whose index is `index`.",
                "",
                " - `index`: the index of the registrar whose fee is to be set.",
                " - `fee`: the new fee.",
                "",
                " # <weight>",
                " - `O(R)`.",
                " - One storage mutation `O(R)`.",
                " # </weight>"
              ]
            },
            {
              "name": "set_account_id",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<RegistrarIndex>"
                },
                {
                  "name": "new",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Change the account associated with a registrar.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must be the account",
                " of the registrar whose index is `index`.",
                "",
                " - `index`: the index of the registrar whose fee is to be set.",
                " - `new`: the new account ID.",
                "",
                " # <weight>",
                " - `O(R)`.",
                " - One storage mutation `O(R)`.",
                " # </weight>"
              ]
            },
            {
              "name": "set_fields",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<RegistrarIndex>"
                },
                {
                  "name": "fields",
                  "type": "IdentityFields"
                }
              ],
              "docs": [
                " Set the field information for a registrar.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must be the account",
                " of the registrar whose index is `index`.",
                "",
                " - `index`: the index of the registrar whose fee is to be set.",
                " - `fields`: the fields that the registrar concerns themselves with.",
                "",
                " # <weight>",
                " - `O(R)`.",
                " - One storage mutation `O(R)`.",
                " # </weight>"
              ]
            },
            {
              "name": "provide_judgement",
              "args": [
                {
                  "name": "reg_index",
                  "type": "Compact<RegistrarIndex>"
                },
                {
                  "name": "target",
                  "type": "LookupSource"
                },
                {
                  "name": "judgement",
                  "type": "IdentityJudgement"
                }
              ],
              "docs": [
                " Provide a judgement for an account's identity.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must be the account",
                " of the registrar whose index is `reg_index`.",
                "",
                " - `reg_index`: the index of the registrar whose judgement is being made.",
                " - `target`: the account whose identity the judgement is upon. This must be an account",
                "   with a registered identity.",
                " - `judgement`: the judgement of the registrar of index `reg_index` about `target`.",
                "",
                " Emits `JudgementGiven` if successful.",
                "",
                " # <weight>",
                " - `O(R + X)`.",
                " - One balance-transfer operation.",
                " - Up to one account-lookup operation.",
                " - Storage: 1 read `O(R)`, 1 mutate `O(R + X)`.",
                " - One event.",
                " # </weight>"
              ]
            },
            {
              "name": "kill_identity",
              "args": [
                {
                  "name": "target",
                  "type": "LookupSource"
                }
              ],
              "docs": [
                " Remove an account's identity and sub-account information and slash the deposits.",
                "",
                " Payment: Reserved balances from `set_subs` and `set_identity` are slashed and handled by",
                " `Slash`. Verification request deposits are not returned; they should be cancelled",
                " manually using `cancel_request`.",
                "",
                " The dispatch origin for this call must be _Root_ or match `T::ForceOrigin`.",
                "",
                " - `target`: the account whose identity the judgement is upon. This must be an account",
                "   with a registered identity.",
                "",
                " Emits `IdentityKilled` if successful.",
                "",
                " # <weight>",
                " - `O(R + S + X)`.",
                " - One balance-reserve operation.",
                " - `S + 2` storage mutations.",
                " - One event.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "IdentitySet",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A name was set or reset (which will remove all judgements)."
              ]
            },
            {
              "name": "IdentityCleared",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A name was cleared, and the given balance returned."
              ]
            },
            {
              "name": "IdentityKilled",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A name was removed and the given balance slashed."
              ]
            },
            {
              "name": "JudgementRequested",
              "args": [
                "AccountId",
                "RegistrarIndex"
              ],
              "docs": [
                " A judgement was asked from a registrar."
              ]
            },
            {
              "name": "JudgementUnrequested",
              "args": [
                "AccountId",
                "RegistrarIndex"
              ],
              "docs": [
                " A judgement request was retracted."
              ]
            },
            {
              "name": "JudgementGiven",
              "args": [
                "AccountId",
                "RegistrarIndex"
              ],
              "docs": [
                " A judgement was given by a registrar."
              ]
            },
            {
              "name": "RegistrarAdded",
              "args": [
                "RegistrarIndex"
              ],
              "docs": [
                " A registrar was added."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "TooManySubAccounts",
              "docs": [
                " Too many subs-accounts."
              ]
            },
            {
              "name": "NotFound",
              "docs": [
                " Account isn't found."
              ]
            },
            {
              "name": "NotNamed",
              "docs": [
                " Account isn't named."
              ]
            },
            {
              "name": "EmptyIndex",
              "docs": [
                " Empty index."
              ]
            },
            {
              "name": "FeeChanged",
              "docs": [
                " Fee is changed."
              ]
            },
            {
              "name": "NoIdentity",
              "docs": [
                " No identity found."
              ]
            },
            {
              "name": "StickyJudgement",
              "docs": [
                " Sticky judgement."
              ]
            },
            {
              "name": "JudgementGiven",
              "docs": [
                " Judgement given."
              ]
            },
            {
              "name": "InvalidJudgement",
              "docs": [
                " Invalid judgement."
              ]
            },
            {
              "name": "InvalidIndex",
              "docs": [
                " The index is invalid."
              ]
            },
            {
              "name": "InvalidTarget",
              "docs": [
                " The target is invalid."
              ]
            }
          ]
        },
        {
          "name": "Society",
          "storage": {
            "prefix": "Society",
            "items": [
              {
                "name": "Founder",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "docs": [
                  " The first member."
                ]
              },
              {
                "name": "Rules",
                "modifier": "Optional",
                "type": {
                  "plain": "Hash"
                },
                "fallback": "0x00",
                "docs": [
                  " A hash of the rules of this society concerning membership. Can only be set once and",
                  " only by the founder."
                ]
              },
              {
                "name": "Candidates",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Bid>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current set of candidates; bidders that are attempting to become members."
                ]
              },
              {
                "name": "SuspendedCandidates",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "(BalanceOf,BidKind)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The set of suspended candidates."
                ]
              },
              {
                "name": "Pot",
                "modifier": "Default",
                "type": {
                  "plain": "BalanceOf"
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " Amount of our account balance that is specifically for the next round's bid(s)."
                ]
              },
              {
                "name": "Head",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "docs": [
                  " The most primary from the most recently approved members."
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current set of members, ordered."
                ]
              },
              {
                "name": "SuspendedMembers",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "bool",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The set of suspended members."
                ]
              },
              {
                "name": "Bids",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Bid>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current bids, stored ordered by the value of the bid."
                ]
              },
              {
                "name": "Vouching",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "VouchingStatus",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Members currently vouching or banned from vouching again"
                ]
              },
              {
                "name": "Payouts",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "Vec<(BlockNumber,BalanceOf)>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Pending payouts; ordered by block number, with the amount that should be paid out."
                ]
              },
              {
                "name": "Strikes",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "StrikeCount",
                    "linked": false
                  }
                },
                "fallback": "0x00000000",
                "docs": [
                  " The ongoing number of losing votes cast by the member."
                ]
              },
              {
                "name": "Votes",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "AccountId",
                    "key2": "AccountId",
                    "value": "SocietyVote",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Double map from Candidate -> Voter -> (Maybe) Vote."
                ]
              },
              {
                "name": "Defender",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "docs": [
                  " The defending member currently being challenged."
                ]
              },
              {
                "name": "DefenderVotes",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "SocietyVote",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Votes for the defender."
                ]
              },
              {
                "name": "MaxMembers",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The max number of members for the society at one time."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "bid",
              "args": [
                {
                  "name": "value",
                  "type": "BalanceOf"
                }
              ],
              "docs": [
                " A user outside of the society can make a bid for entry.",
                "",
                " Payment: `CandidateDeposit` will be reserved for making a bid. It is returned",
                " when the bid becomes a member, or if the bid calls `unbid`.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Parameters:",
                " - `value`: A one time payment the bid would like to receive when joining the society.",
                "",
                " # <weight>",
                " Key: B (len of bids), C (len of candidates), M (len of members), X (balance reserve)",
                " - Storage Reads:",
                " \t- One storage read to check for suspended candidate. O(1)",
                " \t- One storage read to check for suspended member. O(1)",
                " \t- One storage read to retrieve all current bids. O(B)",
                " \t- One storage read to retrieve all current candidates. O(C)",
                " \t- One storage read to retrieve all members. O(M)",
                " - Storage Writes:",
                " \t- One storage mutate to add a new bid to the vector O(B) (TODO: possible optimization w/ read)",
                " \t- Up to one storage removal if bid.len() > MAX_BID_COUNT. O(1)",
                " - Notable Computation:",
                " \t- O(B + C + log M) search to check user is not already a part of society.",
                " \t- O(log B) search to insert the new bid sorted.",
                " - External Module Operations:",
                " \t- One balance reserve operation. O(X)",
                " \t- Up to one balance unreserve operation if bids.len() > MAX_BID_COUNT.",
                " - Events:",
                " \t- One event for new bid.",
                " \t- Up to one event for AutoUnbid if bid.len() > MAX_BID_COUNT.",
                "",
                " Total Complexity: O(M + B + C + logM + logB + X)",
                " # </weight>"
              ]
            },
            {
              "name": "unbid",
              "args": [
                {
                  "name": "pos",
                  "type": "u32"
                }
              ],
              "docs": [
                " A bidder can remove their bid for entry into society.",
                " By doing so, they will have their candidate deposit returned or",
                " they will unvouch their voucher.",
                "",
                " Payment: The bid deposit is unreserved if the user made a bid.",
                "",
                " The dispatch origin for this call must be _Signed_ and a bidder.",
                "",
                " Parameters:",
                " - `pos`: Position in the `Bids` vector of the bid who wants to unbid.",
                "",
                " # <weight>",
                " Key: B (len of bids), X (balance unreserve)",
                " - One storage read and write to retrieve and update the bids. O(B)",
                " - Either one unreserve balance action O(X) or one vouching storage removal. O(1)",
                " - One event.",
                "",
                " Total Complexity: O(B + X)",
                " # </weight>"
              ]
            },
            {
              "name": "vouch",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                },
                {
                  "name": "value",
                  "type": "BalanceOf"
                },
                {
                  "name": "tip",
                  "type": "BalanceOf"
                }
              ],
              "docs": [
                " As a member, vouch for someone to join society by placing a bid on their behalf.",
                "",
                " There is no deposit required to vouch for a new bid, but a member can only vouch for",
                " one bid at a time. If the bid becomes a suspended candidate and ultimately rejected by",
                " the suspension judgement origin, the member will be banned from vouching again.",
                "",
                " As a vouching member, you can claim a tip if the candidate is accepted. This tip will",
                " be paid as a portion of the reward the member will receive for joining the society.",
                "",
                " The dispatch origin for this call must be _Signed_ and a member.",
                "",
                " Parameters:",
                " - `who`: The user who you would like to vouch for.",
                " - `value`: The total reward to be paid between you and the candidate if they become",
                " a member in the society.",
                " - `tip`: Your cut of the total `value` payout when the candidate is inducted into",
                " the society. Tips larger than `value` will be saturated upon payout.",
                "",
                " # <weight>",
                " Key: B (len of bids), C (len of candidates), M (len of members)",
                " - Storage Reads:",
                " \t- One storage read to retrieve all members. O(M)",
                " \t- One storage read to check member is not already vouching. O(1)",
                " \t- One storage read to check for suspended candidate. O(1)",
                " \t- One storage read to check for suspended member. O(1)",
                " \t- One storage read to retrieve all current bids. O(B)",
                " \t- One storage read to retrieve all current candidates. O(C)",
                " - Storage Writes:",
                " \t- One storage write to insert vouching status to the member. O(1)",
                " \t- One storage mutate to add a new bid to the vector O(B) (TODO: possible optimization w/ read)",
                " \t- Up to one storage removal if bid.len() > MAX_BID_COUNT. O(1)",
                " - Notable Computation:",
                " \t- O(log M) search to check sender is a member.",
                " \t- O(B + C + log M) search to check user is not already a part of society.",
                " \t- O(log B) search to insert the new bid sorted.",
                " - External Module Operations:",
                " \t- One balance reserve operation. O(X)",
                " \t- Up to one balance unreserve operation if bids.len() > MAX_BID_COUNT.",
                " - Events:",
                " \t- One event for vouch.",
                " \t- Up to one event for AutoUnbid if bid.len() > MAX_BID_COUNT.",
                "",
                " Total Complexity: O(M + B + C + logM + logB + X)",
                " # </weight>"
              ]
            },
            {
              "name": "unvouch",
              "args": [
                {
                  "name": "pos",
                  "type": "u32"
                }
              ],
              "docs": [
                " As a vouching member, unvouch a bid. This only works while vouched user is",
                " only a bidder (and not a candidate).",
                "",
                " The dispatch origin for this call must be _Signed_ and a vouching member.",
                "",
                " Parameters:",
                " - `pos`: Position in the `Bids` vector of the bid who should be unvouched.",
                "",
                " # <weight>",
                " Key: B (len of bids)",
                " - One storage read O(1) to check the signer is a vouching member.",
                " - One storage mutate to retrieve and update the bids. O(B)",
                " - One vouching storage removal. O(1)",
                " - One event.",
                "",
                " Total Complexity: O(B)",
                " # </weight>"
              ]
            },
            {
              "name": "vote",
              "args": [
                {
                  "name": "candidate",
                  "type": "LookupSource"
                },
                {
                  "name": "approve",
                  "type": "bool"
                }
              ],
              "docs": [
                " As a member, vote on a candidate.",
                "",
                " The dispatch origin for this call must be _Signed_ and a member.",
                "",
                " Parameters:",
                " - `candidate`: The candidate that the member would like to bid on.",
                " - `approve`: A boolean which says if the candidate should be",
                "              approved (`true`) or rejected (`false`).",
                "",
                " # <weight>",
                " Key: C (len of candidates), M (len of members)",
                " - One storage read O(M) and O(log M) search to check user is a member.",
                " - One account lookup.",
                " - One storage read O(C) and O(C) search to check that user is a candidate.",
                " - One storage write to add vote to votes. O(1)",
                " - One event.",
                "",
                " Total Complexity: O(M + logM + C)",
                " # </weight>"
              ]
            },
            {
              "name": "defender_vote",
              "args": [
                {
                  "name": "approve",
                  "type": "bool"
                }
              ],
              "docs": [
                " As a member, vote on the defender.",
                "",
                " The dispatch origin for this call must be _Signed_ and a member.",
                "",
                " Parameters:",
                " - `approve`: A boolean which says if the candidate should be",
                " approved (`true`) or rejected (`false`).",
                "",
                " # <weight>",
                " - Key: M (len of members)",
                " - One storage read O(M) and O(log M) search to check user is a member.",
                " - One storage write to add vote to votes. O(1)",
                " - One event.",
                "",
                " Total Complexity: O(M + logM)",
                " # </weight>"
              ]
            },
            {
              "name": "payout",
              "args": [],
              "docs": [
                " Transfer the first matured payout for the sender and remove it from the records.",
                "",
                " NOTE: This extrinsic needs to be called multiple times to claim multiple matured payouts.",
                "",
                " Payment: The member will receive a payment equal to their first matured",
                " payout to their free balance.",
                "",
                " The dispatch origin for this call must be _Signed_ and a member with",
                " payouts remaining.",
                "",
                " # <weight>",
                " Key: M (len of members), P (number of payouts for a particular member)",
                " - One storage read O(M) and O(log M) search to check signer is a member.",
                " - One storage read O(P) to get all payouts for a member.",
                " - One storage read O(1) to get the current block number.",
                " - One currency transfer call. O(X)",
                " - One storage write or removal to update the member's payouts. O(P)",
                "",
                " Total Complexity: O(M + logM + P + X)",
                " # </weight>"
              ]
            },
            {
              "name": "found",
              "args": [
                {
                  "name": "founder",
                  "type": "AccountId"
                },
                {
                  "name": "max_members",
                  "type": "u32"
                },
                {
                  "name": "rules",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Found the society.",
                "",
                " This is done as a discrete action in order to allow for the",
                " module to be included into a running chain and can only be done once.",
                "",
                " The dispatch origin for this call must be from the _FounderSetOrigin_.",
                "",
                " Parameters:",
                " - `founder` - The first member and head of the newly founded society.",
                " - `max_members` - The initial max number of members for the society.",
                " - `rules` - The rules of this society concerning membership.",
                "",
                " # <weight>",
                " - Two storage mutates to set `Head` and `Founder`. O(1)",
                " - One storage write to add the first member to society. O(1)",
                " - One event.",
                "",
                " Total Complexity: O(1)",
                " # </weight>"
              ]
            },
            {
              "name": "unfound",
              "args": [],
              "docs": [
                " Anull the founding of the society.",
                "",
                " The dispatch origin for this call must be Signed, and the signing account must be both",
                " the `Founder` and the `Head`. This implies that it may only be done when there is one",
                " member.",
                "",
                " # <weight>",
                " - Two storage reads O(1).",
                " - Four storage removals O(1).",
                " - One event.",
                "",
                " Total Complexity: O(1)",
                " # </weight>"
              ]
            },
            {
              "name": "judge_suspended_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                },
                {
                  "name": "forgive",
                  "type": "bool"
                }
              ],
              "docs": [
                " Allow suspension judgement origin to make judgement on a suspended member.",
                "",
                " If a suspended member is forgiven, we simply add them back as a member, not affecting",
                " any of the existing storage items for that member.",
                "",
                " If a suspended member is rejected, remove all associated storage items, including",
                " their payouts, and remove any vouched bids they currently have.",
                "",
                " The dispatch origin for this call must be from the _SuspensionJudgementOrigin_.",
                "",
                " Parameters:",
                " - `who` - The suspended member to be judged.",
                " - `forgive` - A boolean representing whether the suspension judgement origin",
                "               forgives (`true`) or rejects (`false`) a suspended member.",
                "",
                " # <weight>",
                " Key: B (len of bids), M (len of members)",
                " - One storage read to check `who` is a suspended member. O(1)",
                " - Up to one storage write O(M) with O(log M) binary search to add a member back to society.",
                " - Up to 3 storage removals O(1) to clean up a removed member.",
                " - Up to one storage write O(B) with O(B) search to remove vouched bid from bids.",
                " - Up to one additional event if unvouch takes place.",
                " - One storage removal. O(1)",
                " - One event for the judgement.",
                "",
                " Total Complexity: O(M + logM + B)",
                " # </weight>"
              ]
            },
            {
              "name": "judge_suspended_candidate",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                },
                {
                  "name": "judgement",
                  "type": "SocietyJudgement"
                }
              ],
              "docs": [
                " Allow suspended judgement origin to make judgement on a suspended candidate.",
                "",
                " If the judgement is `Approve`, we add them to society as a member with the appropriate",
                " payment for joining society.",
                "",
                " If the judgement is `Reject`, we either slash the deposit of the bid, giving it back",
                " to the society treasury, or we ban the voucher from vouching again.",
                "",
                " If the judgement is `Rebid`, we put the candidate back in the bid pool and let them go",
                " through the induction process again.",
                "",
                " The dispatch origin for this call must be from the _SuspensionJudgementOrigin_.",
                "",
                " Parameters:",
                " - `who` - The suspended candidate to be judged.",
                " - `judgement` - `Approve`, `Reject`, or `Rebid`.",
                "",
                " # <weight>",
                " Key: B (len of bids), M (len of members), X (balance action)",
                " - One storage read to check `who` is a suspended candidate.",
                " - One storage removal of the suspended candidate.",
                " - Approve Logic",
                " \t- One storage read to get the available pot to pay users with. O(1)",
                " \t- One storage write to update the available pot. O(1)",
                " \t- One storage read to get the current block number. O(1)",
                " \t- One storage read to get all members. O(M)",
                " \t- Up to one unreserve currency action.",
                " \t- Up to two new storage writes to payouts.",
                " \t- Up to one storage write with O(log M) binary search to add a member to society.",
                " - Reject Logic",
                " \t- Up to one repatriate reserved currency action. O(X)",
                " \t- Up to one storage write to ban the vouching member from vouching again.",
                " - Rebid Logic",
                " \t- Storage mutate with O(log B) binary search to place the user back into bids.",
                " - Up to one additional event if unvouch takes place.",
                " - One storage removal.",
                " - One event for the judgement.",
                "",
                " Total Complexity: O(M + logM + B + X)",
                " # </weight>"
              ]
            },
            {
              "name": "set_max_members",
              "args": [
                {
                  "name": "max",
                  "type": "u32"
                }
              ],
              "docs": [
                " Allows root origin to change the maximum number of members in society.",
                " Max membership count must be greater than 1.",
                "",
                " The dispatch origin for this call must be from _ROOT_.",
                "",
                " Parameters:",
                " - `max` - The maximum number of members for the society.",
                "",
                " # <weight>",
                " - One storage write to update the max. O(1)",
                " - One event.",
                "",
                " Total Complexity: O(1)",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Founded",
              "args": [
                "AccountId"
              ],
              "docs": [
                " The society is founded by the given identity."
              ]
            },
            {
              "name": "Bid",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A membership bid just happened. The given account is the candidate's ID and their offer",
                " is the second."
              ]
            },
            {
              "name": "Vouch",
              "args": [
                "AccountId",
                "Balance",
                "AccountId"
              ],
              "docs": [
                " A membership bid just happened by vouching. The given account is the candidate's ID and",
                " their offer is the second. The vouching party is the third."
              ]
            },
            {
              "name": "AutoUnbid",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A candidate was dropped (due to an excess of bids in the system)."
              ]
            },
            {
              "name": "Unbid",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A candidate was dropped (by their request)."
              ]
            },
            {
              "name": "Unvouch",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A candidate was dropped (by request of who vouched for them)."
              ]
            },
            {
              "name": "Inducted",
              "args": [
                "AccountId",
                "Vec<AccountId>"
              ],
              "docs": [
                " A group of candidates have been inducted. The batch's primary is the first value, the",
                " batch in full is the second."
              ]
            },
            {
              "name": "SuspendedMemberJudgement",
              "args": [
                "AccountId",
                "bool"
              ],
              "docs": [
                " A suspended member has been judged"
              ]
            },
            {
              "name": "CandidateSuspended",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A candidate has been suspended"
              ]
            },
            {
              "name": "MemberSuspended",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A member has been suspended"
              ]
            },
            {
              "name": "Challenged",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A member has been challenged"
              ]
            },
            {
              "name": "Vote",
              "args": [
                "AccountId",
                "AccountId",
                "bool"
              ],
              "docs": [
                " A vote has been placed (candidate, voter, vote)"
              ]
            },
            {
              "name": "DefenderVote",
              "args": [
                "AccountId",
                "bool"
              ],
              "docs": [
                " A vote has been placed for a defending member (voter, vote)"
              ]
            },
            {
              "name": "NewMaxMembers",
              "args": [
                "u32"
              ],
              "docs": [
                " A new max member count has been set"
              ]
            },
            {
              "name": "Unfounded",
              "args": [
                "AccountId"
              ],
              "docs": [
                " Society is unfounded."
              ]
            }
          ],
          "constants": [
            {
              "name": "CandidateDeposit",
              "type": "BalanceOf",
              "value": "0x0080c6a47e8d03000000000000000000",
              "docs": [
                " The minimum amount of a deposit required for a bid to be made."
              ]
            },
            {
              "name": "WrongSideDeduction",
              "type": "BalanceOf",
              "value": "0x0080f420e6b500000000000000000000",
              "docs": [
                " The amount of the unpaid reward that gets deducted in the case that either a skeptic",
                " doesn't vote or someone votes in the wrong way."
              ]
            },
            {
              "name": "MaxStrikes",
              "type": "u32",
              "value": "0x0a000000",
              "docs": [
                " The number of times a member may vote the wrong way (or not at all, when they are a skeptic)",
                " before they become suspended."
              ]
            },
            {
              "name": "PeriodSpend",
              "type": "BalanceOf",
              "value": "0x0000c52ebca2b1000000000000000000",
              "docs": [
                " The amount of incentive paid within each period. Doesn't include VoterTip."
              ]
            },
            {
              "name": "RotationPeriod",
              "type": "BlockNumber",
              "value": "0x00770100",
              "docs": [
                " The number of blocks between candidate/membership rotation periods."
              ]
            },
            {
              "name": "ChallengePeriod",
              "type": "BlockNumber",
              "value": "0x80130300",
              "docs": [
                " The number of blocks between membership challenges."
              ]
            }
          ],
          "errors": [
            {
              "name": "BadPosition",
              "docs": [
                " An incorrect position was provided."
              ]
            },
            {
              "name": "NotMember",
              "docs": [
                " User is not a member."
              ]
            },
            {
              "name": "AlreadyMember",
              "docs": [
                " User is already a member."
              ]
            },
            {
              "name": "Suspended",
              "docs": [
                " User is suspended."
              ]
            },
            {
              "name": "NotSuspended",
              "docs": [
                " User is not suspended."
              ]
            },
            {
              "name": "NoPayout",
              "docs": [
                " Nothing to payout."
              ]
            },
            {
              "name": "AlreadyFounded",
              "docs": [
                " Society already founded."
              ]
            },
            {
              "name": "InsufficientPot",
              "docs": [
                " Not enough in pot to accept candidate."
              ]
            },
            {
              "name": "AlreadyVouching",
              "docs": [
                " Member is already vouching or banned from vouching again."
              ]
            },
            {
              "name": "NotVouching",
              "docs": [
                " Member is not vouching."
              ]
            },
            {
              "name": "Head",
              "docs": [
                " Cannot remove the head of the chain."
              ]
            },
            {
              "name": "Founder",
              "docs": [
                " Cannot remove the founder."
              ]
            },
            {
              "name": "AlreadyBid",
              "docs": [
                " User has already made a bid."
              ]
            },
            {
              "name": "AlreadyCandidate",
              "docs": [
                " User is already a candidate."
              ]
            },
            {
              "name": "NotCandidate",
              "docs": [
                " User is not a candidate."
              ]
            },
            {
              "name": "MaxMembers",
              "docs": [
                " Too many members in the society."
              ]
            },
            {
              "name": "NotFounder",
              "docs": [
                " The caller is not the founder."
              ]
            },
            {
              "name": "NotHead",
              "docs": [
                " The caller is not the head."
              ]
            }
          ]
        },
        {
          "name": "Recovery",
          "storage": {
            "prefix": "Recovery",
            "items": [
              {
                "name": "Recoverable",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "RecoveryConfig",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The set of recoverable accounts and their recovery configuration."
                ]
              },
              {
                "name": "ActiveRecoveries",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "AccountId",
                    "key2": "AccountId",
                    "value": "ActiveRecovery",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Active recovery attempts.",
                  "",
                  " First account is the account to be recovered, and the second account",
                  " is the user trying to recover the account."
                ]
              },
              {
                "name": "Recovered",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_256",
                    "key": "AccountId",
                    "value": "AccountId",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The final list of recovered accounts.",
                  "",
                  " Map from the recovered account to the user who can access it."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "as_recovered",
              "args": [
                {
                  "name": "account",
                  "type": "AccountId"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "docs": [
                " Send a call through a recovered account.",
                "",
                " The dispatch origin for this call must be _Signed_ and registered to",
                " be able to make calls on behalf of the recovered account.",
                "",
                " Parameters:",
                " - `account`: The recovered account you want to make a call on-behalf-of.",
                " - `call`: The call you want to make with the recovered account.",
                "",
                " # <weight>",
                " - The weight of the `call`.",
                " - One storage lookup to check account is recovered by `who`. O(1)",
                " # </weight>"
              ]
            },
            {
              "name": "set_recovered",
              "args": [
                {
                  "name": "lost",
                  "type": "AccountId"
                },
                {
                  "name": "rescuer",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Allow ROOT to bypass the recovery process and set an a rescuer account",
                " for a lost account directly.",
                "",
                " The dispatch origin for this call must be _ROOT_.",
                "",
                " Parameters:",
                " - `lost`: The \"lost account\" to be recovered.",
                " - `rescuer`: The \"rescuer account\" which can call as the lost account.",
                "",
                " # <weight>",
                " - One storage write O(1)",
                " - One event",
                " # </weight>"
              ]
            },
            {
              "name": "create_recovery",
              "args": [
                {
                  "name": "friends",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "threshold",
                  "type": "u16"
                },
                {
                  "name": "delay_period",
                  "type": "BlockNumber"
                }
              ],
              "docs": [
                " Create a recovery configuration for your account. This makes your account recoverable.",
                "",
                " Payment: `ConfigDepositBase` + `FriendDepositFactor` * #_of_friends balance",
                " will be reserved for storing the recovery configuration. This deposit is returned",
                " in full when the user calls `remove_recovery`.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Parameters:",
                " - `friends`: A list of friends you trust to vouch for recovery attempts.",
                "   Should be ordered and contain no duplicate values.",
                " - `threshold`: The number of friends that must vouch for a recovery attempt",
                "   before the account can be recovered. Should be less than or equal to",
                "   the length of the list of friends.",
                " - `delay_period`: The number of blocks after a recovery attempt is initialized",
                "   that needs to pass before the account can be recovered.",
                "",
                " # <weight>",
                " - Key: F (len of friends)",
                " - One storage read to check that account is not already recoverable. O(1).",
                " - A check that the friends list is sorted and unique. O(F)",
                " - One currency reserve operation. O(X)",
                " - One storage write. O(1). Codec O(F).",
                " - One event.",
                "",
                " Total Complexity: O(F + X)",
                " # </weight>"
              ]
            },
            {
              "name": "initiate_recovery",
              "args": [
                {
                  "name": "account",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Initiate the process for recovering a recoverable account.",
                "",
                " Payment: `RecoveryDeposit` balance will be reserved for initiating the",
                " recovery process. This deposit will always be repatriated to the account",
                " trying to be recovered. See `close_recovery`.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Parameters:",
                " - `account`: The lost account that you want to recover. This account",
                "   needs to be recoverable (i.e. have a recovery configuration).",
                "",
                " # <weight>",
                " - One storage read to check that account is recoverable. O(F)",
                " - One storage read to check that this recovery process hasn't already started. O(1)",
                " - One currency reserve operation. O(X)",
                " - One storage read to get the current block number. O(1)",
                " - One storage write. O(1).",
                " - One event.",
                "",
                " Total Complexity: O(F + X)",
                " # </weight>"
              ]
            },
            {
              "name": "vouch_recovery",
              "args": [
                {
                  "name": "lost",
                  "type": "AccountId"
                },
                {
                  "name": "rescuer",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Allow a \"friend\" of a recoverable account to vouch for an active recovery",
                " process for that account.",
                "",
                " The dispatch origin for this call must be _Signed_ and must be a \"friend\"",
                " for the recoverable account.",
                "",
                " Parameters:",
                " - `lost`: The lost account that you want to recover.",
                " - `rescuer`: The account trying to rescue the lost account that you",
                "   want to vouch for.",
                "",
                " The combination of these two parameters must point to an active recovery",
                " process.",
                "",
                " # <weight>",
                " Key: F (len of friends in config), V (len of vouching friends)",
                " - One storage read to get the recovery configuration. O(1), Codec O(F)",
                " - One storage read to get the active recovery process. O(1), Codec O(V)",
                " - One binary search to confirm caller is a friend. O(logF)",
                " - One binary search to confirm caller has not already vouched. O(logV)",
                " - One storage write. O(1), Codec O(V).",
                " - One event.",
                "",
                " Total Complexity: O(F + logF + V + logV)",
                " # </weight>"
              ]
            },
            {
              "name": "claim_recovery",
              "args": [
                {
                  "name": "account",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Allow a successful rescuer to claim their recovered account.",
                "",
                " The dispatch origin for this call must be _Signed_ and must be a \"rescuer\"",
                " who has successfully completed the account recovery process: collected",
                " `threshold` or more vouches, waited `delay_period` blocks since initiation.",
                "",
                " Parameters:",
                " - `account`: The lost account that you want to claim has been successfully",
                "   recovered by you.",
                "",
                " # <weight>",
                " Key: F (len of friends in config), V (len of vouching friends)",
                " - One storage read to get the recovery configuration. O(1), Codec O(F)",
                " - One storage read to get the active recovery process. O(1), Codec O(V)",
                " - One storage read to get the current block number. O(1)",
                " - One storage write. O(1), Codec O(V).",
                " - One event.",
                "",
                " Total Complexity: O(F + V)",
                " # </weight>"
              ]
            },
            {
              "name": "close_recovery",
              "args": [
                {
                  "name": "rescuer",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " As the controller of a recoverable account, close an active recovery",
                " process for your account.",
                "",
                " Payment: By calling this function, the recoverable account will receive",
                " the recovery deposit `RecoveryDeposit` placed by the rescuer.",
                "",
                " The dispatch origin for this call must be _Signed_ and must be a",
                " recoverable account with an active recovery process for it.",
                "",
                " Parameters:",
                " - `rescuer`: The account trying to rescue this recoverable account.",
                "",
                " # <weight>",
                " Key: V (len of vouching friends)",
                " - One storage read/remove to get the active recovery process. O(1), Codec O(V)",
                " - One balance call to repatriate reserved. O(X)",
                " - One event.",
                "",
                " Total Complexity: O(V + X)",
                " # </weight>"
              ]
            },
            {
              "name": "remove_recovery",
              "args": [],
              "docs": [
                " Remove the recovery process for your account.",
                "",
                " NOTE: The user must make sure to call `close_recovery` on all active",
                " recovery attempts before calling this function else it will fail.",
                "",
                " Payment: By calling this function the recoverable account will unreserve",
                " their recovery configuration deposit.",
                " (`ConfigDepositBase` + `FriendDepositFactor` * #_of_friends)",
                "",
                " The dispatch origin for this call must be _Signed_ and must be a",
                " recoverable account (i.e. has a recovery configuration).",
                "",
                " # <weight>",
                " Key: F (len of friends)",
                " - One storage read to get the prefix iterator for active recoveries. O(1)",
                " - One storage read/remove to get the recovery configuration. O(1), Codec O(F)",
                " - One balance call to unreserved. O(X)",
                " - One event.",
                "",
                " Total Complexity: O(F + X)",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "RecoveryCreated",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A recovery process has been set up for an account"
              ]
            },
            {
              "name": "RecoveryInitiated",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "docs": [
                " A recovery process has been initiated for account_1 by account_2"
              ]
            },
            {
              "name": "RecoveryVouched",
              "args": [
                "AccountId",
                "AccountId",
                "AccountId"
              ],
              "docs": [
                " A recovery process for account_1 by account_2 has been vouched for by account_3"
              ]
            },
            {
              "name": "RecoveryClosed",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "docs": [
                " A recovery process for account_1 by account_2 has been closed"
              ]
            },
            {
              "name": "AccountRecovered",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "docs": [
                " Account_1 has been successfully recovered by account_2"
              ]
            },
            {
              "name": "RecoveryRemoved",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A recovery process has been removed for an account"
              ]
            }
          ],
          "constants": [],
          "errors": []
        }
      ]
    }
  }
}