{
  "magicNumber": 1635018093,
  "metadata": {
    "v12": {
      "modules": [
        {
          "name": "System",
          "storage": {
            "prefix": "System",
            "items": [
              {
                "name": "Account",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "AccountInfo",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " The full account information for a particular account ID."
                ]
              },
              {
                "name": "ExtrinsicCount",
                "modifier": "Optional",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00",
                "documentation": [
                  " Total extrinsics count for the current block."
                ]
              },
              {
                "name": "BlockWeight",
                "modifier": "Default",
                "type": {
                  "plain": "ConsumedWeight"
                },
                "fallback": "0x000000000000000000000000000000000000000000000000",
                "documentation": [
                  " The current weight for the block."
                ]
              },
              {
                "name": "AllExtrinsicsLen",
                "modifier": "Optional",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00",
                "documentation": [
                  " Total length (in bytes) for all extrinsics put together, for the current block."
                ]
              },
              {
                "name": "BlockHash",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "BlockNumber",
                    "value": "Hash",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " Map of block numbers to block hashes."
                ]
              },
              {
                "name": "ExtrinsicData",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "u32",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Extrinsics data for the current block (maps an extrinsic's index to its data)."
                ]
              },
              {
                "name": "Number",
                "modifier": "Default",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " The current block number being processed. Set by `execute_block`."
                ]
              },
              {
                "name": "ParentHash",
                "modifier": "Default",
                "type": {
                  "plain": "Hash"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " Hash of the previous block."
                ]
              },
              {
                "name": "Digest",
                "modifier": "Default",
                "type": {
                  "plain": "DigestOf"
                },
                "fallback": "0x00",
                "documentation": [
                  " Digest of the current block, also part of the block header."
                ]
              },
              {
                "name": "Events",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<EventRecord>"
                },
                "fallback": "0x00",
                "documentation": [
                  " Events deposited for the current block."
                ]
              },
              {
                "name": "EventCount",
                "modifier": "Default",
                "type": {
                  "plain": "EventIndex"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " The number of events in the `Events<T>` list."
                ]
              },
              {
                "name": "EventTopics",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "Hash",
                    "value": "Vec<(BlockNumber,EventIndex)>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " 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."
                ]
              },
              {
                "name": "LastRuntimeUpgrade",
                "modifier": "Optional",
                "type": {
                  "plain": "LastRuntimeUpgradeInfo"
                },
                "fallback": "0x00",
                "documentation": [
                  " Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened."
                ]
              },
              {
                "name": "UpgradedToU32RefCount",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "documentation": [
                  " True if we have upgraded so that `type RefCount` is `u32`. False (default) if not."
                ]
              },
              {
                "name": "UpgradedToTripleRefCount",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "documentation": [
                  " True if we have upgraded so that AccountInfo contains three types of `RefCount`. False",
                  " (default) if not."
                ]
              },
              {
                "name": "ExecutionPhase",
                "modifier": "Optional",
                "type": {
                  "plain": "Phase"
                },
                "fallback": "0x00",
                "documentation": [
                  " The execution phase of the block."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "fill_block",
              "args": [
                {
                  "name": "_ratio",
                  "type": "Perbill"
                }
              ],
              "documentation": [
                " A dispatch that will fill the block weight up to the given ratio."
              ]
            },
            {
              "name": "remark",
              "args": [
                {
                  "name": "_remark",
                  "type": "Bytes"
                }
              ],
              "documentation": [
                " Make some on-chain remark.",
                "",
                " # <weight>",
                " - `O(1)`",
                " # </weight>"
              ]
            },
            {
              "name": "set_heap_pages",
              "args": [
                {
                  "name": "pages",
                  "type": "u64"
                }
              ],
              "documentation": [
                " Set the number of pages in the WebAssembly environment's heap.",
                "",
                " # <weight>",
                " - `O(1)`",
                " - 1 storage write.",
                " - Base Weight: 1.405 µs",
                " - 1 write to HEAP_PAGES",
                " # </weight>"
              ]
            },
            {
              "name": "set_code",
              "args": [
                {
                  "name": "code",
                  "type": "Bytes"
                }
              ],
              "documentation": [
                " Set the new runtime code.",
                "",
                " # <weight>",
                " - `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code`",
                " - 1 storage write (codec `O(C)`).",
                " - 1 call to `can_set_code`: `O(S)` (calls `sp_io::misc::runtime_version` which is expensive).",
                " - 1 event.",
                " The weight of this function is dependent on the runtime, but generally this is very expensive.",
                " We will treat this as a full block.",
                " # </weight>"
              ]
            },
            {
              "name": "set_code_without_checks",
              "args": [
                {
                  "name": "code",
                  "type": "Bytes"
                }
              ],
              "documentation": [
                " Set the new runtime code without doing any checks of the given `code`.",
                "",
                " # <weight>",
                " - `O(C)` where `C` length of `code`",
                " - 1 storage write (codec `O(C)`).",
                " - 1 event.",
                " The weight of this function is dependent on the runtime. We will treat this as a full block.",
                " # </weight>"
              ]
            },
            {
              "name": "set_changes_trie_config",
              "args": [
                {
                  "name": "changes_trie_config",
                  "type": "Option<ChangesTrieConfiguration>"
                }
              ],
              "documentation": [
                " Set the new changes trie configuration.",
                "",
                " # <weight>",
                " - `O(1)`",
                " - 1 storage write or delete (codec `O(1)`).",
                " - 1 call to `deposit_log`: Uses `append` API, so O(1)",
                " - Base Weight: 7.218 µs",
                " - DB Weight:",
                "     - Writes: Changes Trie, System Digest",
                " # </weight>"
              ]
            },
            {
              "name": "set_storage",
              "args": [
                {
                  "name": "items",
                  "type": "Vec<KeyValue>"
                }
              ],
              "documentation": [
                " Set some items of storage.",
                "",
                " # <weight>",
                " - `O(I)` where `I` length of `items`",
                " - `I` storage writes (`O(1)`).",
                " - Base Weight: 0.568 * i µs",
                " - Writes: Number of items",
                " # </weight>"
              ]
            },
            {
              "name": "kill_storage",
              "args": [
                {
                  "name": "keys",
                  "type": "Vec<Key>"
                }
              ],
              "documentation": [
                " Kill some items from storage.",
                "",
                " # <weight>",
                " - `O(IK)` where `I` length of `keys` and `K` length of one key",
                " - `I` storage deletions.",
                " - Base Weight: .378 * i µs",
                " - Writes: Number of items",
                " # </weight>"
              ]
            },
            {
              "name": "kill_prefix",
              "args": [
                {
                  "name": "prefix",
                  "type": "Key"
                },
                {
                  "name": "_subkeys",
                  "type": "u32"
                }
              ],
              "documentation": [
                " Kill all storage items with a key that starts with the given prefix.",
                "",
                " **NOTE:** We rely on the Root origin to provide us the number of subkeys under",
                " the prefix we are removing to accurately calculate the weight of this function.",
                "",
                " # <weight>",
                " - `O(P)` where `P` amount of keys with prefix `prefix`",
                " - `P` storage deletions.",
                " - Base Weight: 0.834 * P µs",
                " - Writes: Number of subkeys + 1",
                " # </weight>"
              ]
            },
            {
              "name": "remark_with_event",
              "args": [
                {
                  "name": "remark",
                  "type": "Bytes"
                }
              ],
              "documentation": [
                " Make some on-chain remark and emit event.",
                "",
                " # <weight>",
                " - `O(b)` where b is the length of the remark.",
                " - 1 event.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "ExtrinsicSuccess",
              "args": [
                "DispatchInfo"
              ],
              "documentation": [
                " An extrinsic completed successfully. \\[info\\]"
              ]
            },
            {
              "name": "ExtrinsicFailed",
              "args": [
                "DispatchError",
                "DispatchInfo"
              ],
              "documentation": [
                " An extrinsic failed. \\[error, info\\]"
              ]
            },
            {
              "name": "CodeUpdated",
              "args": [],
              "documentation": [
                " `:code` was updated."
              ]
            },
            {
              "name": "NewAccount",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " A new \\[account\\] was created."
              ]
            },
            {
              "name": "KilledAccount",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " An \\[account\\] was reaped."
              ]
            },
            {
              "name": "Remarked",
              "args": [
                "AccountId",
                "Hash"
              ],
              "documentation": [
                " On on-chain remark happened. \\[origin, remark_hash\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "BlockWeights",
              "type": "BlockWeights",
              "value": "0x00f2052a0100000000204aa9d1010000405973070000000001c0ca489351010000010098f73e5d010000010000000000000000405973070000000001c0529bfdc50100000100204aa9d1010000010088526a740000004059730700000000000000",
              "documentation": [
                " Block & extrinsics weights: base values and limits."
              ]
            },
            {
              "name": "BlockLength",
              "type": "BlockLength",
              "value": "0x00003c000000500000005000",
              "documentation": [
                " The maximum length of a block (in bytes)."
              ]
            },
            {
              "name": "BlockHashCount",
              "type": "BlockNumber",
              "value": "0x84030000",
              "documentation": [
                " Maximum number of block number to block hash mappings to keep (oldest pruned first)."
              ]
            },
            {
              "name": "DbWeight",
              "type": "RuntimeDbWeight",
              "value": "0x40787d010000000000e1f50500000000",
              "documentation": [
                " The weight of runtime database operations the runtime can invoke."
              ]
            },
            {
              "name": "Version",
              "type": "RuntimeVersion",
              "value": "0x1c6d616e64616c611c6d616e64616c6101000000d20200000000000034df6acb689907609b0300000037e397fc7c91f5e40100000040fe3ad401f8959a04000000d2bc9897eed08f1502000000f78b278be53f454c02000000cbca25e39f14238702000000ab3c0572291feb8b01000000ed99c5acb25eedf502000000bc9d89904f5b923f0100000037c8bb1350a9a2a8010000006ef953004ba30e5901000000f485c9145d3f0aad01000000e3df3f2aa8a5cc570100000001000000",
              "documentation": [
                " Get the chain's current version."
              ]
            },
            {
              "name": "SS58Prefix",
              "type": "u8",
              "value": "0x2a",
              "documentation": [
                " The designated SS85 prefix of this chain.",
                "",
                " This replaces the \"ss58Format\" property declared in the chain spec. Reason is",
                " that the runtime should know about the prefix in order to make use of it as",
                " an identifier of the chain."
              ]
            }
          ],
          "errors": [
            {
              "name": "InvalidSpecName",
              "documentation": [
                " The name of specification does not match between the current runtime",
                " and the new runtime."
              ]
            },
            {
              "name": "SpecVersionNeedsToIncrease",
              "documentation": [
                " The specification version is not allowed to decrease between the current runtime",
                " and the new runtime."
              ]
            },
            {
              "name": "FailedToExtractRuntimeVersion",
              "documentation": [
                " Failed to extract the runtime version from the new runtime.",
                "",
                " Either calling `Core_version` or decoding `RuntimeVersion` failed."
              ]
            },
            {
              "name": "NonDefaultComposite",
              "documentation": [
                " Suicide called when the account has non-default composite data."
              ]
            },
            {
              "name": "NonZeroRefCount",
              "documentation": [
                " There is a non-zero reference count preventing the account from being purged."
              ]
            }
          ],
          "index": 0
        },
        {
          "name": "Timestamp",
          "storage": {
            "prefix": "Timestamp",
            "items": [
              {
                "name": "Now",
                "modifier": "Default",
                "type": {
                  "plain": "Moment"
                },
                "fallback": "0x0000000000000000",
                "documentation": [
                  " Current time for the current block."
                ]
              },
              {
                "name": "DidUpdate",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "documentation": [
                  " Did the timestamp get updated in this block?"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set",
              "args": [
                {
                  "name": "now",
                  "type": "Compact<Moment>"
                }
              ],
              "documentation": [
                " 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`.",
                "",
                " # <weight>",
                " - `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`)",
                " - 1 storage read and 1 storage mutation (codec `O(1)`). (because of `DidUpdate::take` in `on_finalize`)",
                " - 1 event handler `on_timestamp_set`. Must be `O(1)`.",
                " # </weight>"
              ]
            }
          ],
          "events": null,
          "constants": [
            {
              "name": "MinimumPeriod",
              "type": "Moment",
              "value": "0xb80b000000000000",
              "documentation": [
                " 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": [],
          "index": 1
        },
        {
          "name": "RandomnessCollectiveFlip",
          "storage": {
            "prefix": "RandomnessCollectiveFlip",
            "items": [
              {
                "name": "RandomMaterial",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "documentation": [
                  " 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": [],
          "index": 2
        },
        {
          "name": "Balances",
          "storage": {
            "prefix": "Balances",
            "items": [
              {
                "name": "TotalIssuance",
                "modifier": "Default",
                "type": {
                  "plain": "Balance"
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " The total units issued in the system."
                ]
              },
              {
                "name": "Account",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "AccountData",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " The balance of an account.",
                  "",
                  " NOTE: This is only used in the case that this pallet is used to store balances."
                ]
              },
              {
                "name": "Locks",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "Vec<BalanceLock>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Any liquidity locks on some account balances.",
                  " NOTE: Should only be accessed when setting, changing and freeing a lock."
                ]
              },
              {
                "name": "StorageVersion",
                "modifier": "Default",
                "type": {
                  "plain": "Releases"
                },
                "fallback": "0x00",
                "documentation": [
                  " Storage version of the pallet.",
                  "",
                  " This is set to v2.0.0 for new networks."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "transfer",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "value",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": [
                " 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`.",
                "   - `transfer_keep_alive` works the same way as `transfer`, but has an additional",
                "     check that the transfer will not kill the origin account.",
                " ---------------------------------",
                " - Base Weight: 73.64 µs, worst case scenario (account created, account removed)",
                " - DB Weight: 1 Read and 1 Write to destination account",
                " - Origin account is already in memory, so no DB operations for them.",
                " # </weight>"
              ]
            },
            {
              "name": "set_balance",
              "args": [
                {
                  "name": "who",
                  "type": "LookupSource"
                },
                {
                  "name": "new_free",
                  "type": "Compact<Balance>"
                },
                {
                  "name": "new_reserved",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": [
                " 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.",
                " ---------------------",
                " - Base Weight:",
                "     - Creating: 27.56 µs",
                "     - Killing: 35.11 µs",
                " - DB Weight: 1 Read, 1 Write to `who`",
                " # </weight>"
              ]
            },
            {
              "name": "force_transfer",
              "args": [
                {
                  "name": "source",
                  "type": "LookupSource"
                },
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "value",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": [
                " Exactly as `transfer`, except the origin must be root and the source account may be",
                " specified.",
                " # <weight>",
                " - Same as transfer, but additional read and write because the source account is",
                "   not assumed to be in the overlay.",
                " # </weight>"
              ]
            },
            {
              "name": "transfer_keep_alive",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "value",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": [
                " 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.Pallet.html#method.transfer",
                " # <weight>",
                " - Cheaper than transfer because account cannot be killed.",
                " - Base Weight: 51.4 µs",
                " - DB Weight: 1 Read and 1 Write to dest (sender is in overlay already)",
                " #</weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Endowed",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " An account was created with some free balance. \\[account, free_balance\\]"
              ]
            },
            {
              "name": "DustLost",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " An account was removed whose balance was non-zero but below ExistentialDeposit,",
                " resulting in an outright loss. \\[account, balance\\]"
              ]
            },
            {
              "name": "Transfer",
              "args": [
                "AccountId",
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " Transfer succeeded. \\[from, to, value\\]"
              ]
            },
            {
              "name": "BalanceSet",
              "args": [
                "AccountId",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " A balance was set by root. \\[who, free, reserved\\]"
              ]
            },
            {
              "name": "Deposit",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " Some amount was deposited (e.g. for transaction fees). \\[who, deposit\\]"
              ]
            },
            {
              "name": "Reserved",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " Some balance was reserved (moved from free to reserved). \\[who, value\\]"
              ]
            },
            {
              "name": "Unreserved",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " Some balance was unreserved (moved from reserved to free). \\[who, value\\]"
              ]
            },
            {
              "name": "ReserveRepatriated",
              "args": [
                "AccountId",
                "AccountId",
                "Balance",
                "Status"
              ],
              "documentation": [
                " Some balance was moved from the reserve of the first account to the second account.",
                " Final argument indicates the destination balance type.",
                " \\[from, to, balance, destination_status\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "ExistentialDeposit",
              "type": "Balance",
              "value": "0x00000000000000000000000000000000",
              "documentation": [
                " The minimum amount required to keep an account open."
              ]
            }
          ],
          "errors": [
            {
              "name": "VestingBalance",
              "documentation": [
                " Vesting balance too high to send value"
              ]
            },
            {
              "name": "LiquidityRestrictions",
              "documentation": [
                " Account liquidity restrictions prevent withdrawal"
              ]
            },
            {
              "name": "Overflow",
              "documentation": [
                " Got an overflow after adding"
              ]
            },
            {
              "name": "InsufficientBalance",
              "documentation": [
                " Balance too low to send value"
              ]
            },
            {
              "name": "ExistentialDeposit",
              "documentation": [
                " Value too low to create account due to existential deposit"
              ]
            },
            {
              "name": "KeepAlive",
              "documentation": [
                " Transfer/payment would kill account"
              ]
            },
            {
              "name": "ExistingVestingSchedule",
              "documentation": [
                " A vesting schedule already exists for this account"
              ]
            },
            {
              "name": "DeadAccount",
              "documentation": [
                " Beneficiary account must pre-exist"
              ]
            }
          ],
          "index": 3
        },
        {
          "name": "TransactionPayment",
          "storage": {
            "prefix": "TransactionPayment",
            "items": [
              {
                "name": "NextFeeMultiplier",
                "modifier": "Default",
                "type": {
                  "plain": "Multiplier"
                },
                "fallback": "0x000064a7b3b6e00d0000000000000000",
                "documentation": []
              },
              {
                "name": "DefaultFeeCurrencyId",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "CurrencyId",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": []
              }
            ]
          },
          "calls": [
            {
              "name": "set_default_fee_token",
              "args": [
                {
                  "name": "fee_token",
                  "type": "Option<CurrencyId>"
                }
              ],
              "documentation": [
                " Set default fee token"
              ]
            }
          ],
          "events": null,
          "constants": [
            {
              "name": "AllNonNativeCurrencyIds",
              "type": "Vec<CurrencyId>",
              "value": "0x2000010003000200040005000600070008",
              "documentation": [
                " All non-native currency ids in Acala."
              ]
            },
            {
              "name": "NativeCurrencyId",
              "type": "CurrencyId",
              "value": "0x0000",
              "documentation": [
                " Native currency id, the actual received currency type as fee for",
                " treasury. Should be ACA"
              ]
            },
            {
              "name": "StableCurrencyId",
              "type": "CurrencyId",
              "value": "0x0001",
              "documentation": [
                " Stable currency id, should be AUSD"
              ]
            },
            {
              "name": "TransactionByteFee",
              "type": "PalletBalanceOf",
              "value": "0x00ca9a3b000000000000000000000000",
              "documentation": [
                " The fee to be paid for making a transaction; the per-byte portion."
              ]
            },
            {
              "name": "MaxSlippageSwapWithDEX",
              "type": "Ratio",
              "value": "0x0000c52ebca2b1000000000000000000",
              "documentation": [
                " The max slippage allowed when swap fee with DEX"
              ]
            }
          ],
          "errors": [],
          "index": 4
        },
        {
          "name": "EvmAccounts",
          "storage": {
            "prefix": "EvmAccounts",
            "items": [
              {
                "name": "Accounts",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "EvmAddress",
                    "value": "AccountId",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": []
              },
              {
                "name": "EvmAddresses",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "EvmAddress",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": []
              }
            ]
          },
          "calls": [
            {
              "name": "claim_account",
              "args": [
                {
                  "name": "eth_address",
                  "type": "EvmAddress"
                },
                {
                  "name": "eth_signature",
                  "type": "EcdsaSignature"
                }
              ],
              "documentation": [
                " Claim account mapping between Substrate accounts and EVM accounts.",
                " Ensure eth_address has not been mapped."
              ]
            },
            {
              "name": "claim_default_account",
              "args": [],
              "documentation": []
            }
          ],
          "events": [
            {
              "name": "ClaimAccount",
              "args": [
                "AccountId",
                "EvmAddress"
              ],
              "documentation": [
                " Mapping between Substrate accounts and EVM accounts",
                " claim account. \\[account_id, evm_address\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "AccountIdHasMapped",
              "documentation": [
                " AccountId has mapped"
              ]
            },
            {
              "name": "EthAddressHasMapped",
              "documentation": [
                " Eth address has mapped"
              ]
            },
            {
              "name": "BadSignature",
              "documentation": [
                " Bad signature"
              ]
            },
            {
              "name": "InvalidSignature",
              "documentation": [
                " Invalid signature"
              ]
            },
            {
              "name": "NonZeroRefCount",
              "documentation": [
                " Account ref count is not zero"
              ]
            },
            {
              "name": "StillHasActiveReserved",
              "documentation": [
                " Account still has active reserved"
              ]
            }
          ],
          "index": 5
        },
        {
          "name": "Currencies",
          "storage": null,
          "calls": [
            {
              "name": "transfer",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "currency_id",
                  "type": "CurrencyIdOf"
                },
                {
                  "name": "amount",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "documentation": [
                " Transfer some balance to another account under `currency_id`.",
                "",
                " The dispatch origin for this call must be `Signed` by the",
                " transactor."
              ]
            },
            {
              "name": "transfer_native_currency",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "amount",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "documentation": [
                " Transfer some native currency to another account.",
                "",
                " The dispatch origin for this call must be `Signed` by the",
                " transactor."
              ]
            },
            {
              "name": "update_balance",
              "args": [
                {
                  "name": "who",
                  "type": "LookupSource"
                },
                {
                  "name": "currency_id",
                  "type": "CurrencyIdOf"
                },
                {
                  "name": "amount",
                  "type": "AmountOf"
                }
              ],
              "documentation": [
                " update amount of account `who` under `currency_id`.",
                "",
                " The dispatch origin of this call must be _Root_."
              ]
            }
          ],
          "events": [
            {
              "name": "Transferred",
              "args": [
                "CurrencyIdOf",
                "AccountId",
                "AccountId",
                "BalanceOf"
              ],
              "documentation": [
                " Currency transfer success. [currency_id, from, to, amount]"
              ]
            },
            {
              "name": "BalanceUpdated",
              "args": [
                "CurrencyIdOf",
                "AccountId",
                "AmountOf"
              ],
              "documentation": [
                " Update balance success. [currency_id, who, amount]"
              ]
            },
            {
              "name": "Deposited",
              "args": [
                "CurrencyIdOf",
                "AccountId",
                "BalanceOf"
              ],
              "documentation": [
                " Deposit success. [currency_id, who, amount]"
              ]
            },
            {
              "name": "Withdrawn",
              "args": [
                "CurrencyIdOf",
                "AccountId",
                "BalanceOf"
              ],
              "documentation": [
                " Withdraw success. [currency_id, who, amount]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "AmountIntoBalanceFailed",
              "documentation": [
                " Unable to convert the Amount type into Balance."
              ]
            },
            {
              "name": "BalanceTooLow",
              "documentation": [
                " Balance is too low."
              ]
            },
            {
              "name": "ERC20InvalidOperation",
              "documentation": [
                " ERC20 invalid operation"
              ]
            },
            {
              "name": "EvmAccountNotFound",
              "documentation": [
                " EVM account not found"
              ]
            }
          ],
          "index": 6
        },
        {
          "name": "Tokens",
          "storage": {
            "prefix": "Tokens",
            "items": [
              {
                "name": "TotalIssuance",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "Balance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " The total issuance of a token type."
                ]
              },
              {
                "name": "Locks",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_128Concat",
                    "key1": "AccountId",
                    "key2": "CurrencyId",
                    "value": "Vec<BalanceLock>",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Any liquidity locks of a token type under an account.",
                  " NOTE: Should only be accessed when setting, changing and freeing a lock."
                ]
              },
              {
                "name": "Accounts",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_128Concat",
                    "key1": "AccountId",
                    "key2": "CurrencyId",
                    "value": "AccountData",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " The balance of a token type under an account.",
                  "",
                  " NOTE: If the total is ever zero, decrease account ref account.",
                  "",
                  " NOTE: This is only used in the case that this module is used to store",
                  " balances."
                ]
              }
            ]
          },
          "calls": null,
          "events": [
            {
              "name": "Transferred",
              "args": [
                "CurrencyId",
                "AccountId",
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " Token transfer success. \\[currency_id, from, to, amount\\]"
              ]
            },
            {
              "name": "DustLost",
              "args": [
                "AccountId",
                "CurrencyId",
                "Balance"
              ],
              "documentation": [
                " An account was removed whose balance was non-zero but below",
                " ExistentialDeposit, resulting in an outright loss. \\[account,",
                " currency_id, amount\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "BalanceTooLow",
              "documentation": [
                " The balance is too low"
              ]
            },
            {
              "name": "BalanceOverflow",
              "documentation": [
                " This operation will cause balance to overflow"
              ]
            },
            {
              "name": "TotalIssuanceOverflow",
              "documentation": [
                " This operation will cause total issuance to overflow"
              ]
            },
            {
              "name": "AmountIntoBalanceFailed",
              "documentation": [
                " Cannot convert Amount into Balance type"
              ]
            },
            {
              "name": "LiquidityRestrictions",
              "documentation": [
                " Failed because liquidity restrictions due to locking"
              ]
            },
            {
              "name": "StillHasActiveReserved",
              "documentation": [
                " Account still has active reserved"
              ]
            }
          ],
          "index": 7
        },
        {
          "name": "Vesting",
          "storage": {
            "prefix": "Vesting",
            "items": [
              {
                "name": "VestingSchedules",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "Vec<VestingScheduleOf>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Vesting schedules of an account."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "claim",
              "args": [],
              "documentation": []
            },
            {
              "name": "vested_transfer",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "schedule",
                  "type": "VestingScheduleOf"
                }
              ],
              "documentation": []
            },
            {
              "name": "update_vesting_schedules",
              "args": [
                {
                  "name": "who",
                  "type": "LookupSource"
                },
                {
                  "name": "vesting_schedules",
                  "type": "Vec<VestingScheduleOf>"
                }
              ],
              "documentation": []
            }
          ],
          "events": [
            {
              "name": "VestingScheduleAdded",
              "args": [
                "AccountId",
                "AccountId",
                "VestingScheduleOf"
              ],
              "documentation": [
                " Added new vesting schedule. [from, to, vesting_schedule]"
              ]
            },
            {
              "name": "Claimed",
              "args": [
                "AccountId",
                "BalanceOf"
              ],
              "documentation": [
                " Claimed vesting. [who, locked_amount]"
              ]
            },
            {
              "name": "VestingSchedulesUpdated",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " Updated vesting schedules. [who]"
              ]
            }
          ],
          "constants": [
            {
              "name": "MinVestedTransfer",
              "type": "BalanceOf",
              "value": "0x0080c6a47e8d03000000000000000000",
              "documentation": [
                " The minimum amount transferred to call `vested_transfer`."
              ]
            }
          ],
          "errors": [
            {
              "name": "ZeroVestingPeriod",
              "documentation": [
                " Vesting period is zero"
              ]
            },
            {
              "name": "ZeroVestingPeriodCount",
              "documentation": [
                " Number of vests is zero"
              ]
            },
            {
              "name": "NumOverflow",
              "documentation": [
                " Arithmetic calculation overflow"
              ]
            },
            {
              "name": "InsufficientBalanceToLock",
              "documentation": [
                " Insufficient amount of balance to lock"
              ]
            },
            {
              "name": "TooManyVestingSchedules",
              "documentation": [
                " This account have too many vesting schedules"
              ]
            },
            {
              "name": "AmountLow",
              "documentation": [
                " The vested transfer amount is too low"
              ]
            }
          ],
          "index": 8
        },
        {
          "name": "AcalaTreasury",
          "storage": {
            "prefix": "Treasury",
            "items": [
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "ProposalIndex"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Number of proposals that have been made."
                ]
              },
              {
                "name": "Proposals",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "ProposalIndex",
                    "value": "Proposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Proposals that have been made."
                ]
              },
              {
                "name": "Approvals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<ProposalIndex>"
                },
                "fallback": "0x00",
                "documentation": [
                  " Proposal indices that have been approved but not yet awarded."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "propose_spend",
              "args": [
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "beneficiary",
                  "type": "LookupSource"
                }
              ],
              "documentation": [
                " 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>",
                " - Complexity: O(1)",
                " - DbReads: `ProposalCount`, `origin account`",
                " - DbWrites: `ProposalCount`, `Proposals`, `origin account`",
                " # </weight>"
              ]
            },
            {
              "name": "reject_proposal",
              "args": [
                {
                  "name": "proposal_id",
                  "type": "Compact<ProposalIndex>"
                }
              ],
              "documentation": [
                " Reject a proposed spend. The original deposit will be slashed.",
                "",
                " May only be called from `T::RejectOrigin`.",
                "",
                " # <weight>",
                " - Complexity: O(1)",
                " - DbReads: `Proposals`, `rejected proposer account`",
                " - DbWrites: `Proposals`, `rejected proposer account`",
                " # </weight>"
              ]
            },
            {
              "name": "approve_proposal",
              "args": [
                {
                  "name": "proposal_id",
                  "type": "Compact<ProposalIndex>"
                }
              ],
              "documentation": [
                " Approve a proposal. At a later time, the proposal will be allocated to the beneficiary",
                " and the original deposit will be returned.",
                "",
                " May only be called from `T::ApproveOrigin`.",
                "",
                " # <weight>",
                " - Complexity: O(1).",
                " - DbReads: `Proposals`, `Approvals`",
                " - DbWrite: `Approvals`",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Proposed",
              "args": [
                "ProposalIndex"
              ],
              "documentation": [
                " New proposal. \\[proposal_index\\]"
              ]
            },
            {
              "name": "Spending",
              "args": [
                "Balance"
              ],
              "documentation": [
                " We have ended a spend period and will now allocate funds. \\[budget_remaining\\]"
              ]
            },
            {
              "name": "Awarded",
              "args": [
                "ProposalIndex",
                "Balance",
                "AccountId"
              ],
              "documentation": [
                " Some funds have been allocated. \\[proposal_index, award, beneficiary\\]"
              ]
            },
            {
              "name": "Rejected",
              "args": [
                "ProposalIndex",
                "Balance"
              ],
              "documentation": [
                " A proposal was rejected; funds were slashed. \\[proposal_index, slashed\\]"
              ]
            },
            {
              "name": "Burnt",
              "args": [
                "Balance"
              ],
              "documentation": [
                " Some of our funds have been burnt. \\[burn\\]"
              ]
            },
            {
              "name": "Rollover",
              "args": [
                "Balance"
              ],
              "documentation": [
                " Spending has finished; this is the amount that rolls over until next spend.",
                " \\[budget_remaining\\]"
              ]
            },
            {
              "name": "Deposit",
              "args": [
                "Balance"
              ],
              "documentation": [
                " Some funds have been deposited. \\[deposit\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "ProposalBond",
              "type": "Permill",
              "value": "0x50c30000",
              "documentation": [
                " 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": "0x00a0724e180900000000000000000000",
              "documentation": [
                " Minimum amount of funds that should be placed in a deposit for making a proposal."
              ]
            },
            {
              "name": "SpendPeriod",
              "type": "BlockNumber",
              "value": "0x40380000",
              "documentation": [
                " Period between successive spends."
              ]
            },
            {
              "name": "Burn",
              "type": "Permill",
              "value": "0x00000000",
              "documentation": [
                " Percentage of spare funds (if any) that are burnt per spend period."
              ]
            },
            {
              "name": "ModuleId",
              "type": "ModuleId",
              "value": "0x6163612f74727379",
              "documentation": [
                " The treasury's module id, used for deriving its sovereign account ID."
              ]
            }
          ],
          "errors": [
            {
              "name": "InsufficientProposersBalance",
              "documentation": [
                " Proposer's balance is too low."
              ]
            },
            {
              "name": "InvalidIndex",
              "documentation": [
                " No proposal or bounty at that index."
              ]
            }
          ],
          "index": 9
        },
        {
          "name": "Bounties",
          "storage": {
            "prefix": "Treasury",
            "items": [
              {
                "name": "BountyCount",
                "modifier": "Default",
                "type": {
                  "plain": "BountyIndex"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Number of bounty proposals that have been made."
                ]
              },
              {
                "name": "Bounties",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "BountyIndex",
                    "value": "Bounty",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Bounties that have been made."
                ]
              },
              {
                "name": "BountyDescriptions",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "BountyIndex",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " The description of each bounty."
                ]
              },
              {
                "name": "BountyApprovals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<BountyIndex>"
                },
                "fallback": "0x00",
                "documentation": [
                  " Bounty indices that have been approved but not yet funded."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "propose_bounty",
              "args": [
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "description",
                  "type": "Bytes"
                }
              ],
              "documentation": [
                " Propose a new bounty.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Payment: `TipReportDepositBase` will be reserved from the origin account, as well as",
                " `DataDepositPerByte` for each byte in `reason`. It will be unreserved upon approval,",
                " or slashed when rejected.",
                "",
                " - `curator`: The curator account whom will manage this bounty.",
                " - `fee`: The curator fee.",
                " - `value`: The total payment amount of this bounty, curator fee included.",
                " - `description`: The description of this bounty."
              ]
            },
            {
              "name": "approve_bounty",
              "args": [
                {
                  "name": "bounty_id",
                  "type": "Compact<BountyIndex>"
                }
              ],
              "documentation": [
                " Approve a bounty proposal. At a later time, the bounty will be funded and become active",
                " and the original deposit will be returned.",
                "",
                " May only be called from `T::ApproveOrigin`.",
                "",
                " # <weight>",
                " - O(1).",
                " # </weight>"
              ]
            },
            {
              "name": "propose_curator",
              "args": [
                {
                  "name": "bounty_id",
                  "type": "Compact<BountyIndex>"
                },
                {
                  "name": "curator",
                  "type": "LookupSource"
                },
                {
                  "name": "fee",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "documentation": [
                " Assign a curator to a funded bounty.",
                "",
                " May only be called from `T::ApproveOrigin`.",
                "",
                " # <weight>",
                " - O(1).",
                " # </weight>"
              ]
            },
            {
              "name": "unassign_curator",
              "args": [
                {
                  "name": "bounty_id",
                  "type": "Compact<BountyIndex>"
                }
              ],
              "documentation": [
                " Unassign curator from a bounty.",
                "",
                " This function can only be called by the `RejectOrigin` a signed origin.",
                "",
                " If this function is called by the `RejectOrigin`, we assume that the curator is malicious",
                " or inactive. As a result, we will slash the curator when possible.",
                "",
                " If the origin is the curator, we take this as a sign they are unable to do their job and",
                " they willingly give up. We could slash them, but for now we allow them to recover their",
                " deposit and exit without issue. (We may want to change this if it is abused.)",
                "",
                " Finally, the origin can be anyone if and only if the curator is \"inactive\". This allows",
                " anyone in the community to call out that a curator is not doing their due diligence, and",
                " we should pick a new curator. In this case the curator should also be slashed.",
                "",
                " # <weight>",
                " - O(1).",
                " # </weight>"
              ]
            },
            {
              "name": "accept_curator",
              "args": [
                {
                  "name": "bounty_id",
                  "type": "Compact<BountyIndex>"
                }
              ],
              "documentation": [
                " Accept the curator role for a bounty.",
                " A deposit will be reserved from curator and refund upon successful payout.",
                "",
                " May only be called from the curator.",
                "",
                " # <weight>",
                " - O(1).",
                " # </weight>"
              ]
            },
            {
              "name": "award_bounty",
              "args": [
                {
                  "name": "bounty_id",
                  "type": "Compact<BountyIndex>"
                },
                {
                  "name": "beneficiary",
                  "type": "LookupSource"
                }
              ],
              "documentation": [
                " Award bounty to a beneficiary account. The beneficiary will be able to claim the funds after a delay.",
                "",
                " The dispatch origin for this call must be the curator of this bounty.",
                "",
                " - `bounty_id`: Bounty ID to award.",
                " - `beneficiary`: The beneficiary account whom will receive the payout.",
                "",
                " # <weight>",
                " - O(1).",
                " # </weight>"
              ]
            },
            {
              "name": "claim_bounty",
              "args": [
                {
                  "name": "bounty_id",
                  "type": "Compact<BountyIndex>"
                }
              ],
              "documentation": [
                " Claim the payout from an awarded bounty after payout delay.",
                "",
                " The dispatch origin for this call must be the beneficiary of this bounty.",
                "",
                " - `bounty_id`: Bounty ID to claim.",
                "",
                " # <weight>",
                " - O(1).",
                " # </weight>"
              ]
            },
            {
              "name": "close_bounty",
              "args": [
                {
                  "name": "bounty_id",
                  "type": "Compact<BountyIndex>"
                }
              ],
              "documentation": [
                " Cancel a proposed or active bounty. All the funds will be sent to treasury and",
                " the curator deposit will be unreserved if possible.",
                "",
                " Only `T::RejectOrigin` is able to cancel a bounty.",
                "",
                " - `bounty_id`: Bounty ID to cancel.",
                "",
                " # <weight>",
                " - O(1).",
                " # </weight>"
              ]
            },
            {
              "name": "extend_bounty_expiry",
              "args": [
                {
                  "name": "bounty_id",
                  "type": "Compact<BountyIndex>"
                },
                {
                  "name": "_remark",
                  "type": "Bytes"
                }
              ],
              "documentation": [
                " Extend the expiry time of an active bounty.",
                "",
                " The dispatch origin for this call must be the curator of this bounty.",
                "",
                " - `bounty_id`: Bounty ID to extend.",
                " - `remark`: additional information.",
                "",
                " # <weight>",
                " - O(1).",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "BountyProposed",
              "args": [
                "BountyIndex"
              ],
              "documentation": [
                " New bounty proposal. \\[index\\]"
              ]
            },
            {
              "name": "BountyRejected",
              "args": [
                "BountyIndex",
                "Balance"
              ],
              "documentation": [
                " A bounty proposal was rejected; funds were slashed. \\[index, bond\\]"
              ]
            },
            {
              "name": "BountyBecameActive",
              "args": [
                "BountyIndex"
              ],
              "documentation": [
                " A bounty proposal is funded and became active. \\[index\\]"
              ]
            },
            {
              "name": "BountyAwarded",
              "args": [
                "BountyIndex",
                "AccountId"
              ],
              "documentation": [
                " A bounty is awarded to a beneficiary. \\[index, beneficiary\\]"
              ]
            },
            {
              "name": "BountyClaimed",
              "args": [
                "BountyIndex",
                "Balance",
                "AccountId"
              ],
              "documentation": [
                " A bounty is claimed by beneficiary. \\[index, payout, beneficiary\\]"
              ]
            },
            {
              "name": "BountyCanceled",
              "args": [
                "BountyIndex"
              ],
              "documentation": [
                " A bounty is cancelled. \\[index\\]"
              ]
            },
            {
              "name": "BountyExtended",
              "args": [
                "BountyIndex"
              ],
              "documentation": [
                " A bounty expiry is extended. \\[index\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "DataDepositPerByte",
              "type": "BalanceOf",
              "value": "0x00e87648170000000000000000000000",
              "documentation": [
                " The amount held on deposit per byte within bounty description."
              ]
            },
            {
              "name": "BountyDepositBase",
              "type": "BalanceOf",
              "value": "0x00a0724e180900000000000000000000",
              "documentation": [
                " The amount held on deposit for placing a bounty proposal."
              ]
            },
            {
              "name": "BountyDepositPayoutDelay",
              "type": "BlockNumber",
              "value": "0x40380000",
              "documentation": [
                " The delay period for which a bounty beneficiary need to wait before claim the payout."
              ]
            },
            {
              "name": "BountyUpdatePeriod",
              "type": "BlockNumber",
              "value": "0x80130300",
              "documentation": [
                " Bounty duration in blocks."
              ]
            },
            {
              "name": "BountyCuratorDeposit",
              "type": "Permill",
              "value": "0x20a10700",
              "documentation": [
                " Percentage of the curator fee that will be reserved upfront as deposit for bounty curator."
              ]
            },
            {
              "name": "BountyValueMinimum",
              "type": "BalanceOf",
              "value": "0x00203d88792d00000000000000000000",
              "documentation": [
                " Minimum value for a bounty."
              ]
            },
            {
              "name": "MaximumReasonLength",
              "type": "u32",
              "value": "0x00400000",
              "documentation": [
                " Maximum acceptable reason length."
              ]
            }
          ],
          "errors": [
            {
              "name": "InsufficientProposersBalance",
              "documentation": [
                " Proposer's balance is too low."
              ]
            },
            {
              "name": "InvalidIndex",
              "documentation": [
                " No proposal or bounty at that index."
              ]
            },
            {
              "name": "ReasonTooBig",
              "documentation": [
                " The reason given is just too big."
              ]
            },
            {
              "name": "UnexpectedStatus",
              "documentation": [
                " The bounty status is unexpected."
              ]
            },
            {
              "name": "RequireCurator",
              "documentation": [
                " Require bounty curator."
              ]
            },
            {
              "name": "InvalidValue",
              "documentation": [
                " Invalid bounty value."
              ]
            },
            {
              "name": "InvalidFee",
              "documentation": [
                " Invalid bounty fee."
              ]
            },
            {
              "name": "PendingPayout",
              "documentation": [
                " A bounty payout is pending.",
                " To cancel the bounty, you must unassign and slash the curator."
              ]
            },
            {
              "name": "Premature",
              "documentation": [
                " The bounties cannot be claimed/closed because it's still in the countdown period."
              ]
            }
          ],
          "index": 10
        },
        {
          "name": "Tips",
          "storage": {
            "prefix": "Treasury",
            "items": [
              {
                "name": "Tips",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "Hash",
                    "value": "OpenTip",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " TipsMap 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": "Identity",
                    "key": "Hash",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " 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": "report_awesome",
              "args": [
                {
                  "name": "reason",
                  "type": "Bytes"
                },
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " 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",
                " `DataDepositPerByte` 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>",
                " - Complexity: `O(R)` where `R` length of `reason`.",
                "   - encoding and hashing of 'reason'",
                " - DbReads: `Reasons`, `Tips`",
                " - DbWrites: `Reasons`, `Tips`",
                " # </weight>"
              ]
            },
            {
              "name": "retract_tip",
              "args": [
                {
                  "name": "hash",
                  "type": "Hash"
                }
              ],
              "documentation": [
                " 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>",
                " - Complexity: `O(1)`",
                "   - Depends on the length of `T::Hash` which is fixed.",
                " - DbReads: `Tips`, `origin account`",
                " - DbWrites: `Reasons`, `Tips`, `origin account`",
                " # </weight>"
              ]
            },
            {
              "name": "tip_new",
              "args": [
                {
                  "name": "reason",
                  "type": "Bytes"
                },
                {
                  "name": "who",
                  "type": "AccountId"
                },
                {
                  "name": "tip_value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "documentation": [
                " 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>",
                " - Complexity: `O(R + T)` where `R` length of `reason`, `T` is the number of tippers.",
                "   - `O(T)`: decoding `Tipper` vec of length `T`",
                "     `T` is charged as upper bound given by `ContainsLengthBound`.",
                "     The actual cost depends on the implementation of `T::Tippers`.",
                "   - `O(R)`: hashing and encoding of reason of length `R`",
                " - DbReads: `Tippers`, `Reasons`",
                " - DbWrites: `Reasons`, `Tips`",
                " # </weight>"
              ]
            },
            {
              "name": "tip",
              "args": [
                {
                  "name": "hash",
                  "type": "Hash"
                },
                {
                  "name": "tip_value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "documentation": [
                " 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>",
                " - Complexity: `O(T)` where `T` is the number of tippers.",
                "   decoding `Tipper` vec of length `T`, insert tip and check closing,",
                "   `T` is charged as upper bound given by `ContainsLengthBound`.",
                "   The actual cost depends on the implementation of `T::Tippers`.",
                "",
                "   Actually weight could be lower as it depends on how many tips are in `OpenTip` but it",
                "   is weighted as if almost full i.e of length `T-1`.",
                " - DbReads: `Tippers`, `Tips`",
                " - DbWrites: `Tips`",
                " # </weight>"
              ]
            },
            {
              "name": "close_tip",
              "args": [
                {
                  "name": "hash",
                  "type": "Hash"
                }
              ],
              "documentation": [
                " 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>",
                " - Complexity: `O(T)` where `T` is the number of tippers.",
                "   decoding `Tipper` vec of length `T`.",
                "   `T` is charged as upper bound given by `ContainsLengthBound`.",
                "   The actual cost depends on the implementation of `T::Tippers`.",
                " - DbReads: `Tips`, `Tippers`, `tip finder`",
                " - DbWrites: `Reasons`, `Tips`, `Tippers`, `tip finder`",
                " # </weight>"
              ]
            },
            {
              "name": "slash_tip",
              "args": [
                {
                  "name": "hash",
                  "type": "Hash"
                }
              ],
              "documentation": [
                " Remove and slash an already-open tip.",
                "",
                " May only be called from `T::RejectOrigin`.",
                "",
                " As a result, the finder is slashed and the deposits are lost.",
                "",
                " Emits `TipSlashed` if successful.",
                "",
                " # <weight>",
                "   `T` is charged as upper bound given by `ContainsLengthBound`.",
                "   The actual cost depends on the implementation of `T::Tippers`.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "NewTip",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A new tip suggestion has been opened. \\[tip_hash\\]"
              ]
            },
            {
              "name": "TipClosing",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A tip suggestion has reached threshold and is closing. \\[tip_hash\\]"
              ]
            },
            {
              "name": "TipClosed",
              "args": [
                "Hash",
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " A tip suggestion has been closed. \\[tip_hash, who, payout\\]"
              ]
            },
            {
              "name": "TipRetracted",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A tip suggestion has been retracted. \\[tip_hash\\]"
              ]
            },
            {
              "name": "TipSlashed",
              "args": [
                "Hash",
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " A tip suggestion has been slashed. \\[tip_hash, finder, deposit\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "TipCountdown",
              "type": "BlockNumber",
              "value": "0x40380000",
              "documentation": [
                " The period for which a tip remains open after is has achieved threshold tippers."
              ]
            },
            {
              "name": "TipFindersFee",
              "type": "Percent",
              "value": "0x0a",
              "documentation": [
                " The amount of the final tip which goes to the original reporter of the tip."
              ]
            },
            {
              "name": "TipReportDepositBase",
              "type": "BalanceOf",
              "value": "0x00a0724e180900000000000000000000",
              "documentation": [
                " The amount held on deposit for placing a tip report."
              ]
            },
            {
              "name": "DataDepositPerByte",
              "type": "BalanceOf",
              "value": "0x00e87648170000000000000000000000",
              "documentation": [
                " The amount held on deposit per byte within the tip report reason."
              ]
            },
            {
              "name": "MaximumReasonLength",
              "type": "u32",
              "value": "0x00400000",
              "documentation": [
                " Maximum acceptable reason length."
              ]
            }
          ],
          "errors": [
            {
              "name": "ReasonTooBig",
              "documentation": [
                " The reason given is just too big."
              ]
            },
            {
              "name": "AlreadyKnown",
              "documentation": [
                " The tip was already found/started."
              ]
            },
            {
              "name": "UnknownTip",
              "documentation": [
                " The tip hash is unknown."
              ]
            },
            {
              "name": "NotFinder",
              "documentation": [
                " The account attempting to retract the tip is not the finder of the tip."
              ]
            },
            {
              "name": "StillOpen",
              "documentation": [
                " The tip cannot be claimed/closed because there are not enough tippers yet."
              ]
            },
            {
              "name": "Premature",
              "documentation": [
                " The tip cannot be claimed/closed because it's still in the countdown period."
              ]
            }
          ],
          "index": 11
        },
        {
          "name": "Utility",
          "storage": null,
          "calls": [
            {
              "name": "batch",
              "args": [
                {
                  "name": "calls",
                  "type": "Vec<Call>"
                }
              ],
              "documentation": [
                " Send a batch of dispatch calls.",
                "",
                " May be called from any origin.",
                "",
                " - `calls`: The calls to be dispatched from the same origin.",
                "",
                " If origin is root then call are dispatch without checking origin filter. (This includes",
                " bypassing `frame_system::Config::BaseCallFilter`).",
                "",
                " # <weight>",
                " - Complexity: O(C) where C is the number of calls to be batched.",
                " # </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_derivative",
              "args": [
                {
                  "name": "index",
                  "type": "u16"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " Send a call through an indexed pseudonym of the sender.",
                "",
                " Filter from origin are passed along. The call will be dispatched with an origin which",
                " use the same filter as the origin of this call.",
                "",
                " NOTE: If you need to ensure that any account-based filtering is not honored (i.e.",
                " because you expect `proxy` to have been used prior in the call stack and you do not want",
                " the call restrictions to apply to any sub-accounts), then use `as_multi_threshold_1`",
                " in the Multisig pallet instead.",
                "",
                " NOTE: Prior to version *12, this was called `as_limited_sub`.",
                "",
                " The dispatch origin for this call must be _Signed_."
              ]
            },
            {
              "name": "batch_all",
              "args": [
                {
                  "name": "calls",
                  "type": "Vec<Call>"
                }
              ],
              "documentation": [
                " Send a batch of dispatch calls and atomically execute them.",
                " The whole transaction will rollback and fail if any of the calls failed.",
                "",
                " May be called from any origin.",
                "",
                " - `calls`: The calls to be dispatched from the same origin.",
                "",
                " If origin is root then call are dispatch without checking origin filter. (This includes",
                " bypassing `frame_system::Config::BaseCallFilter`).",
                "",
                " # <weight>",
                " - Complexity: O(C) where C is the number of calls to be batched.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "BatchInterrupted",
              "args": [
                "u32",
                "DispatchError"
              ],
              "documentation": [
                " Batch of dispatches did not complete fully. Index of first failing dispatch given, as",
                " well as the error. \\[index, error\\]"
              ]
            },
            {
              "name": "BatchCompleted",
              "args": [],
              "documentation": [
                " Batch of dispatches completed fully with no error."
              ]
            }
          ],
          "constants": [],
          "errors": [],
          "index": 12
        },
        {
          "name": "Multisig",
          "storage": {
            "prefix": "Multisig",
            "items": [
              {
                "name": "Multisigs",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "AccountId",
                    "key2": "[u8;32]",
                    "value": "Multisig",
                    "key2Hasher": "Blake2_128Concat"
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " The set of open multisig operations."
                ]
              },
              {
                "name": "Calls",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "[u8;32]",
                    "value": "(OpaqueCall,AccountId,BalanceOf)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": []
              }
            ]
          },
          "calls": [
            {
              "name": "as_multi_threshold_1",
              "args": [
                {
                  "name": "other_signatories",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " Immediately dispatch a multi-signature call using a single approval from the caller.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " - `other_signatories`: The accounts (other than the sender) who are part of the",
                " multi-signature, but do not participate in the approval process.",
                " - `call`: The call to be executed.",
                "",
                " Result is equivalent to the dispatched result.",
                "",
                " # <weight>",
                " O(Z + C) where Z is the length of the call and C its execution weight.",
                " -------------------------------",
                " - DB Weight: None",
                " - Plus Call Weight",
                " # </weight>"
              ]
            },
            {
              "name": "as_multi",
              "args": [
                {
                  "name": "threshold",
                  "type": "u16"
                },
                {
                  "name": "other_signatories",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "maybe_timepoint",
                  "type": "Option<Timepoint>"
                },
                {
                  "name": "call",
                  "type": "OpaqueCall"
                },
                {
                  "name": "store_call",
                  "type": "bool"
                },
                {
                  "name": "max_weight",
                  "type": "Weight"
                }
              ],
              "documentation": [
                " 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: `DepositBase` will be reserved if this is the first approval, plus",
                " `threshold` times `DepositFactor`. 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",
                "   `DepositBase + threshold * DepositFactor`.",
                " -------------------------------",
                " - DB Weight:",
                "     - Reads: Multisig Storage, [Caller Account], Calls (if `store_call`)",
                "     - Writes: Multisig Storage, [Caller Account], Calls (if `store_call`)",
                " - Plus Call Weight",
                " # </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]"
                },
                {
                  "name": "max_weight",
                  "type": "Weight"
                }
              ],
              "documentation": [
                " 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: `DepositBase` will be reserved if this is the first approval, plus",
                " `threshold` times `DepositFactor`. 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",
                "   `DepositBase + threshold * DepositFactor`.",
                " ----------------------------------",
                " - DB Weight:",
                "     - Read: Multisig Storage, [Caller Account]",
                "     - Write: Multisig Storage, [Caller Account]",
                " # </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]"
                }
              ],
              "documentation": [
                " 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.",
                " ----------------------------------",
                " - DB Weight:",
                "     - Read: Multisig Storage, [Caller Account], Refund Account, Calls",
                "     - Write: Multisig Storage, [Caller Account], Refund Account, Calls",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "NewMultisig",
              "args": [
                "AccountId",
                "AccountId",
                "CallHash"
              ],
              "documentation": [
                " A new multisig operation has begun. \\[approving, multisig, call_hash\\]"
              ]
            },
            {
              "name": "MultisigApproval",
              "args": [
                "AccountId",
                "Timepoint",
                "AccountId",
                "CallHash"
              ],
              "documentation": [
                " A multisig operation has been approved by someone.",
                " \\[approving, timepoint, multisig, call_hash\\]"
              ]
            },
            {
              "name": "MultisigExecuted",
              "args": [
                "AccountId",
                "Timepoint",
                "AccountId",
                "CallHash",
                "DispatchResult"
              ],
              "documentation": [
                " A multisig operation has been executed. \\[approving, timepoint, multisig, call_hash\\]"
              ]
            },
            {
              "name": "MultisigCancelled",
              "args": [
                "AccountId",
                "Timepoint",
                "AccountId",
                "CallHash"
              ],
              "documentation": [
                " A multisig operation has been cancelled. \\[cancelling, timepoint, multisig, call_hash\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "DepositBase",
              "type": "BalanceOf",
              "value": "0x00743ba40b0000000000000000000000",
              "documentation": [
                " The base amount of currency needed to reserve for creating a multisig execution or to store",
                " a dispatch call for later."
              ]
            },
            {
              "name": "DepositFactor",
              "type": "BalanceOf",
              "value": "0x00e40b54020000000000000000000000",
              "documentation": [
                " The amount of currency needed per unit threshold when creating a multisig execution."
              ]
            },
            {
              "name": "MaxSignatories",
              "type": "u16",
              "value": "0x6400",
              "documentation": [
                " The maximum amount of signatories allowed for a given multisig."
              ]
            }
          ],
          "errors": [
            {
              "name": "MinimumThreshold",
              "documentation": [
                " Threshold must be 2 or greater."
              ]
            },
            {
              "name": "AlreadyApproved",
              "documentation": [
                " Call is already approved by this signatory."
              ]
            },
            {
              "name": "NoApprovalsNeeded",
              "documentation": [
                " Call doesn't need any (more) approvals."
              ]
            },
            {
              "name": "TooFewSignatories",
              "documentation": [
                " There are too few signatories in the list."
              ]
            },
            {
              "name": "TooManySignatories",
              "documentation": [
                " There are too many signatories in the list."
              ]
            },
            {
              "name": "SignatoriesOutOfOrder",
              "documentation": [
                " The signatories were provided out of order; they should be ordered."
              ]
            },
            {
              "name": "SenderInSignatories",
              "documentation": [
                " The sender was contained in the other signatories; it shouldn't be."
              ]
            },
            {
              "name": "NotFound",
              "documentation": [
                " Multisig operation not found when attempting to cancel."
              ]
            },
            {
              "name": "NotOwner",
              "documentation": [
                " Only the account that originally created the multisig is able to cancel it."
              ]
            },
            {
              "name": "NoTimepoint",
              "documentation": [
                " No timepoint was given, yet the multisig operation is already underway."
              ]
            },
            {
              "name": "WrongTimepoint",
              "documentation": [
                " A different timepoint was given to the multisig operation that is underway."
              ]
            },
            {
              "name": "UnexpectedTimepoint",
              "documentation": [
                " A timepoint was given, yet no multisig operation is underway."
              ]
            },
            {
              "name": "MaxWeightTooLow",
              "documentation": [
                " The maximum weight information provided was too low."
              ]
            },
            {
              "name": "AlreadyStored",
              "documentation": [
                " The data to be stored is already stored."
              ]
            }
          ],
          "index": 13
        },
        {
          "name": "Recovery",
          "storage": {
            "prefix": "Recovery",
            "items": [
              {
                "name": "Recoverable",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "RecoveryConfig",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " 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",
                "documentation": [
                  " Active recovery attempts.",
                  "",
                  " First account is the account to be recovered, and the second account",
                  " is the user trying to recover the account."
                ]
              },
              {
                "name": "Proxy",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "AccountId",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " The list of allowed proxy accounts.",
                  "",
                  " Map from the user who can access it to the recovered account."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "as_recovered",
              "args": [
                {
                  "name": "account",
                  "type": "AccountId"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " 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` + 10,000.",
                " - 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"
                }
              ],
              "documentation": [
                " 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"
                }
              ],
              "documentation": [
                " 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"
                }
              ],
              "documentation": [
                " 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"
                }
              ],
              "documentation": [
                " 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"
                }
              ],
              "documentation": [
                " 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"
                }
              ],
              "documentation": [
                " 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": [],
              "documentation": [
                " Remove the recovery process for your account. Recovered accounts are still accessible.",
                "",
                " 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>"
              ]
            },
            {
              "name": "cancel_recovered",
              "args": [
                {
                  "name": "account",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Cancel the ability to use `as_recovered` for `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 are able to call on-behalf-of.",
                "",
                " # <weight>",
                " - One storage mutation to check account is recovered by `who`. O(1)",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "RecoveryCreated",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " A recovery process has been set up for an \\[account\\]."
              ]
            },
            {
              "name": "RecoveryInitiated",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "documentation": [
                " A recovery process has been initiated for lost account by rescuer account.",
                " \\[lost, rescuer\\]"
              ]
            },
            {
              "name": "RecoveryVouched",
              "args": [
                "AccountId",
                "AccountId",
                "AccountId"
              ],
              "documentation": [
                " A recovery process for lost account by rescuer account has been vouched for by sender.",
                " \\[lost, rescuer, sender\\]"
              ]
            },
            {
              "name": "RecoveryClosed",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "documentation": [
                " A recovery process for lost account by rescuer account has been closed.",
                " \\[lost, rescuer\\]"
              ]
            },
            {
              "name": "AccountRecovered",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "documentation": [
                " Lost account has been successfully recovered by rescuer account.",
                " \\[lost, rescuer\\]"
              ]
            },
            {
              "name": "RecoveryRemoved",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " A recovery process has been removed for an \\[account\\]."
              ]
            }
          ],
          "constants": [
            {
              "name": "ConfigDepositBase",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "documentation": [
                " The base amount of currency needed to reserve for creating a recovery configuration."
              ]
            },
            {
              "name": "FriendDepositFactor",
              "type": "BalanceOf",
              "value": "0x00e87648170000000000000000000000",
              "documentation": [
                " The amount of currency needed per additional user when creating a recovery configuration."
              ]
            },
            {
              "name": "MaxFriends",
              "type": "u16",
              "value": "0x0900",
              "documentation": [
                " The maximum amount of friends allowed in a recovery configuration."
              ]
            },
            {
              "name": "RecoveryDeposit",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "documentation": [
                " The base amount of currency needed to reserve for starting a recovery."
              ]
            }
          ],
          "errors": [
            {
              "name": "NotAllowed",
              "documentation": [
                " User is not allowed to make a call on behalf of this account"
              ]
            },
            {
              "name": "ZeroThreshold",
              "documentation": [
                " Threshold must be greater than zero"
              ]
            },
            {
              "name": "NotEnoughFriends",
              "documentation": [
                " Friends list must be greater than zero and threshold"
              ]
            },
            {
              "name": "MaxFriends",
              "documentation": [
                " Friends list must be less than max friends"
              ]
            },
            {
              "name": "NotSorted",
              "documentation": [
                " Friends list must be sorted and free of duplicates"
              ]
            },
            {
              "name": "NotRecoverable",
              "documentation": [
                " This account is not set up for recovery"
              ]
            },
            {
              "name": "AlreadyRecoverable",
              "documentation": [
                " This account is already set up for recovery"
              ]
            },
            {
              "name": "AlreadyStarted",
              "documentation": [
                " A recovery process has already started for this account"
              ]
            },
            {
              "name": "NotStarted",
              "documentation": [
                " A recovery process has not started for this rescuer"
              ]
            },
            {
              "name": "NotFriend",
              "documentation": [
                " This account is not a friend who can vouch"
              ]
            },
            {
              "name": "DelayPeriod",
              "documentation": [
                " The friend must wait until the delay period to vouch for this recovery"
              ]
            },
            {
              "name": "AlreadyVouched",
              "documentation": [
                " This user has already vouched for this recovery"
              ]
            },
            {
              "name": "Threshold",
              "documentation": [
                " The threshold for recovering this account has not been met"
              ]
            },
            {
              "name": "StillActive",
              "documentation": [
                " There are still active recovery attempts that need to be closed"
              ]
            },
            {
              "name": "Overflow",
              "documentation": [
                " There was an overflow in a calculation"
              ]
            },
            {
              "name": "AlreadyProxy",
              "documentation": [
                " This account is already set up for recovery"
              ]
            },
            {
              "name": "BadState",
              "documentation": [
                " Some internal state is broken."
              ]
            }
          ],
          "index": 14
        },
        {
          "name": "Proxy",
          "storage": {
            "prefix": "Proxy",
            "items": [
              {
                "name": "Proxies",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "(Vec<ProxyDefinition>,BalanceOf)",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000",
                "documentation": [
                  " The set of account proxies. Maps the account which has delegated to the accounts",
                  " which are being delegated to, together with the amount held on deposit."
                ]
              },
              {
                "name": "Announcements",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "(Vec<Announcement>,BalanceOf)",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000",
                "documentation": [
                  " The announcements made by the proxy (key)."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "proxy",
              "args": [
                {
                  "name": "real",
                  "type": "AccountId"
                },
                {
                  "name": "force_proxy_type",
                  "type": "Option<ProxyType>"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " Dispatch the given `call` from an account that the sender is authorised for through",
                " `add_proxy`.",
                "",
                " Removes any corresponding announcement(s).",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Parameters:",
                " - `real`: The account that the proxy will make a call on behalf of.",
                " - `force_proxy_type`: Specify the exact proxy type to be used and checked for this call.",
                " - `call`: The call to be made by the `real` account.",
                "",
                " # <weight>",
                " Weight is a function of the number of proxies the user has (P).",
                " # </weight>"
              ]
            },
            {
              "name": "add_proxy",
              "args": [
                {
                  "name": "delegate",
                  "type": "AccountId"
                },
                {
                  "name": "proxy_type",
                  "type": "ProxyType"
                },
                {
                  "name": "delay",
                  "type": "BlockNumber"
                }
              ],
              "documentation": [
                " Register a proxy account for the sender that is able to make calls on its behalf.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Parameters:",
                " - `proxy`: The account that the `caller` would like to make a proxy.",
                " - `proxy_type`: The permissions allowed for this proxy account.",
                " - `delay`: The announcement period required of the initial proxy. Will generally be",
                " zero.",
                "",
                " # <weight>",
                " Weight is a function of the number of proxies the user has (P).",
                " # </weight>"
              ]
            },
            {
              "name": "remove_proxy",
              "args": [
                {
                  "name": "delegate",
                  "type": "AccountId"
                },
                {
                  "name": "proxy_type",
                  "type": "ProxyType"
                },
                {
                  "name": "delay",
                  "type": "BlockNumber"
                }
              ],
              "documentation": [
                " Unregister a proxy account for the sender.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Parameters:",
                " - `proxy`: The account that the `caller` would like to remove as a proxy.",
                " - `proxy_type`: The permissions currently enabled for the removed proxy account.",
                "",
                " # <weight>",
                " Weight is a function of the number of proxies the user has (P).",
                " # </weight>"
              ]
            },
            {
              "name": "remove_proxies",
              "args": [],
              "documentation": [
                " Unregister all proxy accounts for the sender.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " WARNING: This may be called on accounts created by `anonymous`, however if done, then",
                " the unreserved fees will be inaccessible. **All access to this account will be lost.**",
                "",
                " # <weight>",
                " Weight is a function of the number of proxies the user has (P).",
                " # </weight>"
              ]
            },
            {
              "name": "anonymous",
              "args": [
                {
                  "name": "proxy_type",
                  "type": "ProxyType"
                },
                {
                  "name": "delay",
                  "type": "BlockNumber"
                },
                {
                  "name": "index",
                  "type": "u16"
                }
              ],
              "documentation": [
                " Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and",
                " initialize it with a proxy of `proxy_type` for `origin` sender.",
                "",
                " Requires a `Signed` origin.",
                "",
                " - `proxy_type`: The type of the proxy that the sender will be registered as over the",
                " new account. This will almost always be the most permissive `ProxyType` possible to",
                " allow for maximum flexibility.",
                " - `index`: A disambiguation index, in case this is called multiple times in the same",
                " transaction (e.g. with `utility::batch`). Unless you're using `batch` you probably just",
                " want to use `0`.",
                " - `delay`: The announcement period required of the initial proxy. Will generally be",
                " zero.",
                "",
                " Fails with `Duplicate` if this has already been called in this transaction, from the",
                " same sender, with the same parameters.",
                "",
                " Fails if there are insufficient funds to pay for deposit.",
                "",
                " # <weight>",
                " Weight is a function of the number of proxies the user has (P).",
                " # </weight>",
                " TODO: Might be over counting 1 read"
              ]
            },
            {
              "name": "kill_anonymous",
              "args": [
                {
                  "name": "spawner",
                  "type": "AccountId"
                },
                {
                  "name": "proxy_type",
                  "type": "ProxyType"
                },
                {
                  "name": "index",
                  "type": "u16"
                },
                {
                  "name": "height",
                  "type": "Compact<BlockNumber>"
                },
                {
                  "name": "ext_index",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Removes a previously spawned anonymous proxy.",
                "",
                " WARNING: **All access to this account will be lost.** Any funds held in it will be",
                " inaccessible.",
                "",
                " Requires a `Signed` origin, and the sender account must have been created by a call to",
                " `anonymous` with corresponding parameters.",
                "",
                " - `spawner`: The account that originally called `anonymous` to create this account.",
                " - `index`: The disambiguation index originally passed to `anonymous`. Probably `0`.",
                " - `proxy_type`: The proxy type originally passed to `anonymous`.",
                " - `height`: The height of the chain when the call to `anonymous` was processed.",
                " - `ext_index`: The extrinsic index in which the call to `anonymous` was processed.",
                "",
                " Fails with `NoPermission` in case the caller is not a previously created anonymous",
                " account whose `anonymous` call has corresponding parameters.",
                "",
                " # <weight>",
                " Weight is a function of the number of proxies the user has (P).",
                " # </weight>"
              ]
            },
            {
              "name": "announce",
              "args": [
                {
                  "name": "real",
                  "type": "AccountId"
                },
                {
                  "name": "call_hash",
                  "type": "CallHashOf"
                }
              ],
              "documentation": [
                " Publish the hash of a proxy-call that will be made in the future.",
                "",
                " This must be called some number of blocks before the corresponding `proxy` is attempted",
                " if the delay associated with the proxy relationship is greater than zero.",
                "",
                " No more than `MaxPending` announcements may be made at any one time.",
                "",
                " This will take a deposit of `AnnouncementDepositFactor` as well as",
                " `AnnouncementDepositBase` if there are no other pending announcements.",
                "",
                " The dispatch origin for this call must be _Signed_ and a proxy of `real`.",
                "",
                " Parameters:",
                " - `real`: The account that the proxy will make a call on behalf of.",
                " - `call_hash`: The hash of the call to be made by the `real` account.",
                "",
                " # <weight>",
                " Weight is a function of:",
                " - A: the number of announcements made.",
                " - P: the number of proxies the user has.",
                " # </weight>"
              ]
            },
            {
              "name": "remove_announcement",
              "args": [
                {
                  "name": "real",
                  "type": "AccountId"
                },
                {
                  "name": "call_hash",
                  "type": "CallHashOf"
                }
              ],
              "documentation": [
                " Remove a given announcement.",
                "",
                " May be called by a proxy account to remove a call they previously announced and return",
                " the deposit.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Parameters:",
                " - `real`: The account that the proxy will make a call on behalf of.",
                " - `call_hash`: The hash of the call to be made by the `real` account.",
                "",
                " # <weight>",
                " Weight is a function of:",
                " - A: the number of announcements made.",
                " - P: the number of proxies the user has.",
                " # </weight>"
              ]
            },
            {
              "name": "reject_announcement",
              "args": [
                {
                  "name": "delegate",
                  "type": "AccountId"
                },
                {
                  "name": "call_hash",
                  "type": "CallHashOf"
                }
              ],
              "documentation": [
                " Remove the given announcement of a delegate.",
                "",
                " May be called by a target (proxied) account to remove a call that one of their delegates",
                " (`delegate`) has announced they want to execute. The deposit is returned.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Parameters:",
                " - `delegate`: The account that previously announced the call.",
                " - `call_hash`: The hash of the call to be made.",
                "",
                " # <weight>",
                " Weight is a function of:",
                " - A: the number of announcements made.",
                " - P: the number of proxies the user has.",
                " # </weight>"
              ]
            },
            {
              "name": "proxy_announced",
              "args": [
                {
                  "name": "delegate",
                  "type": "AccountId"
                },
                {
                  "name": "real",
                  "type": "AccountId"
                },
                {
                  "name": "force_proxy_type",
                  "type": "Option<ProxyType>"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " Dispatch the given `call` from an account that the sender is authorised for through",
                " `add_proxy`.",
                "",
                " Removes any corresponding announcement(s).",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Parameters:",
                " - `real`: The account that the proxy will make a call on behalf of.",
                " - `force_proxy_type`: Specify the exact proxy type to be used and checked for this call.",
                " - `call`: The call to be made by the `real` account.",
                "",
                " # <weight>",
                " Weight is a function of:",
                " - A: the number of announcements made.",
                " - P: the number of proxies the user has.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "ProxyExecuted",
              "args": [
                "DispatchResult"
              ],
              "documentation": [
                " A proxy was executed correctly, with the given \\[result\\]."
              ]
            },
            {
              "name": "AnonymousCreated",
              "args": [
                "AccountId",
                "AccountId",
                "ProxyType",
                "u16"
              ],
              "documentation": [
                " Anonymous account has been created by new proxy with given",
                " disambiguation index and proxy type. \\[anonymous, who, proxy_type, disambiguation_index\\]"
              ]
            },
            {
              "name": "Announced",
              "args": [
                "AccountId",
                "AccountId",
                "Hash"
              ],
              "documentation": [
                " An announcement was placed to make a call in the future. \\[real, proxy, call_hash\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "ProxyDepositBase",
              "type": "BalanceOf",
              "value": "0x001843d5ba0500000000000000000000",
              "documentation": [
                " The base amount of currency needed to reserve for creating a proxy."
              ]
            },
            {
              "name": "ProxyDepositFactor",
              "type": "BalanceOf",
              "value": "0x0070f70b021200000000000000000000",
              "documentation": [
                " The amount of currency needed per proxy added."
              ]
            },
            {
              "name": "MaxProxies",
              "type": "u16",
              "value": "0x2000",
              "documentation": [
                " The maximum amount of proxies allowed for a single account."
              ]
            },
            {
              "name": "MaxPending",
              "type": "u32",
              "value": "0x20000000",
              "documentation": [
                " `MaxPending` metadata shadow."
              ]
            },
            {
              "name": "AnnouncementDepositBase",
              "type": "BalanceOf",
              "value": "0x001843d5ba0500000000000000000000",
              "documentation": [
                " `AnnouncementDepositBase` metadata shadow."
              ]
            },
            {
              "name": "AnnouncementDepositFactor",
              "type": "BalanceOf",
              "value": "0x00e0ee17042400000000000000000000",
              "documentation": [
                " `AnnouncementDepositFactor` metadata shadow."
              ]
            }
          ],
          "errors": [
            {
              "name": "TooMany",
              "documentation": [
                " There are too many proxies registered or too many announcements pending."
              ]
            },
            {
              "name": "NotFound",
              "documentation": [
                " Proxy registration not found."
              ]
            },
            {
              "name": "NotProxy",
              "documentation": [
                " Sender is not a proxy of the account to be proxied."
              ]
            },
            {
              "name": "Unproxyable",
              "documentation": [
                " A call which is incompatible with the proxy type's filter was attempted."
              ]
            },
            {
              "name": "Duplicate",
              "documentation": [
                " Account is already a proxy."
              ]
            },
            {
              "name": "NoPermission",
              "documentation": [
                " Call may not be made by proxy because it may escalate its privileges."
              ]
            },
            {
              "name": "Unannounced",
              "documentation": [
                " Announcement, if made at all, was made too recently."
              ]
            },
            {
              "name": "NoSelfProxy",
              "documentation": [
                " Cannot add self as proxy."
              ]
            }
          ],
          "index": 15
        },
        {
          "name": "Scheduler",
          "storage": {
            "prefix": "Scheduler",
            "items": [
              {
                "name": "Agenda",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "BlockNumber",
                    "value": "Vec<Option<Scheduled>>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Items to be executed, indexed by the block number that they should be executed on."
                ]
              },
              {
                "name": "Lookup",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "Bytes",
                    "value": "TaskAddress",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Lookup from identity to the block number and index of the task."
                ]
              },
              {
                "name": "StorageVersion",
                "modifier": "Default",
                "type": {
                  "plain": "Releases"
                },
                "fallback": "0x00",
                "documentation": [
                  " Storage version of the pallet.",
                  "",
                  " New networks start with last version."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "schedule",
              "args": [
                {
                  "name": "when",
                  "type": "BlockNumber"
                },
                {
                  "name": "maybe_periodic",
                  "type": "Option<Period>"
                },
                {
                  "name": "priority",
                  "type": "Priority"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " Anonymously schedule a task.",
                "",
                " # <weight>",
                " - S = Number of already scheduled calls",
                " - Base Weight: 22.29 + .126 * S µs",
                " - DB Weight:",
                "     - Read: Agenda",
                "     - Write: Agenda",
                " - Will use base weight of 25 which should be good for up to 30 scheduled calls",
                " # </weight>"
              ]
            },
            {
              "name": "cancel",
              "args": [
                {
                  "name": "when",
                  "type": "BlockNumber"
                },
                {
                  "name": "index",
                  "type": "u32"
                }
              ],
              "documentation": [
                " Cancel an anonymously scheduled task.",
                "",
                " # <weight>",
                " - S = Number of already scheduled calls",
                " - Base Weight: 22.15 + 2.869 * S µs",
                " - DB Weight:",
                "     - Read: Agenda",
                "     - Write: Agenda, Lookup",
                " - Will use base weight of 100 which should be good for up to 30 scheduled calls",
                " # </weight>"
              ]
            },
            {
              "name": "schedule_named",
              "args": [
                {
                  "name": "id",
                  "type": "Bytes"
                },
                {
                  "name": "when",
                  "type": "BlockNumber"
                },
                {
                  "name": "maybe_periodic",
                  "type": "Option<Period>"
                },
                {
                  "name": "priority",
                  "type": "Priority"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " Schedule a named task.",
                "",
                " # <weight>",
                " - S = Number of already scheduled calls",
                " - Base Weight: 29.6 + .159 * S µs",
                " - DB Weight:",
                "     - Read: Agenda, Lookup",
                "     - Write: Agenda, Lookup",
                " - Will use base weight of 35 which should be good for more than 30 scheduled calls",
                " # </weight>"
              ]
            },
            {
              "name": "cancel_named",
              "args": [
                {
                  "name": "id",
                  "type": "Bytes"
                }
              ],
              "documentation": [
                " Cancel a named scheduled task.",
                "",
                " # <weight>",
                " - S = Number of already scheduled calls",
                " - Base Weight: 24.91 + 2.907 * S µs",
                " - DB Weight:",
                "     - Read: Agenda, Lookup",
                "     - Write: Agenda, Lookup",
                " - Will use base weight of 100 which should be good for up to 30 scheduled calls",
                " # </weight>"
              ]
            },
            {
              "name": "schedule_after",
              "args": [
                {
                  "name": "after",
                  "type": "BlockNumber"
                },
                {
                  "name": "maybe_periodic",
                  "type": "Option<Period>"
                },
                {
                  "name": "priority",
                  "type": "Priority"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " Anonymously schedule a task after a delay.",
                "",
                " # <weight>",
                " Same as [`schedule`].",
                " # </weight>"
              ]
            },
            {
              "name": "schedule_named_after",
              "args": [
                {
                  "name": "id",
                  "type": "Bytes"
                },
                {
                  "name": "after",
                  "type": "BlockNumber"
                },
                {
                  "name": "maybe_periodic",
                  "type": "Option<Period>"
                },
                {
                  "name": "priority",
                  "type": "Priority"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " Schedule a named task after a delay.",
                "",
                " # <weight>",
                " Same as [`schedule_named`].",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Scheduled",
              "args": [
                "BlockNumber",
                "u32"
              ],
              "documentation": [
                " Scheduled some task. \\[when, index\\]"
              ]
            },
            {
              "name": "Canceled",
              "args": [
                "BlockNumber",
                "u32"
              ],
              "documentation": [
                " Canceled some task. \\[when, index\\]"
              ]
            },
            {
              "name": "Dispatched",
              "args": [
                "TaskAddress",
                "Option<Bytes>",
                "DispatchResult"
              ],
              "documentation": [
                " Dispatched some task. \\[task, id, result\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "FailedToSchedule",
              "documentation": [
                " Failed to schedule a call"
              ]
            },
            {
              "name": "NotFound",
              "documentation": [
                " Cannot find the scheduled call."
              ]
            },
            {
              "name": "TargetBlockNumberInPast",
              "documentation": [
                " Given target block number is in the past."
              ]
            },
            {
              "name": "RescheduleNoChange",
              "documentation": [
                " Reschedule failed because it does not change scheduled time."
              ]
            }
          ],
          "index": 16
        },
        {
          "name": "Indices",
          "storage": {
            "prefix": "Indices",
            "items": [
              {
                "name": "Accounts",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountIndex",
                    "value": "(AccountId,BalanceOf,bool)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " The lookup from index to account."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "claim",
              "args": [
                {
                  "name": "index",
                  "type": "AccountIndex"
                }
              ],
              "documentation": [
                " Assign an previously unassigned index.",
                "",
                " Payment: `Deposit` is reserved from the sender account.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " - `index`: the index to be claimed. This must not be in use.",
                "",
                " Emits `IndexAssigned` if successful.",
                "",
                " # <weight>",
                " - `O(1)`.",
                " - One storage mutation (codec `O(1)`).",
                " - One reserve operation.",
                " - One event.",
                " -------------------",
                " - DB Weight: 1 Read/Write (Accounts)",
                " # </weight>"
              ]
            },
            {
              "name": "transfer",
              "args": [
                {
                  "name": "new",
                  "type": "AccountId"
                },
                {
                  "name": "index",
                  "type": "AccountIndex"
                }
              ],
              "documentation": [
                " Assign an index already owned by the sender to another account. The balance reservation",
                " is effectively transferred to the new account.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " - `index`: the index to be re-assigned. This must be owned by the sender.",
                " - `new`: the new owner of the index. This function is a no-op if it is equal to sender.",
                "",
                " Emits `IndexAssigned` if successful.",
                "",
                " # <weight>",
                " - `O(1)`.",
                " - One storage mutation (codec `O(1)`).",
                " - One transfer operation.",
                " - One event.",
                " -------------------",
                " - DB Weight:",
                "    - Reads: Indices Accounts, System Account (recipient)",
                "    - Writes: Indices Accounts, System Account (recipient)",
                " # </weight>"
              ]
            },
            {
              "name": "free",
              "args": [
                {
                  "name": "index",
                  "type": "AccountIndex"
                }
              ],
              "documentation": [
                " Free up an index owned by the sender.",
                "",
                " Payment: Any previous deposit placed for the index is unreserved in the sender account.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must own the index.",
                "",
                " - `index`: the index to be freed. This must be owned by the sender.",
                "",
                " Emits `IndexFreed` if successful.",
                "",
                " # <weight>",
                " - `O(1)`.",
                " - One storage mutation (codec `O(1)`).",
                " - One reserve operation.",
                " - One event.",
                " -------------------",
                " - DB Weight: 1 Read/Write (Accounts)",
                " # </weight>"
              ]
            },
            {
              "name": "force_transfer",
              "args": [
                {
                  "name": "new",
                  "type": "AccountId"
                },
                {
                  "name": "index",
                  "type": "AccountIndex"
                },
                {
                  "name": "freeze",
                  "type": "bool"
                }
              ],
              "documentation": [
                " Force an index to an account. This doesn't require a deposit. If the index is already",
                " held, then any deposit is reimbursed to its current owner.",
                "",
                " The dispatch origin for this call must be _Root_.",
                "",
                " - `index`: the index to be (re-)assigned.",
                " - `new`: the new owner of the index. This function is a no-op if it is equal to sender.",
                " - `freeze`: if set to `true`, will freeze the index so it cannot be transferred.",
                "",
                " Emits `IndexAssigned` if successful.",
                "",
                " # <weight>",
                " - `O(1)`.",
                " - One storage mutation (codec `O(1)`).",
                " - Up to one reserve operation.",
                " - One event.",
                " -------------------",
                " - DB Weight:",
                "    - Reads: Indices Accounts, System Account (original owner)",
                "    - Writes: Indices Accounts, System Account (original owner)",
                " # </weight>"
              ]
            },
            {
              "name": "freeze",
              "args": [
                {
                  "name": "index",
                  "type": "AccountIndex"
                }
              ],
              "documentation": [
                " Freeze an index so it will always point to the sender account. This consumes the deposit.",
                "",
                " The dispatch origin for this call must be _Signed_ and the signing account must have a",
                " non-frozen account `index`.",
                "",
                " - `index`: the index to be frozen in place.",
                "",
                " Emits `IndexFrozen` if successful.",
                "",
                " # <weight>",
                " - `O(1)`.",
                " - One storage mutation (codec `O(1)`).",
                " - Up to one slash operation.",
                " - One event.",
                " -------------------",
                " - DB Weight: 1 Read/Write (Accounts)",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "IndexAssigned",
              "args": [
                "AccountId",
                "AccountIndex"
              ],
              "documentation": [
                " A account index was assigned. \\[index, who\\]"
              ]
            },
            {
              "name": "IndexFreed",
              "args": [
                "AccountIndex"
              ],
              "documentation": [
                " A account index has been freed up (unassigned). \\[index\\]"
              ]
            },
            {
              "name": "IndexFrozen",
              "args": [
                "AccountIndex",
                "AccountId"
              ],
              "documentation": [
                " A account index has been frozen to its current account ID. \\[index, who\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "Deposit",
              "type": "BalanceOf",
              "value": "0x00a0724e180900000000000000000000",
              "documentation": [
                " The deposit needed for reserving an index."
              ]
            }
          ],
          "errors": [],
          "index": 17
        },
        {
          "name": "GraduallyUpdate",
          "storage": {
            "prefix": "GraduallyUpdate",
            "items": [
              {
                "name": "GraduallyUpdates",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<GraduallyUpdate>"
                },
                "fallback": "0x00",
                "documentation": [
                  " All the on-going updates"
                ]
              },
              {
                "name": "LastUpdatedAt",
                "modifier": "Default",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " The last updated block number"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "gradually_update",
              "args": [
                {
                  "name": "update",
                  "type": "GraduallyUpdate"
                }
              ],
              "documentation": [
                " Add gradually_update to adjust numeric parameter."
              ]
            },
            {
              "name": "cancel_gradually_update",
              "args": [
                {
                  "name": "key",
                  "type": "StorageKeyBytes"
                }
              ],
              "documentation": [
                " Cancel gradually_update to adjust numeric parameter."
              ]
            }
          ],
          "events": [
            {
              "name": "GraduallyUpdateAdded",
              "args": [
                "StorageKeyBytes",
                "StorageValueBytes",
                "StorageValueBytes"
              ],
              "documentation": [
                " Gradually update added. [key, per_block, target_value]"
              ]
            },
            {
              "name": "GraduallyUpdateCancelled",
              "args": [
                "StorageKeyBytes"
              ],
              "documentation": [
                " Gradually update cancelled. [key]"
              ]
            },
            {
              "name": "Updated",
              "args": [
                "BlockNumber",
                "StorageKeyBytes",
                "StorageValueBytes"
              ],
              "documentation": [
                " Gradually update applied. [block_number, key, target_value]"
              ]
            }
          ],
          "constants": [
            {
              "name": "UpdateFrequency",
              "type": "BlockNumber",
              "value": "0x0a000000",
              "documentation": [
                " The frequency of updating values between blocks"
              ]
            }
          ],
          "errors": [
            {
              "name": "InvalidPerBlockOrTargetValue",
              "documentation": [
                " The `per_block` or `target_value` is invalid."
              ]
            },
            {
              "name": "InvalidTargetValue",
              "documentation": [
                " The `target_value` is invalid."
              ]
            },
            {
              "name": "GraduallyUpdateHasExisted",
              "documentation": [
                " Another update is already been scheduled for this key."
              ]
            },
            {
              "name": "GraduallyUpdateNotFound",
              "documentation": [
                " No update exists to cancel."
              ]
            }
          ],
          "index": 18
        },
        {
          "name": "GeneralCouncil",
          "storage": {
            "prefix": "Instance1Collective",
            "items": [
              {
                "name": "Proposals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The hashes of the active proposals."
                ]
              },
              {
                "name": "ProposalOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Proposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Actual proposal for a given hash, if it's current."
                ]
              },
              {
                "name": "Voting",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Votes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Votes on a given proposal, if it is ongoing."
                ]
              },
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Proposals so far."
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current members of the collective. This is stored sorted (just by value)."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " The prime member that helps determine the default vote behavior in case of absentations."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_members",
              "args": [
                {
                  "name": "new_members",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "prime",
                  "type": "Option<AccountId>"
                },
                {
                  "name": "old_count",
                  "type": "MemberCount"
                }
              ],
              "documentation": [
                " Set the collective's membership.",
                "",
                " - `new_members`: The new member list. Be nice to the chain and provide it sorted.",
                " - `prime`: The prime member whose vote sets the default.",
                " - `old_count`: The upper bound for the previous number of members in storage.",
                "                Used for weight estimation.",
                "",
                " Requires root origin.",
                "",
                " NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but",
                "       the weight estimations rely on it to estimate dispatchable weight.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(MP + N)` where:",
                "   - `M` old-members-count (code- and governance-bounded)",
                "   - `N` new-members-count (code- and governance-bounded)",
                "   - `P` proposals-count (code-bounded)",
                " - DB:",
                "   - 1 storage mutation (codec `O(M)` read, `O(N)` write) for reading and writing the members",
                "   - 1 storage read (codec `O(P)`) for reading the proposals",
                "   - `P` storage mutations (codec `O(M)`) for updating the votes for each proposal",
                "   - 1 storage write (codec `O(1)`) for deleting the old `prime` and setting the new one",
                " # </weight>"
              ]
            },
            {
              "name": "execute",
              "args": [
                {
                  "name": "proposal",
                  "type": "Proposal"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Dispatch a proposal from a member using the `Member` origin.",
                "",
                " Origin must be a member of the collective.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(M + P)` where `M` members-count (code-bounded) and `P` complexity of dispatching `proposal`",
                " - DB: 1 read (codec `O(M)`) + DB access of `proposal`",
                " - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "propose",
              "args": [
                {
                  "name": "threshold",
                  "type": "Compact<MemberCount>"
                },
                {
                  "name": "proposal",
                  "type": "Proposal"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Add a new proposal to either be voted on or executed directly.",
                "",
                " Requires the sender to be member.",
                "",
                " `threshold` determines whether `proposal` is executed directly (`threshold < 2`)",
                " or put up for voting.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(B + M + P1)` or `O(B + M + P2)` where:",
                "   - `B` is `proposal` size in bytes (length-fee-bounded)",
                "   - `M` is members-count (code- and governance-bounded)",
                "   - branching is influenced by `threshold` where:",
                "     - `P1` is proposal execution complexity (`threshold < 2`)",
                "     - `P2` is proposals-count (code-bounded) (`threshold >= 2`)",
                " - DB:",
                "   - 1 storage read `is_member` (codec `O(M)`)",
                "   - 1 storage read `ProposalOf::contains_key` (codec `O(1)`)",
                "   - DB accesses influenced by `threshold`:",
                "     - EITHER storage accesses done by `proposal` (`threshold < 2`)",
                "     - OR proposal insertion (`threshold <= 2`)",
                "       - 1 storage mutation `Proposals` (codec `O(P2)`)",
                "       - 1 storage mutation `ProposalCount` (codec `O(1)`)",
                "       - 1 storage write `ProposalOf` (codec `O(B)`)",
                "       - 1 storage write `Voting` (codec `O(M)`)",
                "   - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "vote",
              "args": [
                {
                  "name": "proposal",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "Compact<ProposalIndex>"
                },
                {
                  "name": "approve",
                  "type": "bool"
                }
              ],
              "documentation": [
                " Add an aye or nay vote for the sender to the given proposal.",
                "",
                " Requires the sender to be a member.",
                "",
                " Transaction fees will be waived if the member is voting on any particular proposal",
                " for the first time and the call is successful. Subsequent vote changes will charge a fee.",
                " # <weight>",
                " ## Weight",
                " - `O(M)` where `M` is members-count (code- and governance-bounded)",
                " - DB:",
                "   - 1 storage read `Members` (codec `O(M)`)",
                "   - 1 storage mutation `Voting` (codec `O(M)`)",
                " - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "close",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "Compact<ProposalIndex>"
                },
                {
                  "name": "proposal_weight_bound",
                  "type": "Compact<Weight>"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Close a vote that is either approved, disapproved or whose voting period has ended.",
                "",
                " May be called by any signed account in order to finish voting and close the proposal.",
                "",
                " If called before the end of the voting period it will only close the vote if it is",
                " has enough votes to be approved or disapproved.",
                "",
                " If called after the end of the voting period abstentions are counted as rejections",
                " unless there is a prime member set and the prime member cast an approval.",
                "",
                " If the close operation completes successfully with disapproval, the transaction fee will",
                " be waived. Otherwise execution of the approved operation will be charged to the caller.",
                "",
                " + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed proposal.",
                " + `length_bound`: The upper bound for the length of the proposal in storage. Checked via",
                "                   `storage::read` so it is `size_of::<u32>() == 4` larger than the pure length.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(B + M + P1 + P2)` where:",
                "   - `B` is `proposal` size in bytes (length-fee-bounded)",
                "   - `M` is members-count (code- and governance-bounded)",
                "   - `P1` is the complexity of `proposal` preimage.",
                "   - `P2` is proposal-count (code-bounded)",
                " - DB:",
                "  - 2 storage reads (`Members`: codec `O(M)`, `Prime`: codec `O(1)`)",
                "  - 3 mutations (`Voting`: codec `O(M)`, `ProposalOf`: codec `O(B)`, `Proposals`: codec `O(P2)`)",
                "  - any mutations done while executing `proposal` (`P1`)",
                " - up to 3 events",
                " # </weight>"
              ]
            },
            {
              "name": "disapprove_proposal",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "documentation": [
                " Disapprove a proposal, close, and remove it from the system, regardless of its current state.",
                "",
                " Must be called by the Root origin.",
                "",
                " Parameters:",
                " * `proposal_hash`: The hash of the proposal that should be disapproved.",
                "",
                " # <weight>",
                " Complexity: O(P) where P is the number of max proposals",
                " DB Weight:",
                " * Reads: Proposals",
                " * Writes: Voting, Proposals, ProposalOf",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Proposed",
              "args": [
                "AccountId",
                "ProposalIndex",
                "Hash",
                "MemberCount"
              ],
              "documentation": [
                " A motion (given hash) has been proposed (by given account) with a threshold (given",
                " `MemberCount`).",
                " \\[account, proposal_index, proposal_hash, threshold\\]"
              ]
            },
            {
              "name": "Voted",
              "args": [
                "AccountId",
                "Hash",
                "bool",
                "MemberCount",
                "MemberCount"
              ],
              "documentation": [
                " A motion (given hash) has been voted on by given account, leaving",
                " a tally (yes votes and no votes given respectively as `MemberCount`).",
                " \\[account, proposal_hash, voted, yes, no\\]"
              ]
            },
            {
              "name": "Approved",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A motion was approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Disapproved",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A motion was not approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Executed",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "documentation": [
                " A motion was executed; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "MemberExecuted",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "documentation": [
                " A single member did some action; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "Closed",
              "args": [
                "Hash",
                "MemberCount",
                "MemberCount"
              ],
              "documentation": [
                " A proposal was closed because its threshold was reached or after its duration was up.",
                " \\[proposal_hash, yes, no\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NotMember",
              "documentation": [
                " Account is not a member"
              ]
            },
            {
              "name": "DuplicateProposal",
              "documentation": [
                " Duplicate proposals not allowed"
              ]
            },
            {
              "name": "ProposalMissing",
              "documentation": [
                " Proposal must exist"
              ]
            },
            {
              "name": "WrongIndex",
              "documentation": [
                " Mismatched index"
              ]
            },
            {
              "name": "DuplicateVote",
              "documentation": [
                " Duplicate vote ignored"
              ]
            },
            {
              "name": "AlreadyInitialized",
              "documentation": [
                " Members are already initialized!"
              ]
            },
            {
              "name": "TooEarly",
              "documentation": [
                " The close call was made too early, before the end of the voting."
              ]
            },
            {
              "name": "TooManyProposals",
              "documentation": [
                " There can only be a maximum of `MaxProposals` active proposals."
              ]
            },
            {
              "name": "WrongProposalWeight",
              "documentation": [
                " The given weight bound for the proposal was too low."
              ]
            },
            {
              "name": "WrongProposalLength",
              "documentation": [
                " The given length bound for the proposal was too low."
              ]
            }
          ],
          "index": 19
        },
        {
          "name": "GeneralCouncilMembership",
          "storage": {
            "prefix": "Instance1Membership",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current membership, stored as an ordered Vec."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current prime member, if one exists."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Add a member `who` to the set.",
                "",
                " May only be called from `T::AddOrigin`."
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Remove a member `who` from the set.",
                "",
                " May only be called from `T::RemoveOrigin`."
              ]
            },
            {
              "name": "swap_member",
              "args": [
                {
                  "name": "remove",
                  "type": "AccountId"
                },
                {
                  "name": "add",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out one member `remove` for another `add`.",
                "",
                " May only be called from `T::SwapOrigin`.",
                "",
                " Prime membership is *not* passed from `remove` to `add`, if extant."
              ]
            },
            {
              "name": "reset_members",
              "args": [
                {
                  "name": "members",
                  "type": "Vec<AccountId>"
                }
              ],
              "documentation": [
                " Change the membership to a new set, disregarding the existing membership. Be nice and",
                " pass `members` pre-sorted.",
                "",
                " May only be called from `T::ResetOrigin`."
              ]
            },
            {
              "name": "change_key",
              "args": [
                {
                  "name": "new",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out the sending member for some other key `new`.",
                "",
                " May only be called from `Signed` origin of a current member.",
                "",
                " Prime membership is passed from the origin account to `new`, if extant."
              ]
            },
            {
              "name": "set_prime",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Set the prime member. Must be a current member.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            },
            {
              "name": "clear_prime",
              "args": [],
              "documentation": [
                " Remove the prime member if it exists.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            }
          ],
          "events": [
            {
              "name": "MemberAdded",
              "args": [],
              "documentation": [
                " The given member was added; see the transaction for who."
              ]
            },
            {
              "name": "MemberRemoved",
              "args": [],
              "documentation": [
                " The given member was removed; see the transaction for who."
              ]
            },
            {
              "name": "MembersSwapped",
              "args": [],
              "documentation": [
                " Two members were swapped; see the transaction for who."
              ]
            },
            {
              "name": "MembersReset",
              "args": [],
              "documentation": [
                " The membership was reset; see the transaction for who the new set is."
              ]
            },
            {
              "name": "KeyChanged",
              "args": [],
              "documentation": [
                " One of the members' keys changed."
              ]
            },
            {
              "name": "Dummy",
              "args": [
                "PhantomData"
              ],
              "documentation": [
                " Phantom member, never used."
              ]
            }
          ],
          "constants": [],
          "errors": [],
          "index": 20
        },
        {
          "name": "HonzonCouncil",
          "storage": {
            "prefix": "Instance2Collective",
            "items": [
              {
                "name": "Proposals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The hashes of the active proposals."
                ]
              },
              {
                "name": "ProposalOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Proposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Actual proposal for a given hash, if it's current."
                ]
              },
              {
                "name": "Voting",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Votes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Votes on a given proposal, if it is ongoing."
                ]
              },
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Proposals so far."
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current members of the collective. This is stored sorted (just by value)."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " The prime member that helps determine the default vote behavior in case of absentations."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_members",
              "args": [
                {
                  "name": "new_members",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "prime",
                  "type": "Option<AccountId>"
                },
                {
                  "name": "old_count",
                  "type": "MemberCount"
                }
              ],
              "documentation": [
                " Set the collective's membership.",
                "",
                " - `new_members`: The new member list. Be nice to the chain and provide it sorted.",
                " - `prime`: The prime member whose vote sets the default.",
                " - `old_count`: The upper bound for the previous number of members in storage.",
                "                Used for weight estimation.",
                "",
                " Requires root origin.",
                "",
                " NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but",
                "       the weight estimations rely on it to estimate dispatchable weight.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(MP + N)` where:",
                "   - `M` old-members-count (code- and governance-bounded)",
                "   - `N` new-members-count (code- and governance-bounded)",
                "   - `P` proposals-count (code-bounded)",
                " - DB:",
                "   - 1 storage mutation (codec `O(M)` read, `O(N)` write) for reading and writing the members",
                "   - 1 storage read (codec `O(P)`) for reading the proposals",
                "   - `P` storage mutations (codec `O(M)`) for updating the votes for each proposal",
                "   - 1 storage write (codec `O(1)`) for deleting the old `prime` and setting the new one",
                " # </weight>"
              ]
            },
            {
              "name": "execute",
              "args": [
                {
                  "name": "proposal",
                  "type": "Proposal"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Dispatch a proposal from a member using the `Member` origin.",
                "",
                " Origin must be a member of the collective.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(M + P)` where `M` members-count (code-bounded) and `P` complexity of dispatching `proposal`",
                " - DB: 1 read (codec `O(M)`) + DB access of `proposal`",
                " - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "propose",
              "args": [
                {
                  "name": "threshold",
                  "type": "Compact<MemberCount>"
                },
                {
                  "name": "proposal",
                  "type": "Proposal"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Add a new proposal to either be voted on or executed directly.",
                "",
                " Requires the sender to be member.",
                "",
                " `threshold` determines whether `proposal` is executed directly (`threshold < 2`)",
                " or put up for voting.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(B + M + P1)` or `O(B + M + P2)` where:",
                "   - `B` is `proposal` size in bytes (length-fee-bounded)",
                "   - `M` is members-count (code- and governance-bounded)",
                "   - branching is influenced by `threshold` where:",
                "     - `P1` is proposal execution complexity (`threshold < 2`)",
                "     - `P2` is proposals-count (code-bounded) (`threshold >= 2`)",
                " - DB:",
                "   - 1 storage read `is_member` (codec `O(M)`)",
                "   - 1 storage read `ProposalOf::contains_key` (codec `O(1)`)",
                "   - DB accesses influenced by `threshold`:",
                "     - EITHER storage accesses done by `proposal` (`threshold < 2`)",
                "     - OR proposal insertion (`threshold <= 2`)",
                "       - 1 storage mutation `Proposals` (codec `O(P2)`)",
                "       - 1 storage mutation `ProposalCount` (codec `O(1)`)",
                "       - 1 storage write `ProposalOf` (codec `O(B)`)",
                "       - 1 storage write `Voting` (codec `O(M)`)",
                "   - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "vote",
              "args": [
                {
                  "name": "proposal",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "Compact<ProposalIndex>"
                },
                {
                  "name": "approve",
                  "type": "bool"
                }
              ],
              "documentation": [
                " Add an aye or nay vote for the sender to the given proposal.",
                "",
                " Requires the sender to be a member.",
                "",
                " Transaction fees will be waived if the member is voting on any particular proposal",
                " for the first time and the call is successful. Subsequent vote changes will charge a fee.",
                " # <weight>",
                " ## Weight",
                " - `O(M)` where `M` is members-count (code- and governance-bounded)",
                " - DB:",
                "   - 1 storage read `Members` (codec `O(M)`)",
                "   - 1 storage mutation `Voting` (codec `O(M)`)",
                " - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "close",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "Compact<ProposalIndex>"
                },
                {
                  "name": "proposal_weight_bound",
                  "type": "Compact<Weight>"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Close a vote that is either approved, disapproved or whose voting period has ended.",
                "",
                " May be called by any signed account in order to finish voting and close the proposal.",
                "",
                " If called before the end of the voting period it will only close the vote if it is",
                " has enough votes to be approved or disapproved.",
                "",
                " If called after the end of the voting period abstentions are counted as rejections",
                " unless there is a prime member set and the prime member cast an approval.",
                "",
                " If the close operation completes successfully with disapproval, the transaction fee will",
                " be waived. Otherwise execution of the approved operation will be charged to the caller.",
                "",
                " + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed proposal.",
                " + `length_bound`: The upper bound for the length of the proposal in storage. Checked via",
                "                   `storage::read` so it is `size_of::<u32>() == 4` larger than the pure length.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(B + M + P1 + P2)` where:",
                "   - `B` is `proposal` size in bytes (length-fee-bounded)",
                "   - `M` is members-count (code- and governance-bounded)",
                "   - `P1` is the complexity of `proposal` preimage.",
                "   - `P2` is proposal-count (code-bounded)",
                " - DB:",
                "  - 2 storage reads (`Members`: codec `O(M)`, `Prime`: codec `O(1)`)",
                "  - 3 mutations (`Voting`: codec `O(M)`, `ProposalOf`: codec `O(B)`, `Proposals`: codec `O(P2)`)",
                "  - any mutations done while executing `proposal` (`P1`)",
                " - up to 3 events",
                " # </weight>"
              ]
            },
            {
              "name": "disapprove_proposal",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "documentation": [
                " Disapprove a proposal, close, and remove it from the system, regardless of its current state.",
                "",
                " Must be called by the Root origin.",
                "",
                " Parameters:",
                " * `proposal_hash`: The hash of the proposal that should be disapproved.",
                "",
                " # <weight>",
                " Complexity: O(P) where P is the number of max proposals",
                " DB Weight:",
                " * Reads: Proposals",
                " * Writes: Voting, Proposals, ProposalOf",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Proposed",
              "args": [
                "AccountId",
                "ProposalIndex",
                "Hash",
                "MemberCount"
              ],
              "documentation": [
                " A motion (given hash) has been proposed (by given account) with a threshold (given",
                " `MemberCount`).",
                " \\[account, proposal_index, proposal_hash, threshold\\]"
              ]
            },
            {
              "name": "Voted",
              "args": [
                "AccountId",
                "Hash",
                "bool",
                "MemberCount",
                "MemberCount"
              ],
              "documentation": [
                " A motion (given hash) has been voted on by given account, leaving",
                " a tally (yes votes and no votes given respectively as `MemberCount`).",
                " \\[account, proposal_hash, voted, yes, no\\]"
              ]
            },
            {
              "name": "Approved",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A motion was approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Disapproved",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A motion was not approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Executed",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "documentation": [
                " A motion was executed; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "MemberExecuted",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "documentation": [
                " A single member did some action; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "Closed",
              "args": [
                "Hash",
                "MemberCount",
                "MemberCount"
              ],
              "documentation": [
                " A proposal was closed because its threshold was reached or after its duration was up.",
                " \\[proposal_hash, yes, no\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NotMember",
              "documentation": [
                " Account is not a member"
              ]
            },
            {
              "name": "DuplicateProposal",
              "documentation": [
                " Duplicate proposals not allowed"
              ]
            },
            {
              "name": "ProposalMissing",
              "documentation": [
                " Proposal must exist"
              ]
            },
            {
              "name": "WrongIndex",
              "documentation": [
                " Mismatched index"
              ]
            },
            {
              "name": "DuplicateVote",
              "documentation": [
                " Duplicate vote ignored"
              ]
            },
            {
              "name": "AlreadyInitialized",
              "documentation": [
                " Members are already initialized!"
              ]
            },
            {
              "name": "TooEarly",
              "documentation": [
                " The close call was made too early, before the end of the voting."
              ]
            },
            {
              "name": "TooManyProposals",
              "documentation": [
                " There can only be a maximum of `MaxProposals` active proposals."
              ]
            },
            {
              "name": "WrongProposalWeight",
              "documentation": [
                " The given weight bound for the proposal was too low."
              ]
            },
            {
              "name": "WrongProposalLength",
              "documentation": [
                " The given length bound for the proposal was too low."
              ]
            }
          ],
          "index": 21
        },
        {
          "name": "HonzonCouncilMembership",
          "storage": {
            "prefix": "Instance2Membership",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current membership, stored as an ordered Vec."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current prime member, if one exists."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Add a member `who` to the set.",
                "",
                " May only be called from `T::AddOrigin`."
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Remove a member `who` from the set.",
                "",
                " May only be called from `T::RemoveOrigin`."
              ]
            },
            {
              "name": "swap_member",
              "args": [
                {
                  "name": "remove",
                  "type": "AccountId"
                },
                {
                  "name": "add",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out one member `remove` for another `add`.",
                "",
                " May only be called from `T::SwapOrigin`.",
                "",
                " Prime membership is *not* passed from `remove` to `add`, if extant."
              ]
            },
            {
              "name": "reset_members",
              "args": [
                {
                  "name": "members",
                  "type": "Vec<AccountId>"
                }
              ],
              "documentation": [
                " Change the membership to a new set, disregarding the existing membership. Be nice and",
                " pass `members` pre-sorted.",
                "",
                " May only be called from `T::ResetOrigin`."
              ]
            },
            {
              "name": "change_key",
              "args": [
                {
                  "name": "new",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out the sending member for some other key `new`.",
                "",
                " May only be called from `Signed` origin of a current member.",
                "",
                " Prime membership is passed from the origin account to `new`, if extant."
              ]
            },
            {
              "name": "set_prime",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Set the prime member. Must be a current member.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            },
            {
              "name": "clear_prime",
              "args": [],
              "documentation": [
                " Remove the prime member if it exists.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            }
          ],
          "events": [
            {
              "name": "MemberAdded",
              "args": [],
              "documentation": [
                " The given member was added; see the transaction for who."
              ]
            },
            {
              "name": "MemberRemoved",
              "args": [],
              "documentation": [
                " The given member was removed; see the transaction for who."
              ]
            },
            {
              "name": "MembersSwapped",
              "args": [],
              "documentation": [
                " Two members were swapped; see the transaction for who."
              ]
            },
            {
              "name": "MembersReset",
              "args": [],
              "documentation": [
                " The membership was reset; see the transaction for who the new set is."
              ]
            },
            {
              "name": "KeyChanged",
              "args": [],
              "documentation": [
                " One of the members' keys changed."
              ]
            },
            {
              "name": "Dummy",
              "args": [
                "PhantomData"
              ],
              "documentation": [
                " Phantom member, never used."
              ]
            }
          ],
          "constants": [],
          "errors": [],
          "index": 22
        },
        {
          "name": "HomaCouncil",
          "storage": {
            "prefix": "Instance3Collective",
            "items": [
              {
                "name": "Proposals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The hashes of the active proposals."
                ]
              },
              {
                "name": "ProposalOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Proposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Actual proposal for a given hash, if it's current."
                ]
              },
              {
                "name": "Voting",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Votes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Votes on a given proposal, if it is ongoing."
                ]
              },
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Proposals so far."
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current members of the collective. This is stored sorted (just by value)."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " The prime member that helps determine the default vote behavior in case of absentations."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_members",
              "args": [
                {
                  "name": "new_members",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "prime",
                  "type": "Option<AccountId>"
                },
                {
                  "name": "old_count",
                  "type": "MemberCount"
                }
              ],
              "documentation": [
                " Set the collective's membership.",
                "",
                " - `new_members`: The new member list. Be nice to the chain and provide it sorted.",
                " - `prime`: The prime member whose vote sets the default.",
                " - `old_count`: The upper bound for the previous number of members in storage.",
                "                Used for weight estimation.",
                "",
                " Requires root origin.",
                "",
                " NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but",
                "       the weight estimations rely on it to estimate dispatchable weight.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(MP + N)` where:",
                "   - `M` old-members-count (code- and governance-bounded)",
                "   - `N` new-members-count (code- and governance-bounded)",
                "   - `P` proposals-count (code-bounded)",
                " - DB:",
                "   - 1 storage mutation (codec `O(M)` read, `O(N)` write) for reading and writing the members",
                "   - 1 storage read (codec `O(P)`) for reading the proposals",
                "   - `P` storage mutations (codec `O(M)`) for updating the votes for each proposal",
                "   - 1 storage write (codec `O(1)`) for deleting the old `prime` and setting the new one",
                " # </weight>"
              ]
            },
            {
              "name": "execute",
              "args": [
                {
                  "name": "proposal",
                  "type": "Proposal"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Dispatch a proposal from a member using the `Member` origin.",
                "",
                " Origin must be a member of the collective.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(M + P)` where `M` members-count (code-bounded) and `P` complexity of dispatching `proposal`",
                " - DB: 1 read (codec `O(M)`) + DB access of `proposal`",
                " - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "propose",
              "args": [
                {
                  "name": "threshold",
                  "type": "Compact<MemberCount>"
                },
                {
                  "name": "proposal",
                  "type": "Proposal"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Add a new proposal to either be voted on or executed directly.",
                "",
                " Requires the sender to be member.",
                "",
                " `threshold` determines whether `proposal` is executed directly (`threshold < 2`)",
                " or put up for voting.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(B + M + P1)` or `O(B + M + P2)` where:",
                "   - `B` is `proposal` size in bytes (length-fee-bounded)",
                "   - `M` is members-count (code- and governance-bounded)",
                "   - branching is influenced by `threshold` where:",
                "     - `P1` is proposal execution complexity (`threshold < 2`)",
                "     - `P2` is proposals-count (code-bounded) (`threshold >= 2`)",
                " - DB:",
                "   - 1 storage read `is_member` (codec `O(M)`)",
                "   - 1 storage read `ProposalOf::contains_key` (codec `O(1)`)",
                "   - DB accesses influenced by `threshold`:",
                "     - EITHER storage accesses done by `proposal` (`threshold < 2`)",
                "     - OR proposal insertion (`threshold <= 2`)",
                "       - 1 storage mutation `Proposals` (codec `O(P2)`)",
                "       - 1 storage mutation `ProposalCount` (codec `O(1)`)",
                "       - 1 storage write `ProposalOf` (codec `O(B)`)",
                "       - 1 storage write `Voting` (codec `O(M)`)",
                "   - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "vote",
              "args": [
                {
                  "name": "proposal",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "Compact<ProposalIndex>"
                },
                {
                  "name": "approve",
                  "type": "bool"
                }
              ],
              "documentation": [
                " Add an aye or nay vote for the sender to the given proposal.",
                "",
                " Requires the sender to be a member.",
                "",
                " Transaction fees will be waived if the member is voting on any particular proposal",
                " for the first time and the call is successful. Subsequent vote changes will charge a fee.",
                " # <weight>",
                " ## Weight",
                " - `O(M)` where `M` is members-count (code- and governance-bounded)",
                " - DB:",
                "   - 1 storage read `Members` (codec `O(M)`)",
                "   - 1 storage mutation `Voting` (codec `O(M)`)",
                " - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "close",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "Compact<ProposalIndex>"
                },
                {
                  "name": "proposal_weight_bound",
                  "type": "Compact<Weight>"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Close a vote that is either approved, disapproved or whose voting period has ended.",
                "",
                " May be called by any signed account in order to finish voting and close the proposal.",
                "",
                " If called before the end of the voting period it will only close the vote if it is",
                " has enough votes to be approved or disapproved.",
                "",
                " If called after the end of the voting period abstentions are counted as rejections",
                " unless there is a prime member set and the prime member cast an approval.",
                "",
                " If the close operation completes successfully with disapproval, the transaction fee will",
                " be waived. Otherwise execution of the approved operation will be charged to the caller.",
                "",
                " + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed proposal.",
                " + `length_bound`: The upper bound for the length of the proposal in storage. Checked via",
                "                   `storage::read` so it is `size_of::<u32>() == 4` larger than the pure length.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(B + M + P1 + P2)` where:",
                "   - `B` is `proposal` size in bytes (length-fee-bounded)",
                "   - `M` is members-count (code- and governance-bounded)",
                "   - `P1` is the complexity of `proposal` preimage.",
                "   - `P2` is proposal-count (code-bounded)",
                " - DB:",
                "  - 2 storage reads (`Members`: codec `O(M)`, `Prime`: codec `O(1)`)",
                "  - 3 mutations (`Voting`: codec `O(M)`, `ProposalOf`: codec `O(B)`, `Proposals`: codec `O(P2)`)",
                "  - any mutations done while executing `proposal` (`P1`)",
                " - up to 3 events",
                " # </weight>"
              ]
            },
            {
              "name": "disapprove_proposal",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "documentation": [
                " Disapprove a proposal, close, and remove it from the system, regardless of its current state.",
                "",
                " Must be called by the Root origin.",
                "",
                " Parameters:",
                " * `proposal_hash`: The hash of the proposal that should be disapproved.",
                "",
                " # <weight>",
                " Complexity: O(P) where P is the number of max proposals",
                " DB Weight:",
                " * Reads: Proposals",
                " * Writes: Voting, Proposals, ProposalOf",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Proposed",
              "args": [
                "AccountId",
                "ProposalIndex",
                "Hash",
                "MemberCount"
              ],
              "documentation": [
                " A motion (given hash) has been proposed (by given account) with a threshold (given",
                " `MemberCount`).",
                " \\[account, proposal_index, proposal_hash, threshold\\]"
              ]
            },
            {
              "name": "Voted",
              "args": [
                "AccountId",
                "Hash",
                "bool",
                "MemberCount",
                "MemberCount"
              ],
              "documentation": [
                " A motion (given hash) has been voted on by given account, leaving",
                " a tally (yes votes and no votes given respectively as `MemberCount`).",
                " \\[account, proposal_hash, voted, yes, no\\]"
              ]
            },
            {
              "name": "Approved",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A motion was approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Disapproved",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A motion was not approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Executed",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "documentation": [
                " A motion was executed; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "MemberExecuted",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "documentation": [
                " A single member did some action; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "Closed",
              "args": [
                "Hash",
                "MemberCount",
                "MemberCount"
              ],
              "documentation": [
                " A proposal was closed because its threshold was reached or after its duration was up.",
                " \\[proposal_hash, yes, no\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NotMember",
              "documentation": [
                " Account is not a member"
              ]
            },
            {
              "name": "DuplicateProposal",
              "documentation": [
                " Duplicate proposals not allowed"
              ]
            },
            {
              "name": "ProposalMissing",
              "documentation": [
                " Proposal must exist"
              ]
            },
            {
              "name": "WrongIndex",
              "documentation": [
                " Mismatched index"
              ]
            },
            {
              "name": "DuplicateVote",
              "documentation": [
                " Duplicate vote ignored"
              ]
            },
            {
              "name": "AlreadyInitialized",
              "documentation": [
                " Members are already initialized!"
              ]
            },
            {
              "name": "TooEarly",
              "documentation": [
                " The close call was made too early, before the end of the voting."
              ]
            },
            {
              "name": "TooManyProposals",
              "documentation": [
                " There can only be a maximum of `MaxProposals` active proposals."
              ]
            },
            {
              "name": "WrongProposalWeight",
              "documentation": [
                " The given weight bound for the proposal was too low."
              ]
            },
            {
              "name": "WrongProposalLength",
              "documentation": [
                " The given length bound for the proposal was too low."
              ]
            }
          ],
          "index": 23
        },
        {
          "name": "HomaCouncilMembership",
          "storage": {
            "prefix": "Instance3Membership",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current membership, stored as an ordered Vec."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current prime member, if one exists."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Add a member `who` to the set.",
                "",
                " May only be called from `T::AddOrigin`."
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Remove a member `who` from the set.",
                "",
                " May only be called from `T::RemoveOrigin`."
              ]
            },
            {
              "name": "swap_member",
              "args": [
                {
                  "name": "remove",
                  "type": "AccountId"
                },
                {
                  "name": "add",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out one member `remove` for another `add`.",
                "",
                " May only be called from `T::SwapOrigin`.",
                "",
                " Prime membership is *not* passed from `remove` to `add`, if extant."
              ]
            },
            {
              "name": "reset_members",
              "args": [
                {
                  "name": "members",
                  "type": "Vec<AccountId>"
                }
              ],
              "documentation": [
                " Change the membership to a new set, disregarding the existing membership. Be nice and",
                " pass `members` pre-sorted.",
                "",
                " May only be called from `T::ResetOrigin`."
              ]
            },
            {
              "name": "change_key",
              "args": [
                {
                  "name": "new",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out the sending member for some other key `new`.",
                "",
                " May only be called from `Signed` origin of a current member.",
                "",
                " Prime membership is passed from the origin account to `new`, if extant."
              ]
            },
            {
              "name": "set_prime",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Set the prime member. Must be a current member.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            },
            {
              "name": "clear_prime",
              "args": [],
              "documentation": [
                " Remove the prime member if it exists.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            }
          ],
          "events": [
            {
              "name": "MemberAdded",
              "args": [],
              "documentation": [
                " The given member was added; see the transaction for who."
              ]
            },
            {
              "name": "MemberRemoved",
              "args": [],
              "documentation": [
                " The given member was removed; see the transaction for who."
              ]
            },
            {
              "name": "MembersSwapped",
              "args": [],
              "documentation": [
                " Two members were swapped; see the transaction for who."
              ]
            },
            {
              "name": "MembersReset",
              "args": [],
              "documentation": [
                " The membership was reset; see the transaction for who the new set is."
              ]
            },
            {
              "name": "KeyChanged",
              "args": [],
              "documentation": [
                " One of the members' keys changed."
              ]
            },
            {
              "name": "Dummy",
              "args": [
                "PhantomData"
              ],
              "documentation": [
                " Phantom member, never used."
              ]
            }
          ],
          "constants": [],
          "errors": [],
          "index": 24
        },
        {
          "name": "TechnicalCommittee",
          "storage": {
            "prefix": "Instance4Collective",
            "items": [
              {
                "name": "Proposals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The hashes of the active proposals."
                ]
              },
              {
                "name": "ProposalOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Proposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Actual proposal for a given hash, if it's current."
                ]
              },
              {
                "name": "Voting",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Votes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Votes on a given proposal, if it is ongoing."
                ]
              },
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Proposals so far."
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current members of the collective. This is stored sorted (just by value)."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " The prime member that helps determine the default vote behavior in case of absentations."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_members",
              "args": [
                {
                  "name": "new_members",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "prime",
                  "type": "Option<AccountId>"
                },
                {
                  "name": "old_count",
                  "type": "MemberCount"
                }
              ],
              "documentation": [
                " Set the collective's membership.",
                "",
                " - `new_members`: The new member list. Be nice to the chain and provide it sorted.",
                " - `prime`: The prime member whose vote sets the default.",
                " - `old_count`: The upper bound for the previous number of members in storage.",
                "                Used for weight estimation.",
                "",
                " Requires root origin.",
                "",
                " NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but",
                "       the weight estimations rely on it to estimate dispatchable weight.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(MP + N)` where:",
                "   - `M` old-members-count (code- and governance-bounded)",
                "   - `N` new-members-count (code- and governance-bounded)",
                "   - `P` proposals-count (code-bounded)",
                " - DB:",
                "   - 1 storage mutation (codec `O(M)` read, `O(N)` write) for reading and writing the members",
                "   - 1 storage read (codec `O(P)`) for reading the proposals",
                "   - `P` storage mutations (codec `O(M)`) for updating the votes for each proposal",
                "   - 1 storage write (codec `O(1)`) for deleting the old `prime` and setting the new one",
                " # </weight>"
              ]
            },
            {
              "name": "execute",
              "args": [
                {
                  "name": "proposal",
                  "type": "Proposal"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Dispatch a proposal from a member using the `Member` origin.",
                "",
                " Origin must be a member of the collective.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(M + P)` where `M` members-count (code-bounded) and `P` complexity of dispatching `proposal`",
                " - DB: 1 read (codec `O(M)`) + DB access of `proposal`",
                " - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "propose",
              "args": [
                {
                  "name": "threshold",
                  "type": "Compact<MemberCount>"
                },
                {
                  "name": "proposal",
                  "type": "Proposal"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Add a new proposal to either be voted on or executed directly.",
                "",
                " Requires the sender to be member.",
                "",
                " `threshold` determines whether `proposal` is executed directly (`threshold < 2`)",
                " or put up for voting.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(B + M + P1)` or `O(B + M + P2)` where:",
                "   - `B` is `proposal` size in bytes (length-fee-bounded)",
                "   - `M` is members-count (code- and governance-bounded)",
                "   - branching is influenced by `threshold` where:",
                "     - `P1` is proposal execution complexity (`threshold < 2`)",
                "     - `P2` is proposals-count (code-bounded) (`threshold >= 2`)",
                " - DB:",
                "   - 1 storage read `is_member` (codec `O(M)`)",
                "   - 1 storage read `ProposalOf::contains_key` (codec `O(1)`)",
                "   - DB accesses influenced by `threshold`:",
                "     - EITHER storage accesses done by `proposal` (`threshold < 2`)",
                "     - OR proposal insertion (`threshold <= 2`)",
                "       - 1 storage mutation `Proposals` (codec `O(P2)`)",
                "       - 1 storage mutation `ProposalCount` (codec `O(1)`)",
                "       - 1 storage write `ProposalOf` (codec `O(B)`)",
                "       - 1 storage write `Voting` (codec `O(M)`)",
                "   - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "vote",
              "args": [
                {
                  "name": "proposal",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "Compact<ProposalIndex>"
                },
                {
                  "name": "approve",
                  "type": "bool"
                }
              ],
              "documentation": [
                " Add an aye or nay vote for the sender to the given proposal.",
                "",
                " Requires the sender to be a member.",
                "",
                " Transaction fees will be waived if the member is voting on any particular proposal",
                " for the first time and the call is successful. Subsequent vote changes will charge a fee.",
                " # <weight>",
                " ## Weight",
                " - `O(M)` where `M` is members-count (code- and governance-bounded)",
                " - DB:",
                "   - 1 storage read `Members` (codec `O(M)`)",
                "   - 1 storage mutation `Voting` (codec `O(M)`)",
                " - 1 event",
                " # </weight>"
              ]
            },
            {
              "name": "close",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "Compact<ProposalIndex>"
                },
                {
                  "name": "proposal_weight_bound",
                  "type": "Compact<Weight>"
                },
                {
                  "name": "length_bound",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Close a vote that is either approved, disapproved or whose voting period has ended.",
                "",
                " May be called by any signed account in order to finish voting and close the proposal.",
                "",
                " If called before the end of the voting period it will only close the vote if it is",
                " has enough votes to be approved or disapproved.",
                "",
                " If called after the end of the voting period abstentions are counted as rejections",
                " unless there is a prime member set and the prime member cast an approval.",
                "",
                " If the close operation completes successfully with disapproval, the transaction fee will",
                " be waived. Otherwise execution of the approved operation will be charged to the caller.",
                "",
                " + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed proposal.",
                " + `length_bound`: The upper bound for the length of the proposal in storage. Checked via",
                "                   `storage::read` so it is `size_of::<u32>() == 4` larger than the pure length.",
                "",
                " # <weight>",
                " ## Weight",
                " - `O(B + M + P1 + P2)` where:",
                "   - `B` is `proposal` size in bytes (length-fee-bounded)",
                "   - `M` is members-count (code- and governance-bounded)",
                "   - `P1` is the complexity of `proposal` preimage.",
                "   - `P2` is proposal-count (code-bounded)",
                " - DB:",
                "  - 2 storage reads (`Members`: codec `O(M)`, `Prime`: codec `O(1)`)",
                "  - 3 mutations (`Voting`: codec `O(M)`, `ProposalOf`: codec `O(B)`, `Proposals`: codec `O(P2)`)",
                "  - any mutations done while executing `proposal` (`P1`)",
                " - up to 3 events",
                " # </weight>"
              ]
            },
            {
              "name": "disapprove_proposal",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "documentation": [
                " Disapprove a proposal, close, and remove it from the system, regardless of its current state.",
                "",
                " Must be called by the Root origin.",
                "",
                " Parameters:",
                " * `proposal_hash`: The hash of the proposal that should be disapproved.",
                "",
                " # <weight>",
                " Complexity: O(P) where P is the number of max proposals",
                " DB Weight:",
                " * Reads: Proposals",
                " * Writes: Voting, Proposals, ProposalOf",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Proposed",
              "args": [
                "AccountId",
                "ProposalIndex",
                "Hash",
                "MemberCount"
              ],
              "documentation": [
                " A motion (given hash) has been proposed (by given account) with a threshold (given",
                " `MemberCount`).",
                " \\[account, proposal_index, proposal_hash, threshold\\]"
              ]
            },
            {
              "name": "Voted",
              "args": [
                "AccountId",
                "Hash",
                "bool",
                "MemberCount",
                "MemberCount"
              ],
              "documentation": [
                " A motion (given hash) has been voted on by given account, leaving",
                " a tally (yes votes and no votes given respectively as `MemberCount`).",
                " \\[account, proposal_hash, voted, yes, no\\]"
              ]
            },
            {
              "name": "Approved",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A motion was approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Disapproved",
              "args": [
                "Hash"
              ],
              "documentation": [
                " A motion was not approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Executed",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "documentation": [
                " A motion was executed; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "MemberExecuted",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "documentation": [
                " A single member did some action; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "Closed",
              "args": [
                "Hash",
                "MemberCount",
                "MemberCount"
              ],
              "documentation": [
                " A proposal was closed because its threshold was reached or after its duration was up.",
                " \\[proposal_hash, yes, no\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NotMember",
              "documentation": [
                " Account is not a member"
              ]
            },
            {
              "name": "DuplicateProposal",
              "documentation": [
                " Duplicate proposals not allowed"
              ]
            },
            {
              "name": "ProposalMissing",
              "documentation": [
                " Proposal must exist"
              ]
            },
            {
              "name": "WrongIndex",
              "documentation": [
                " Mismatched index"
              ]
            },
            {
              "name": "DuplicateVote",
              "documentation": [
                " Duplicate vote ignored"
              ]
            },
            {
              "name": "AlreadyInitialized",
              "documentation": [
                " Members are already initialized!"
              ]
            },
            {
              "name": "TooEarly",
              "documentation": [
                " The close call was made too early, before the end of the voting."
              ]
            },
            {
              "name": "TooManyProposals",
              "documentation": [
                " There can only be a maximum of `MaxProposals` active proposals."
              ]
            },
            {
              "name": "WrongProposalWeight",
              "documentation": [
                " The given weight bound for the proposal was too low."
              ]
            },
            {
              "name": "WrongProposalLength",
              "documentation": [
                " The given length bound for the proposal was too low."
              ]
            }
          ],
          "index": 25
        },
        {
          "name": "TechnicalCommitteeMembership",
          "storage": {
            "prefix": "Instance4Membership",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current membership, stored as an ordered Vec."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current prime member, if one exists."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Add a member `who` to the set.",
                "",
                " May only be called from `T::AddOrigin`."
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Remove a member `who` from the set.",
                "",
                " May only be called from `T::RemoveOrigin`."
              ]
            },
            {
              "name": "swap_member",
              "args": [
                {
                  "name": "remove",
                  "type": "AccountId"
                },
                {
                  "name": "add",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out one member `remove` for another `add`.",
                "",
                " May only be called from `T::SwapOrigin`.",
                "",
                " Prime membership is *not* passed from `remove` to `add`, if extant."
              ]
            },
            {
              "name": "reset_members",
              "args": [
                {
                  "name": "members",
                  "type": "Vec<AccountId>"
                }
              ],
              "documentation": [
                " Change the membership to a new set, disregarding the existing membership. Be nice and",
                " pass `members` pre-sorted.",
                "",
                " May only be called from `T::ResetOrigin`."
              ]
            },
            {
              "name": "change_key",
              "args": [
                {
                  "name": "new",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out the sending member for some other key `new`.",
                "",
                " May only be called from `Signed` origin of a current member.",
                "",
                " Prime membership is passed from the origin account to `new`, if extant."
              ]
            },
            {
              "name": "set_prime",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Set the prime member. Must be a current member.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            },
            {
              "name": "clear_prime",
              "args": [],
              "documentation": [
                " Remove the prime member if it exists.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            }
          ],
          "events": [
            {
              "name": "MemberAdded",
              "args": [],
              "documentation": [
                " The given member was added; see the transaction for who."
              ]
            },
            {
              "name": "MemberRemoved",
              "args": [],
              "documentation": [
                " The given member was removed; see the transaction for who."
              ]
            },
            {
              "name": "MembersSwapped",
              "args": [],
              "documentation": [
                " Two members were swapped; see the transaction for who."
              ]
            },
            {
              "name": "MembersReset",
              "args": [],
              "documentation": [
                " The membership was reset; see the transaction for who the new set is."
              ]
            },
            {
              "name": "KeyChanged",
              "args": [],
              "documentation": [
                " One of the members' keys changed."
              ]
            },
            {
              "name": "Dummy",
              "args": [
                "PhantomData"
              ],
              "documentation": [
                " Phantom member, never used."
              ]
            }
          ],
          "constants": [],
          "errors": [],
          "index": 26
        },
        {
          "name": "Authority",
          "storage": null,
          "calls": [
            {
              "name": "dispatch_as",
              "args": [
                {
                  "name": "as_origin",
                  "type": "AsOriginId"
                },
                {
                  "name": "call",
                  "type": "CallOf"
                }
              ],
              "documentation": [
                " Dispatch a dispatchable on behalf of other origin"
              ]
            },
            {
              "name": "schedule_dispatch",
              "args": [
                {
                  "name": "when",
                  "type": "DispatchTime"
                },
                {
                  "name": "priority",
                  "type": "Priority"
                },
                {
                  "name": "with_delayed_origin",
                  "type": "bool"
                },
                {
                  "name": "call",
                  "type": "CallOf"
                }
              ],
              "documentation": [
                " Schedule a dispatchable to be dispatched at later block.",
                " This is the only way to dispatch a call with `DelayedOrigin`."
              ]
            },
            {
              "name": "fast_track_scheduled_dispatch",
              "args": [
                {
                  "name": "initial_origin",
                  "type": "PalletsOrigin"
                },
                {
                  "name": "task_id",
                  "type": "ScheduleTaskIndex"
                },
                {
                  "name": "when",
                  "type": "DispatchTime"
                }
              ],
              "documentation": [
                " Fast track a scheduled dispatchable."
              ]
            },
            {
              "name": "delay_scheduled_dispatch",
              "args": [
                {
                  "name": "initial_origin",
                  "type": "PalletsOrigin"
                },
                {
                  "name": "task_id",
                  "type": "ScheduleTaskIndex"
                },
                {
                  "name": "additional_delay",
                  "type": "BlockNumber"
                }
              ],
              "documentation": [
                " Delay a scheduled dispatchable."
              ]
            },
            {
              "name": "cancel_scheduled_dispatch",
              "args": [
                {
                  "name": "initial_origin",
                  "type": "PalletsOrigin"
                },
                {
                  "name": "task_id",
                  "type": "ScheduleTaskIndex"
                }
              ],
              "documentation": [
                " Cancel a scheduled dispatchable."
              ]
            }
          ],
          "events": [
            {
              "name": "Dispatched",
              "args": [
                "DispatchResult"
              ],
              "documentation": [
                " A call is dispatched. [result]"
              ]
            },
            {
              "name": "Scheduled",
              "args": [
                "PalletsOrigin",
                "ScheduleTaskIndex"
              ],
              "documentation": [
                " A call is scheduled. [origin, index]"
              ]
            },
            {
              "name": "FastTracked",
              "args": [
                "PalletsOrigin",
                "ScheduleTaskIndex",
                "BlockNumber"
              ],
              "documentation": [
                " A scheduled call is fast tracked. [origin, index, when]"
              ]
            },
            {
              "name": "Delayed",
              "args": [
                "PalletsOrigin",
                "ScheduleTaskIndex",
                "BlockNumber"
              ],
              "documentation": [
                " A scheduled call is delayed. [origin, index, when]"
              ]
            },
            {
              "name": "Cancelled",
              "args": [
                "PalletsOrigin",
                "ScheduleTaskIndex"
              ],
              "documentation": [
                " A scheduled call is cancelled. [origin, index]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "Overflow",
              "documentation": [
                " Calculation overflow."
              ]
            },
            {
              "name": "FailedToSchedule",
              "documentation": [
                " Failed to schedule a task."
              ]
            },
            {
              "name": "FailedToCancel",
              "documentation": [
                " Failed to cancel a task."
              ]
            },
            {
              "name": "FailedToFastTrack",
              "documentation": [
                " Failed to fast track a task."
              ]
            },
            {
              "name": "FailedToDelay",
              "documentation": [
                " Failed to delay a task."
              ]
            }
          ],
          "index": 27
        },
        {
          "name": "ElectionsPhragmen",
          "storage": {
            "prefix": "PhragmenElection",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<SeatHolder>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current elected members.",
                  "",
                  " Invariant: Always sorted based on account id."
                ]
              },
              {
                "name": "RunnersUp",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<SeatHolder>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current reserved runners-up.",
                  "",
                  " Invariant: Always sorted based on rank (worse to best). Upon removal of a member, the",
                  " last (i.e. _best_) runner-up will be replaced."
                ]
              },
              {
                "name": "Candidates",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(AccountId,BalanceOf)>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The present candidate list. A current member or runner-up can never enter this vector",
                  " and is always implicitly assumed to be a candidate.",
                  "",
                  " Second element is the deposit.",
                  "",
                  " Invariant: Always sorted based on account id."
                ]
              },
              {
                "name": "ElectionRounds",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " The total number of vote rounds that have happened, excluding the upcoming one."
                ]
              },
              {
                "name": "Voting",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "Voter",
                    "linked": false
                  }
                },
                "fallback": "0x000000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " Votes and locked stake of a particular voter.",
                  "",
                  " TWOX-NOTE: SAFE as `AccountId` is a crypto hash."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "vote",
              "args": [
                {
                  "name": "votes",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "documentation": [
                " Vote for a set of candidates for the upcoming round of election. This can be called to",
                " set the initial votes, or update already existing votes.",
                "",
                " Upon initial voting, `value` units of `who`'s balance is locked and a deposit amount is",
                " reserved. The deposit is based on the number of votes and can be updated over time.",
                "",
                " The `votes` should:",
                "   - not be empty.",
                "   - be less than the number of possible candidates. Note that all current members and",
                "     runners-up are also automatically candidates for the next round.",
                "",
                " If `value` is more than `who`'s total balance, then the maximum of the two is used.",
                "",
                " The dispatch origin of this call must be signed.",
                "",
                " ### Warning",
                "",
                " It is the responsibility of the caller to **NOT** place all of their balance into the",
                " lock and keep some for further operations.",
                "",
                " # <weight>",
                " We assume the maximum weight among all 3 cases: vote_equal, vote_more and vote_less.",
                " # </weight>"
              ]
            },
            {
              "name": "remove_voter",
              "args": [],
              "documentation": [
                " Remove `origin` as a voter.",
                "",
                " This removes the lock and returns the deposit.",
                "",
                " The dispatch origin of this call must be signed and be a voter."
              ]
            },
            {
              "name": "submit_candidacy",
              "args": [
                {
                  "name": "candidate_count",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Submit oneself for candidacy. A fixed amount of deposit is recorded.",
                "",
                " All candidates are wiped at the end of the term. They either become a member/runner-up,",
                " or leave the system while their deposit is slashed.",
                "",
                " The dispatch origin of this call must be signed.",
                "",
                " ### Warning",
                "",
                " Even if a candidate ends up being a member, they must call [`Call::renounce_candidacy`]",
                " to get their deposit back. Losing the spot in an election will always lead to a slash.",
                "",
                " # <weight>",
                " The number of current candidates must be provided as witness data.",
                " # </weight>"
              ]
            },
            {
              "name": "renounce_candidacy",
              "args": [
                {
                  "name": "renouncing",
                  "type": "Renouncing"
                }
              ],
              "documentation": [
                " 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 deposit is",
                "   unreserved, returned and origin is removed as a candidate.",
                " - `origin` is a current runner-up. In this case, the deposit is unreserved, returned and",
                "   origin is removed as a runner-up.",
                " - `origin` is a current member. In this case, the deposit is unreserved and origin is",
                "   removed as a member, consequently not being a candidate for the next round anymore.",
                "   Similar to [`remove_members`], if replacement runners exists, they are immediately used.",
                "   If the prime is renouncing, then no prime will exist until the next round.",
                "",
                " The dispatch origin of this call must be signed, and have one of the above roles.",
                "",
                " # <weight>",
                " The type of renouncing must be provided as witness data.",
                " # </weight>"
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "LookupSource"
                },
                {
                  "name": "has_replacement",
                  "type": "bool"
                }
              ],
              "documentation": [
                " 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 election is started.",
                "",
                " The dispatch origin of this call must be root.",
                "",
                " Note that this does not affect the designated block number of the next election.",
                "",
                " # <weight>",
                " If we have a replacement, we use a small weight. Else, since this is a root call and",
                " will go into phragmen, we assume full block for now.",
                " # </weight>"
              ]
            },
            {
              "name": "clean_defunct_voters",
              "args": [
                {
                  "name": "_num_voters",
                  "type": "u32"
                },
                {
                  "name": "_num_defunct",
                  "type": "u32"
                }
              ],
              "documentation": [
                " Clean all voters who are defunct (i.e. they do not serve any purpose at all). The",
                " deposit of the removed voters are returned.",
                "",
                " This is an root function to be used only for cleaning the state.",
                "",
                " The dispatch origin of this call must be root.",
                "",
                " # <weight>",
                " The total number of voters and those that are defunct must be provided as witness data.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "NewTerm",
              "args": [
                "Vec<(AccountId,Balance)>"
              ],
              "documentation": [
                " A new term with \\[new_members\\]. This indicates that enough candidates existed to run the",
                " election, not that enough have has been elected. The inner value must be examined for",
                " this purpose. A `NewTerm(\\[\\])` indicates that some candidates got their bond slashed and",
                " none were elected, whilst `EmptyTerm` means that no candidates existed to begin with."
              ]
            },
            {
              "name": "EmptyTerm",
              "args": [],
              "documentation": [
                " No (or not enough) candidates existed for this round. This is different from",
                " `NewTerm(\\[\\])`. See the description of `NewTerm`."
              ]
            },
            {
              "name": "ElectionError",
              "args": [],
              "documentation": [
                " Internal error happened while trying to perform election."
              ]
            },
            {
              "name": "MemberKicked",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " A \\[member\\] has been removed. This should always be followed by either `NewTerm` or",
                " `EmptyTerm`."
              ]
            },
            {
              "name": "Renounced",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " Someone has renounced their candidacy."
              ]
            },
            {
              "name": "CandidateSlashed",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " A \\[candidate\\] was slashed by \\[amount\\] due to failing to obtain a seat as member or",
                " runner-up.",
                "",
                " Note that old members and runners-up are also candidates."
              ]
            },
            {
              "name": "SeatHolderSlashed",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " A \\[seat holder\\] was slashed by \\[amount\\] by being forcefully removed from the set."
              ]
            }
          ],
          "constants": [
            {
              "name": "CandidacyBond",
              "type": "BalanceOf",
              "value": "0x00e87648170000000000000000000000",
              "documentation": []
            },
            {
              "name": "VotingBondBase",
              "type": "BalanceOf",
              "value": "0x00c817a8040000000000000000000000",
              "documentation": []
            },
            {
              "name": "VotingBondFactor",
              "type": "BalanceOf",
              "value": "0x00e40b54020000000000000000000000",
              "documentation": []
            },
            {
              "name": "DesiredMembers",
              "type": "u32",
              "value": "0x0d000000",
              "documentation": []
            },
            {
              "name": "DesiredRunnersUp",
              "type": "u32",
              "value": "0x07000000",
              "documentation": []
            },
            {
              "name": "TermDuration",
              "type": "BlockNumber",
              "value": "0xc0890100",
              "documentation": []
            },
            {
              "name": "ModuleId",
              "type": "LockIdentifier",
              "value": "0x6163612f70687265",
              "documentation": []
            }
          ],
          "errors": [
            {
              "name": "UnableToVote",
              "documentation": [
                " Cannot vote when no candidates or members exist."
              ]
            },
            {
              "name": "NoVotes",
              "documentation": [
                " Must vote for at least one candidate."
              ]
            },
            {
              "name": "TooManyVotes",
              "documentation": [
                " Cannot vote more than candidates."
              ]
            },
            {
              "name": "MaximumVotesExceeded",
              "documentation": [
                " Cannot vote more than maximum allowed."
              ]
            },
            {
              "name": "LowBalance",
              "documentation": [
                " Cannot vote with stake less than minimum balance."
              ]
            },
            {
              "name": "UnableToPayBond",
              "documentation": [
                " Voter can not pay voting bond."
              ]
            },
            {
              "name": "MustBeVoter",
              "documentation": [
                " Must be a voter."
              ]
            },
            {
              "name": "ReportSelf",
              "documentation": [
                " Cannot report self."
              ]
            },
            {
              "name": "DuplicatedCandidate",
              "documentation": [
                " Duplicated candidate submission."
              ]
            },
            {
              "name": "MemberSubmit",
              "documentation": [
                " Member cannot re-submit candidacy."
              ]
            },
            {
              "name": "RunnerUpSubmit",
              "documentation": [
                " Runner cannot re-submit candidacy."
              ]
            },
            {
              "name": "InsufficientCandidateFunds",
              "documentation": [
                " Candidate does not have enough funds."
              ]
            },
            {
              "name": "NotMember",
              "documentation": [
                " Not a member."
              ]
            },
            {
              "name": "InvalidWitnessData",
              "documentation": [
                " The provided count of number of candidates is incorrect."
              ]
            },
            {
              "name": "InvalidVoteCount",
              "documentation": [
                " The provided count of number of votes is incorrect."
              ]
            },
            {
              "name": "InvalidRenouncing",
              "documentation": [
                " The renouncing origin presented a wrong `Renouncing` parameter."
              ]
            },
            {
              "name": "InvalidReplacement",
              "documentation": [
                " Prediction regarding replacement after member removal is wrong."
              ]
            }
          ],
          "index": 28
        },
        {
          "name": "AcalaOracle",
          "storage": {
            "prefix": "AcalaOracle",
            "items": [
              {
                "name": "RawValues",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "AccountId",
                    "key2": "OracleKey",
                    "value": "TimestampedValueOf",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Raw values for each oracle operators"
                ]
              },
              {
                "name": "IsUpdated",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "OracleKey",
                    "value": "bool",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " True if Self::values(key) is up to date, otherwise the value is stale"
                ]
              },
              {
                "name": "Values",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "OracleKey",
                    "value": "TimestampedValueOf",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Combined value, may not be up to date"
                ]
              },
              {
                "name": "HasDispatched",
                "modifier": "Default",
                "type": {
                  "plain": "OrderedSet"
                },
                "fallback": "0x00",
                "documentation": [
                  " If an oracle operator has feed a value in this block"
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "OrderedSet"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current members of the collective. This is stored sorted (just by",
                  " value)."
                ]
              },
              {
                "name": "Nonces",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "u32",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": []
              }
            ]
          },
          "calls": [
            {
              "name": "feed_values",
              "args": [
                {
                  "name": "values",
                  "type": "Vec<(OracleKey,OracleValue)>"
                }
              ],
              "documentation": [
                " Feed the external value.",
                "",
                " Require authorized operator."
              ]
            }
          ],
          "events": [
            {
              "name": "NewFeedData",
              "args": [
                "AccountId",
                "Vec<(OracleKey,OracleValue)>"
              ],
              "documentation": [
                " New feed data is submitted. [sender, values]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NoPermission",
              "documentation": [
                " Sender does not have permission"
              ]
            },
            {
              "name": "AlreadyFeeded",
              "documentation": [
                " Feeder has already feeded at this block"
              ]
            }
          ],
          "index": 29
        },
        {
          "name": "BandOracle",
          "storage": {
            "prefix": "BandOracle",
            "items": [
              {
                "name": "RawValues",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "AccountId",
                    "key2": "OracleKey",
                    "value": "TimestampedValueOf",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Raw values for each oracle operators"
                ]
              },
              {
                "name": "IsUpdated",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "OracleKey",
                    "value": "bool",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " True if Self::values(key) is up to date, otherwise the value is stale"
                ]
              },
              {
                "name": "Values",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "OracleKey",
                    "value": "TimestampedValueOf",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Combined value, may not be up to date"
                ]
              },
              {
                "name": "HasDispatched",
                "modifier": "Default",
                "type": {
                  "plain": "OrderedSet"
                },
                "fallback": "0x00",
                "documentation": [
                  " If an oracle operator has feed a value in this block"
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "OrderedSet"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current members of the collective. This is stored sorted (just by",
                  " value)."
                ]
              },
              {
                "name": "Nonces",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "u32",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": []
              }
            ]
          },
          "calls": [
            {
              "name": "feed_values",
              "args": [
                {
                  "name": "values",
                  "type": "Vec<(OracleKey,OracleValue)>"
                }
              ],
              "documentation": [
                " Feed the external value.",
                "",
                " Require authorized operator."
              ]
            }
          ],
          "events": [
            {
              "name": "NewFeedData",
              "args": [
                "AccountId",
                "Vec<(OracleKey,OracleValue)>"
              ],
              "documentation": [
                " New feed data is submitted. [sender, values]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NoPermission",
              "documentation": [
                " Sender does not have permission"
              ]
            },
            {
              "name": "AlreadyFeeded",
              "documentation": [
                " Feeder has already feeded at this block"
              ]
            }
          ],
          "index": 30
        },
        {
          "name": "OperatorMembershipAcala",
          "storage": {
            "prefix": "Instance5Membership",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current membership, stored as an ordered Vec."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current prime member, if one exists."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Add a member `who` to the set.",
                "",
                " May only be called from `T::AddOrigin`."
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Remove a member `who` from the set.",
                "",
                " May only be called from `T::RemoveOrigin`."
              ]
            },
            {
              "name": "swap_member",
              "args": [
                {
                  "name": "remove",
                  "type": "AccountId"
                },
                {
                  "name": "add",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out one member `remove` for another `add`.",
                "",
                " May only be called from `T::SwapOrigin`.",
                "",
                " Prime membership is *not* passed from `remove` to `add`, if extant."
              ]
            },
            {
              "name": "reset_members",
              "args": [
                {
                  "name": "members",
                  "type": "Vec<AccountId>"
                }
              ],
              "documentation": [
                " Change the membership to a new set, disregarding the existing membership. Be nice and",
                " pass `members` pre-sorted.",
                "",
                " May only be called from `T::ResetOrigin`."
              ]
            },
            {
              "name": "change_key",
              "args": [
                {
                  "name": "new",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out the sending member for some other key `new`.",
                "",
                " May only be called from `Signed` origin of a current member.",
                "",
                " Prime membership is passed from the origin account to `new`, if extant."
              ]
            },
            {
              "name": "set_prime",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Set the prime member. Must be a current member.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            },
            {
              "name": "clear_prime",
              "args": [],
              "documentation": [
                " Remove the prime member if it exists.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            }
          ],
          "events": [
            {
              "name": "MemberAdded",
              "args": [],
              "documentation": [
                " The given member was added; see the transaction for who."
              ]
            },
            {
              "name": "MemberRemoved",
              "args": [],
              "documentation": [
                " The given member was removed; see the transaction for who."
              ]
            },
            {
              "name": "MembersSwapped",
              "args": [],
              "documentation": [
                " Two members were swapped; see the transaction for who."
              ]
            },
            {
              "name": "MembersReset",
              "args": [],
              "documentation": [
                " The membership was reset; see the transaction for who the new set is."
              ]
            },
            {
              "name": "KeyChanged",
              "args": [],
              "documentation": [
                " One of the members' keys changed."
              ]
            },
            {
              "name": "Dummy",
              "args": [
                "PhantomData"
              ],
              "documentation": [
                " Phantom member, never used."
              ]
            }
          ],
          "constants": [],
          "errors": [],
          "index": 31
        },
        {
          "name": "OperatorMembershipBand",
          "storage": {
            "prefix": "Instance6Membership",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current membership, stored as an ordered Vec."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current prime member, if one exists."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Add a member `who` to the set.",
                "",
                " May only be called from `T::AddOrigin`."
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Remove a member `who` from the set.",
                "",
                " May only be called from `T::RemoveOrigin`."
              ]
            },
            {
              "name": "swap_member",
              "args": [
                {
                  "name": "remove",
                  "type": "AccountId"
                },
                {
                  "name": "add",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out one member `remove` for another `add`.",
                "",
                " May only be called from `T::SwapOrigin`.",
                "",
                " Prime membership is *not* passed from `remove` to `add`, if extant."
              ]
            },
            {
              "name": "reset_members",
              "args": [
                {
                  "name": "members",
                  "type": "Vec<AccountId>"
                }
              ],
              "documentation": [
                " Change the membership to a new set, disregarding the existing membership. Be nice and",
                " pass `members` pre-sorted.",
                "",
                " May only be called from `T::ResetOrigin`."
              ]
            },
            {
              "name": "change_key",
              "args": [
                {
                  "name": "new",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Swap out the sending member for some other key `new`.",
                "",
                " May only be called from `Signed` origin of a current member.",
                "",
                " Prime membership is passed from the origin account to `new`, if extant."
              ]
            },
            {
              "name": "set_prime",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "documentation": [
                " Set the prime member. Must be a current member.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            },
            {
              "name": "clear_prime",
              "args": [],
              "documentation": [
                " Remove the prime member if it exists.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            }
          ],
          "events": [
            {
              "name": "MemberAdded",
              "args": [],
              "documentation": [
                " The given member was added; see the transaction for who."
              ]
            },
            {
              "name": "MemberRemoved",
              "args": [],
              "documentation": [
                " The given member was removed; see the transaction for who."
              ]
            },
            {
              "name": "MembersSwapped",
              "args": [],
              "documentation": [
                " Two members were swapped; see the transaction for who."
              ]
            },
            {
              "name": "MembersReset",
              "args": [],
              "documentation": [
                " The membership was reset; see the transaction for who the new set is."
              ]
            },
            {
              "name": "KeyChanged",
              "args": [],
              "documentation": [
                " One of the members' keys changed."
              ]
            },
            {
              "name": "Dummy",
              "args": [
                "PhantomData"
              ],
              "documentation": [
                " Phantom member, never used."
              ]
            }
          ],
          "constants": [],
          "errors": [],
          "index": 32
        },
        {
          "name": "Auction",
          "storage": {
            "prefix": "Auction",
            "items": [
              {
                "name": "Auctions",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AuctionId",
                    "value": "AuctionInfo",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Stores on-going and future auctions. Closed auction are removed."
                ]
              },
              {
                "name": "AuctionsIndex",
                "modifier": "Default",
                "type": {
                  "plain": "AuctionId"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Track the next auction ID."
                ]
              },
              {
                "name": "AuctionEndTime",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "BlockNumber",
                    "key2": "AuctionId",
                    "value": "()",
                    "key2Hasher": "Blake2_128Concat"
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Index auctions by end time."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "bid",
              "args": [
                {
                  "name": "id",
                  "type": "AuctionId"
                },
                {
                  "name": "value",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": [
                " Bid an auction.",
                "",
                " The dispatch origin for this call must be `Signed` by the",
                " transactor."
              ]
            }
          ],
          "events": [
            {
              "name": "Bid",
              "args": [
                "AuctionId",
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " A bid is placed. [auction_id, bidder, bidding_amount]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "AuctionNotExist",
              "documentation": []
            },
            {
              "name": "AuctionNotStarted",
              "documentation": []
            },
            {
              "name": "BidNotAccepted",
              "documentation": []
            },
            {
              "name": "InvalidBidPrice",
              "documentation": []
            },
            {
              "name": "NoAvailableAuctionId",
              "documentation": []
            }
          ],
          "index": 33
        },
        {
          "name": "Rewards",
          "storage": {
            "prefix": "Rewards",
            "items": [
              {
                "name": "Pools",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "PoolId",
                    "value": "PoolInfo",
                    "linked": false
                  }
                },
                "fallback": "0x000000",
                "documentation": [
                  " Stores reward pool info."
                ]
              },
              {
                "name": "ShareAndWithdrawnReward",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "PoolId",
                    "key2": "AccountId",
                    "value": "(Share,Balance)",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " Record share amount and withdrawn reward amount for specific `AccountId`",
                  " under `PoolId`."
                ]
              }
            ]
          },
          "calls": [],
          "events": null,
          "constants": [],
          "errors": [],
          "index": 34
        },
        {
          "name": "OrmlNFT",
          "storage": {
            "prefix": "OrmlNFT",
            "items": [
              {
                "name": "NextClassId",
                "modifier": "Default",
                "type": {
                  "plain": "ClassId"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Next available class ID."
                ]
              },
              {
                "name": "NextTokenId",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "ClassId",
                    "value": "TokenId",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000",
                "documentation": [
                  " Next available token ID."
                ]
              },
              {
                "name": "Classes",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "ClassId",
                    "value": "ClassInfoOf",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Store class info.",
                  "",
                  " Returns `None` if class info not set or removed."
                ]
              },
              {
                "name": "Tokens",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "ClassId",
                    "key2": "TokenId",
                    "value": "TokenInfoOf",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Store token info.",
                  "",
                  " Returns `None` if token info not set or removed."
                ]
              },
              {
                "name": "TokensByOwner",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "AccountId",
                    "key2": "(ClassId,TokenId)",
                    "value": "()",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x",
                "documentation": [
                  " Token existence check by owner and class ID."
                ]
              }
            ]
          },
          "calls": null,
          "events": null,
          "constants": [],
          "errors": [
            {
              "name": "NoAvailableClassId",
              "documentation": [
                " No available class ID"
              ]
            },
            {
              "name": "NoAvailableTokenId",
              "documentation": [
                " No available token ID"
              ]
            },
            {
              "name": "TokenNotFound",
              "documentation": [
                " Token(ClassId, TokenId) not found"
              ]
            },
            {
              "name": "ClassNotFound",
              "documentation": [
                " Class not found"
              ]
            },
            {
              "name": "NoPermission",
              "documentation": [
                " The operator is not the owner of the token and has no permission"
              ]
            },
            {
              "name": "NumOverflow",
              "documentation": [
                " Arithmetic calculation overflow"
              ]
            },
            {
              "name": "CannotDestroyClass",
              "documentation": [
                " Can not destroy class",
                " Total issuance is not 0"
              ]
            }
          ],
          "index": 35
        },
        {
          "name": "Prices",
          "storage": {
            "prefix": "Prices",
            "items": [
              {
                "name": "LockedPrice",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "Price",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Mapping from currency id to it's locked price"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "lock_price",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                }
              ],
              "documentation": [
                " Lock the price and feed it to system.",
                "",
                " The dispatch origin of this call must be `LockOrigin`.",
                "",
                " - `currency_id`: currency type."
              ]
            },
            {
              "name": "unlock_price",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                }
              ],
              "documentation": [
                " Unlock the price and get the price from `PriceProvider` again",
                "",
                " The dispatch origin of this call must be `LockOrigin`.",
                "",
                " - `currency_id`: currency type."
              ]
            }
          ],
          "events": [
            {
              "name": "LockPrice",
              "args": [
                "CurrencyId",
                "Price"
              ],
              "documentation": [
                " Lock price. \\[currency_id, locked_price\\]"
              ]
            },
            {
              "name": "UnlockPrice",
              "args": [
                "CurrencyId"
              ],
              "documentation": [
                " Unlock price. \\[currency_id\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "GetStableCurrencyId",
              "type": "CurrencyId",
              "value": "0x0001",
              "documentation": [
                " The stable currency id, it should be AUSD in Acala."
              ]
            },
            {
              "name": "StableCurrencyFixedPrice",
              "type": "Price",
              "value": "0x000064a7b3b6e00d0000000000000000",
              "documentation": [
                " The fixed prices of stable currency, it should be 1 USD in Acala."
              ]
            },
            {
              "name": "GetStakingCurrencyId",
              "type": "CurrencyId",
              "value": "0x0002",
              "documentation": [
                " The staking currency id, it should be DOT in Acala."
              ]
            },
            {
              "name": "GetLiquidCurrencyId",
              "type": "CurrencyId",
              "value": "0x0003",
              "documentation": [
                " The liquid currency id, it should be LDOT in Acala."
              ]
            }
          ],
          "errors": [],
          "index": 36
        },
        {
          "name": "Dex",
          "storage": {
            "prefix": "Dex",
            "items": [
              {
                "name": "LiquidityPool",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "TradingPair",
                    "value": "(Balance,Balance)",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " Liquidity pool for TradingPair."
                ]
              },
              {
                "name": "TradingPairStatuses",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "TradingPair",
                    "value": "TradingPairStatus",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Status for TradingPair."
                ]
              },
              {
                "name": "ProvisioningPool",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "TradingPair",
                    "key2": "AccountId",
                    "value": "(Balance,Balance)",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " Provision of TradingPair by AccountId."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "swap_with_exact_supply",
              "args": [
                {
                  "name": "path",
                  "type": "Vec<CurrencyId>"
                },
                {
                  "name": "supply_amount",
                  "type": "Compact<Balance>"
                },
                {
                  "name": "min_target_amount",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": [
                " Trading with DEX, swap with exact supply amount",
                "",
                " - `path`: trading path.",
                " - `supply_amount`: exact supply amount.",
                " - `min_target_amount`: acceptable minimum target amount."
              ]
            },
            {
              "name": "swap_with_exact_target",
              "args": [
                {
                  "name": "path",
                  "type": "Vec<CurrencyId>"
                },
                {
                  "name": "target_amount",
                  "type": "Compact<Balance>"
                },
                {
                  "name": "max_supply_amount",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": [
                " Trading with DEX, swap with exact target amount",
                "",
                " - `path`: trading path.",
                " - `target_amount`: exact target amount.",
                " - `max_supply_amount`: acceptable maxmum supply amount."
              ]
            },
            {
              "name": "add_liquidity",
              "args": [
                {
                  "name": "currency_id_a",
                  "type": "CurrencyId"
                },
                {
                  "name": "currency_id_b",
                  "type": "CurrencyId"
                },
                {
                  "name": "max_amount_a",
                  "type": "Compact<Balance>"
                },
                {
                  "name": "max_amount_b",
                  "type": "Compact<Balance>"
                },
                {
                  "name": "deposit_increment_share",
                  "type": "bool"
                }
              ],
              "documentation": [
                " Add liquidity to Enabled trading pair, or add provision to",
                " Provisioning trading pair.",
                " - Add liquidity success will issue shares in current price which",
                "   decided by the liquidity scale. Shares are temporarily not",
                " allowed to transfer and trade, it represents the proportion of",
                " assets in liquidity pool.",
                " - Add provision success will record the provision, issue shares to",
                "   caller in the initial price when trading pair convert to Enabled.",
                "",
                " - `currency_id_a`: currency id A.",
                " - `currency_id_b`: currency id B.",
                " - `max_amount_a`: maximum currency A amount allowed to inject to",
                "   liquidity pool.",
                " - `max_amount_b`: maximum currency A amount allowed to inject to",
                "   liquidity pool.",
                " - `deposit_increment_share`: this flag indicates whether to deposit",
                "   added lp shares to obtain incentives"
              ]
            },
            {
              "name": "remove_liquidity",
              "args": [
                {
                  "name": "currency_id_a",
                  "type": "CurrencyId"
                },
                {
                  "name": "currency_id_b",
                  "type": "CurrencyId"
                },
                {
                  "name": "remove_share",
                  "type": "Compact<Balance>"
                },
                {
                  "name": "by_withdraw",
                  "type": "bool"
                }
              ],
              "documentation": [
                " Remove liquidity from specific liquidity pool in the form of burning",
                " shares, and withdrawing currencies in trading pairs from liquidity",
                " pool in proportion, and withdraw liquidity incentive interest.",
                "",
                " - `currency_id_a`: currency id A.",
                " - `currency_id_b`: currency id B.",
                " - `remove_share`: liquidity amount to remove.",
                " - `by_withdraw`: this flag indicates whether to withdraw share which",
                "   is on incentives."
              ]
            },
            {
              "name": "list_trading_pair",
              "args": [
                {
                  "name": "currency_id_a",
                  "type": "CurrencyId"
                },
                {
                  "name": "currency_id_b",
                  "type": "CurrencyId"
                },
                {
                  "name": "min_contribution_a",
                  "type": "Balance"
                },
                {
                  "name": "min_contribution_b",
                  "type": "Balance"
                },
                {
                  "name": "target_provision_a",
                  "type": "Balance"
                },
                {
                  "name": "target_provision_b",
                  "type": "Balance"
                },
                {
                  "name": "not_before",
                  "type": "BlockNumber"
                }
              ],
              "documentation": [
                " List a new trading pair, trading pair will become Enabled status",
                " after provision process."
              ]
            },
            {
              "name": "enable_trading_pair",
              "args": [
                {
                  "name": "currency_id_a",
                  "type": "CurrencyId"
                },
                {
                  "name": "currency_id_b",
                  "type": "CurrencyId"
                }
              ],
              "documentation": [
                " Enable a new trading pair(without the provision process),",
                " or re-enable a disabled trading pair."
              ]
            },
            {
              "name": "disable_trading_pair",
              "args": [
                {
                  "name": "currency_id_a",
                  "type": "CurrencyId"
                },
                {
                  "name": "currency_id_b",
                  "type": "CurrencyId"
                }
              ],
              "documentation": []
            }
          ],
          "events": [
            {
              "name": "AddProvision",
              "args": [
                "AccountId",
                "CurrencyId",
                "Balance",
                "CurrencyId",
                "Balance"
              ],
              "documentation": [
                " add provision success \\[who, currency_id_0, contribution_0,",
                " currency_id_1, contribution_1\\]"
              ]
            },
            {
              "name": "AddLiquidity",
              "args": [
                "AccountId",
                "CurrencyId",
                "Balance",
                "CurrencyId",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Add liquidity success. \\[who, currency_id_0, pool_0_increment,",
                " currency_id_1, pool_1_increment, share_increment\\]"
              ]
            },
            {
              "name": "RemoveLiquidity",
              "args": [
                "AccountId",
                "CurrencyId",
                "Balance",
                "CurrencyId",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Remove liquidity from the trading pool success. \\[who,",
                " currency_id_0, pool_0_decrement, currency_id_1, pool_1_decrement,",
                " share_decrement\\]"
              ]
            },
            {
              "name": "Swap",
              "args": [
                "AccountId",
                "Vec<CurrencyId>",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Use supply currency to swap target currency. \\[trader, trading_path,",
                " supply_currency_amount, target_currency_amount\\]"
              ]
            },
            {
              "name": "EnableTradingPair",
              "args": [
                "TradingPair"
              ],
              "documentation": [
                " Enable trading pair. \\[trading_pair\\]"
              ]
            },
            {
              "name": "ListTradingPair",
              "args": [
                "TradingPair"
              ],
              "documentation": [
                " List trading pair. \\[trading_pair\\]"
              ]
            },
            {
              "name": "DisableTradingPair",
              "args": [
                "TradingPair"
              ],
              "documentation": [
                " Disable trading pair. \\[trading_pair\\]"
              ]
            },
            {
              "name": "ProvisioningToEnabled",
              "args": [
                "TradingPair",
                "Balance",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Provisioning trading pair convert to Enabled. \\[trading_pair,",
                " pool_0_amount, pool_1_amount, total_share_amount\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "GetExchangeFee",
              "type": "(u32,u32)",
              "value": "0x01000000e8030000",
              "documentation": [
                " Trading fee rate",
                " The first item of the tuple is the numerator of the fee rate, second",
                " item is the denominator, fee_rate = numerator / denominator,",
                " use (u32, u32) over `Rate` type to minimize internal division",
                " operation."
              ]
            },
            {
              "name": "TradingPathLimit",
              "type": "u32",
              "value": "0x03000000",
              "documentation": [
                " The limit for length of trading path"
              ]
            },
            {
              "name": "ModuleId",
              "type": "ModuleId",
              "value": "0x6163612f6465786d",
              "documentation": [
                " The DEX's module id, keep all assets in DEX."
              ]
            }
          ],
          "errors": [
            {
              "name": "NotEnabledTradingPair",
              "documentation": [
                " Trading pair is in NotEnabled status"
              ]
            },
            {
              "name": "MustBeEnabled",
              "documentation": [
                " Trading pair must be in Enabled status"
              ]
            },
            {
              "name": "MustBeProvisioning",
              "documentation": [
                " Trading pair must be in Provisioning status"
              ]
            },
            {
              "name": "MustBeNotEnabled",
              "documentation": [
                " Trading pair must be in NotEnabled status"
              ]
            },
            {
              "name": "NotAllowedList",
              "documentation": [
                " This trading pair is not allowed to be listed"
              ]
            },
            {
              "name": "InvalidContributionIncrement",
              "documentation": [
                " The increment of provision is invalid"
              ]
            },
            {
              "name": "InvalidLiquidityIncrement",
              "documentation": [
                " The increment of liquidity is invalid"
              ]
            },
            {
              "name": "InvalidCurrencyId",
              "documentation": [
                " Invalid currency id"
              ]
            },
            {
              "name": "InvalidTradingPathLength",
              "documentation": [
                " Invalid trading path length"
              ]
            },
            {
              "name": "InsufficientTargetAmount",
              "documentation": [
                " Target amount is less to min_target_amount"
              ]
            },
            {
              "name": "ExcessiveSupplyAmount",
              "documentation": [
                " Supply amount is more than max_supply_amount"
              ]
            },
            {
              "name": "ExceedPriceImpactLimit",
              "documentation": [
                " The swap will cause unacceptable price impact"
              ]
            },
            {
              "name": "InsufficientLiquidity",
              "documentation": [
                " Liquidity is not enough"
              ]
            },
            {
              "name": "ZeroSupplyAmount",
              "documentation": [
                " The supply amount is zero"
              ]
            },
            {
              "name": "ZeroTargetAmount",
              "documentation": [
                " The target amount is zero"
              ]
            }
          ],
          "index": 37
        },
        {
          "name": "AuctionManager",
          "storage": {
            "prefix": "AuctionManager",
            "items": [
              {
                "name": "CollateralAuctions",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AuctionId",
                    "value": "CollateralAuctionItem",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Mapping from auction id to collateral auction info"
                ]
              },
              {
                "name": "DebitAuctions",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AuctionId",
                    "value": "DebitAuctionItem",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Mapping from auction id to debit auction info"
                ]
              },
              {
                "name": "SurplusAuctions",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AuctionId",
                    "value": "SurplusAuctionItem",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Mapping from auction id to surplus auction info"
                ]
              },
              {
                "name": "TotalCollateralInAuction",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "Balance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Record of the total collateral amount of all active collateral auctions",
                  " under specific collateral type CollateralType -> TotalAmount"
                ]
              },
              {
                "name": "TotalTargetInAuction",
                "modifier": "Default",
                "type": {
                  "plain": "Balance"
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Record of total target sales of all active collateral auctions"
                ]
              },
              {
                "name": "TotalDebitInAuction",
                "modifier": "Default",
                "type": {
                  "plain": "Balance"
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Record of total fix amount of all active debit auctions"
                ]
              },
              {
                "name": "TotalSurplusInAuction",
                "modifier": "Default",
                "type": {
                  "plain": "Balance"
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Record of total surplus amount of all active surplus auctions"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "cancel",
              "args": [
                {
                  "name": "id",
                  "type": "AuctionId"
                }
              ],
              "documentation": [
                " Cancel active auction after system shutdown",
                "",
                " The dispatch origin of this call must be _None_."
              ]
            }
          ],
          "events": [
            {
              "name": "NewCollateralAuction",
              "args": [
                "AuctionId",
                "CurrencyId",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Collateral auction created. \\[auction_id, collateral_type,",
                " collateral_amount, target_bid_price\\]"
              ]
            },
            {
              "name": "NewDebitAuction",
              "args": [
                "AuctionId",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Debit auction created. \\[auction_id, initial_supply_amount,",
                " fix_payment_amount\\]"
              ]
            },
            {
              "name": "NewSurplusAuction",
              "args": [
                "AuctionId",
                "Balance"
              ],
              "documentation": [
                " Surplus auction created. \\[auction_id, fix_surplus_amount\\]"
              ]
            },
            {
              "name": "CancelAuction",
              "args": [
                "AuctionId"
              ],
              "documentation": [
                " Active auction cancelled. \\[auction_id\\]"
              ]
            },
            {
              "name": "CollateralAuctionDealt",
              "args": [
                "AuctionId",
                "CurrencyId",
                "Balance",
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " Collateral auction dealt. \\[auction_id, collateral_type,",
                " collateral_amount, winner, payment_amount\\]"
              ]
            },
            {
              "name": "SurplusAuctionDealt",
              "args": [
                "AuctionId",
                "Balance",
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " Surplus auction dealt. \\[auction_id, surplus_amount, winner,",
                " payment_amount\\]"
              ]
            },
            {
              "name": "DebitAuctionDealt",
              "args": [
                "AuctionId",
                "Balance",
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " Debit auction dealt. \\[auction_id, debit_currency_amount, winner,",
                " payment_amount\\]"
              ]
            },
            {
              "name": "DEXTakeCollateralAuction",
              "args": [
                "AuctionId",
                "CurrencyId",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Dex take collateral auction. \\[auction_id, collateral_type,",
                " collateral_amount, turnover\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "MinimumIncrementSize",
              "type": "Rate",
              "value": "0x000082dfe40d47000000000000000000",
              "documentation": [
                " The minimum increment size of each bid compared to the previous one"
              ]
            },
            {
              "name": "AuctionTimeToClose",
              "type": "BlockNumber",
              "value": "0x96000000",
              "documentation": [
                " The extended time for the auction to end after each successful bid"
              ]
            },
            {
              "name": "AuctionDurationSoftCap",
              "type": "BlockNumber",
              "value": "0xb0040000",
              "documentation": [
                " When the total duration of the auction exceeds this soft cap, push",
                " the auction to end more faster"
              ]
            },
            {
              "name": "GetStableCurrencyId",
              "type": "CurrencyId",
              "value": "0x0001",
              "documentation": [
                " The stable currency id"
              ]
            },
            {
              "name": "GetNativeCurrencyId",
              "type": "CurrencyId",
              "value": "0x0000",
              "documentation": [
                " The native currency id"
              ]
            },
            {
              "name": "UnsignedPriority",
              "type": "TransactionPriority",
              "value": "0xfeffffffffffffff",
              "documentation": [
                " A configuration for base priority of unsigned transactions.",
                "",
                " This is exposed so that it can be tuned for particular runtime, when",
                " multiple modules send unsigned transactions."
              ]
            }
          ],
          "errors": [
            {
              "name": "AuctionNotExists",
              "documentation": [
                " The auction dose not exist"
              ]
            },
            {
              "name": "InReverseStage",
              "documentation": [
                " The collateral auction is in reverse stage now"
              ]
            },
            {
              "name": "InvalidFeedPrice",
              "documentation": [
                " Feed price is invalid"
              ]
            },
            {
              "name": "MustAfterShutdown",
              "documentation": [
                " Must after system shutdown"
              ]
            },
            {
              "name": "InvalidBidPrice",
              "documentation": [
                " Bid price is invalid"
              ]
            },
            {
              "name": "InvalidAmount",
              "documentation": [
                " Invalid input amount"
              ]
            }
          ],
          "index": 38
        },
        {
          "name": "Loans",
          "storage": {
            "prefix": "Loans",
            "items": [
              {
                "name": "Positions",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "CurrencyId",
                    "key2": "AccountId",
                    "value": "Position",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " The collateralized debit positions, map from",
                  " Owner -> CollateralType -> Position"
                ]
              },
              {
                "name": "TotalPositions",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "Position",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " The total collateralized debit positions, map from",
                  " CollateralType -> Position"
                ]
              }
            ]
          },
          "calls": [],
          "events": [
            {
              "name": "PositionUpdated",
              "args": [
                "AccountId",
                "CurrencyId",
                "Amount",
                "Amount"
              ],
              "documentation": [
                " Position updated. \\[owner, collateral_type, collateral_adjustment,",
                " debit_adjustment\\]"
              ]
            },
            {
              "name": "ConfiscateCollateralAndDebit",
              "args": [
                "AccountId",
                "CurrencyId",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Confiscate CDP's collateral assets and eliminate its debit. \\[owner,",
                " collateral_type, confiscated_collateral_amount,",
                " deduct_debit_amount\\]"
              ]
            },
            {
              "name": "TransferLoan",
              "args": [
                "AccountId",
                "AccountId",
                "CurrencyId"
              ],
              "documentation": [
                " Transfer loan. \\[from, to, currency_id\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "ModuleId",
              "type": "ModuleId",
              "value": "0x6163612f6c6f616e",
              "documentation": [
                " The loan's module id, keep all collaterals of CDPs."
              ]
            }
          ],
          "errors": [
            {
              "name": "DebitOverflow",
              "documentation": []
            },
            {
              "name": "DebitTooLow",
              "documentation": []
            },
            {
              "name": "CollateralOverflow",
              "documentation": []
            },
            {
              "name": "CollateralTooLow",
              "documentation": []
            },
            {
              "name": "AmountConvertFailed",
              "documentation": []
            }
          ],
          "index": 39
        },
        {
          "name": "Honzon",
          "storage": {
            "prefix": "Honzon",
            "items": [
              {
                "name": "Authorization",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "AccountId",
                    "key2": "(CurrencyId,AccountId)",
                    "value": "bool",
                    "key2Hasher": "Blake2_128Concat"
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " The authorization relationship map from",
                  " Authorizer -> (CollateralType, Authorizee) -> Authorized"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "adjust_loan",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "collateral_adjustment",
                  "type": "Amount"
                },
                {
                  "name": "debit_adjustment",
                  "type": "Amount"
                }
              ],
              "documentation": [
                " Adjust the loans of `currency_id` by specific",
                " `collateral_adjustment` and `debit_adjustment`",
                "",
                " - `currency_id`: collateral currency id.",
                " - `collateral_adjustment`: signed amount, positive means to deposit",
                "   collateral currency into CDP, negative means withdraw collateral",
                "   currency from CDP.",
                " - `debit_adjustment`: signed amount, positive means to issue some",
                "   amount of stablecoin to caller according to the debit adjustment,",
                "   negative means caller will payback some amount of stablecoin to",
                "   CDP according to to the debit adjustment."
              ]
            },
            {
              "name": "transfer_loan_from",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "from",
                  "type": "LookupSource"
                }
              ],
              "documentation": [
                " Transfer the whole CDP of `from` under `currency_id` to caller's CDP",
                " under the same `currency_id`, caller must have the authorization of",
                " `from` for the specific collateral type",
                "",
                " - `currency_id`: collateral currency id.",
                " - `from`: authorizer account"
              ]
            },
            {
              "name": "authorize",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "to",
                  "type": "LookupSource"
                }
              ],
              "documentation": [
                " Authorize `to` to manipulate the loan under `currency_id`",
                "",
                " - `currency_id`: collateral currency id.",
                " - `to`: authorizee account"
              ]
            },
            {
              "name": "unauthorize",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "to",
                  "type": "LookupSource"
                }
              ],
              "documentation": [
                " Cancel the authorization for `to` under `currency_id`",
                "",
                " - `currency_id`: collateral currency id.",
                " - `to`: authorizee account"
              ]
            },
            {
              "name": "unauthorize_all",
              "args": [],
              "documentation": [
                " Cancel all authorization of caller"
              ]
            }
          ],
          "events": [
            {
              "name": "Authorization",
              "args": [
                "AccountId",
                "AccountId",
                "CurrencyId"
              ],
              "documentation": [
                " Authorize someone to operate the loan of specific collateral.",
                " \\[authorizer, authorizee, collateral_type\\]"
              ]
            },
            {
              "name": "UnAuthorization",
              "args": [
                "AccountId",
                "AccountId",
                "CurrencyId"
              ],
              "documentation": [
                " Cancel the authorization of specific collateral for someone.",
                " \\[authorizer, authorizee, collateral_type\\]"
              ]
            },
            {
              "name": "UnAuthorizationAll",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " Cancel all authorization. \\[authorizer\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NoAuthorization",
              "documentation": []
            },
            {
              "name": "AlreadyShutdown",
              "documentation": []
            }
          ],
          "index": 40
        },
        {
          "name": "CdpTreasury",
          "storage": {
            "prefix": "CdpTreasury",
            "items": [
              {
                "name": "CollateralAuctionMaximumSize",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "Balance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " The maximum amount of collateral amount for sale per collateral auction"
                ]
              },
              {
                "name": "DebitPool",
                "modifier": "Default",
                "type": {
                  "plain": "Balance"
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Current total debit value of system. It's not same as debit in CDP",
                  " engine, it is the bad debt of the system."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "auction_surplus",
              "args": [
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "auction_debit",
              "args": [
                {
                  "name": "debit_amount",
                  "type": "Balance"
                },
                {
                  "name": "initial_price",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "auction_collateral",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                },
                {
                  "name": "target",
                  "type": "Balance"
                },
                {
                  "name": "splited",
                  "type": "bool"
                }
              ],
              "documentation": []
            },
            {
              "name": "set_collateral_auction_maximum_size",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "size",
                  "type": "Balance"
                }
              ],
              "documentation": [
                " Update parameters related to collateral auction under specific",
                " collateral type",
                "",
                " The dispatch origin of this call must be `UpdateOrigin`.",
                "",
                " - `currency_id`: collateral type",
                " - `surplus_buffer_size`: collateral auction maximum size"
              ]
            }
          ],
          "events": [
            {
              "name": "CollateralAuctionMaximumSizeUpdated",
              "args": [
                "CurrencyId",
                "Balance"
              ],
              "documentation": [
                " The fixed size for collateral auction under specific collateral type",
                " updated. \\[collateral_type, new_size\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "GetStableCurrencyId",
              "type": "CurrencyId",
              "value": "0x0001",
              "documentation": [
                " Stablecoin currency id"
              ]
            },
            {
              "name": "MaxAuctionsCount",
              "type": "u32",
              "value": "0x64000000",
              "documentation": [
                " The cap of lots number when create collateral auction on a",
                " liquidation or to create debit/surplus auction on block end.",
                " If set to 0, does not work."
              ]
            },
            {
              "name": "ModuleId",
              "type": "ModuleId",
              "value": "0x6163612f63647074",
              "documentation": [
                " The CDP treasury's module id, keep surplus and collateral assets",
                " from liquidation."
              ]
            }
          ],
          "errors": [
            {
              "name": "CollateralNotEnough",
              "documentation": [
                " The collateral amount of CDP treasury is not enough"
              ]
            },
            {
              "name": "SurplusPoolNotEnough",
              "documentation": [
                " The surplus pool of CDP treasury is not enough"
              ]
            },
            {
              "name": "DebitPoolOverflow",
              "documentation": [
                " debit pool overflow"
              ]
            },
            {
              "name": "DebitPoolNotEnough",
              "documentation": [
                " The debit pool of CDP treasury is not enough"
              ]
            }
          ],
          "index": 41
        },
        {
          "name": "CdpEngine",
          "storage": {
            "prefix": "CdpEngine",
            "items": [
              {
                "name": "DebitExchangeRate",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "ExchangeRate",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Mapping from collateral type to its exchange rate of debit units and",
                  " debit value"
                ]
              },
              {
                "name": "GlobalStabilityFee",
                "modifier": "Default",
                "type": {
                  "plain": "Rate"
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Global stability fee rate for all types of collateral"
                ]
              },
              {
                "name": "CollateralParams",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "RiskManagementParams",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000",
                "documentation": [
                  " Mapping from collateral type to its risk management params"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "liquidate",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "who",
                  "type": "LookupSource"
                }
              ],
              "documentation": [
                " Liquidate unsafe CDP",
                "",
                " The dispatch origin of this call must be _None_.",
                "",
                " - `currency_id`: CDP's collateral type.",
                " - `who`: CDP's owner."
              ]
            },
            {
              "name": "settle",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "who",
                  "type": "LookupSource"
                }
              ],
              "documentation": [
                " Settle CDP has debit after system shutdown",
                "",
                " The dispatch origin of this call must be _None_.",
                "",
                " - `currency_id`: CDP's collateral type.",
                " - `who`: CDP's owner."
              ]
            },
            {
              "name": "set_global_params",
              "args": [
                {
                  "name": "global_stability_fee",
                  "type": "Rate"
                }
              ],
              "documentation": [
                " Update global parameters related to risk management of CDP",
                "",
                " The dispatch origin of this call must be `UpdateOrigin`.",
                "",
                " - `global_stability_fee`: global stability fee rate."
              ]
            },
            {
              "name": "set_collateral_params",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "stability_fee",
                  "type": "ChangeOptionRate"
                },
                {
                  "name": "liquidation_ratio",
                  "type": "ChangeOptionRatio"
                },
                {
                  "name": "liquidation_penalty",
                  "type": "ChangeOptionRate"
                },
                {
                  "name": "required_collateral_ratio",
                  "type": "ChangeOptionRatio"
                },
                {
                  "name": "maximum_total_debit_value",
                  "type": "ChangeBalance"
                }
              ],
              "documentation": [
                " Update parameters related to risk management of CDP under specific",
                " collateral type",
                "",
                " The dispatch origin of this call must be `UpdateOrigin`.",
                "",
                " - `currency_id`: collateral type.",
                " - `stability_fee`: extra stability fee rate, `None` means do not",
                "   update, `Some(None)` means update it to `None`.",
                " - `liquidation_ratio`: liquidation ratio, `None` means do not",
                "   update, `Some(None)` means update it to `None`.",
                " - `liquidation_penalty`: liquidation penalty, `None` means do not",
                "   update, `Some(None)` means update it to `None`.",
                " - `required_collateral_ratio`: required collateral ratio, `None`",
                "   means do not update, `Some(None)` means update it to `None`.",
                " - `maximum_total_debit_value`: maximum total debit value."
              ]
            }
          ],
          "events": [
            {
              "name": "LiquidateUnsafeCDP",
              "args": [
                "CurrencyId",
                "AccountId",
                "Balance",
                "Balance",
                "LiquidationStrategy"
              ],
              "documentation": [
                " Liquidate the unsafe CDP. \\[collateral_type, owner,",
                " collateral_amount, bad_debt_value, liquidation_strategy\\]"
              ]
            },
            {
              "name": "SettleCDPInDebit",
              "args": [
                "CurrencyId",
                "AccountId"
              ],
              "documentation": [
                " Settle the CDP has debit. [collateral_type, owner]"
              ]
            },
            {
              "name": "StabilityFeeUpdated",
              "args": [
                "CurrencyId",
                "Option<Rate>"
              ],
              "documentation": [
                " The stability fee for specific collateral type updated.",
                " \\[collateral_type, new_stability_fee\\]"
              ]
            },
            {
              "name": "LiquidationRatioUpdated",
              "args": [
                "CurrencyId",
                "Option<Ratio>"
              ],
              "documentation": [
                " The liquidation fee for specific collateral type updated.",
                " \\[collateral_type, new_liquidation_ratio\\]"
              ]
            },
            {
              "name": "LiquidationPenaltyUpdated",
              "args": [
                "CurrencyId",
                "Option<Rate>"
              ],
              "documentation": [
                " The liquidation penalty rate for specific collateral type updated.",
                " \\[collateral_type, new_liquidation_panelty\\]"
              ]
            },
            {
              "name": "RequiredCollateralRatioUpdated",
              "args": [
                "CurrencyId",
                "Option<Ratio>"
              ],
              "documentation": [
                " The required collateral penalty rate for specific collateral type",
                " updated. \\[collateral_type, new_required_collateral_ratio\\]"
              ]
            },
            {
              "name": "MaximumTotalDebitValueUpdated",
              "args": [
                "CurrencyId",
                "Balance"
              ],
              "documentation": [
                " The hard cap of total debit value for specific collateral type",
                " updated. \\[collateral_type, new_total_debit_value\\]"
              ]
            },
            {
              "name": "GlobalStabilityFeeUpdated",
              "args": [
                "Rate"
              ],
              "documentation": [
                " The global stability fee for all types of collateral updated.",
                " \\[new_global_stability_fee\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "CollateralCurrencyIds",
              "type": "Vec<CurrencyId>",
              "value": "0x1c0002000300040005000600070008",
              "documentation": [
                " The list of valid collateral currency types"
              ]
            },
            {
              "name": "DefaultLiquidationRatio",
              "type": "Ratio",
              "value": "0x0000ee042cfc430f0000000000000000",
              "documentation": [
                " The default liquidation ratio for all collateral types of CDP"
              ]
            },
            {
              "name": "DefaultDebitExchangeRate",
              "type": "ExchangeRate",
              "value": "0x00008a5d784563010000000000000000",
              "documentation": [
                " The default debit exchange rate for all collateral types"
              ]
            },
            {
              "name": "DefaultLiquidationPenalty",
              "type": "Rate",
              "value": "0x0000c52ebca2b1000000000000000000",
              "documentation": [
                " The default liquidation penalty rate when liquidate unsafe CDP"
              ]
            },
            {
              "name": "MinimumDebitValue",
              "type": "Balance",
              "value": "0x0010a5d4e80000000000000000000000",
              "documentation": [
                " The minimum debit value to avoid debit dust"
              ]
            },
            {
              "name": "GetStableCurrencyId",
              "type": "CurrencyId",
              "value": "0x0001",
              "documentation": [
                " Stablecoin currency id"
              ]
            },
            {
              "name": "MaxSlippageSwapWithDEX",
              "type": "Ratio",
              "value": "0x0000c52ebca2b1000000000000000000",
              "documentation": [
                " The max slippage allowed when liquidate an unsafe CDP by swap with",
                " DEX"
              ]
            },
            {
              "name": "UnsignedPriority",
              "type": "TransactionPriority",
              "value": "0xffffffffffffffff",
              "documentation": [
                " A configuration for base priority of unsigned transactions.",
                "",
                " This is exposed so that it can be tuned for particular runtime, when",
                " multiple modules send unsigned transactions."
              ]
            }
          ],
          "errors": [
            {
              "name": "ExceedDebitValueHardCap",
              "documentation": [
                " The total debit value of specific collateral type already exceed the",
                " hard cap"
              ]
            },
            {
              "name": "BelowRequiredCollateralRatio",
              "documentation": [
                " The collateral ratio below the required collateral ratio"
              ]
            },
            {
              "name": "BelowLiquidationRatio",
              "documentation": [
                " The collateral ratio below the liquidation ratio"
              ]
            },
            {
              "name": "MustBeUnsafe",
              "documentation": [
                " The CDP must be unsafe to be liquidated"
              ]
            },
            {
              "name": "InvalidCollateralType",
              "documentation": [
                " Invalid collateral type"
              ]
            },
            {
              "name": "RemainDebitValueTooSmall",
              "documentation": [
                " Remain debit value in CDP below the dust amount"
              ]
            },
            {
              "name": "InvalidFeedPrice",
              "documentation": [
                " Feed price is invalid"
              ]
            },
            {
              "name": "NoDebitValue",
              "documentation": [
                " No debit value in CDP so that it cannot be settled"
              ]
            },
            {
              "name": "AlreadyShutdown",
              "documentation": [
                " System has already been shutdown"
              ]
            },
            {
              "name": "MustAfterShutdown",
              "documentation": [
                " Must after system shutdown"
              ]
            }
          ],
          "index": 42
        },
        {
          "name": "EmergencyShutdown",
          "storage": {
            "prefix": "EmergencyShutdown",
            "items": [
              {
                "name": "IsShutdown",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "documentation": [
                  " Emergency shutdown flag"
                ]
              },
              {
                "name": "CanRefund",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "documentation": [
                  " Open final redemption flag"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "emergency_shutdown",
              "args": [],
              "documentation": [
                " Start emergency shutdown",
                "",
                " The dispatch origin of this call must be `ShutdownOrigin`."
              ]
            },
            {
              "name": "open_collateral_refund",
              "args": [],
              "documentation": [
                " Open final redemption if settlement is completed.",
                "",
                " The dispatch origin of this call must be `ShutdownOrigin`."
              ]
            },
            {
              "name": "refund_collaterals",
              "args": [
                {
                  "name": "amount",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": [
                " Refund a basket of remaining collateral assets to caller",
                "",
                " - `amount`: stable currency amount used to refund."
              ]
            }
          ],
          "events": [
            {
              "name": "Shutdown",
              "args": [
                "BlockNumber"
              ],
              "documentation": [
                " Emergency shutdown occurs. \\[block_number\\]"
              ]
            },
            {
              "name": "OpenRefund",
              "args": [
                "BlockNumber"
              ],
              "documentation": [
                " The final redemption opened. \\[block_number\\]"
              ]
            },
            {
              "name": "Refund",
              "args": [
                "AccountId",
                "Balance",
                "Vec<(CurrencyId,Balance)>"
              ],
              "documentation": [
                " Refund info. \\[caller, stable_coin_amount, refund_list\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "CollateralCurrencyIds",
              "type": "Vec<CurrencyId>",
              "value": "0x1c0002000300040005000600070008",
              "documentation": [
                " The list of valid collateral currency types"
              ]
            }
          ],
          "errors": [
            {
              "name": "AlreadyShutdown",
              "documentation": [
                " System has already been shutdown"
              ]
            },
            {
              "name": "MustAfterShutdown",
              "documentation": [
                " Must after system shutdown"
              ]
            },
            {
              "name": "CanNotRefund",
              "documentation": [
                " Final redemption is still not opened"
              ]
            },
            {
              "name": "ExistPotentialSurplus",
              "documentation": [
                " Exist potential surplus, means settlement has not been completed"
              ]
            },
            {
              "name": "ExistUnhandledDebit",
              "documentation": [
                " Exist unhandled debit, means settlement has not been completed"
              ]
            }
          ],
          "index": 43
        },
        {
          "name": "Homa",
          "storage": null,
          "calls": [
            {
              "name": "mint",
              "args": [
                {
                  "name": "amount",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": [
                " Inject DOT to staking pool and mint LDOT in a certain exchange rate",
                " decided by staking pool.",
                "",
                " - `amount`: the DOT amount to inject into staking pool."
              ]
            },
            {
              "name": "redeem",
              "args": [
                {
                  "name": "amount",
                  "type": "Compact<Balance>"
                },
                {
                  "name": "strategy",
                  "type": "RedeemStrategy"
                }
              ],
              "documentation": [
                " Burn LDOT and redeem DOT from staking pool.",
                "",
                " - `amount`: the LDOT amount to redeem.",
                " - `strategy`: redemption mode."
              ]
            },
            {
              "name": "withdraw_redemption",
              "args": [],
              "documentation": [
                " Get back those DOT that have been unbonded."
              ]
            }
          ],
          "events": null,
          "constants": [],
          "errors": [],
          "index": 44
        },
        {
          "name": "NomineesElection",
          "storage": {
            "prefix": "NomineesElection",
            "items": [
              {
                "name": "Nominations",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "Vec<PolkadotAccountId>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": []
              },
              {
                "name": "Ledger",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "BondingLedger",
                    "linked": false
                  }
                },
                "fallback": "0x000000000000000000000000000000000000000000000000000000000000000000",
                "documentation": []
              },
              {
                "name": "Votes",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "PolkadotAccountId",
                    "value": "Balance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": []
              },
              {
                "name": "Nominees",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<PolkadotAccountId>"
                },
                "fallback": "0x00",
                "documentation": []
              },
              {
                "name": "CurrentEra",
                "modifier": "Default",
                "type": {
                  "plain": "EraIndex"
                },
                "fallback": "0x00000000",
                "documentation": []
              }
            ]
          },
          "calls": [
            {
              "name": "bond",
              "args": [
                {
                  "name": "amount",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": []
            },
            {
              "name": "unbond",
              "args": [
                {
                  "name": "amount",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": []
            },
            {
              "name": "rebond",
              "args": [
                {
                  "name": "amount",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": []
            },
            {
              "name": "withdraw_unbonded",
              "args": [],
              "documentation": []
            },
            {
              "name": "nominate",
              "args": [
                {
                  "name": "targets",
                  "type": "Vec<PolkadotAccountId>"
                }
              ],
              "documentation": []
            },
            {
              "name": "chill",
              "args": [],
              "documentation": []
            }
          ],
          "events": null,
          "constants": [
            {
              "name": "MinBondThreshold",
              "type": "Balance",
              "value": "0x00e40b54020000000000000000000000",
              "documentation": []
            },
            {
              "name": "BondingDuration",
              "type": "EraIndex",
              "value": "0x07000000",
              "documentation": []
            },
            {
              "name": "NominateesCount",
              "type": "u32",
              "value": "0x07000000",
              "documentation": []
            },
            {
              "name": "MaxUnlockingChunks",
              "type": "u32",
              "value": "0x07000000",
              "documentation": []
            }
          ],
          "errors": [
            {
              "name": "BelowMinBondThreshold",
              "documentation": []
            },
            {
              "name": "InvalidTargetsLength",
              "documentation": []
            },
            {
              "name": "TooManyChunks",
              "documentation": []
            },
            {
              "name": "NoBonded",
              "documentation": []
            },
            {
              "name": "NoUnlockChunk",
              "documentation": []
            }
          ],
          "index": 45
        },
        {
          "name": "StakingPool",
          "storage": {
            "prefix": "StakingPool",
            "items": [
              {
                "name": "CurrentEra",
                "modifier": "Default",
                "type": {
                  "plain": "EraIndex"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Current era index of Polkadot."
                ]
              },
              {
                "name": "NextEraUnbonds",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "Balance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Unbond on next era beginning by AccountId.",
                  " AccountId => Unbond"
                ]
              },
              {
                "name": "Unbonding",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "EraIndex",
                    "value": "(Balance,Balance,Balance)",
                    "linked": false
                  }
                },
                "fallback": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " The records of unbonding.",
                  " ExpiredEraIndex => (TotalUnbounding, ClaimedUnbonding,",
                  " InitialClaimedUnbonding)"
                ]
              },
              {
                "name": "Unbondings",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "AccountId",
                    "key2": "EraIndex",
                    "value": "Balance",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " The records of unbonding by AccountId.",
                  " AccountId, ExpiredEraIndex => Unbounding"
                ]
              },
              {
                "name": "StakingPoolLedger",
                "modifier": "Default",
                "type": {
                  "plain": "Ledger"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " The ledger of staking pool."
                ]
              },
              {
                "name": "StakingPoolParams",
                "modifier": "Default",
                "type": {
                  "plain": "Params"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " The params of staking pool."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_staking_pool_params",
              "args": [
                {
                  "name": "target_max_free_unbonded_ratio",
                  "type": "ChangeRatio"
                },
                {
                  "name": "target_min_free_unbonded_ratio",
                  "type": "ChangeRatio"
                },
                {
                  "name": "target_unbonding_to_free_ratio",
                  "type": "ChangeRatio"
                },
                {
                  "name": "unbonding_to_free_adjustment",
                  "type": "ChangeRate"
                },
                {
                  "name": "base_fee_rate",
                  "type": "ChangeRate"
                }
              ],
              "documentation": [
                " Update params related to staking pool",
                "",
                " The dispatch origin of this call must be `UpdateOrigin`."
              ]
            }
          ],
          "events": [
            {
              "name": "MintLiquid",
              "args": [
                "AccountId",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Deposit staking currency(DOT) to staking pool and issue liquid",
                " currency(LDOT). \\[who, staking_amount_deposited,",
                " liquid_amount_issued\\]"
              ]
            },
            {
              "name": "RedeemByUnbond",
              "args": [
                "AccountId",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Burn liquid currency(LDOT) and redeem staking currency(DOT) by",
                " waiting for complete unbond eras. \\[who, liquid_amount_burned,",
                " staking_amount_redeemed\\]"
              ]
            },
            {
              "name": "RedeemByFreeUnbonded",
              "args": [
                "AccountId",
                "Balance",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Burn liquid currency(LDOT) and redeem staking currency(DOT) by free",
                " pool immediately. \\[who, fee_in_staking, liquid_amount_burned,",
                " staking_amount_redeemed\\]"
              ]
            },
            {
              "name": "RedeemByClaimUnbonding",
              "args": [
                "AccountId",
                "EraIndex",
                "Balance",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " Burn liquid currency(LDOT) and redeem staking currency(DOT) by claim",
                " the unbonding_to_free of specific era. \\[who, target_era,",
                " fee_in_staking, liquid_amount_burned, staking_amount_redeemed\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "StakingCurrencyId",
              "type": "CurrencyId",
              "value": "0x0002",
              "documentation": [
                " The staking currency id(should be DOT in acala)"
              ]
            },
            {
              "name": "LiquidCurrencyId",
              "type": "CurrencyId",
              "value": "0x0003",
              "documentation": [
                " The liquid currency id(should be LDOT in acala)"
              ]
            },
            {
              "name": "DefaultExchangeRate",
              "type": "ExchangeRate",
              "value": "0x00008a5d784563010000000000000000",
              "documentation": [
                " The default exchange rate for liquid currency to staking currency."
              ]
            },
            {
              "name": "ModuleId",
              "type": "ModuleId",
              "value": "0x6163612f73746b70",
              "documentation": [
                " The staking pool's module id, keep all staking currency belong to",
                " Homa protocol."
              ]
            },
            {
              "name": "PoolAccountIndexes",
              "type": "Vec<u32>",
              "value": "0x1001000000020000000300000004000000",
              "documentation": [
                " The sub account indexs of parachain to vault assets of Homa protocol",
                " in Polkadot."
              ]
            }
          ],
          "errors": [
            {
              "name": "InvalidEra",
              "documentation": [
                " The era index is invalid."
              ]
            },
            {
              "name": "Overflow",
              "documentation": [
                " Overflow."
              ]
            },
            {
              "name": "GetFeeFailed",
              "documentation": [
                " Failed to calculate redemption fee."
              ]
            },
            {
              "name": "InvalidConfig",
              "documentation": [
                " Invalid config."
              ]
            }
          ],
          "index": 46
        },
        {
          "name": "PolkadotBridge",
          "storage": {
            "prefix": "PolkadotBridge",
            "items": [
              {
                "name": "CurrentEra",
                "modifier": "Default",
                "type": {
                  "plain": "EraIndex"
                },
                "fallback": "0x00000000",
                "documentation": []
              },
              {
                "name": "EraStartBlockNumber",
                "modifier": "Default",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00000000",
                "documentation": []
              },
              {
                "name": "ForcedEra",
                "modifier": "Optional",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00",
                "documentation": []
              },
              {
                "name": "SubAccounts",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "u32",
                    "value": "SubAccountStatus",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "documentation": []
              }
            ]
          },
          "calls": [
            {
              "name": "set_mock_reward_rate",
              "args": [
                {
                  "name": "account_index",
                  "type": "u32"
                },
                {
                  "name": "reward_rate",
                  "type": "Rate"
                }
              ],
              "documentation": []
            },
            {
              "name": "simulate_bond_extra",
              "args": [
                {
                  "name": "account_index",
                  "type": "u32"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "simulate_unbond",
              "args": [
                {
                  "name": "account_index",
                  "type": "u32"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "simulate_rebond",
              "args": [
                {
                  "name": "account_index",
                  "type": "u32"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "simulate_withdraw_unbonded",
              "args": [
                {
                  "name": "account_index",
                  "type": "u32"
                }
              ],
              "documentation": []
            },
            {
              "name": "simulate_payout_nominator",
              "args": [
                {
                  "name": "account_index",
                  "type": "u32"
                }
              ],
              "documentation": []
            },
            {
              "name": "simulate_transfer_to_sub_account",
              "args": [
                {
                  "name": "account_index",
                  "type": "u32"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "simualte_receive_from_sub_account",
              "args": [
                {
                  "name": "account_index",
                  "type": "u32"
                },
                {
                  "name": "to",
                  "type": "LookupSource"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "simulate_slash_sub_account",
              "args": [
                {
                  "name": "account_index",
                  "type": "u32"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "force_era",
              "args": [
                {
                  "name": "at",
                  "type": "BlockNumber"
                }
              ],
              "documentation": []
            }
          ],
          "events": null,
          "constants": [
            {
              "name": "BondingDuration",
              "type": "EraIndex",
              "value": "0x07000000",
              "documentation": []
            },
            {
              "name": "EraLength",
              "type": "BlockNumber",
              "value": "0x40380000",
              "documentation": []
            }
          ],
          "errors": [
            {
              "name": "NotEnough",
              "documentation": []
            },
            {
              "name": "Overflow",
              "documentation": []
            }
          ],
          "index": 47
        },
        {
          "name": "Incentives",
          "storage": {
            "prefix": "Incentives",
            "items": [
              {
                "name": "LoansIncentiveRewards",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "Balance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Mapping from collateral currency type to its loans incentive reward",
                  " amount per period"
                ]
              },
              {
                "name": "DEXIncentiveRewards",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "Balance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Mapping from dex liquidity currency type to its loans incentive reward",
                  " amount per period"
                ]
              },
              {
                "name": "HomaIncentiveReward",
                "modifier": "Default",
                "type": {
                  "plain": "Balance"
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Homa incentive reward amount"
                ]
              },
              {
                "name": "DEXSavingRates",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "Rate",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " Mapping from dex liquidity currency type to its saving rate"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "deposit_dex_share",
              "args": [
                {
                  "name": "lp_currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "withdraw_dex_share",
              "args": [
                {
                  "name": "lp_currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "claim_rewards",
              "args": [
                {
                  "name": "pool_id",
                  "type": "PoolId"
                }
              ],
              "documentation": []
            },
            {
              "name": "update_loans_incentive_rewards",
              "args": [
                {
                  "name": "updates",
                  "type": "Vec<(CurrencyId,Balance)>"
                }
              ],
              "documentation": []
            },
            {
              "name": "update_dex_incentive_rewards",
              "args": [
                {
                  "name": "updates",
                  "type": "Vec<(CurrencyId,Balance)>"
                }
              ],
              "documentation": []
            },
            {
              "name": "update_homa_incentive_reward",
              "args": [
                {
                  "name": "update",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "update_dex_saving_rates",
              "args": [
                {
                  "name": "updates",
                  "type": "Vec<(CurrencyId,Rate)>"
                }
              ],
              "documentation": []
            }
          ],
          "events": [
            {
              "name": "DepositDEXShare",
              "args": [
                "AccountId",
                "CurrencyId",
                "Balance"
              ],
              "documentation": [
                " Deposit DEX share. \\[who, dex_share_type, deposit_amount\\]"
              ]
            },
            {
              "name": "WithdrawDEXShare",
              "args": [
                "AccountId",
                "CurrencyId",
                "Balance"
              ],
              "documentation": [
                " Withdraw DEX share. \\[who, dex_share_type, withdraw_amount\\]"
              ]
            },
            {
              "name": "ClaimRewards",
              "args": [
                "AccountId",
                "PoolId"
              ],
              "documentation": [
                " Claim rewards. \\[who, pool_id\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "LoansIncentivePool",
              "type": "AccountId",
              "value": "0x0000000000000000000000000000000000000000000000000000000000000000",
              "documentation": [
                " The vault account to keep rewards for type LoansIncentive PoolId"
              ]
            },
            {
              "name": "DexIncentivePool",
              "type": "AccountId",
              "value": "0x0000000000000000000000000000000000000000000000000000000000000000",
              "documentation": [
                " The vault account to keep rewards for type DexIncentive and",
                " DexSaving PoolId"
              ]
            },
            {
              "name": "HomaIncentivePool",
              "type": "AccountId",
              "value": "0x0000000000000000000000000000000000000000000000000000000000000000",
              "documentation": [
                " The vault account to keep rewards for type HomaIncentive PoolId"
              ]
            },
            {
              "name": "AccumulatePeriod",
              "type": "BlockNumber",
              "value": "0x0a000000",
              "documentation": [
                " The period to accumulate rewards"
              ]
            },
            {
              "name": "IncentiveCurrencyId",
              "type": "CurrencyId",
              "value": "0x0000",
              "documentation": [
                " The incentive reward type (should be ACA)"
              ]
            },
            {
              "name": "SavingCurrencyId",
              "type": "CurrencyId",
              "value": "0x0001",
              "documentation": [
                " The saving reward type (should be AUSD)"
              ]
            },
            {
              "name": "ModuleId",
              "type": "ModuleId",
              "value": "0x6163612f696e6374",
              "documentation": [
                " The module id, keep DEXShare LP."
              ]
            }
          ],
          "errors": [
            {
              "name": "NotEnough",
              "documentation": [
                " Share amount is not enough"
              ]
            },
            {
              "name": "InvalidCurrencyId",
              "documentation": [
                " Invalid currency id"
              ]
            }
          ],
          "index": 48
        },
        {
          "name": "AirDrop",
          "storage": {
            "prefix": "AirDrop",
            "items": [
              {
                "name": "AirDrops",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "AccountId",
                    "key2": "AirDropCurrencyId",
                    "value": "Balance",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": []
              }
            ]
          },
          "calls": [
            {
              "name": "airdrop",
              "args": [
                {
                  "name": "to",
                  "type": "LookupSource"
                },
                {
                  "name": "currency_id",
                  "type": "AirDropCurrencyId"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            },
            {
              "name": "update_airdrop",
              "args": [
                {
                  "name": "to",
                  "type": "LookupSource"
                },
                {
                  "name": "currency_id",
                  "type": "AirDropCurrencyId"
                },
                {
                  "name": "amount",
                  "type": "Balance"
                }
              ],
              "documentation": []
            }
          ],
          "events": [
            {
              "name": "Airdrop",
              "args": [
                "AccountId",
                "AirDropCurrencyId",
                "Balance"
              ],
              "documentation": [
                " \\[to, currency_id, amount\\]"
              ]
            },
            {
              "name": "UpdateAirdrop",
              "args": [
                "AccountId",
                "AirDropCurrencyId",
                "Balance"
              ],
              "documentation": [
                " \\[to, currency_id, amount\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [],
          "index": 49
        },
        {
          "name": "NFT",
          "storage": null,
          "calls": [
            {
              "name": "create_class",
              "args": [
                {
                  "name": "metadata",
                  "type": "CID"
                },
                {
                  "name": "properties",
                  "type": "Properties"
                }
              ],
              "documentation": [
                " Create NFT class, tokens belong to the class.",
                "",
                " - `metadata`: external metadata",
                " - `properties`: class property, include `Transferable` `Burnable`"
              ]
            },
            {
              "name": "mint",
              "args": [
                {
                  "name": "to",
                  "type": "LookupSource"
                },
                {
                  "name": "class_id",
                  "type": "ClassIdOf"
                },
                {
                  "name": "metadata",
                  "type": "CID"
                },
                {
                  "name": "quantity",
                  "type": "u32"
                }
              ],
              "documentation": [
                " Mint NFT token",
                "",
                " - `to`: the token owner's account",
                " - `class_id`: token belong to the class id",
                " - `metadata`: external metadata",
                " - `quantity`: token quantity"
              ]
            },
            {
              "name": "transfer",
              "args": [
                {
                  "name": "to",
                  "type": "LookupSource"
                },
                {
                  "name": "token",
                  "type": "(ClassIdOf,TokenIdOf)"
                }
              ],
              "documentation": [
                " Transfer NFT token to another account",
                "",
                " - `to`: the token owner's account",
                " - `token`: (class_id, token_id)"
              ]
            },
            {
              "name": "burn",
              "args": [
                {
                  "name": "token",
                  "type": "(ClassIdOf,TokenIdOf)"
                }
              ],
              "documentation": [
                " Burn NFT token",
                "",
                " - `token`: (class_id, token_id)"
              ]
            },
            {
              "name": "destroy_class",
              "args": [
                {
                  "name": "class_id",
                  "type": "ClassIdOf"
                },
                {
                  "name": "dest",
                  "type": "LookupSource"
                }
              ],
              "documentation": [
                " Destroy NFT class",
                "",
                " - `class_id`: destroy class id",
                " - `dest`: transfer reserve balance from sub_account to dest"
              ]
            }
          ],
          "events": [
            {
              "name": "CreatedClass",
              "args": [
                "AccountId",
                "ClassIdOf"
              ],
              "documentation": [
                " Created NFT class. \\[owner, class_id\\]"
              ]
            },
            {
              "name": "MintedToken",
              "args": [
                "AccountId",
                "AccountId",
                "ClassIdOf",
                "u32"
              ],
              "documentation": [
                " Minted NFT token. \\[from, to, class_id, quantity\\]"
              ]
            },
            {
              "name": "TransferredToken",
              "args": [
                "AccountId",
                "AccountId",
                "ClassIdOf",
                "TokenIdOf"
              ],
              "documentation": [
                " Transferred NFT token. \\[from, to, class_id, token_id\\]"
              ]
            },
            {
              "name": "BurnedToken",
              "args": [
                "AccountId",
                "ClassIdOf",
                "TokenIdOf"
              ],
              "documentation": [
                " Burned NFT token. \\[owner, class_id, token_id\\]"
              ]
            },
            {
              "name": "DestroyedClass",
              "args": [
                "AccountId",
                "ClassIdOf",
                "AccountId"
              ],
              "documentation": [
                " Destroyed NFT class. \\[owner, class_id, dest\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "CreateClassDeposit",
              "type": "Balance",
              "value": "0x00743ba40b0000000000000000000000",
              "documentation": [
                " The minimum balance to create class"
              ]
            },
            {
              "name": "CreateTokenDeposit",
              "type": "Balance",
              "value": "0x00e40b54020000000000000000000000",
              "documentation": [
                " The minimum balance to create token"
              ]
            },
            {
              "name": "ModuleId",
              "type": "ModuleId",
              "value": "0x6163612f614e4654",
              "documentation": [
                " The NFT's module id"
              ]
            }
          ],
          "errors": [
            {
              "name": "ClassIdNotFound",
              "documentation": [
                " ClassId not found"
              ]
            },
            {
              "name": "TokenIdNotFound",
              "documentation": [
                " TokenId not found"
              ]
            },
            {
              "name": "NoPermission",
              "documentation": [
                " The operator is not the owner of the token and has no permission"
              ]
            },
            {
              "name": "InvalidQuantity",
              "documentation": [
                " Quantity is invalid. need >= 1"
              ]
            },
            {
              "name": "NonTransferable",
              "documentation": [
                " Property of class don't support transfer"
              ]
            },
            {
              "name": "NonBurnable",
              "documentation": [
                " Property of class don't support burn"
              ]
            },
            {
              "name": "CannotDestroyClass",
              "documentation": [
                " Can not destroy class",
                " Total issuance is not 0"
              ]
            }
          ],
          "index": 50
        },
        {
          "name": "RenVmBridge",
          "storage": {
            "prefix": "Template",
            "items": [
              {
                "name": "RenVmPublicKey",
                "modifier": "Optional",
                "type": {
                  "plain": "PublicKey"
                },
                "fallback": "0x00",
                "documentation": [
                  " The RenVM split public key"
                ]
              },
              {
                "name": "Signatures",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox256",
                    "key": "EcdsaSignature",
                    "value": "()",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Signature blacklist. This is required to prevent double claim."
                ]
              },
              {
                "name": "BurnEvents",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "u32",
                    "value": "(BlockNumber,DestAddress,Balance)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Record burn event details"
                ]
              },
              {
                "name": "NextBurnEventId",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Next burn event ID"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "mint",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                },
                {
                  "name": "_p_hash",
                  "type": "[u8;32]"
                },
                {
                  "name": "amount",
                  "type": "Compact<Balance>"
                },
                {
                  "name": "_n_hash",
                  "type": "[u8;32]"
                },
                {
                  "name": "sig",
                  "type": "EcdsaSignature"
                }
              ],
              "documentation": [
                " Allow a user to mint if they have a valid signature from RenVM.",
                "",
                " The dispatch origin of this call must be _None_.",
                "",
                " Verify input by `validate_unsigned`"
              ]
            },
            {
              "name": "burn",
              "args": [
                {
                  "name": "to",
                  "type": "DestAddress"
                },
                {
                  "name": "amount",
                  "type": "Compact<Balance>"
                }
              ],
              "documentation": [
                " Allow a user to burn assets."
              ]
            },
            {
              "name": "rotate_key",
              "args": [
                {
                  "name": "new_key",
                  "type": "PublicKey"
                },
                {
                  "name": "sig",
                  "type": "EcdsaSignature"
                }
              ],
              "documentation": [
                " Allow RenVm rotate the public key.",
                "",
                " The dispatch origin of this call must be _None_.",
                "",
                " Verify input by `validate_unsigned`"
              ]
            }
          ],
          "events": [
            {
              "name": "Minted",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " Asset minted. \\[owner, amount\\]"
              ]
            },
            {
              "name": "Burnt",
              "args": [
                "AccountId",
                "DestAddress",
                "Balance"
              ],
              "documentation": [
                " Asset burnt in this chain \\[owner, dest, amount\\]"
              ]
            },
            {
              "name": "RotatedKey",
              "args": [
                "PublicKey"
              ],
              "documentation": [
                " Rotated key \\[new_key\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "InvalidRenVmPublicKey",
              "documentation": [
                " The RenVM split public key is invalid."
              ]
            },
            {
              "name": "InvalidMintSignature",
              "documentation": [
                " The mint signature is invalid."
              ]
            },
            {
              "name": "SignatureAlreadyUsed",
              "documentation": [
                " The mint signature has already been used."
              ]
            },
            {
              "name": "BurnIdOverflow",
              "documentation": [
                " Burn ID overflow."
              ]
            }
          ],
          "index": 51
        },
        {
          "name": "EVM",
          "storage": {
            "prefix": "EVM",
            "items": [
              {
                "name": "Accounts",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "EvmAddress",
                    "value": "AccountInfo",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Accounts info."
                ]
              },
              {
                "name": "AccountStorages",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "EvmAddress",
                    "key2": "H256",
                    "value": "H256",
                    "key2Hasher": "Blake2_128Concat"
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": []
              },
              {
                "name": "Codes",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "H256",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": []
              },
              {
                "name": "CodeInfos",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "H256",
                    "value": "CodeInfo",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": []
              },
              {
                "name": "NetworkContractIndex",
                "modifier": "Default",
                "type": {
                  "plain": "u64"
                },
                "fallback": "0x0000000000000000",
                "documentation": [
                  " Next available system contract address."
                ]
              },
              {
                "name": "ExtrinsicOrigin",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " Extrinsics origin for the current tx."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "call",
              "args": [
                {
                  "name": "target",
                  "type": "EvmAddress"
                },
                {
                  "name": "input",
                  "type": "Bytes"
                },
                {
                  "name": "value",
                  "type": "BalanceOf"
                },
                {
                  "name": "gas_limit",
                  "type": "u64"
                },
                {
                  "name": "storage_limit",
                  "type": "u32"
                }
              ],
              "documentation": [
                " Issue an EVM call operation. This is similar to a message call",
                " transaction in Ethereum."
              ]
            },
            {
              "name": "scheduled_call",
              "args": [
                {
                  "name": "from",
                  "type": "EvmAddress"
                },
                {
                  "name": "target",
                  "type": "EvmAddress"
                },
                {
                  "name": "input",
                  "type": "Bytes"
                },
                {
                  "name": "value",
                  "type": "BalanceOf"
                },
                {
                  "name": "gas_limit",
                  "type": "u64"
                },
                {
                  "name": "storage_limit",
                  "type": "u32"
                }
              ],
              "documentation": []
            },
            {
              "name": "create",
              "args": [
                {
                  "name": "init",
                  "type": "Bytes"
                },
                {
                  "name": "value",
                  "type": "BalanceOf"
                },
                {
                  "name": "gas_limit",
                  "type": "u64"
                },
                {
                  "name": "storage_limit",
                  "type": "u32"
                }
              ],
              "documentation": [
                " Issue an EVM create operation. This is similar to a contract",
                " creation transaction in Ethereum."
              ]
            },
            {
              "name": "create2",
              "args": [
                {
                  "name": "init",
                  "type": "Bytes"
                },
                {
                  "name": "salt",
                  "type": "H256"
                },
                {
                  "name": "value",
                  "type": "BalanceOf"
                },
                {
                  "name": "gas_limit",
                  "type": "u64"
                },
                {
                  "name": "storage_limit",
                  "type": "u32"
                }
              ],
              "documentation": [
                " Issue an EVM create2 operation."
              ]
            },
            {
              "name": "create_network_contract",
              "args": [
                {
                  "name": "init",
                  "type": "Bytes"
                },
                {
                  "name": "value",
                  "type": "BalanceOf"
                },
                {
                  "name": "gas_limit",
                  "type": "u64"
                },
                {
                  "name": "storage_limit",
                  "type": "u32"
                }
              ],
              "documentation": [
                " Issue an EVM create operation. The next available system contract",
                " address will be used as created contract address."
              ]
            },
            {
              "name": "transfer_maintainer",
              "args": [
                {
                  "name": "contract",
                  "type": "EvmAddress"
                },
                {
                  "name": "new_maintainer",
                  "type": "EvmAddress"
                }
              ],
              "documentation": []
            },
            {
              "name": "deploy",
              "args": [
                {
                  "name": "contract",
                  "type": "EvmAddress"
                }
              ],
              "documentation": []
            },
            {
              "name": "deploy_free",
              "args": [
                {
                  "name": "contract",
                  "type": "EvmAddress"
                }
              ],
              "documentation": []
            },
            {
              "name": "enable_contract_development",
              "args": [],
              "documentation": []
            },
            {
              "name": "disable_contract_development",
              "args": [],
              "documentation": []
            },
            {
              "name": "set_code",
              "args": [
                {
                  "name": "contract",
                  "type": "EvmAddress"
                },
                {
                  "name": "code",
                  "type": "Bytes"
                }
              ],
              "documentation": []
            },
            {
              "name": "selfdestruct",
              "args": [
                {
                  "name": "contract",
                  "type": "EvmAddress"
                }
              ],
              "documentation": []
            }
          ],
          "events": [
            {
              "name": "Log",
              "args": [
                "Log"
              ],
              "documentation": [
                " Ethereum events from contracts."
              ]
            },
            {
              "name": "Created",
              "args": [
                "EvmAddress"
              ],
              "documentation": [
                " A contract has been created at given \\[address\\]."
              ]
            },
            {
              "name": "CreatedFailed",
              "args": [
                "EvmAddress",
                "ExitReason",
                "Bytes"
              ],
              "documentation": [
                " A contract was attempted to be created, but the execution failed.",
                " \\[contract, exit_reason, output\\]"
              ]
            },
            {
              "name": "Executed",
              "args": [
                "EvmAddress"
              ],
              "documentation": [
                " A \\[contract\\] has been executed successfully with states applied."
              ]
            },
            {
              "name": "ExecutedFailed",
              "args": [
                "EvmAddress",
                "ExitReason",
                "Bytes"
              ],
              "documentation": [
                " A contract has been executed with errors. States are reverted with",
                " only gas fees applied. \\[contract, exit_reason, output\\]"
              ]
            },
            {
              "name": "BalanceDeposit",
              "args": [
                "AccountId",
                "EvmAddress",
                "U256"
              ],
              "documentation": [
                " A deposit has been made at a given address. \\[sender, address,",
                " value\\]"
              ]
            },
            {
              "name": "BalanceWithdraw",
              "args": [
                "AccountId",
                "EvmAddress",
                "U256"
              ],
              "documentation": [
                " A withdrawal has been made from a given address. \\[sender, address,",
                " value\\]"
              ]
            },
            {
              "name": "AddStorageQuota",
              "args": [
                "EvmAddress",
                "u32"
              ],
              "documentation": [
                " A quota has been added at a given address. \\[address, bytes\\]"
              ]
            },
            {
              "name": "RemoveStorageQuota",
              "args": [
                "EvmAddress",
                "u32"
              ],
              "documentation": [
                " A quota has been removed at a given address. \\[address, bytes\\]"
              ]
            },
            {
              "name": "TransferredMaintainer",
              "args": [
                "EvmAddress",
                "EvmAddress"
              ],
              "documentation": [
                " Transferred maintainer. \\[contract, address\\]"
              ]
            },
            {
              "name": "CanceledTransferMaintainer",
              "args": [
                "EvmAddress",
                "EvmAddress"
              ],
              "documentation": [
                " Canceled the transfer maintainer. \\[contract, address\\]"
              ]
            },
            {
              "name": "ConfirmedTransferMaintainer",
              "args": [
                "EvmAddress",
                "EvmAddress"
              ],
              "documentation": [
                " Confirmed the transfer maintainer. \\[contract, address\\]"
              ]
            },
            {
              "name": "RejectedTransferMaintainer",
              "args": [
                "EvmAddress",
                "EvmAddress"
              ],
              "documentation": [
                " Rejected the transfer maintainer. \\[contract, address\\]"
              ]
            },
            {
              "name": "ContractDevelopmentEnabled",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " Enabled contract development. \\[who\\]"
              ]
            },
            {
              "name": "ContractDevelopmentDisabled",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " Disabled contract development. \\[who\\]"
              ]
            },
            {
              "name": "ContractDeployed",
              "args": [
                "EvmAddress"
              ],
              "documentation": [
                " Deployed contract. \\[contract\\]"
              ]
            },
            {
              "name": "ContractSetCode",
              "args": [
                "EvmAddress"
              ],
              "documentation": [
                " Set contract code. \\[contract\\]"
              ]
            },
            {
              "name": "ContractSelfdestructed",
              "args": [
                "EvmAddress"
              ],
              "documentation": [
                " Selfdestructed contract code. \\[contract\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "NewContractExtraBytes",
              "type": "u32",
              "value": "0x00000000",
              "documentation": [
                " Charge extra bytes for creating a contract, would be reserved until",
                " the contract deleted."
              ]
            },
            {
              "name": "StorageDepositPerByte",
              "type": "BalanceOf",
              "value": "0x00000000000000000000000000000000",
              "documentation": [
                " Storage required for per byte."
              ]
            },
            {
              "name": "MaxCodeSize",
              "type": "u32",
              "value": "0x00600000",
              "documentation": [
                " Contract max code size."
              ]
            },
            {
              "name": "NetworkContractSource",
              "type": "EvmAddress",
              "value": "0x0000000000000000000000000000000000000000",
              "documentation": [
                " The EVM address for creating system contract."
              ]
            },
            {
              "name": "DeveloperDeposit",
              "type": "BalanceOf",
              "value": "0x00000000000000000000000000000000",
              "documentation": [
                " Deposit for the developer."
              ]
            },
            {
              "name": "DeploymentFee",
              "type": "BalanceOf",
              "value": "0x00000000000000000000000000000000",
              "documentation": [
                " The fee for deploying the contract."
              ]
            }
          ],
          "errors": [
            {
              "name": "AddressNotMapped",
              "documentation": [
                " Address not mapped"
              ]
            },
            {
              "name": "ContractNotFound",
              "documentation": [
                " Contract not found"
              ]
            },
            {
              "name": "NoPermission",
              "documentation": [
                " No permission"
              ]
            },
            {
              "name": "NumOutOfBound",
              "documentation": [
                " Number out of bound in calculation."
              ]
            },
            {
              "name": "StorageExceedsStorageLimit",
              "documentation": [
                " Storage exceeds max code size"
              ]
            },
            {
              "name": "ContractDevelopmentNotEnabled",
              "documentation": [
                " Contract development is not enabled"
              ]
            },
            {
              "name": "ContractDevelopmentAlreadyEnabled",
              "documentation": [
                " Contract development is already enabled"
              ]
            },
            {
              "name": "ContractAlreadyDeployed",
              "documentation": [
                " Contract already deployed"
              ]
            },
            {
              "name": "ContractExceedsMaxCodeSize",
              "documentation": [
                " Contract exceeds max code size"
              ]
            },
            {
              "name": "OutOfStorage",
              "documentation": [
                " Storage usage exceeds storage limit"
              ]
            },
            {
              "name": "ChargeFeeFailed",
              "documentation": [
                " Charge fee failed"
              ]
            }
          ],
          "index": 52
        },
        {
          "name": "EVMBridge",
          "storage": null,
          "calls": null,
          "events": null,
          "constants": [],
          "errors": [
            {
              "name": "ExecutionFail",
              "documentation": []
            },
            {
              "name": "ExecutionRevert",
              "documentation": []
            },
            {
              "name": "ExecutionFatal",
              "documentation": []
            },
            {
              "name": "ExecutionError",
              "documentation": []
            }
          ],
          "index": 53
        },
        {
          "name": "Authorship",
          "storage": {
            "prefix": "Authorship",
            "items": [
              {
                "name": "Uncles",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<UncleEntryItem>"
                },
                "fallback": "0x00",
                "documentation": [
                  " Uncles"
                ]
              },
              {
                "name": "Author",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "documentation": [
                  " Author of current block."
                ]
              },
              {
                "name": "DidSetUncles",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "documentation": [
                  " Whether uncles were already set in this block."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_uncles",
              "args": [
                {
                  "name": "new_uncles",
                  "type": "Vec<Header>"
                }
              ],
              "documentation": [
                " Provide a set of uncles."
              ]
            }
          ],
          "events": null,
          "constants": [],
          "errors": [
            {
              "name": "InvalidUncleParent",
              "documentation": [
                " The uncle parent not in the chain."
              ]
            },
            {
              "name": "UnclesAlreadySet",
              "documentation": [
                " Uncles already set in the block."
              ]
            },
            {
              "name": "TooManyUncles",
              "documentation": [
                " Too many uncles."
              ]
            },
            {
              "name": "GenesisUncle",
              "documentation": [
                " The uncle is genesis."
              ]
            },
            {
              "name": "TooHighUncle",
              "documentation": [
                " The uncle is too high in chain."
              ]
            },
            {
              "name": "UncleAlreadyIncluded",
              "documentation": [
                " The uncle is already included."
              ]
            },
            {
              "name": "OldUncle",
              "documentation": [
                " The uncle isn't recent enough to be included."
              ]
            }
          ],
          "index": 54
        },
        {
          "name": "Babe",
          "storage": {
            "prefix": "Babe",
            "items": [
              {
                "name": "EpochIndex",
                "modifier": "Default",
                "type": {
                  "plain": "u64"
                },
                "fallback": "0x0000000000000000",
                "documentation": [
                  " Current epoch index."
                ]
              },
              {
                "name": "Authorities",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(AuthorityId,BabeAuthorityWeight)>"
                },
                "fallback": "0x00",
                "documentation": [
                  " Current epoch authorities."
                ]
              },
              {
                "name": "GenesisSlot",
                "modifier": "Default",
                "type": {
                  "plain": "Slot"
                },
                "fallback": "0x0000000000000000",
                "documentation": [
                  " 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": "Slot"
                },
                "fallback": "0x0000000000000000",
                "documentation": [
                  " Current slot number."
                ]
              },
              {
                "name": "Randomness",
                "modifier": "Default",
                "type": {
                  "plain": "Randomness"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " 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": "NextEpochConfig",
                "modifier": "Optional",
                "type": {
                  "plain": "NextConfigDescriptor"
                },
                "fallback": "0x00",
                "documentation": [
                  " Next epoch configuration, if changed."
                ]
              },
              {
                "name": "NextRandomness",
                "modifier": "Default",
                "type": {
                  "plain": "Randomness"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " Next epoch randomness."
                ]
              },
              {
                "name": "NextAuthorities",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(AuthorityId,BabeAuthorityWeight)>"
                },
                "fallback": "0x00",
                "documentation": [
                  " Next epoch authorities."
                ]
              },
              {
                "name": "SegmentIndex",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " 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": "Twox64Concat",
                    "key": "u32",
                    "value": "Vec<Randomness>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " TWOX-NOTE: `SegmentIndex` is an increasing integer, so this is okay."
                ]
              },
              {
                "name": "Initialized",
                "modifier": "Optional",
                "type": {
                  "plain": "MaybeRandomness"
                },
                "fallback": "0x00",
                "documentation": [
                  " Temporary value (cleared at block finalization) which is `Some`",
                  " if per-block initialization has already been called for current block."
                ]
              },
              {
                "name": "AuthorVrfRandomness",
                "modifier": "Default",
                "type": {
                  "plain": "MaybeRandomness"
                },
                "fallback": "0x00",
                "documentation": [
                  " Temporary value (cleared at block finalization) that includes the VRF output generated",
                  " at this block. This field should always be populated during block processing unless",
                  " secondary plain slots are enabled (which don't contain a VRF output)."
                ]
              },
              {
                "name": "Lateness",
                "modifier": "Default",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " How late the current block is compared to its parent.",
                  "",
                  " This entry is populated as part of block execution and is cleaned up",
                  " on block finalization. Querying this storage entry outside of block",
                  " execution context should always yield zero."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "report_equivocation",
              "args": [
                {
                  "name": "equivocation_proof",
                  "type": "EquivocationProof"
                },
                {
                  "name": "key_owner_proof",
                  "type": "KeyOwnerProof"
                }
              ],
              "documentation": [
                " Report authority equivocation/misbehavior. This method will verify",
                " the equivocation proof and validate the given key ownership proof",
                " against the extracted offender. If both are valid, the offence will",
                " be reported."
              ]
            },
            {
              "name": "report_equivocation_unsigned",
              "args": [
                {
                  "name": "equivocation_proof",
                  "type": "EquivocationProof"
                },
                {
                  "name": "key_owner_proof",
                  "type": "KeyOwnerProof"
                }
              ],
              "documentation": [
                " Report authority equivocation/misbehavior. This method will verify",
                " the equivocation proof and validate the given key ownership proof",
                " against the extracted offender. If both are valid, the offence will",
                " be reported.",
                " This extrinsic must be called unsigned and it is expected that only",
                " block authors will call it (validated in `ValidateUnsigned`), as such",
                " if the block author is defined it will be defined as the equivocation",
                " reporter."
              ]
            },
            {
              "name": "plan_config_change",
              "args": [
                {
                  "name": "config",
                  "type": "NextConfigDescriptor"
                }
              ],
              "documentation": [
                " Plan an epoch config change. The epoch config change is recorded and will be enacted on",
                " the next call to `enact_epoch_change`. The config will be activated one epoch after.",
                " Multiple calls to this method will replace any existing planned config change that had",
                " not been enacted yet."
              ]
            }
          ],
          "events": null,
          "constants": [
            {
              "name": "EpochDuration",
              "type": "u64",
              "value": "0x5802000000000000",
              "documentation": [
                " 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.",
                " NOTE: Currently it is not possible to change the epoch duration",
                " after the chain has started. Attempting to do so will brick block",
                " production."
              ]
            },
            {
              "name": "ExpectedBlockTime",
              "type": "Moment",
              "value": "0x7017000000000000",
              "documentation": [
                " 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": [],
          "index": 55
        },
        {
          "name": "Grandpa",
          "storage": {
            "prefix": "GrandpaFinality",
            "items": [
              {
                "name": "State",
                "modifier": "Default",
                "type": {
                  "plain": "StoredState"
                },
                "fallback": "0x00",
                "documentation": [
                  " State of the current authority set."
                ]
              },
              {
                "name": "PendingChange",
                "modifier": "Optional",
                "type": {
                  "plain": "StoredPendingChange"
                },
                "fallback": "0x00",
                "documentation": [
                  " Pending change: (signaled at, scheduled change)."
                ]
              },
              {
                "name": "NextForced",
                "modifier": "Optional",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00",
                "documentation": [
                  " next block number where we can force a change."
                ]
              },
              {
                "name": "Stalled",
                "modifier": "Optional",
                "type": {
                  "plain": "(BlockNumber,BlockNumber)"
                },
                "fallback": "0x00",
                "documentation": [
                  " `true` if we are currently stalled."
                ]
              },
              {
                "name": "CurrentSetId",
                "modifier": "Default",
                "type": {
                  "plain": "SetId"
                },
                "fallback": "0x0000000000000000",
                "documentation": [
                  " 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": "Twox64Concat",
                    "key": "SetId",
                    "value": "SessionIndex",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " A mapping from grandpa set ID to the index of the *most recent* session for which its",
                  " members were responsible.",
                  "",
                  " TWOX-NOTE: `SetId` is not under user control."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "report_equivocation",
              "args": [
                {
                  "name": "equivocation_proof",
                  "type": "EquivocationProof"
                },
                {
                  "name": "key_owner_proof",
                  "type": "KeyOwnerProof"
                }
              ],
              "documentation": [
                " Report voter equivocation/misbehavior. This method will verify the",
                " equivocation proof and validate the given key ownership proof",
                " against the extracted offender. If both are valid, the offence",
                " will be reported."
              ]
            },
            {
              "name": "report_equivocation_unsigned",
              "args": [
                {
                  "name": "equivocation_proof",
                  "type": "EquivocationProof"
                },
                {
                  "name": "key_owner_proof",
                  "type": "KeyOwnerProof"
                }
              ],
              "documentation": [
                " Report voter equivocation/misbehavior. This method will verify the",
                " equivocation proof and validate the given key ownership proof",
                " against the extracted offender. If both are valid, the offence",
                " will be reported.",
                "",
                " This extrinsic must be called unsigned and it is expected that only",
                " block authors will call it (validated in `ValidateUnsigned`), as such",
                " if the block author is defined it will be defined as the equivocation",
                " reporter."
              ]
            },
            {
              "name": "note_stalled",
              "args": [
                {
                  "name": "delay",
                  "type": "BlockNumber"
                },
                {
                  "name": "best_finalized_block_number",
                  "type": "BlockNumber"
                }
              ],
              "documentation": [
                " Note that the current authority set of the GRANDPA finality gadget has",
                " stalled. This will trigger a forced authority set change at the beginning",
                " of the next session, to be enacted `delay` blocks after that. The delay",
                " should be high enough to safely assume that the block signalling the",
                " forced change will not be re-orged (e.g. 1000 blocks). The GRANDPA voters",
                " will start the new authority set using the given finalized block as base.",
                " Only callable by root."
              ]
            }
          ],
          "events": [
            {
              "name": "NewAuthorities",
              "args": [
                "AuthorityList"
              ],
              "documentation": [
                " New authority set has been applied. \\[authority_set\\]"
              ]
            },
            {
              "name": "Paused",
              "args": [],
              "documentation": [
                " Current authority set has been paused."
              ]
            },
            {
              "name": "Resumed",
              "args": [],
              "documentation": [
                " Current authority set has been resumed."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "PauseFailed",
              "documentation": [
                " Attempt to signal GRANDPA pause when the authority set isn't live",
                " (either paused or already pending pause)."
              ]
            },
            {
              "name": "ResumeFailed",
              "documentation": [
                " Attempt to signal GRANDPA resume when the authority set isn't paused",
                " (either live or already pending resume)."
              ]
            },
            {
              "name": "ChangePending",
              "documentation": [
                " Attempt to signal GRANDPA change with one already pending."
              ]
            },
            {
              "name": "TooSoon",
              "documentation": [
                " Cannot signal forced change so soon after last."
              ]
            },
            {
              "name": "InvalidKeyOwnershipProof",
              "documentation": [
                " A key ownership proof provided as part of an equivocation report is invalid."
              ]
            },
            {
              "name": "InvalidEquivocationProof",
              "documentation": [
                " An equivocation proof provided as part of an equivocation report is invalid."
              ]
            },
            {
              "name": "DuplicateOffenceReport",
              "documentation": [
                " A given equivocation report is valid but already previously reported."
              ]
            }
          ],
          "index": 56
        },
        {
          "name": "ElectionProviderMultiPhase",
          "storage": {
            "prefix": "ElectionProviderMultiPhase",
            "items": [
              {
                "name": "Round",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x01000000",
                "documentation": [
                  " Internal counter for the number of rounds.",
                  "",
                  " This is useful for de-duplication of transactions submitted to the pool, and general",
                  " diagnostics of the pallet.",
                  "",
                  " This is merely incremented once per every time that an upstream `elect` is called."
                ]
              },
              {
                "name": "CurrentPhase",
                "modifier": "Default",
                "type": {
                  "plain": "Phase"
                },
                "fallback": "0x00",
                "documentation": [
                  " Current phase."
                ]
              },
              {
                "name": "QueuedSolution",
                "modifier": "Optional",
                "type": {
                  "plain": "ReadySolution"
                },
                "fallback": "0x00",
                "documentation": [
                  " Current best solution, signed or unsigned, queued to be returned upon `elect`."
                ]
              },
              {
                "name": "Snapshot",
                "modifier": "Optional",
                "type": {
                  "plain": "RoundSnapshot"
                },
                "fallback": "0x00",
                "documentation": [
                  " Snapshot data of the round.",
                  "",
                  " This is created at the beginning of the signed phase and cleared upon calling `elect`."
                ]
              },
              {
                "name": "DesiredTargets",
                "modifier": "Optional",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00",
                "documentation": [
                  " Desired number of targets to elect for this round.",
                  "",
                  " Only exists when [`Snapshot`] is present."
                ]
              },
              {
                "name": "SnapshotMetadata",
                "modifier": "Optional",
                "type": {
                  "plain": "SolutionOrSnapshotSize"
                },
                "fallback": "0x00",
                "documentation": [
                  " The metadata of the [`RoundSnapshot`]",
                  "",
                  " Only exists when [`Snapshot`] is present."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "submit_unsigned",
              "args": [
                {
                  "name": "solution",
                  "type": "RawSolution"
                },
                {
                  "name": "witness",
                  "type": "SolutionOrSnapshotSize"
                }
              ],
              "documentation": [
                " Submit a solution for the unsigned phase.",
                "",
                " The dispatch origin fo this call must be __none__.",
                "",
                " This submission is checked on the fly. Moreover, this unsigned solution is only",
                " validated when submitted to the pool from the **local** node. Effectively, this means",
                " that only active validators can submit this transaction when authoring a block (similar",
                " to an inherent).",
                "",
                " To prevent any incorrect solution (and thus wasted time/weight), this transaction will",
                " panic if the solution submitted by the validator is invalid in any way, effectively",
                " putting their authoring reward at risk.",
                "",
                " No deposit or reward is associated with this submission."
              ]
            }
          ],
          "events": [
            {
              "name": "SolutionStored",
              "args": [
                "ElectionCompute"
              ],
              "documentation": [
                " A solution was stored with the given compute.",
                "",
                " If the solution is signed, this means that it hasn't yet been processed. If the",
                " solution is unsigned, this means that it has also been processed."
              ]
            },
            {
              "name": "ElectionFinalized",
              "args": [
                "Option<ElectionCompute>"
              ],
              "documentation": [
                " The election has been finalized, with `Some` of the given computation, or else if the",
                " election failed, `None`."
              ]
            },
            {
              "name": "Rewarded",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " An account has been rewarded for their signed submission being finalized."
              ]
            },
            {
              "name": "Slashed",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " An account has been slashed for submitting an invalid signed submission."
              ]
            },
            {
              "name": "SignedPhaseStarted",
              "args": [
                "u32"
              ],
              "documentation": [
                " The signed phase of the given round has started."
              ]
            },
            {
              "name": "UnsignedPhaseStarted",
              "args": [
                "u32"
              ],
              "documentation": [
                " The unsigned phase of the given round has started."
              ]
            }
          ],
          "constants": [
            {
              "name": "UnsignedPhase",
              "type": "BlockNumber",
              "value": "0x96000000",
              "documentation": [
                " Duration of the unsigned phase."
              ]
            },
            {
              "name": "SignedPhase",
              "type": "BlockNumber",
              "value": "0x96000000",
              "documentation": [
                " Duration of the signed phase."
              ]
            },
            {
              "name": "SolutionImprovementThreshold",
              "type": "Perbill",
              "value": "0x20a10700",
              "documentation": [
                " The minimum amount of improvement to the solution score that defines a solution as",
                " \"better\" (in any phase)."
              ]
            }
          ],
          "errors": [
            {
              "name": "PreDispatchEarlySubmission",
              "documentation": [
                " Submission was too early."
              ]
            },
            {
              "name": "PreDispatchWrongWinnerCount",
              "documentation": [
                " Wrong number of winners presented."
              ]
            },
            {
              "name": "PreDispatchWeakSubmission",
              "documentation": [
                " Submission was too weak, score-wise."
              ]
            }
          ],
          "index": 57
        },
        {
          "name": "Staking",
          "storage": {
            "prefix": "Staking",
            "items": [
              {
                "name": "HistoryDepth",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x54000000",
                "documentation": [
                  " Number of eras to keep in history.",
                  "",
                  " Information is kept for eras in `[current_era - history_depth; current_era]`.",
                  "",
                  " Must be more than the number of eras delayed by session otherwise. I.e. active era must",
                  " always be in history. I.e. `active_era > current_era - history_depth` must be",
                  " guaranteed."
                ]
              },
              {
                "name": "ValidatorCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " The ideal number of staking participants."
                ]
              },
              {
                "name": "MinimumValidatorCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Minimum number of staking participants before emergency conditions are imposed."
                ]
              },
              {
                "name": "Invulnerables",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " 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": "Twox64Concat",
                    "key": "AccountId",
                    "value": "AccountId",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Map from all locked \"stash\" accounts to the controller account."
                ]
              },
              {
                "name": "Ledger",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "StakingLedger",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Map from all (unlocked) \"controller\" accounts to the info regarding the staking."
                ]
              },
              {
                "name": "Payee",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "RewardDestination",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Where the reward payment should be made. Keyed by stash."
                ]
              },
              {
                "name": "Validators",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "ValidatorPrefs",
                    "linked": false
                  }
                },
                "fallback": "0x0000",
                "documentation": [
                  " The map from (wannabe) validator stash key to the preferences of that validator."
                ]
              },
              {
                "name": "Nominators",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "Nominations",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " The map from nominator stash key to the set of stash keys of all validators to nominate."
                ]
              },
              {
                "name": "CurrentEra",
                "modifier": "Optional",
                "type": {
                  "plain": "EraIndex"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current era index.",
                  "",
                  " This is the latest planned era, depending on how the Session pallet queues the validator",
                  " set, it might be active or not."
                ]
              },
              {
                "name": "ActiveEra",
                "modifier": "Optional",
                "type": {
                  "plain": "ActiveEraInfo"
                },
                "fallback": "0x00",
                "documentation": [
                  " The active era information, it holds index and start.",
                  "",
                  " The active era is the era being currently rewarded. Validator set of this era must be",
                  " equal to [`SessionInterface::validators`]."
                ]
              },
              {
                "name": "ErasStartSessionIndex",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "EraIndex",
                    "value": "SessionIndex",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " The session index at which the era start for the last `HISTORY_DEPTH` eras.",
                  "",
                  " Note: This tracks the starting session (i.e. session index when era start being active)",
                  " for the eras in `[CurrentEra - HISTORY_DEPTH, CurrentEra]`."
                ]
              },
              {
                "name": "ErasStakers",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "EraIndex",
                    "key2": "AccountId",
                    "value": "Exposure",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x000000",
                "documentation": [
                  " Exposure of validator at era.",
                  "",
                  " This is keyed first by the era index to allow bulk deletion and then the stash account.",
                  "",
                  " Is it removed after `HISTORY_DEPTH` eras.",
                  " If stakers hasn't been set or has been removed then empty exposure is returned."
                ]
              },
              {
                "name": "ErasStakersClipped",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "EraIndex",
                    "key2": "AccountId",
                    "value": "Exposure",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x000000",
                "documentation": [
                  " Clipped Exposure of validator at era.",
                  "",
                  " This is similar to [`ErasStakers`] but number of nominators exposed is reduced to the",
                  " `T::MaxNominatorRewardedPerValidator` biggest stakers.",
                  " (Note: the field `total` and `own` of the exposure remains unchanged).",
                  " This is used to limit the i/o cost for the nominator payout.",
                  "",
                  " This is keyed fist by the era index to allow bulk deletion and then the stash account.",
                  "",
                  " Is it removed after `HISTORY_DEPTH` eras.",
                  " If stakers hasn't been set or has been removed then empty exposure is returned."
                ]
              },
              {
                "name": "ErasValidatorPrefs",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "EraIndex",
                    "key2": "AccountId",
                    "value": "ValidatorPrefs",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x0000",
                "documentation": [
                  " Similar to `ErasStakers`, this holds the preferences of validators.",
                  "",
                  " This is keyed first by the era index to allow bulk deletion and then the stash account.",
                  "",
                  " Is it removed after `HISTORY_DEPTH` eras."
                ]
              },
              {
                "name": "ErasValidatorReward",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "EraIndex",
                    "value": "BalanceOf",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " The total validator era payout for the last `HISTORY_DEPTH` eras.",
                  "",
                  " Eras that haven't finished yet or has been removed doesn't have reward."
                ]
              },
              {
                "name": "ErasRewardPoints",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "EraIndex",
                    "value": "EraRewardPoints",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000",
                "documentation": [
                  " Rewards for the last `HISTORY_DEPTH` eras.",
                  " If reward hasn't been set or has been removed then 0 reward is returned."
                ]
              },
              {
                "name": "ErasTotalStake",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "EraIndex",
                    "value": "BalanceOf",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "documentation": [
                  " The total amount staked for the last `HISTORY_DEPTH` eras.",
                  " If total hasn't been set or has been removed then 0 stake is returned."
                ]
              },
              {
                "name": "ForceEra",
                "modifier": "Default",
                "type": {
                  "plain": "Forcing"
                },
                "fallback": "0x00",
                "documentation": [
                  " Mode of era forcing."
                ]
              },
              {
                "name": "SlashRewardFraction",
                "modifier": "Default",
                "type": {
                  "plain": "Perbill"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " 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",
                "documentation": [
                  " 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": "Twox64Concat",
                    "key": "EraIndex",
                    "value": "Vec<UnappliedSlash>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " All unapplied slashes that are queued for later."
                ]
              },
              {
                "name": "BondedEras",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(EraIndex,SessionIndex)>"
                },
                "fallback": "0x00",
                "documentation": [
                  " A mapping from still-bonded eras to the first session index of that era.",
                  "",
                  " Must contains information for eras for the range:",
                  " `[active_era - bounding_duration; active_era]`"
                ]
              },
              {
                "name": "ValidatorSlashInEra",
                "modifier": "Optional",
                "type": {
                  "doubleMap": {
                    "hasher": "Twox64Concat",
                    "key1": "EraIndex",
                    "key2": "AccountId",
                    "value": "(Perbill,BalanceOf)",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " 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": "Twox64Concat",
                    "key1": "EraIndex",
                    "key2": "AccountId",
                    "value": "BalanceOf",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " All slashing events on nominators, mapped by era to the highest slash value of the era."
                ]
              },
              {
                "name": "SlashingSpans",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "SlashingSpans",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " Slashing spans for stash accounts."
                ]
              },
              {
                "name": "SpanSlash",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "(AccountId,SpanIndex)",
                    "value": "SpanRecord",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " 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",
                "documentation": [
                  " The earliest era for which we have a pending, unapplied slash."
                ]
              },
              {
                "name": "CurrentPlannedSession",
                "modifier": "Default",
                "type": {
                  "plain": "SessionIndex"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " The last planned session scheduled by the session pallet.",
                  "",
                  " This is basically in sync with the call to [`SessionManager::new_session`]."
                ]
              },
              {
                "name": "SnapshotValidators",
                "modifier": "Optional",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " Snapshot of validators at the beginning of the current election window. This should only",
                  " have a value when [`EraElectionStatus`] == `ElectionStatus::Open(_)`.",
                  "",
                  " TWO_PHASE_NOTE: should be removed once we switch to multi-phase."
                ]
              },
              {
                "name": "SnapshotNominators",
                "modifier": "Optional",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " Snapshot of nominators at the beginning of the current election window. This should only",
                  " have a value when [`EraElectionStatus`] == `ElectionStatus::Open(_)`.",
                  "",
                  " TWO_PHASE_NOTE: should be removed once we switch to multi-phase."
                ]
              },
              {
                "name": "QueuedElected",
                "modifier": "Optional",
                "type": {
                  "plain": "ElectionResult"
                },
                "fallback": "0x00",
                "documentation": [
                  " The next validator set. At the end of an era, if this is available (potentially from the",
                  " result of an offchain worker), it is immediately used. Otherwise, the on-chain election",
                  " is executed.",
                  "",
                  " TWO_PHASE_NOTE: should be removed once we switch to multi-phase."
                ]
              },
              {
                "name": "QueuedScore",
                "modifier": "Optional",
                "type": {
                  "plain": "ElectionScore"
                },
                "fallback": "0x00",
                "documentation": [
                  " The score of the current [`QueuedElected`].",
                  "",
                  " TWO_PHASE_NOTE: should be removed once we switch to multi-phase."
                ]
              },
              {
                "name": "EraElectionStatus",
                "modifier": "Default",
                "type": {
                  "plain": "ElectionStatus"
                },
                "fallback": "0x00",
                "documentation": [
                  " Flag to control the execution of the offchain election. When `Open(_)`, we accept",
                  " solutions to be submitted.",
                  "",
                  " TWO_PHASE_NOTE: should be removed once we switch to multi-phase."
                ]
              },
              {
                "name": "IsCurrentSessionFinal",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "documentation": [
                  " True if the current **planned** session is final. Note that this does not take era",
                  " forcing into account.",
                  "",
                  " TWO_PHASE_NOTE: should be removed once we switch to multi-phase."
                ]
              },
              {
                "name": "StorageVersion",
                "modifier": "Default",
                "type": {
                  "plain": "Releases"
                },
                "fallback": "0x04",
                "documentation": [
                  " True if network has been upgraded to this version.",
                  " Storage version of the pallet.",
                  "",
                  " This is set to v5.0.0 for new networks."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "bond",
              "args": [
                {
                  "name": "controller",
                  "type": "LookupSource"
                },
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "payee",
                  "type": "RewardDestination"
                }
              ],
              "documentation": [
                " 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.",
                "",
                " Emits `Bonded`.",
                "",
                " # <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: O(1)",
                " DB Weight:",
                " - Read: Bonded, Ledger, [Origin Account], Current Era, History Depth, Locks",
                " - Write: Bonded, Payee, [Origin Account], Locks, Ledger",
                " # </weight>"
              ]
            },
            {
              "name": "bond_extra",
              "args": [
                {
                  "name": "max_additional",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "documentation": [
                " 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 and",
                " it can be only called when [`EraElectionStatus`] is `Closed`.",
                "",
                " Emits `Bonded`.",
                "",
                " # <weight>",
                " - Independent of the arguments. Insignificant complexity.",
                " - O(1).",
                " - One DB entry.",
                " ------------",
                " DB Weight:",
                " - Read: Era Election Status, Bonded, Ledger, [Origin Account], Locks",
                " - Write: [Origin Account], Locks, Ledger",
                " # </weight>"
              ]
            },
            {
              "name": "unbond",
              "args": [
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "documentation": [
                " 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.",
                " And, it can be only called when [`EraElectionStatus`] is `Closed`.",
                "",
                " Emits `Unbonded`.",
                "",
                " 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: O(1)",
                " DB Weight:",
                " - Read: EraElectionStatus, Ledger, CurrentEra, Locks, BalanceOf Stash,",
                " - Write: Locks, Ledger, BalanceOf Stash,",
                " </weight>"
              ]
            },
            {
              "name": "withdraw_unbonded",
              "args": [
                {
                  "name": "num_slashing_spans",
                  "type": "u32"
                }
              ],
              "documentation": [
                " 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.",
                " And, it can be only called when [`EraElectionStatus`] is `Closed`.",
                "",
                " Emits `Withdrawn`.",
                "",
                " 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.",
                " ---------------",
                " Complexity O(S) where S is the number of slashing spans to remove",
                " Update:",
                " - Reads: EraElectionStatus, Ledger, Current Era, Locks, [Origin Account]",
                " - Writes: [Origin Account], Locks, Ledger",
                " Kill:",
                " - Reads: EraElectionStatus, Ledger, Current Era, Bonded, Slashing Spans, [Origin",
                "   Account], Locks, BalanceOf stash",
                " - Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators,",
                "   [Origin Account], Locks, BalanceOf stash.",
                " - Writes Each: SpanSlash * S",
                " NOTE: Weight annotation is the kill scenario, we refund otherwise.",
                " # </weight>"
              ]
            },
            {
              "name": "validate",
              "args": [
                {
                  "name": "prefs",
                  "type": "ValidatorPrefs"
                }
              ],
              "documentation": [
                " 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.",
                " And, it can be only called when [`EraElectionStatus`] is `Closed`.",
                "",
                " # <weight>",
                " - Independent of the arguments. Insignificant complexity.",
                " - Contains a limited number of reads.",
                " - Writes are limited to the `origin` account key.",
                " -----------",
                " Weight: O(1)",
                " DB Weight:",
                " - Read: Era Election Status, Ledger",
                " - Write: Nominators, Validators",
                " # </weight>"
              ]
            },
            {
              "name": "nominate",
              "args": [
                {
                  "name": "targets",
                  "type": "Vec<LookupSource>"
                }
              ],
              "documentation": [
                " Declare the desire to nominate `targets` for the origin controller.",
                "",
                " Effects will be felt at the beginning of the next era. This can only be called when",
                " [`EraElectionStatus`] is `Closed`.",
                "",
                " The dispatch origin for this call must be _Signed_ by the controller, not the stash.",
                " And, it can be only called when [`EraElectionStatus`] is `Closed`.",
                "",
                " # <weight>",
                " - The transaction's complexity is proportional to the size of `targets` (N)",
                " which is capped at CompactAssignments::LIMIT (MAX_NOMINATIONS).",
                " - Both the reads and writes follow a similar pattern.",
                " ---------",
                " Weight: O(N)",
                " where N is the number of targets",
                " DB Weight:",
                " - Reads: Era Election Status, Ledger, Current Era",
                " - Writes: Validators, Nominators",
                " # </weight>"
              ]
            },
            {
              "name": "chill",
              "args": [],
              "documentation": [
                " 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.",
                " And, it can be only called when [`EraElectionStatus`] is `Closed`.",
                "",
                " # <weight>",
                " - Independent of the arguments. Insignificant complexity.",
                " - Contains one read.",
                " - Writes are limited to the `origin` account key.",
                " --------",
                " Weight: O(1)",
                " DB Weight:",
                " - Read: EraElectionStatus, Ledger",
                " - Write: Validators, Nominators",
                " # </weight>"
              ]
            },
            {
              "name": "set_payee",
              "args": [
                {
                  "name": "payee",
                  "type": "RewardDestination"
                }
              ],
              "documentation": [
                " (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: O(1)",
                " - DB Weight:",
                "     - Read: Ledger",
                "     - Write: Payee",
                " # </weight>"
              ]
            },
            {
              "name": "set_controller",
              "args": [
                {
                  "name": "controller",
                  "type": "LookupSource"
                }
              ],
              "documentation": [
                " (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: O(1)",
                " DB Weight:",
                " - Read: Bonded, Ledger New Controller, Ledger Old Controller",
                " - Write: Bonded, Ledger New Controller, Ledger Old Controller",
                " # </weight>"
              ]
            },
            {
              "name": "set_validator_count",
              "args": [
                {
                  "name": "new",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Sets the ideal number of validators.",
                "",
                " The dispatch origin must be Root.",
                "",
                " # <weight>",
                " Weight: O(1)",
                " Write: Validator Count",
                " # </weight>"
              ]
            },
            {
              "name": "increase_validator_count",
              "args": [
                {
                  "name": "additional",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Increments the ideal number of validators.",
                "",
                " The dispatch origin must be Root.",
                "",
                " # <weight>",
                " Same as [`set_validator_count`].",
                " # </weight>"
              ]
            },
            {
              "name": "scale_validator_count",
              "args": [
                {
                  "name": "factor",
                  "type": "Percent"
                }
              ],
              "documentation": [
                " Scale up the ideal number of validators by a factor.",
                "",
                " The dispatch origin must be Root.",
                "",
                " # <weight>",
                " Same as [`set_validator_count`].",
                " # </weight>"
              ]
            },
            {
              "name": "force_no_eras",
              "args": [],
              "documentation": [
                " Force there to be no new eras indefinitely.",
                "",
                " The dispatch origin must be Root.",
                "",
                " # <weight>",
                " - No arguments.",
                " - Weight: O(1)",
                " - Write: ForceEra",
                " # </weight>"
              ]
            },
            {
              "name": "force_new_era",
              "args": [],
              "documentation": [
                " 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.",
                "",
                " The dispatch origin must be Root.",
                "",
                " # <weight>",
                " - No arguments.",
                " - Weight: O(1)",
                " - Write ForceEra",
                " # </weight>"
              ]
            },
            {
              "name": "set_invulnerables",
              "args": [
                {
                  "name": "invulnerables",
                  "type": "Vec<AccountId>"
                }
              ],
              "documentation": [
                " Set the validators who cannot be slashed (if any).",
                "",
                " The dispatch origin must be Root.",
                "",
                " # <weight>",
                " - O(V)",
                " - Write: Invulnerables",
                " # </weight>"
              ]
            },
            {
              "name": "force_unstake",
              "args": [
                {
                  "name": "stash",
                  "type": "AccountId"
                },
                {
                  "name": "num_slashing_spans",
                  "type": "u32"
                }
              ],
              "documentation": [
                " Force a current staker to become completely unstaked, immediately.",
                "",
                " The dispatch origin must be Root.",
                "",
                " # <weight>",
                " O(S) where S is the number of slashing spans to be removed",
                " Reads: Bonded, Slashing Spans, Account, Locks",
                " Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators, Account, Locks",
                " Writes Each: SpanSlash * S",
                " # </weight>"
              ]
            },
            {
              "name": "force_new_era_always",
              "args": [],
              "documentation": [
                " Force there to be a new era at the end of sessions indefinitely.",
                "",
                " The dispatch origin must be Root.",
                "",
                " # <weight>",
                " - Weight: O(1)",
                " - Write: ForceEra",
                " # </weight>"
              ]
            },
            {
              "name": "cancel_deferred_slash",
              "args": [
                {
                  "name": "era",
                  "type": "EraIndex"
                },
                {
                  "name": "slash_indices",
                  "type": "Vec<u32>"
                }
              ],
              "documentation": [
                " Cancel enactment of a deferred slash.",
                "",
                " Can be called by the `T::SlashCancelOrigin`.",
                "",
                " Parameters: era and indices of the slashes for that era to kill.",
                "",
                " # <weight>",
                " Complexity: O(U + S)",
                " with U unapplied slashes weighted with U=1000",
                " and S is the number of slash indices to be canceled.",
                " - Read: Unapplied Slashes",
                " - Write: Unapplied Slashes",
                " # </weight>"
              ]
            },
            {
              "name": "payout_stakers",
              "args": [
                {
                  "name": "validator_stash",
                  "type": "AccountId"
                },
                {
                  "name": "era",
                  "type": "EraIndex"
                }
              ],
              "documentation": [
                " Pay out all the stakers behind a single validator for a single era.",
                "",
                " - `validator_stash` is the stash account of the validator. Their nominators, up to",
                "   `T::MaxNominatorRewardedPerValidator`, will also receive their rewards.",
                " - `era` may be any era between `[current_era - history_depth; current_era]`.",
                "",
                " The origin of this call must be _Signed_. Any account can call this function, even if",
                " it is not one of the stakers.",
                "",
                " This can only be called when [`EraElectionStatus`] is `Closed`.",
                "",
                " # <weight>",
                " - Time complexity: at most O(MaxNominatorRewardedPerValidator).",
                " - Contains a limited number of reads and writes.",
                " -----------",
                " N is the Number of payouts for the validator (including the validator)",
                " Weight:",
                " - Reward Destination Staked: O(N)",
                " - Reward Destination Controller (Creating): O(N)",
                " DB Weight:",
                " - Read: EraElectionStatus, CurrentEra, HistoryDepth, ErasValidatorReward,",
                "         ErasStakersClipped, ErasRewardPoints, ErasValidatorPrefs (8 items)",
                " - Read Each: Bonded, Ledger, Payee, Locks, System Account (5 items)",
                " - Write Each: System Account, Locks, Ledger (3 items)",
                "",
                "   NOTE: weights are assuming that payouts are made to alive stash account (Staked).",
                "   Paying even a dead controller is cheaper weight-wise. We don't do any refunds here.",
                " # </weight>"
              ]
            },
            {
              "name": "rebond",
              "args": [
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "documentation": [
                " Rebond a portion of the stash scheduled to be unlocked.",
                "",
                " The dispatch origin must be signed by the controller, and it can be only called when",
                " [`EraElectionStatus`] is `Closed`.",
                "",
                " # <weight>",
                " - Time complexity: O(L), where L is unlocking chunks",
                " - Bounded by `MAX_UNLOCKING_CHUNKS`.",
                " - Storage changes: Can't increase storage, only decrease it.",
                " ---------------",
                " - DB Weight:",
                "     - Reads: EraElectionStatus, Ledger, Locks, [Origin Account]",
                "     - Writes: [Origin Account], Locks, Ledger",
                " # </weight>"
              ]
            },
            {
              "name": "set_history_depth",
              "args": [
                {
                  "name": "new_history_depth",
                  "type": "Compact<EraIndex>"
                },
                {
                  "name": "_era_items_deleted",
                  "type": "Compact<u32>"
                }
              ],
              "documentation": [
                " Set `HistoryDepth` value. This function will delete any history information",
                " when `HistoryDepth` is reduced.",
                "",
                " Parameters:",
                " - `new_history_depth`: The new history depth you would like to set.",
                " - `era_items_deleted`: The number of items that will be deleted by this dispatch.",
                "    This should report all the storage items that will be deleted by clearing old",
                "    era history. Needed to report an accurate weight for the dispatch. Trusted by",
                "    `Root` to report an accurate number.",
                "",
                " Origin must be root.",
                "",
                " # <weight>",
                " - E: Number of history depths removed, i.e. 10 -> 7 = 3",
                " - Weight: O(E)",
                " - DB Weight:",
                "     - Reads: Current Era, History Depth",
                "     - Writes: History Depth",
                "     - Clear Prefix Each: Era Stakers, EraStakersClipped, ErasValidatorPrefs",
                "     - Writes Each: ErasValidatorReward, ErasRewardPoints, ErasTotalStake, ErasStartSessionIndex",
                " # </weight>"
              ]
            },
            {
              "name": "reap_stash",
              "args": [
                {
                  "name": "stash",
                  "type": "AccountId"
                },
                {
                  "name": "num_slashing_spans",
                  "type": "u32"
                }
              ],
              "documentation": [
                " Remove all data structure concerning a staker/stash once its balance is at the minimum.",
                " This is essentially equivalent to `withdraw_unbonded` except it can be called by anyone",
                " and the target `stash` must have no funds left beyond the ED.",
                "",
                " This can be called from any origin.",
                "",
                " - `stash`: The stash account to reap. Its balance must be zero.",
                "",
                " # <weight>",
                " Complexity: O(S) where S is the number of slashing spans on the account.",
                " DB Weight:",
                " - Reads: Stash Account, Bonded, Slashing Spans, Locks",
                " - Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators, Stash Account, Locks",
                " - Writes Each: SpanSlash * S",
                " # </weight>"
              ]
            },
            {
              "name": "submit_election_solution",
              "args": [
                {
                  "name": "winners",
                  "type": "Vec<ValidatorIndex>"
                },
                {
                  "name": "compact",
                  "type": "CompactAssignments"
                },
                {
                  "name": "score",
                  "type": "ElectionScore"
                },
                {
                  "name": "era",
                  "type": "EraIndex"
                },
                {
                  "name": "size",
                  "type": "ElectionSize"
                }
              ],
              "documentation": [
                " Submit an election result to the chain. If the solution:",
                "",
                " 1. is valid.",
                " 2. has a better score than a potentially existing solution on chain.",
                "",
                " then, it will be _put_ on chain.",
                "",
                " A solution consists of two pieces of data:",
                "",
                " 1. `winners`: a flat vector of all the winners of the round.",
                " 2. `assignments`: the compact version of an assignment vector that encodes the edge",
                "    weights.",
                "",
                " Both of which may be computed using _phragmen_, or any other algorithm.",
                "",
                " Additionally, the submitter must provide:",
                "",
                " - The `score` that they claim their solution has.",
                "",
                " Both validators and nominators will be represented by indices in the solution. The",
                " indices should respect the corresponding types ([`ValidatorIndex`] and",
                " [`NominatorIndex`]). Moreover, they should be valid when used to index into",
                " [`SnapshotValidators`] and [`SnapshotNominators`]. Any invalid index will cause the",
                " solution to be rejected. These two storage items are set during the election window and",
                " may be used to determine the indices.",
                "",
                " A solution is valid if:",
                "",
                " 0. It is submitted when [`EraElectionStatus`] is `Open`.",
                " 1. Its claimed score is equal to the score computed on-chain.",
                " 2. Presents the correct number of winners.",
                " 3. All indexes must be value according to the snapshot vectors. All edge values must",
                "    also be correct and should not overflow the granularity of the ratio type (i.e. 256",
                "    or billion).",
                " 4. For each edge, all targets are actually nominated by the voter.",
                " 5. Has correct self-votes.",
                "",
                " A solutions score is consisted of 3 parameters:",
                "",
                " 1. `min { support.total }` for each support of a winner. This value should be maximized.",
                " 2. `sum { support.total }` for each support of a winner. This value should be minimized.",
                " 3. `sum { support.total^2 }` for each support of a winner. This value should be",
                "    minimized (to ensure less variance)",
                "",
                " # <weight>",
                " The transaction is assumed to be the longest path, a better solution.",
                "   - Initial solution is almost the same.",
                "   - Worse solution is retraced in pre-dispatch-checks which sets its own weight.",
                " # </weight>"
              ]
            },
            {
              "name": "submit_election_solution_unsigned",
              "args": [
                {
                  "name": "winners",
                  "type": "Vec<ValidatorIndex>"
                },
                {
                  "name": "compact",
                  "type": "CompactAssignments"
                },
                {
                  "name": "score",
                  "type": "ElectionScore"
                },
                {
                  "name": "era",
                  "type": "EraIndex"
                },
                {
                  "name": "size",
                  "type": "ElectionSize"
                }
              ],
              "documentation": [
                " Unsigned version of `submit_election_solution`.",
                "",
                " Note that this must pass the [`ValidateUnsigned`] check which only allows transactions",
                " from the local node to be included. In other words, only the block author can include a",
                " transaction in the block.",
                "",
                " # <weight>",
                " See [`submit_election_solution`].",
                " # </weight>"
              ]
            },
            {
              "name": "kick",
              "args": [
                {
                  "name": "who",
                  "type": "Vec<LookupSource>"
                }
              ],
              "documentation": [
                " Remove the given nominations from the calling validator.",
                "",
                " 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.",
                " And, it can be only called when [`EraElectionStatus`] is `Closed`. The controller",
                " account should represent a validator.",
                "",
                " - `who`: A list of nominator stash accounts who are nominating this validator which",
                "   should no longer be nominating this validator.",
                "",
                " Note: Making this call only makes sense if you first set the validator preferences to",
                " block any further nominations."
              ]
            }
          ],
          "events": [
            {
              "name": "EraPayout",
              "args": [
                "EraIndex",
                "Balance",
                "Balance"
              ],
              "documentation": [
                " The era payout has been set; the first balance is the validator-payout; the second is",
                " the remainder from the maximum amount of reward.",
                " \\[era_index, validator_payout, remainder\\]"
              ]
            },
            {
              "name": "Reward",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " The staker has been rewarded by this amount. \\[stash, amount\\]"
              ]
            },
            {
              "name": "Slash",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " One validator (and its nominators) has been slashed by the given amount.",
                " \\[validator, amount\\]"
              ]
            },
            {
              "name": "OldSlashingReportDiscarded",
              "args": [
                "SessionIndex"
              ],
              "documentation": [
                " An old slashing report from a prior era was discarded because it could",
                " not be processed. \\[session_index\\]"
              ]
            },
            {
              "name": "StakingElection",
              "args": [
                "ElectionCompute"
              ],
              "documentation": [
                " A new set of stakers was elected with the given \\[compute\\]."
              ]
            },
            {
              "name": "SolutionStored",
              "args": [
                "ElectionCompute"
              ],
              "documentation": [
                " A new solution for the upcoming election has been stored. \\[compute\\]"
              ]
            },
            {
              "name": "Bonded",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " An account has bonded this amount. \\[stash, amount\\]",
                "",
                " NOTE: This event is only emitted when funds are bonded via a dispatchable. Notably,",
                " it will not be emitted for staking rewards when they are added to stake."
              ]
            },
            {
              "name": "Unbonded",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " An account has unbonded this amount. \\[stash, amount\\]"
              ]
            },
            {
              "name": "Withdrawn",
              "args": [
                "AccountId",
                "Balance"
              ],
              "documentation": [
                " An account has called `withdraw_unbonded` and removed unbonding chunks worth `Balance`",
                " from the unlocking queue. \\[stash, amount\\]"
              ]
            },
            {
              "name": "Kicked",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "documentation": [
                " A nominator has been kicked from a validator. \\[nominator, stash\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "SessionsPerEra",
              "type": "SessionIndex",
              "value": "0x03000000",
              "documentation": [
                " Number of sessions per era."
              ]
            },
            {
              "name": "BondingDuration",
              "type": "EraIndex",
              "value": "0x04000000",
              "documentation": [
                " Number of eras that staked funds must remain bonded for."
              ]
            },
            {
              "name": "SlashDeferDuration",
              "type": "EraIndex",
              "value": "0x02000000",
              "documentation": [
                " Number of eras that slashes are deferred by, after computation.",
                "",
                " This should be less than the bonding duration.",
                " Set to 0 if slashes should be applied immediately, without opportunity for",
                " intervention."
              ]
            },
            {
              "name": "ElectionLookahead",
              "type": "BlockNumber",
              "value": "0x96000000",
              "documentation": [
                " The number of blocks before the end of the era from which election submissions are allowed.",
                "",
                " Setting this to zero will disable the offchain compute and only on-chain seq-phragmen will",
                " be used.",
                "",
                " This is bounded by being within the last session. Hence, setting it to a value more than the",
                " length of a session will be pointless."
              ]
            },
            {
              "name": "MaxIterations",
              "type": "u32",
              "value": "0x05000000",
              "documentation": [
                " Maximum number of balancing iterations to run in the offchain submission.",
                "",
                " If set to 0, balance_solution will not be executed at all."
              ]
            },
            {
              "name": "MinSolutionScoreBump",
              "type": "Perbill",
              "value": "0x20a10700",
              "documentation": [
                " The threshold of improvement that should be provided for a new solution to be accepted."
              ]
            },
            {
              "name": "MaxNominatorRewardedPerValidator",
              "type": "u32",
              "value": "0x40000000",
              "documentation": [
                " The maximum number of nominators rewarded for each validator.",
                "",
                " For each validator only the `$MaxNominatorRewardedPerValidator` biggest stakers can claim",
                " their reward. This used to limit the i/o cost for the nominator payout."
              ]
            }
          ],
          "errors": [
            {
              "name": "NotController",
              "documentation": [
                " Not a controller account."
              ]
            },
            {
              "name": "NotStash",
              "documentation": [
                " Not a stash account."
              ]
            },
            {
              "name": "AlreadyBonded",
              "documentation": [
                " Stash is already bonded."
              ]
            },
            {
              "name": "AlreadyPaired",
              "documentation": [
                " Controller is already paired."
              ]
            },
            {
              "name": "EmptyTargets",
              "documentation": [
                " Targets cannot be empty."
              ]
            },
            {
              "name": "DuplicateIndex",
              "documentation": [
                " Duplicate index."
              ]
            },
            {
              "name": "InvalidSlashIndex",
              "documentation": [
                " Slash record index out of bounds."
              ]
            },
            {
              "name": "InsufficientValue",
              "documentation": [
                " Can not bond with value less than minimum balance."
              ]
            },
            {
              "name": "NoMoreChunks",
              "documentation": [
                " Can not schedule more unlock chunks."
              ]
            },
            {
              "name": "NoUnlockChunk",
              "documentation": [
                " Can not rebond without unlocking chunks."
              ]
            },
            {
              "name": "FundedTarget",
              "documentation": [
                " Attempting to target a stash that still has funds."
              ]
            },
            {
              "name": "InvalidEraToReward",
              "documentation": [
                " Invalid era to reward."
              ]
            },
            {
              "name": "InvalidNumberOfNominations",
              "documentation": [
                " Invalid number of nominations."
              ]
            },
            {
              "name": "NotSortedAndUnique",
              "documentation": [
                " Items are not sorted and unique."
              ]
            },
            {
              "name": "AlreadyClaimed",
              "documentation": [
                " Rewards for this era have already been claimed for this validator."
              ]
            },
            {
              "name": "OffchainElectionEarlySubmission",
              "documentation": [
                " The submitted result is received out of the open window."
              ]
            },
            {
              "name": "OffchainElectionWeakSubmission",
              "documentation": [
                " The submitted result is not as good as the one stored on chain."
              ]
            },
            {
              "name": "SnapshotUnavailable",
              "documentation": [
                " The snapshot data of the current window is missing."
              ]
            },
            {
              "name": "OffchainElectionBogusWinnerCount",
              "documentation": [
                " Incorrect number of winners were presented."
              ]
            },
            {
              "name": "OffchainElectionBogusWinner",
              "documentation": [
                " One of the submitted winners is not an active candidate on chain (index is out of range",
                " in snapshot)."
              ]
            },
            {
              "name": "OffchainElectionBogusCompact",
              "documentation": [
                " Error while building the assignment type from the compact. This can happen if an index",
                " is invalid, or if the weights _overflow_."
              ]
            },
            {
              "name": "OffchainElectionBogusNominator",
              "documentation": [
                " One of the submitted nominators is not an active nominator on chain."
              ]
            },
            {
              "name": "OffchainElectionBogusNomination",
              "documentation": [
                " One of the submitted nominators has an edge to which they have not voted on chain."
              ]
            },
            {
              "name": "OffchainElectionSlashedNomination",
              "documentation": [
                " One of the submitted nominators has an edge which is submitted before the last non-zero",
                " slash of the target."
              ]
            },
            {
              "name": "OffchainElectionBogusSelfVote",
              "documentation": [
                " A self vote must only be originated from a validator to ONLY themselves."
              ]
            },
            {
              "name": "OffchainElectionBogusEdge",
              "documentation": [
                " The submitted result has unknown edges that are not among the presented winners."
              ]
            },
            {
              "name": "OffchainElectionBogusScore",
              "documentation": [
                " The claimed score does not match with the one computed from the data."
              ]
            },
            {
              "name": "OffchainElectionBogusElectionSize",
              "documentation": [
                " The election size is invalid."
              ]
            },
            {
              "name": "CallNotAllowed",
              "documentation": [
                " The call is not allowed at the given time due to restrictions of election period."
              ]
            },
            {
              "name": "IncorrectHistoryDepth",
              "documentation": [
                " Incorrect previous history depth input provided."
              ]
            },
            {
              "name": "IncorrectSlashingSpans",
              "documentation": [
                " Incorrect number of slashing spans provided."
              ]
            },
            {
              "name": "BadState",
              "documentation": [
                " Internal state has become somehow corrupted and the operation cannot continue."
              ]
            },
            {
              "name": "TooManyTargets",
              "documentation": [
                " Too many nomination targets supplied."
              ]
            },
            {
              "name": "BadTarget",
              "documentation": [
                " A nomination target was supplied that was blocked or otherwise not a validator."
              ]
            }
          ],
          "index": 58
        },
        {
          "name": "Session",
          "storage": {
            "prefix": "Session",
            "items": [
              {
                "name": "Validators",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<ValidatorId>"
                },
                "fallback": "0x00",
                "documentation": [
                  " The current set of validators."
                ]
              },
              {
                "name": "CurrentIndex",
                "modifier": "Default",
                "type": {
                  "plain": "SessionIndex"
                },
                "fallback": "0x00000000",
                "documentation": [
                  " Current index of the session."
                ]
              },
              {
                "name": "QueuedChanged",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "documentation": [
                  " 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",
                "documentation": [
                  " 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",
                "documentation": [
                  " Indices of disabled validators.",
                  "",
                  " The set is cleared when `on_session_ending` returns a new set of identities."
                ]
              },
              {
                "name": "NextKeys",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "ValidatorId",
                    "value": "Keys",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " The next session keys for a validator."
                ]
              },
              {
                "name": "KeyOwner",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "(KeyTypeId,Bytes)",
                    "value": "ValidatorId",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "documentation": [
                  " The owner of a key. The key is the `KeyTypeId` + the encoded key."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_keys",
              "args": [
                {
                  "name": "keys",
                  "type": "Keys"
                },
                {
                  "name": "proof",
                  "type": "Bytes"
                }
              ],
              "documentation": [
                " Sets the session key(s) of the function caller to `keys`.",
                " 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>",
                " - Complexity: `O(1)`",
                "   Actual cost depends on the number of length of `T::Keys::key_ids()` which is fixed.",
                " - DbReads: `origin account`, `T::ValidatorIdOf`, `NextKeys`",
                " - DbWrites: `origin account`, `NextKeys`",
                " - DbReads per key id: `KeyOwner`",
                " - DbWrites per key id: `KeyOwner`",
                " # </weight>"
              ]
            },
            {
              "name": "purge_keys",
              "args": [],
              "documentation": [
                " Removes any session key(s) of the function caller.",
                " This doesn't take effect until the next session.",
                "",
                " The dispatch origin of this function must be signed.",
                "",
                " # <weight>",
                " - Complexity: `O(1)` in number of key types.",
                "   Actual cost depends on the number of length of `T::Keys::key_ids()` which is fixed.",
                " - DbReads: `T::ValidatorIdOf`, `NextKeys`, `origin account`",
                " - DbWrites: `NextKeys`, `origin account`",
                " - DbWrites per key id: `KeyOwnder`",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "NewSession",
              "args": [
                "SessionIndex"
              ],
              "documentation": [
                " New session has happened. Note that the argument is the \\[session_index\\], not the block",
                " number as the type might suggest."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "InvalidProof",
              "documentation": [
                " Invalid ownership proof."
              ]
            },
            {
              "name": "NoAssociatedValidatorId",
              "documentation": [
                " No associated validator ID for account."
              ]
            },
            {
              "name": "DuplicatedKey",
              "documentation": [
                " Registered duplicate key."
              ]
            },
            {
              "name": "NoKeys",
              "documentation": [
                " No keys are associated with this account."
              ]
            },
            {
              "name": "NoAccount",
              "documentation": [
                " Key setting account is not live, so it's impossible to associate keys."
              ]
            }
          ],
          "index": 59
        },
        {
          "name": "Historical",
          "storage": null,
          "calls": null,
          "events": null,
          "constants": [],
          "errors": [],
          "index": 60
        },
        {
          "name": "Sudo",
          "storage": {
            "prefix": "Sudo",
            "items": [
              {
                "name": "Key",
                "modifier": "Default",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "documentation": [
                  " The `AccountId` of the sudo key."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "sudo",
              "args": [
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " 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).",
                " - Weight of derivative `call` execution + 10,000.",
                " # </weight>"
              ]
            },
            {
              "name": "sudo_unchecked_weight",
              "args": [
                {
                  "name": "call",
                  "type": "Call"
                },
                {
                  "name": "_weight",
                  "type": "Weight"
                }
              ],
              "documentation": [
                " Authenticates the sudo key and dispatches a function call with `Root` origin.",
                " This function does not check the weight of the call, and instead allows the",
                " Sudo user to specify the weight of the call.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " # <weight>",
                " - O(1).",
                " - The weight of this call is defined by the caller.",
                " # </weight>"
              ]
            },
            {
              "name": "set_key",
              "args": [
                {
                  "name": "new",
                  "type": "LookupSource"
                }
              ],
              "documentation": [
                " 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": "call",
                  "type": "Call"
                }
              ],
              "documentation": [
                " 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).",
                " - Weight of derivative `call` execution + 10,000.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Sudid",
              "args": [
                "DispatchResult"
              ],
              "documentation": [
                " A sudo just took place. \\[result\\]"
              ]
            },
            {
              "name": "KeyChanged",
              "args": [
                "AccountId"
              ],
              "documentation": [
                " The \\[sudoer\\] just switched identity; the old key is supplied."
              ]
            },
            {
              "name": "SudoAsDone",
              "args": [
                "DispatchResult"
              ],
              "documentation": [
                " A sudo just took place. \\[result\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "RequireSudo",
              "documentation": [
                " Sender must be the Sudo account"
              ]
            }
          ],
          "index": 61
        }
      ],
      "extrinsic": {
        "version": 4,
        "signedExtensions": [
          "CheckSpecVersion",
          "CheckTxVersion",
          "CheckGenesis",
          "CheckMortality",
          "CheckNonce",
          "CheckWeight",
          "ChargeTransactionPayment",
          "SetEvmOrigin"
        ]
      }
    }
  }
}