{
  "magicNumber": 1635018093,
  "metadata": {
    "v13": {
      "modules": [
        {
          "name": "System",
          "storage": {
            "prefix": "System",
            "items": [
              {
                "name": "Account",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "AccountInfo",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " The full account information for a particular account ID."
                ]
              },
              {
                "name": "ExtrinsicCount",
                "modifier": "Optional",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00",
                "docs": [
                  " Total extrinsics count for the current block."
                ]
              },
              {
                "name": "BlockWeight",
                "modifier": "Default",
                "type": {
                  "plain": "ConsumedWeight"
                },
                "fallback": "0x000000000000000000000000000000000000000000000000",
                "docs": [
                  " The current weight for the block."
                ]
              },
              {
                "name": "AllExtrinsicsLen",
                "modifier": "Optional",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00",
                "docs": [
                  " Total length (in bytes) for all extrinsics put together, for the current block."
                ]
              },
              {
                "name": "BlockHash",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "BlockNumber",
                    "value": "Hash",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " Map of block numbers to block hashes."
                ]
              },
              {
                "name": "ExtrinsicData",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "u32",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Extrinsics data for the current block (maps an extrinsic's index to its data)."
                ]
              },
              {
                "name": "Number",
                "modifier": "Default",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The current block number being processed. Set by `execute_block`."
                ]
              },
              {
                "name": "ParentHash",
                "modifier": "Default",
                "type": {
                  "plain": "Hash"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " Hash of the previous block."
                ]
              },
              {
                "name": "Digest",
                "modifier": "Default",
                "type": {
                  "plain": "DigestOf"
                },
                "fallback": "0x00",
                "docs": [
                  " Digest of the current block, also part of the block header."
                ]
              },
              {
                "name": "Events",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<EventRecord>"
                },
                "fallback": "0x00",
                "docs": [
                  " Events deposited for the current block."
                ]
              },
              {
                "name": "EventCount",
                "modifier": "Default",
                "type": {
                  "plain": "EventIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The number of events in the `Events<T>` list."
                ]
              },
              {
                "name": "EventTopics",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "Hash",
                    "value": "Vec<(BlockNumber,EventIndex)>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Mapping between a topic (represented by T::Hash) and a vector of indexes",
                  " of events in the `<Events<T>>` list.",
                  "",
                  " All topic vectors have deterministic storage locations depending on the topic. This",
                  " allows light-clients to leverage the changes trie storage tracking mechanism and",
                  " in case of changes fetch the list of events of interest.",
                  "",
                  " The value has the type `(T::BlockNumber, EventIndex)` because if we used only just",
                  " the `EventIndex` then in case if the topic has the same contents on the next block",
                  " no notification will be triggered thus the event might be lost."
                ]
              },
              {
                "name": "LastRuntimeUpgrade",
                "modifier": "Optional",
                "type": {
                  "plain": "LastRuntimeUpgradeInfo"
                },
                "fallback": "0x00",
                "docs": [
                  " Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened."
                ]
              },
              {
                "name": "UpgradedToU32RefCount",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " True if we have upgraded so that `type RefCount` is `u32`. False (default) if not."
                ]
              },
              {
                "name": "UpgradedToTripleRefCount",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " 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",
                "docs": [
                  " The execution phase of the block."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "fill_block",
              "args": [
                {
                  "name": "_ratio",
                  "type": "Perbill"
                }
              ],
              "docs": [
                " A dispatch that will fill the block weight up to the given ratio."
              ]
            },
            {
              "name": "remark",
              "args": [
                {
                  "name": "_remark",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Make some on-chain remark.",
                "",
                " # <weight>",
                " - `O(1)`",
                " # </weight>"
              ]
            },
            {
              "name": "set_heap_pages",
              "args": [
                {
                  "name": "pages",
                  "type": "u64"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " An extrinsic completed successfully. \\[info\\]"
              ]
            },
            {
              "name": "ExtrinsicFailed",
              "args": [
                "DispatchError",
                "DispatchInfo"
              ],
              "docs": [
                " An extrinsic failed. \\[error, info\\]"
              ]
            },
            {
              "name": "CodeUpdated",
              "args": [],
              "docs": [
                " `:code` was updated."
              ]
            },
            {
              "name": "NewAccount",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A new \\[account\\] was created."
              ]
            },
            {
              "name": "KilledAccount",
              "args": [
                "AccountId"
              ],
              "docs": [
                " An \\[account\\] was reaped."
              ]
            },
            {
              "name": "Remarked",
              "args": [
                "AccountId",
                "Hash"
              ],
              "docs": [
                " On on-chain remark happened. \\[origin, remark_hash\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "BlockWeights",
              "type": "BlockWeights",
              "value": "0x00f2052a0100000000204aa9d1010000405973070000000001c06e96a62e010000010098f73e5d010000010000000000000000405973070000000001c0f6e810a30100000100204aa9d1010000010088526a740000004059730700000000000000",
              "docs": [
                " Block & extrinsics weights: base values and limits."
              ]
            },
            {
              "name": "BlockLength",
              "type": "BlockLength",
              "value": "0x00003c000000500000005000",
              "docs": [
                " The maximum length of a block (in bytes)."
              ]
            },
            {
              "name": "BlockHashCount",
              "type": "BlockNumber",
              "value": "0xfa000000",
              "docs": [
                " Maximum number of block number to block hash mappings to keep (oldest pruned first)."
              ]
            },
            {
              "name": "DbWeight",
              "type": "RuntimeDbWeight",
              "value": "0x40787d010000000000e1f50500000000",
              "docs": [
                " The weight of runtime database operations the runtime can invoke."
              ]
            },
            {
              "name": "Version",
              "type": "RuntimeVersion",
              "value": "0x186173676172641861736761726401000000e90300000000000034d2bc9897eed08f1503000000df6acb689907609b0300000040fe3ad401f8959a05000000bc9d89904f5b923f0100000037c8bb1350a9a2a80100000037e397fc7c91f5e401000000f78b278be53f454c02000000ab3c0572291feb8b01000000ea93e3f16f3d696201000000dd718d5cc53262d401000000f877468f4ca0e8260100000098159093c7bc898e0100000060aed43cb52456f10100000001000000",
              "docs": [
                " Get the chain's current version."
              ]
            },
            {
              "name": "SS58Prefix",
              "type": "u16",
              "value": "0x0600",
              "docs": [
                " 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",
              "docs": [
                " The name of specification does not match between the current runtime",
                " and the new runtime."
              ]
            },
            {
              "name": "SpecVersionNeedsToIncrease",
              "docs": [
                " The specification version is not allowed to decrease between the current runtime",
                " and the new runtime."
              ]
            },
            {
              "name": "FailedToExtractRuntimeVersion",
              "docs": [
                " Failed to extract the runtime version from the new runtime.",
                "",
                " Either calling `Core_version` or decoding `RuntimeVersion` failed."
              ]
            },
            {
              "name": "NonDefaultComposite",
              "docs": [
                " Suicide called when the account has non-default composite data."
              ]
            },
            {
              "name": "NonZeroRefCount",
              "docs": [
                " 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",
                "docs": [
                  " Current time for the current block."
                ]
              },
              {
                "name": "DidUpdate",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " Did the timestamp get updated in this block?"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set",
              "args": [
                {
                  "name": "now",
                  "type": "Compact<Moment>"
                }
              ],
              "docs": [
                " Set the current time.",
                "",
                " This call should be invoked exactly once per block. It will panic at the finalization",
                " phase, if this call hasn't been invoked by that time.",
                "",
                " The timestamp should be greater than the previous one by the amount specified by",
                " `MinimumPeriod`.",
                "",
                " The dispatch origin for this call must be `Inherent`.",
                "",
                " # <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": "0x7017000000000000",
              "docs": [
                " The minimum period between blocks. Beware that this is different to the *expected* period",
                " that the block production apparatus provides. Your chosen consensus system will generally",
                " work with this to determine a sensible block time. e.g. For Aura, it will be double this",
                " period on default settings."
              ]
            }
          ],
          "errors": [],
          "index": 1
        },
        {
          "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",
                "docs": [
                  " The lookup from index to account."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "claim",
              "args": [
                {
                  "name": "index",
                  "type": "AccountIndex"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " A account index was assigned. \\[index, who\\]"
              ]
            },
            {
              "name": "IndexFreed",
              "args": [
                "AccountIndex"
              ],
              "docs": [
                " A account index has been freed up (unassigned). \\[index\\]"
              ]
            },
            {
              "name": "IndexFrozen",
              "args": [
                "AccountIndex",
                "AccountId"
              ],
              "docs": [
                " A account index has been frozen to its current account ID. \\[index, who\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "Deposit",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The deposit needed for reserving an index."
              ]
            }
          ],
          "errors": [
            {
              "name": "NotAssigned",
              "docs": [
                " The index was not already assigned."
              ]
            },
            {
              "name": "NotOwner",
              "docs": [
                " The index is assigned to another account."
              ]
            },
            {
              "name": "InUse",
              "docs": [
                " The index was not available."
              ]
            },
            {
              "name": "NotTransfer",
              "docs": [
                " The source and destination accounts are identical."
              ]
            },
            {
              "name": "Permanent",
              "docs": [
                " The index is permanent and may not be freed/changed."
              ]
            }
          ],
          "index": 2
        },
        {
          "name": "Sudo",
          "storage": {
            "prefix": "Sudo",
            "items": [
              {
                "name": "Key",
                "modifier": "Default",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " The `AccountId` of the sudo key."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "sudo",
              "args": [
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "docs": [
                " Authenticates the sudo key and dispatches a function call with `Root` origin.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " # <weight>",
                " - O(1).",
                " - Limited storage reads.",
                " - One DB write (event).",
                " - Weight of derivative `call` execution + 10,000.",
                " # </weight>"
              ]
            },
            {
              "name": "sudo_unchecked_weight",
              "args": [
                {
                  "name": "call",
                  "type": "Call"
                },
                {
                  "name": "_weight",
                  "type": "Weight"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " Authenticates the current sudo key and sets the given AccountId (`new`) as the new sudo key.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " # <weight>",
                " - O(1).",
                " - Limited storage reads.",
                " - One DB change.",
                " # </weight>"
              ]
            },
            {
              "name": "sudo_as",
              "args": [
                {
                  "name": "who",
                  "type": "LookupSource"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "docs": [
                " Authenticates the sudo key and dispatches a function call with `Signed` origin from",
                " a given account.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " # <weight>",
                " - O(1).",
                " - Limited storage reads.",
                " - One DB write (event).",
                " - Weight of derivative `call` execution + 10,000.",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Sudid",
              "args": [
                "DispatchResult"
              ],
              "docs": [
                " A sudo just took place. \\[result\\]"
              ]
            },
            {
              "name": "KeyChanged",
              "args": [
                "AccountId"
              ],
              "docs": [
                " The \\[sudoer\\] just switched identity; the old key is supplied."
              ]
            },
            {
              "name": "SudoAsDone",
              "args": [
                "DispatchResult"
              ],
              "docs": [
                " A sudo just took place. \\[result\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "RequireSudo",
              "docs": [
                " Sender must be the Sudo account"
              ]
            }
          ],
          "index": 3
        },
        {
          "name": "RandomnessCollectiveFlip",
          "storage": {
            "prefix": "RandomnessCollectiveFlip",
            "items": [
              {
                "name": "RandomMaterial",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "docs": [
                  " Series of block headers from the last 81 blocks that acts as random seed material. This",
                  " is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of",
                  " the oldest hash."
                ]
              }
            ]
          },
          "calls": null,
          "events": null,
          "constants": [],
          "errors": [],
          "index": 4
        },
        {
          "name": "ParachainSystem",
          "storage": {
            "prefix": "ParachainSystem",
            "items": [
              {
                "name": "PendingRelayChainBlockNumber",
                "modifier": "Optional",
                "type": {
                  "plain": "RelayChainBlockNumber"
                },
                "fallback": "0x00",
                "docs": [
                  " We need to store the new validation function for the span between",
                  " setting it and applying it. If it has a",
                  " value, then [`PendingValidationCode`] must have a real value, and",
                  " together will coordinate the block number where the upgrade will happen."
                ]
              },
              {
                "name": "PendingValidationCode",
                "modifier": "Default",
                "type": {
                  "plain": "Bytes"
                },
                "fallback": "0x00",
                "docs": [
                  " The new validation function we will upgrade to when the relay chain",
                  " reaches [`PendingRelayChainBlockNumber`]. A real validation function must",
                  " exist here as long as [`PendingRelayChainBlockNumber`] is set."
                ]
              },
              {
                "name": "ValidationData",
                "modifier": "Optional",
                "type": {
                  "plain": "PersistedValidationData"
                },
                "fallback": "0x00",
                "docs": [
                  " The [`PersistedValidationData`] set for this block."
                ]
              },
              {
                "name": "DidSetValidationCode",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " Were the validation data set to notify the relay chain?"
                ]
              },
              {
                "name": "LastUpgrade",
                "modifier": "Default",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The last relay parent block number at which we signalled the code upgrade."
                ]
              },
              {
                "name": "RelevantMessagingState",
                "modifier": "Optional",
                "type": {
                  "plain": "MessagingStateSnapshot"
                },
                "fallback": "0x00",
                "docs": [
                  " The snapshot of some state related to messaging relevant to the current parachain as per",
                  " the relay parent.",
                  "",
                  " This field is meant to be updated each block with the validation data inherent. Therefore,",
                  " before processing of the inherent, e.g. in `on_initialize` this data may be stale.",
                  "",
                  " This data is also absent from the genesis."
                ]
              },
              {
                "name": "HostConfiguration",
                "modifier": "Optional",
                "type": {
                  "plain": "AbridgedHostConfiguration"
                },
                "fallback": "0x00",
                "docs": [
                  " The parachain host configuration that was obtained from the relay parent.",
                  "",
                  " This field is meant to be updated each block with the validation data inherent. Therefore,",
                  " before processing of the inherent, e.g. in `on_initialize` this data may be stale.",
                  "",
                  " This data is also absent from the genesis."
                ]
              },
              {
                "name": "LastDmqMqcHead",
                "modifier": "Default",
                "type": {
                  "plain": "MessageQueueChain"
                },
                "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " The last downward message queue chain head we have observed.",
                  "",
                  " This value is loaded before and saved after processing inbound downward messages carried",
                  " by the system inherent."
                ]
              },
              {
                "name": "LastHrmpMqcHeads",
                "modifier": "Default",
                "type": {
                  "plain": "BTreeMap<ParaId,MessageQueueChain>"
                },
                "fallback": "0x00",
                "docs": [
                  " The message queue chain heads we have observed per each channel incoming channel.",
                  "",
                  " This value is loaded before and saved after processing inbound downward messages carried",
                  " by the system inherent."
                ]
              },
              {
                "name": "ProcessedDownwardMessages",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Number of downward messages processed in a block.",
                  "",
                  " This will be cleared in `on_initialize` of each new block."
                ]
              },
              {
                "name": "NewValidationCode",
                "modifier": "Optional",
                "type": {
                  "plain": "Bytes"
                },
                "fallback": "0x00",
                "docs": [
                  " New validation code that was set in a block.",
                  "",
                  " This will be cleared in `on_initialize` of each new block if no other pallet already set",
                  " the value."
                ]
              },
              {
                "name": "HrmpWatermark",
                "modifier": "Default",
                "type": {
                  "plain": "BlockNumber"
                },
                "fallback": "0x00000000",
                "docs": [
                  " HRMP watermark that was set in a block.",
                  "",
                  " This will be cleared in `on_initialize` of each new block."
                ]
              },
              {
                "name": "HrmpOutboundMessages",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<OutboundHrmpMessage>"
                },
                "fallback": "0x00",
                "docs": [
                  " HRMP messages that were sent in a block.",
                  "",
                  " This will be cleared in `on_initialize` of each new block."
                ]
              },
              {
                "name": "UpwardMessages",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<UpwardMessage>"
                },
                "fallback": "0x00",
                "docs": [
                  " Upward messages that were sent in a block.",
                  "",
                  " This will be cleared in `on_initialize` of each new block."
                ]
              },
              {
                "name": "PendingUpwardMessages",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<UpwardMessage>"
                },
                "fallback": "0x00",
                "docs": [
                  " Upward messages that are still pending and not yet send to the relay chain."
                ]
              },
              {
                "name": "AnnouncedHrmpMessagesPerCandidate",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The number of HRMP messages we observed in `on_initialize` and thus used that number for",
                  " announcing the weight of `on_initialize` and `on_finalize`."
                ]
              },
              {
                "name": "ReservedXcmpWeightOverride",
                "modifier": "Optional",
                "type": {
                  "plain": "Weight"
                },
                "fallback": "0x00",
                "docs": [
                  " The weight we reserve at the beginning of the block for processing XCMP messages. This",
                  " overrides the amount set in the Config trait."
                ]
              },
              {
                "name": "ReservedDmpWeightOverride",
                "modifier": "Optional",
                "type": {
                  "plain": "Weight"
                },
                "fallback": "0x00",
                "docs": [
                  " The weight we reserve at the beginning of the block for processing DMP messages. This",
                  " overrides the amount set in the Config trait."
                ]
              },
              {
                "name": "AuthorizedUpgrade",
                "modifier": "Optional",
                "type": {
                  "plain": "Hash"
                },
                "fallback": "0x00",
                "docs": [
                  " The next authorized upgrade, if there is one."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_upgrade_block",
              "args": [
                {
                  "name": "relay_chain_block",
                  "type": "RelayChainBlockNumber"
                }
              ],
              "docs": [
                " Force an already scheduled validation function upgrade to happen on a particular block.",
                "",
                " Note that coordinating this block for the upgrade has to happen independently on the",
                " relay chain and this parachain. Synchronizing the block for the upgrade is sensitive,",
                " and this bypasses all checks and and normal protocols. Very easy to brick your chain",
                " if done wrong."
              ]
            },
            {
              "name": "set_validation_data",
              "args": [
                {
                  "name": "data",
                  "type": "ParachainInherentData"
                }
              ],
              "docs": [
                " Set the current validation data.",
                "",
                " This should be invoked exactly once per block. It will panic at the finalization",
                " phase if the call was not invoked.",
                "",
                " The dispatch origin for this call must be `Inherent`",
                "",
                " As a side effect, this function upgrades the current validation function",
                " if the appropriate time has come."
              ]
            },
            {
              "name": "sudo_send_upward_message",
              "args": [
                {
                  "name": "message",
                  "type": "UpwardMessage"
                }
              ],
              "docs": []
            },
            {
              "name": "authorize_upgrade",
              "args": [
                {
                  "name": "code_hash",
                  "type": "Hash"
                }
              ],
              "docs": []
            },
            {
              "name": "enact_authorized_upgrade",
              "args": [
                {
                  "name": "code",
                  "type": "Bytes"
                }
              ],
              "docs": []
            }
          ],
          "events": [
            {
              "name": "ValidationFunctionStored",
              "args": [
                "RelayChainBlockNumber"
              ],
              "docs": [
                " The validation function has been scheduled to apply as of the contained relay chain",
                " block number."
              ]
            },
            {
              "name": "ValidationFunctionApplied",
              "args": [
                "RelayChainBlockNumber"
              ],
              "docs": [
                " The validation function was applied as of the contained relay chain block number."
              ]
            },
            {
              "name": "UpgradeAuthorized",
              "args": [
                "Hash"
              ],
              "docs": [
                " An upgrade has been authorized."
              ]
            },
            {
              "name": "DownwardMessagesReceived",
              "args": [
                "u32"
              ],
              "docs": [
                " Some downward messages have been received and will be processed.",
                " \\[ count \\]"
              ]
            },
            {
              "name": "DownwardMessagesProcessed",
              "args": [
                "Weight",
                "Hash"
              ],
              "docs": [
                " Downward messages were processed using the given weight.",
                " \\[ weight_used, result_mqc_head \\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "OverlappingUpgrades",
              "docs": [
                " Attempt to upgrade validation function while existing upgrade pending"
              ]
            },
            {
              "name": "ProhibitedByPolkadot",
              "docs": [
                " Polkadot currently prohibits this parachain from upgrading its validation function"
              ]
            },
            {
              "name": "TooBig",
              "docs": [
                " The supplied validation function has compiled into a blob larger than Polkadot is",
                " willing to run"
              ]
            },
            {
              "name": "ValidationDataNotAvailable",
              "docs": [
                " The inherent which supplies the validation data did not run this block"
              ]
            },
            {
              "name": "HostConfigurationNotAvailable",
              "docs": [
                " The inherent which supplies the host configuration did not run this block"
              ]
            },
            {
              "name": "NotScheduled",
              "docs": [
                " No validation function upgrade is currently scheduled."
              ]
            },
            {
              "name": "NothingAuthorized",
              "docs": [
                " No code upgrade has been authorized."
              ]
            },
            {
              "name": "Unauthorized",
              "docs": [
                " The given code upgrade has not been authorized."
              ]
            }
          ],
          "index": 5
        },
        {
          "name": "ParachainInfo",
          "storage": {
            "prefix": "ParachainInfo",
            "items": [
              {
                "name": "ParachainId",
                "modifier": "Default",
                "type": {
                  "plain": "ParaId"
                },
                "fallback": "0x64000000",
                "docs": []
              }
            ]
          },
          "calls": null,
          "events": null,
          "constants": [],
          "errors": [],
          "index": 6
        },
        {
          "name": "Balances",
          "storage": {
            "prefix": "Balances",
            "items": [
              {
                "name": "TotalIssuance",
                "modifier": "Default",
                "type": {
                  "plain": "Balance"
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " The total units issued in the system."
                ]
              },
              {
                "name": "Account",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "AccountData",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " 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",
                "docs": [
                  " Any liquidity locks on some account balances.",
                  " NOTE: Should only be accessed when setting, changing and freeing a lock."
                ]
              },
              {
                "name": "Reserves",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "Vec<ReserveData>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Named reserves on some account balances."
                ]
              },
              {
                "name": "StorageVersion",
                "modifier": "Default",
                "type": {
                  "plain": "Releases"
                },
                "fallback": "0x00",
                "docs": [
                  " 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>"
                }
              ],
              "docs": [
                " Transfer some liquid free balance to another account.",
                "",
                " `transfer` will set the `FreeBalance` of the sender and receiver.",
                " It will decrease the total issuance of the system by the `TransferFee`.",
                " If the sender's account is below the existential deposit as a result",
                " of the transfer, the account will be reaped.",
                "",
                " The dispatch origin for this call must be `Signed` by the transactor.",
                "",
                " # <weight>",
                " - Dependent on arguments but not critical, given proper implementations for",
                "   input config types. See related functions below.",
                " - It contains a limited number of reads and writes internally and no complex computation.",
                "",
                " Related functions:",
                "",
                "   - `ensure_can_withdraw` is always called internally but has a bounded complexity.",
                "   - Transferring balances to accounts that did not exist before will cause",
                "      `T::OnNewAccount::on_new_account` to be called.",
                "   - Removing enough funds from an account will trigger `T::DustRemoval::on_unbalanced`.",
                "   - `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>"
                }
              ],
              "docs": [
                " Set the balances of a given account.",
                "",
                " This will alter `FreeBalance` and `ReservedBalance` in storage. it will",
                " also decrease the total issuance of the system (`TotalIssuance`).",
                " If the new free or reserved balance is below the existential deposit,",
                " it will reset the account nonce (`frame_system::AccountNonce`).",
                "",
                " The dispatch origin for this call is `root`.",
                "",
                " # <weight>",
                " - Independent of the arguments.",
                " - Contains a limited number of reads and writes.",
                " ---------------------",
                " - 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>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " Same as the [`transfer`] call, but with a check that the transfer will not kill the",
                " origin account.",
                "",
                " 99% of the time you want [`transfer`] instead.",
                "",
                " [`transfer`]: struct.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>"
              ]
            },
            {
              "name": "transfer_all",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "keep_alive",
                  "type": "bool"
                }
              ],
              "docs": [
                " Transfer the entire transferable balance from the caller account.",
                "",
                " NOTE: This function only attempts to transfer _transferable_ balances. This means that",
                " any locked, reserved, or existential deposits (when `keep_alive` is `true`), will not be",
                " transferred by this function. To ensure that this function results in a killed account,",
                " you might need to prepare the account by removing any reference counters, storage",
                " deposits, etc...",
                "",
                " The dispatch origin of this call must be Signed.",
                "",
                " - `dest`: The recipient of the transfer.",
                " - `keep_alive`: A boolean to determine if the `transfer_all` operation should send all",
                "   of the funds the account has, causing the sender account to be killed (false), or",
                "   transfer everything except at least the existential deposit, which will guarantee to",
                "   keep the sender account alive (true).",
                "   # <weight>",
                " - O(1). Just like transfer, but reading the user's transferable balance first.",
                "   #</weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Endowed",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " An account was created with some free balance. \\[account, free_balance\\]"
              ]
            },
            {
              "name": "DustLost",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " Transfer succeeded. \\[from, to, value\\]"
              ]
            },
            {
              "name": "BalanceSet",
              "args": [
                "AccountId",
                "Balance",
                "Balance"
              ],
              "docs": [
                " A balance was set by root. \\[who, free, reserved\\]"
              ]
            },
            {
              "name": "Deposit",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " Some amount was deposited (e.g. for transaction fees). \\[who, deposit\\]"
              ]
            },
            {
              "name": "Reserved",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " Some balance was reserved (moved from free to reserved). \\[who, value\\]"
              ]
            },
            {
              "name": "Unreserved",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " Some balance was unreserved (moved from reserved to free). \\[who, value\\]"
              ]
            },
            {
              "name": "ReserveRepatriated",
              "args": [
                "AccountId",
                "AccountId",
                "Balance",
                "BalanceStatus"
              ],
              "docs": [
                " 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": "0x00ca9a3b000000000000000000000000",
              "docs": [
                " The minimum amount required to keep an account open."
              ]
            }
          ],
          "errors": [
            {
              "name": "VestingBalance",
              "docs": [
                " Vesting balance too high to send value"
              ]
            },
            {
              "name": "LiquidityRestrictions",
              "docs": [
                " Account liquidity restrictions prevent withdrawal"
              ]
            },
            {
              "name": "InsufficientBalance",
              "docs": [
                " Balance too low to send value"
              ]
            },
            {
              "name": "ExistentialDeposit",
              "docs": [
                " Value too low to create account due to existential deposit"
              ]
            },
            {
              "name": "KeepAlive",
              "docs": [
                " Transfer/payment would kill account"
              ]
            },
            {
              "name": "ExistingVestingSchedule",
              "docs": [
                " A vesting schedule already exists for this account"
              ]
            },
            {
              "name": "DeadAccount",
              "docs": [
                " Beneficiary account must pre-exist"
              ]
            },
            {
              "name": "TooManyReserves",
              "docs": [
                " Number of named reserves exceed MaxReserves"
              ]
            }
          ],
          "index": 10
        },
        {
          "name": "TransactionPayment",
          "storage": {
            "prefix": "TransactionPayment",
            "items": [
              {
                "name": "NextFeeMultiplier",
                "modifier": "Default",
                "type": {
                  "plain": "Multiplier"
                },
                "fallback": "0x000064a7b3b6e00d0000000000000000",
                "docs": []
              },
              {
                "name": "StorageVersion",
                "modifier": "Default",
                "type": {
                  "plain": "Releases"
                },
                "fallback": "0x00",
                "docs": []
              }
            ]
          },
          "calls": null,
          "events": null,
          "constants": [
            {
              "name": "TransactionByteFee",
              "type": "BalanceOf",
              "value": "0x40420f00000000000000000000000000",
              "docs": [
                " The fee to be paid for making a transaction; the per-byte portion."
              ]
            },
            {
              "name": "WeightToFee",
              "type": "Vec<WeightToFeeCoefficient>",
              "value": "0x0401000000000000000000000000000000000000000001",
              "docs": [
                " The polynomial that is applied in order to derive fee from weight."
              ]
            }
          ],
          "errors": [],
          "index": 11
        },
        {
          "name": "Authorship",
          "storage": {
            "prefix": "Authorship",
            "items": [
              {
                "name": "Uncles",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<UncleEntryItem>"
                },
                "fallback": "0x00",
                "docs": [
                  " Uncles"
                ]
              },
              {
                "name": "Author",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "docs": [
                  " Author of current block."
                ]
              },
              {
                "name": "DidSetUncles",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " Whether uncles were already set in this block."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_uncles",
              "args": [
                {
                  "name": "new_uncles",
                  "type": "Vec<Header>"
                }
              ],
              "docs": [
                " Provide a set of uncles."
              ]
            }
          ],
          "events": null,
          "constants": [],
          "errors": [
            {
              "name": "InvalidUncleParent",
              "docs": [
                " The uncle parent not in the chain."
              ]
            },
            {
              "name": "UnclesAlreadySet",
              "docs": [
                " Uncles already set in the block."
              ]
            },
            {
              "name": "TooManyUncles",
              "docs": [
                " Too many uncles."
              ]
            },
            {
              "name": "GenesisUncle",
              "docs": [
                " The uncle is genesis."
              ]
            },
            {
              "name": "TooHighUncle",
              "docs": [
                " The uncle is too high in chain."
              ]
            },
            {
              "name": "UncleAlreadyIncluded",
              "docs": [
                " The uncle is already included."
              ]
            },
            {
              "name": "OldUncle",
              "docs": [
                " The uncle isn't recent enough to be included."
              ]
            }
          ],
          "index": 20
        },
        {
          "name": "CollatorSelection",
          "storage": {
            "prefix": "CollatorSelection",
            "items": [
              {
                "name": "Invulnerables",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The invulnerable, fixed collators."
                ]
              },
              {
                "name": "Candidates",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<CandidateInfo>"
                },
                "fallback": "0x00",
                "docs": [
                  " The (community, limited) collation candidates."
                ]
              },
              {
                "name": "LastAuthoredBlock",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "BlockNumber",
                    "linked": false
                  }
                },
                "fallback": "0x00000000",
                "docs": [
                  " Last block authored by collator."
                ]
              },
              {
                "name": "DesiredCandidates",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Desired number of candidates.",
                  "",
                  " This should ideally always be less than [`Config::MaxCandidates`] for weights to be correct."
                ]
              },
              {
                "name": "CandidacyBond",
                "modifier": "Default",
                "type": {
                  "plain": "BalanceOf"
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " Fixed deposit bond for each candidate."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_invulnerables",
              "args": [
                {
                  "name": "new",
                  "type": "Vec<AccountId>"
                }
              ],
              "docs": []
            },
            {
              "name": "set_desired_candidates",
              "args": [
                {
                  "name": "max",
                  "type": "u32"
                }
              ],
              "docs": []
            },
            {
              "name": "set_candidacy_bond",
              "args": [
                {
                  "name": "bond",
                  "type": "BalanceOf"
                }
              ],
              "docs": []
            },
            {
              "name": "register_as_candidate",
              "args": [],
              "docs": []
            },
            {
              "name": "leave_intent",
              "args": [],
              "docs": []
            }
          ],
          "events": [
            {
              "name": "NewInvulnerables",
              "args": [
                "Vec<AccountId>"
              ],
              "docs": []
            },
            {
              "name": "NewDesiredCandidates",
              "args": [
                "u32"
              ],
              "docs": []
            },
            {
              "name": "NewCandidacyBond",
              "args": [
                "Balance"
              ],
              "docs": []
            },
            {
              "name": "CandidateAdded",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": []
            },
            {
              "name": "CandidateRemoved",
              "args": [
                "AccountId"
              ],
              "docs": []
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "TooManyCandidates",
              "docs": [
                " Too many candidates"
              ]
            },
            {
              "name": "TooFewCandidates",
              "docs": [
                " Too few candidates"
              ]
            },
            {
              "name": "Unknown",
              "docs": [
                " Unknown error"
              ]
            },
            {
              "name": "Permission",
              "docs": [
                " Permission issue"
              ]
            },
            {
              "name": "AlreadyCandidate",
              "docs": [
                " User is already a candidate"
              ]
            },
            {
              "name": "NotCandidate",
              "docs": [
                " User is not a candidate"
              ]
            },
            {
              "name": "AlreadyInvulnerable",
              "docs": [
                " User is already an Invulnerable"
              ]
            },
            {
              "name": "NoAssociatedValidatorId",
              "docs": [
                " Account has no associated validator ID"
              ]
            },
            {
              "name": "ValidatorNotRegistered",
              "docs": [
                " Validator ID is not yet registered"
              ]
            }
          ],
          "index": 21
        },
        {
          "name": "Session",
          "storage": {
            "prefix": "Session",
            "items": [
              {
                "name": "Validators",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<ValidatorId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current set of validators."
                ]
              },
              {
                "name": "CurrentIndex",
                "modifier": "Default",
                "type": {
                  "plain": "SessionIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Current index of the session."
                ]
              },
              {
                "name": "QueuedChanged",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " True if the underlying economic identities or weighting behind the validators",
                  " has changed in the queued validator set."
                ]
              },
              {
                "name": "QueuedKeys",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(ValidatorId,Keys)>"
                },
                "fallback": "0x00",
                "docs": [
                  " The queued keys for the next session. When the next session begins, these keys",
                  " will be used to determine the validator's session keys."
                ]
              },
              {
                "name": "DisabledValidators",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<u32>"
                },
                "fallback": "0x00",
                "docs": [
                  " Indices of disabled validators.",
                  "",
                  " The set is cleared when `on_session_ending` returns a new set of identities."
                ]
              },
              {
                "name": "NextKeys",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "ValidatorId",
                    "value": "Keys",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The next session keys for a validator."
                ]
              },
              {
                "name": "KeyOwner",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "(KeyTypeId,Bytes)",
                    "value": "ValidatorId",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " 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"
                }
              ],
              "docs": [
                " 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": [],
              "docs": [
                " 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: `KeyOwner`",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "NewSession",
              "args": [
                "SessionIndex"
              ],
              "docs": [
                " New session has happened. Note that the argument is the \\[session_index\\], not the block",
                " number as the type might suggest."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "InvalidProof",
              "docs": [
                " Invalid ownership proof."
              ]
            },
            {
              "name": "NoAssociatedValidatorId",
              "docs": [
                " No associated validator ID for account."
              ]
            },
            {
              "name": "DuplicatedKey",
              "docs": [
                " Registered duplicate key."
              ]
            },
            {
              "name": "NoKeys",
              "docs": [
                " No keys are associated with this account."
              ]
            },
            {
              "name": "NoAccount",
              "docs": [
                " Key setting account is not live, so it's impossible to associate keys."
              ]
            }
          ],
          "index": 22
        },
        {
          "name": "Aura",
          "storage": {
            "prefix": "Aura",
            "items": [
              {
                "name": "Authorities",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AuthorityId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current authority set."
                ]
              },
              {
                "name": "CurrentSlot",
                "modifier": "Default",
                "type": {
                  "plain": "Slot"
                },
                "fallback": "0x0000000000000000",
                "docs": [
                  " The current slot of this block.",
                  "",
                  " This will be set in `on_initialize`."
                ]
              }
            ]
          },
          "calls": null,
          "events": null,
          "constants": [],
          "errors": [],
          "index": 23
        },
        {
          "name": "AuraExt",
          "storage": {
            "prefix": "AuraExt",
            "items": [
              {
                "name": "Authorities",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AuthorityId>"
                },
                "fallback": "0x00",
                "docs": [
                  " Serves as cache for the authorities.",
                  "",
                  " The authorities in AuRa are overwritten in `on_initialize` when we switch to a new session,",
                  " but we require the old authorities to verify the seal when validating a PoV. This will always",
                  " be updated to the latest AuRa authorities in `on_finalize`."
                ]
              }
            ]
          },
          "calls": null,
          "events": null,
          "constants": [],
          "errors": [],
          "index": 24
        },
        {
          "name": "Democracy",
          "storage": {
            "prefix": "Democracy",
            "items": [
              {
                "name": "PublicPropCount",
                "modifier": "Default",
                "type": {
                  "plain": "PropIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The number of (public) proposals that have been made so far."
                ]
              },
              {
                "name": "PublicProps",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(PropIndex,Hash,AccountId)>"
                },
                "fallback": "0x00",
                "docs": [
                  " The public proposals. Unsorted. The second item is the proposal's hash."
                ]
              },
              {
                "name": "DepositOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "PropIndex",
                    "value": "(Vec<AccountId>,BalanceOf)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Those who have locked a deposit.",
                  "",
                  " TWOX-NOTE: Safe, as increasing integer keys are safe."
                ]
              },
              {
                "name": "Preimages",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "PreimageStatus",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Map of hashes to the proposal preimage, along with who registered it and their deposit.",
                  " The block number is the block at which it was deposited."
                ]
              },
              {
                "name": "ReferendumCount",
                "modifier": "Default",
                "type": {
                  "plain": "ReferendumIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The next free referendum index, aka the number of referenda started so far."
                ]
              },
              {
                "name": "LowestUnbaked",
                "modifier": "Default",
                "type": {
                  "plain": "ReferendumIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " The lowest referendum index representing an unbaked referendum. Equal to",
                  " `ReferendumCount` if there isn't a unbaked referendum."
                ]
              },
              {
                "name": "ReferendumInfoOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "ReferendumIndex",
                    "value": "ReferendumInfo",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Information concerning any given referendum.",
                  "",
                  " TWOX-NOTE: SAFE as indexes are not under an attacker’s control."
                ]
              },
              {
                "name": "VotingOf",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "Voting",
                    "linked": false
                  }
                },
                "fallback": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " All votes for a particular voter. We store the balance for the number of votes that we",
                  " have recorded. The second item is the total amount of delegations, that will be added.",
                  "",
                  " TWOX-NOTE: SAFE as `AccountId`s are crypto hashes anyway."
                ]
              },
              {
                "name": "Locks",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "BlockNumber",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Accounts for which there are locks in action which may be removed at some point in the",
                  " future. The value is the block number at which the lock expires and may be removed.",
                  "",
                  " TWOX-NOTE: OK ― `AccountId` is a secure hash."
                ]
              },
              {
                "name": "LastTabledWasExternal",
                "modifier": "Default",
                "type": {
                  "plain": "bool"
                },
                "fallback": "0x00",
                "docs": [
                  " True if the last referendum tabled was submitted externally. False if it was a public",
                  " proposal."
                ]
              },
              {
                "name": "NextExternal",
                "modifier": "Optional",
                "type": {
                  "plain": "(Hash,VoteThreshold)"
                },
                "fallback": "0x00",
                "docs": [
                  " The referendum to be tabled whenever it would be valid to table an external proposal.",
                  " This happens when a referendum needs to be tabled and one of two conditions are met:",
                  " - `LastTabledWasExternal` is `false`; or",
                  " - `PublicProps` is empty."
                ]
              },
              {
                "name": "Blacklist",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "(BlockNumber,Vec<AccountId>)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " A record of who vetoed what. Maps proposal hash to a possible existent block number",
                  " (until when it may not be resubmitted) and who vetoed it."
                ]
              },
              {
                "name": "Cancellations",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "bool",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Record of all proposals that have been subject to emergency cancellation."
                ]
              },
              {
                "name": "StorageVersion",
                "modifier": "Optional",
                "type": {
                  "plain": "Releases"
                },
                "fallback": "0x00",
                "docs": [
                  " Storage version of the pallet.",
                  "",
                  " New networks start with last version."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "propose",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Propose a sensitive action to be taken.",
                "",
                " The dispatch origin of this call must be _Signed_ and the sender must",
                " have funds to cover the deposit.",
                "",
                " - `proposal_hash`: The hash of the proposal preimage.",
                " - `value`: The amount of deposit (must be at least `MinimumDeposit`).",
                "",
                " Emits `Proposed`.",
                "",
                " Weight: `O(p)`"
              ]
            },
            {
              "name": "second",
              "args": [
                {
                  "name": "proposal",
                  "type": "Compact<PropIndex>"
                },
                {
                  "name": "seconds_upper_bound",
                  "type": "Compact<u32>"
                }
              ],
              "docs": [
                " Signals agreement with a particular proposal.",
                "",
                " The dispatch origin of this call must be _Signed_ and the sender",
                " must have funds to cover the deposit, equal to the original deposit.",
                "",
                " - `proposal`: The index of the proposal to second.",
                " - `seconds_upper_bound`: an upper bound on the current number of seconds on this",
                "   proposal. Extrinsic is weighted according to this value with no refund.",
                "",
                " Weight: `O(S)` where S is the number of seconds a proposal already has."
              ]
            },
            {
              "name": "vote",
              "args": [
                {
                  "name": "ref_index",
                  "type": "Compact<ReferendumIndex>"
                },
                {
                  "name": "vote",
                  "type": "AccountVote"
                }
              ],
              "docs": [
                " Vote in a referendum. If `vote.is_aye()`, the vote is to enact the proposal;",
                " otherwise it is a vote to keep the status quo.",
                "",
                " The dispatch origin of this call must be _Signed_.",
                "",
                " - `ref_index`: The index of the referendum to vote for.",
                " - `vote`: The vote configuration.",
                "",
                " Weight: `O(R)` where R is the number of referendums the voter has voted on."
              ]
            },
            {
              "name": "emergency_cancel",
              "args": [
                {
                  "name": "ref_index",
                  "type": "ReferendumIndex"
                }
              ],
              "docs": [
                " Schedule an emergency cancellation of a referendum. Cannot happen twice to the same",
                " referendum.",
                "",
                " The dispatch origin of this call must be `CancellationOrigin`.",
                "",
                " -`ref_index`: The index of the referendum to cancel.",
                "",
                " Weight: `O(1)`."
              ]
            },
            {
              "name": "external_propose",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Schedule a referendum to be tabled once it is legal to schedule an external",
                " referendum.",
                "",
                " The dispatch origin of this call must be `ExternalOrigin`.",
                "",
                " - `proposal_hash`: The preimage hash of the proposal.",
                "",
                " Weight: `O(V)` with V number of vetoers in the blacklist of proposal.",
                "   Decoding vec of length V. Charged as maximum"
              ]
            },
            {
              "name": "external_propose_majority",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Schedule a majority-carries referendum to be tabled next once it is legal to schedule",
                " an external referendum.",
                "",
                " The dispatch of this call must be `ExternalMajorityOrigin`.",
                "",
                " - `proposal_hash`: The preimage hash of the proposal.",
                "",
                " Unlike `external_propose`, blacklisting has no effect on this and it may replace a",
                " pre-scheduled `external_propose` call.",
                "",
                " Weight: `O(1)`"
              ]
            },
            {
              "name": "external_propose_default",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Schedule a negative-turnout-bias referendum to be tabled next once it is legal to",
                " schedule an external referendum.",
                "",
                " The dispatch of this call must be `ExternalDefaultOrigin`.",
                "",
                " - `proposal_hash`: The preimage hash of the proposal.",
                "",
                " Unlike `external_propose`, blacklisting has no effect on this and it may replace a",
                " pre-scheduled `external_propose` call.",
                "",
                " Weight: `O(1)`"
              ]
            },
            {
              "name": "fast_track",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "voting_period",
                  "type": "BlockNumber"
                },
                {
                  "name": "delay",
                  "type": "BlockNumber"
                }
              ],
              "docs": [
                " Schedule the currently externally-proposed majority-carries referendum to be tabled",
                " immediately. If there is no externally-proposed referendum currently, or if there is one",
                " but it is not a majority-carries referendum then it fails.",
                "",
                " The dispatch of this call must be `FastTrackOrigin`.",
                "",
                " - `proposal_hash`: The hash of the current external proposal.",
                " - `voting_period`: The period that is allowed for voting on this proposal. Increased to",
                "   `FastTrackVotingPeriod` if too low.",
                " - `delay`: The number of block after voting has ended in approval and this should be",
                "   enacted. This doesn't have a minimum amount.",
                "",
                " Emits `Started`.",
                "",
                " Weight: `O(1)`"
              ]
            },
            {
              "name": "veto_external",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                }
              ],
              "docs": [
                " Veto and blacklist the external proposal hash.",
                "",
                " The dispatch origin of this call must be `VetoOrigin`.",
                "",
                " - `proposal_hash`: The preimage hash of the proposal to veto and blacklist.",
                "",
                " Emits `Vetoed`.",
                "",
                " Weight: `O(V + log(V))` where V is number of `existing vetoers`"
              ]
            },
            {
              "name": "cancel_referendum",
              "args": [
                {
                  "name": "ref_index",
                  "type": "Compact<ReferendumIndex>"
                }
              ],
              "docs": [
                " Remove a referendum.",
                "",
                " The dispatch origin of this call must be _Root_.",
                "",
                " - `ref_index`: The index of the referendum to cancel.",
                "",
                " # Weight: `O(1)`."
              ]
            },
            {
              "name": "cancel_queued",
              "args": [
                {
                  "name": "which",
                  "type": "ReferendumIndex"
                }
              ],
              "docs": [
                " Cancel a proposal queued for enactment.",
                "",
                " The dispatch origin of this call must be _Root_.",
                "",
                " - `which`: The index of the referendum to cancel.",
                "",
                " Weight: `O(D)` where `D` is the items in the dispatch queue. Weighted as `D = 10`."
              ]
            },
            {
              "name": "delegate",
              "args": [
                {
                  "name": "to",
                  "type": "AccountId"
                },
                {
                  "name": "conviction",
                  "type": "Conviction"
                },
                {
                  "name": "balance",
                  "type": "BalanceOf"
                }
              ],
              "docs": [
                " Delegate the voting power (with some given conviction) of the sending account.",
                "",
                " The balance delegated is locked for as long as it's delegated, and thereafter for the",
                " time appropriate for the conviction's lock period.",
                "",
                " The dispatch origin of this call must be _Signed_, and the signing account must either:",
                "   - be delegating already; or",
                "   - have no voting activity (if there is, then it will need to be removed/consolidated",
                "     through `reap_vote` or `unvote`).",
                "",
                " - `to`: The account whose voting the `target` account's voting power will follow.",
                " - `conviction`: The conviction that will be attached to the delegated votes. When the",
                "   account is undelegated, the funds will be locked for the corresponding period.",
                " - `balance`: The amount of the account's balance to be used in delegating. This must",
                "   not be more than the account's current balance.",
                "",
                " Emits `Delegated`.",
                "",
                " Weight: `O(R)` where R is the number of referendums the voter delegating to has",
                "   voted on. Weight is charged as if maximum votes."
              ]
            },
            {
              "name": "undelegate",
              "args": [],
              "docs": [
                " Undelegate the voting power of the sending account.",
                "",
                " Tokens may be unlocked following once an amount of time consistent with the lock period",
                " of the conviction with which the delegation was issued.",
                "",
                " The dispatch origin of this call must be _Signed_ and the signing account must be",
                " currently delegating.",
                "",
                " Emits `Undelegated`.",
                "",
                " Weight: `O(R)` where R is the number of referendums the voter delegating to has",
                "   voted on. Weight is charged as if maximum votes."
              ]
            },
            {
              "name": "clear_public_proposals",
              "args": [],
              "docs": [
                " Clears all public proposals.",
                "",
                " The dispatch origin of this call must be _Root_.",
                "",
                " Weight: `O(1)`."
              ]
            },
            {
              "name": "note_preimage",
              "args": [
                {
                  "name": "encoded_proposal",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Register the preimage for an upcoming proposal. This doesn't require the proposal to be",
                " in the dispatch queue but does require a deposit, returned once enacted.",
                "",
                " The dispatch origin of this call must be _Signed_.",
                "",
                " - `encoded_proposal`: The preimage of a proposal.",
                "",
                " Emits `PreimageNoted`.",
                "",
                " Weight: `O(E)` with E size of `encoded_proposal` (protected by a required deposit)."
              ]
            },
            {
              "name": "note_preimage_operational",
              "args": [
                {
                  "name": "encoded_proposal",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Same as `note_preimage` but origin is `OperationalPreimageOrigin`."
              ]
            },
            {
              "name": "note_imminent_preimage",
              "args": [
                {
                  "name": "encoded_proposal",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Register the preimage for an upcoming proposal. This requires the proposal to be",
                " in the dispatch queue. No deposit is needed. When this call is successful, i.e.",
                " the preimage has not been uploaded before and matches some imminent proposal,",
                " no fee is paid.",
                "",
                " The dispatch origin of this call must be _Signed_.",
                "",
                " - `encoded_proposal`: The preimage of a proposal.",
                "",
                " Emits `PreimageNoted`.",
                "",
                " Weight: `O(E)` with E size of `encoded_proposal` (protected by a required deposit)."
              ]
            },
            {
              "name": "note_imminent_preimage_operational",
              "args": [
                {
                  "name": "encoded_proposal",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " Same as `note_imminent_preimage` but origin is `OperationalPreimageOrigin`."
              ]
            },
            {
              "name": "reap_preimage",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "proposal_len_upper_bound",
                  "type": "Compact<u32>"
                }
              ],
              "docs": [
                " Remove an expired proposal preimage and collect the deposit.",
                "",
                " The dispatch origin of this call must be _Signed_.",
                "",
                " - `proposal_hash`: The preimage hash of a proposal.",
                " - `proposal_length_upper_bound`: an upper bound on length of the proposal.",
                "   Extrinsic is weighted according to this value with no refund.",
                "",
                " This will only work after `VotingPeriod` blocks from the time that the preimage was",
                " noted, if it's the same account doing it. If it's a different account, then it'll only",
                " work an additional `EnactmentPeriod` later.",
                "",
                " Emits `PreimageReaped`.",
                "",
                " Weight: `O(D)` where D is length of proposal."
              ]
            },
            {
              "name": "unlock",
              "args": [
                {
                  "name": "target",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Unlock tokens that have an expired lock.",
                "",
                " The dispatch origin of this call must be _Signed_.",
                "",
                " - `target`: The account to remove the lock on.",
                "",
                " Weight: `O(R)` with R number of vote of target."
              ]
            },
            {
              "name": "remove_vote",
              "args": [
                {
                  "name": "index",
                  "type": "ReferendumIndex"
                }
              ],
              "docs": [
                " Remove a vote for a referendum.",
                "",
                " If:",
                " - the referendum was cancelled, or",
                " - the referendum is ongoing, or",
                " - the referendum has ended such that",
                "   - the vote of the account was in opposition to the result; or",
                "   - there was no conviction to the account's vote; or",
                "   - the account made a split vote",
                " ...then the vote is removed cleanly and a following call to `unlock` may result in more",
                " funds being available.",
                "",
                " If, however, the referendum has ended and:",
                " - it finished corresponding to the vote of the account, and",
                " - the account made a standard vote with conviction, and",
                " - the lock period of the conviction is not over",
                " ...then the lock will be aggregated into the overall account's lock, which may involve",
                " *overlocking* (where the two locks are combined into a single lock that is the maximum",
                " of both the amount locked and the time is it locked for).",
                "",
                " The dispatch origin of this call must be _Signed_, and the signer must have a vote",
                " registered for referendum `index`.",
                "",
                " - `index`: The index of referendum of the vote to be removed.",
                "",
                " Weight: `O(R + log R)` where R is the number of referenda that `target` has voted on.",
                "   Weight is calculated for the maximum number of vote."
              ]
            },
            {
              "name": "remove_other_vote",
              "args": [
                {
                  "name": "target",
                  "type": "AccountId"
                },
                {
                  "name": "index",
                  "type": "ReferendumIndex"
                }
              ],
              "docs": [
                " Remove a vote for a referendum.",
                "",
                " If the `target` is equal to the signer, then this function is exactly equivalent to",
                " `remove_vote`. If not equal to the signer, then the vote must have expired,",
                " either because the referendum was cancelled, because the voter lost the referendum or",
                " because the conviction period is over.",
                "",
                " The dispatch origin of this call must be _Signed_.",
                "",
                " - `target`: The account of the vote to be removed; this account must have voted for",
                "   referendum `index`.",
                " - `index`: The index of referendum of the vote to be removed.",
                "",
                " Weight: `O(R + log R)` where R is the number of referenda that `target` has voted on.",
                "   Weight is calculated for the maximum number of vote."
              ]
            },
            {
              "name": "enact_proposal",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "index",
                  "type": "ReferendumIndex"
                }
              ],
              "docs": [
                " Enact a proposal from a referendum. For now we just make the weight be the maximum."
              ]
            },
            {
              "name": "blacklist",
              "args": [
                {
                  "name": "proposal_hash",
                  "type": "Hash"
                },
                {
                  "name": "maybe_ref_index",
                  "type": "Option<ReferendumIndex>"
                }
              ],
              "docs": [
                " Permanently place a proposal into the blacklist. This prevents it from ever being",
                " proposed again.",
                "",
                " If called on a queued public or external proposal, then this will result in it being",
                " removed. If the `ref_index` supplied is an active referendum with the proposal hash,",
                " then it will be cancelled.",
                "",
                " The dispatch origin of this call must be `BlacklistOrigin`.",
                "",
                " - `proposal_hash`: The proposal hash to blacklist permanently.",
                " - `ref_index`: An ongoing referendum whose hash is `proposal_hash`, which will be",
                " cancelled.",
                "",
                " Weight: `O(p)` (though as this is an high-privilege dispatch, we assume it has a",
                "   reasonable value)."
              ]
            },
            {
              "name": "cancel_proposal",
              "args": [
                {
                  "name": "prop_index",
                  "type": "Compact<PropIndex>"
                }
              ],
              "docs": [
                " Remove a proposal.",
                "",
                " The dispatch origin of this call must be `CancelProposalOrigin`.",
                "",
                " - `prop_index`: The index of the proposal to cancel.",
                "",
                " Weight: `O(p)` where `p = PublicProps::<T>::decode_len()`"
              ]
            }
          ],
          "events": [
            {
              "name": "Proposed",
              "args": [
                "PropIndex",
                "Balance"
              ],
              "docs": [
                " A motion has been proposed by a public account. \\[proposal_index, deposit\\]"
              ]
            },
            {
              "name": "Tabled",
              "args": [
                "PropIndex",
                "Balance",
                "Vec<AccountId>"
              ],
              "docs": [
                " A public proposal has been tabled for referendum vote. \\[proposal_index, deposit, depositors\\]"
              ]
            },
            {
              "name": "ExternalTabled",
              "args": [],
              "docs": [
                " An external proposal has been tabled."
              ]
            },
            {
              "name": "Started",
              "args": [
                "ReferendumIndex",
                "VoteThreshold"
              ],
              "docs": [
                " A referendum has begun. \\[ref_index, threshold\\]"
              ]
            },
            {
              "name": "Passed",
              "args": [
                "ReferendumIndex"
              ],
              "docs": [
                " A proposal has been approved by referendum. \\[ref_index\\]"
              ]
            },
            {
              "name": "NotPassed",
              "args": [
                "ReferendumIndex"
              ],
              "docs": [
                " A proposal has been rejected by referendum. \\[ref_index\\]"
              ]
            },
            {
              "name": "Cancelled",
              "args": [
                "ReferendumIndex"
              ],
              "docs": [
                " A referendum has been cancelled. \\[ref_index\\]"
              ]
            },
            {
              "name": "Executed",
              "args": [
                "ReferendumIndex",
                "bool"
              ],
              "docs": [
                " A proposal has been enacted. \\[ref_index, is_ok\\]"
              ]
            },
            {
              "name": "Delegated",
              "args": [
                "AccountId",
                "AccountId"
              ],
              "docs": [
                " An account has delegated their vote to another account. \\[who, target\\]"
              ]
            },
            {
              "name": "Undelegated",
              "args": [
                "AccountId"
              ],
              "docs": [
                " An \\[account\\] has cancelled a previous delegation operation."
              ]
            },
            {
              "name": "Vetoed",
              "args": [
                "AccountId",
                "Hash",
                "BlockNumber"
              ],
              "docs": [
                " An external proposal has been vetoed. \\[who, proposal_hash, until\\]"
              ]
            },
            {
              "name": "PreimageNoted",
              "args": [
                "Hash",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A proposal's preimage was noted, and the deposit taken. \\[proposal_hash, who, deposit\\]"
              ]
            },
            {
              "name": "PreimageUsed",
              "args": [
                "Hash",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A proposal preimage was removed and used (the deposit was returned).",
                " \\[proposal_hash, provider, deposit\\]"
              ]
            },
            {
              "name": "PreimageInvalid",
              "args": [
                "Hash",
                "ReferendumIndex"
              ],
              "docs": [
                " A proposal could not be executed because its preimage was invalid.",
                " \\[proposal_hash, ref_index\\]"
              ]
            },
            {
              "name": "PreimageMissing",
              "args": [
                "Hash",
                "ReferendumIndex"
              ],
              "docs": [
                " A proposal could not be executed because its preimage was missing.",
                " \\[proposal_hash, ref_index\\]"
              ]
            },
            {
              "name": "PreimageReaped",
              "args": [
                "Hash",
                "AccountId",
                "Balance",
                "AccountId"
              ],
              "docs": [
                " A registered preimage was removed and the deposit collected by the reaper.",
                " \\[proposal_hash, provider, deposit, reaper\\]"
              ]
            },
            {
              "name": "Unlocked",
              "args": [
                "AccountId"
              ],
              "docs": [
                " An \\[account\\] has been unlocked successfully."
              ]
            },
            {
              "name": "Blacklisted",
              "args": [
                "Hash"
              ],
              "docs": [
                " A proposal \\[hash\\] has been blacklisted permanently."
              ]
            }
          ],
          "constants": [
            {
              "name": "EnactmentPeriod",
              "type": "BlockNumber",
              "value": "0x00e10000",
              "docs": [
                " The minimum period of locking and the period between a proposal being approved and enacted.",
                "",
                " It should generally be a little more than the unstake period to ensure that",
                " voting stakers have an opportunity to remove themselves from the system in the case where",
                " they are on the losing side of a vote."
              ]
            },
            {
              "name": "LaunchPeriod",
              "type": "BlockNumber",
              "value": "0xe0c40000",
              "docs": [
                " How often (in blocks) new public referenda are launched."
              ]
            },
            {
              "name": "VotingPeriod",
              "type": "BlockNumber",
              "value": "0xe0c40000",
              "docs": [
                " How often (in blocks) to check for new votes."
              ]
            },
            {
              "name": "MinimumDeposit",
              "type": "BalanceOf",
              "value": "0x00203d88792d00000000000000000000",
              "docs": [
                " The minimum amount to be used as a deposit for a public referendum proposal."
              ]
            },
            {
              "name": "FastTrackVotingPeriod",
              "type": "BlockNumber",
              "value": "0x84030000",
              "docs": [
                " Minimum voting period allowed for a fast-track referendum."
              ]
            },
            {
              "name": "CooloffPeriod",
              "type": "BlockNumber",
              "value": "0xe0c40000",
              "docs": [
                " Period in blocks where an external proposal may not be re-submitted after being vetoed."
              ]
            },
            {
              "name": "PreimageByteDeposit",
              "type": "BalanceOf",
              "value": "0x00ca9a3b000000000000000000000000",
              "docs": [
                " The amount of balance that must be deposited per byte of preimage stored."
              ]
            },
            {
              "name": "MaxVotes",
              "type": "u32",
              "value": "0x64000000",
              "docs": [
                " The maximum number of votes for an account.",
                "",
                " Also used to compute weight, an overly big value can",
                " lead to extrinsic with very big weight: see `delegate` for instance."
              ]
            }
          ],
          "errors": [
            {
              "name": "ValueLow",
              "docs": [
                " Value too low"
              ]
            },
            {
              "name": "ProposalMissing",
              "docs": [
                " Proposal does not exist"
              ]
            },
            {
              "name": "BadIndex",
              "docs": [
                " Unknown index"
              ]
            },
            {
              "name": "AlreadyCanceled",
              "docs": [
                " Cannot cancel the same proposal twice"
              ]
            },
            {
              "name": "DuplicateProposal",
              "docs": [
                " Proposal already made"
              ]
            },
            {
              "name": "ProposalBlacklisted",
              "docs": [
                " Proposal still blacklisted"
              ]
            },
            {
              "name": "NotSimpleMajority",
              "docs": [
                " Next external proposal not simple majority"
              ]
            },
            {
              "name": "InvalidHash",
              "docs": [
                " Invalid hash"
              ]
            },
            {
              "name": "NoProposal",
              "docs": [
                " No external proposal"
              ]
            },
            {
              "name": "AlreadyVetoed",
              "docs": [
                " Identity may not veto a proposal twice"
              ]
            },
            {
              "name": "NotDelegated",
              "docs": [
                " Not delegated"
              ]
            },
            {
              "name": "DuplicatePreimage",
              "docs": [
                " Preimage already noted"
              ]
            },
            {
              "name": "NotImminent",
              "docs": [
                " Not imminent"
              ]
            },
            {
              "name": "TooEarly",
              "docs": [
                " Too early"
              ]
            },
            {
              "name": "Imminent",
              "docs": [
                " Imminent"
              ]
            },
            {
              "name": "PreimageMissing",
              "docs": [
                " Preimage not found"
              ]
            },
            {
              "name": "ReferendumInvalid",
              "docs": [
                " Vote given for invalid referendum"
              ]
            },
            {
              "name": "PreimageInvalid",
              "docs": [
                " Invalid preimage"
              ]
            },
            {
              "name": "NoneWaiting",
              "docs": [
                " No proposals waiting"
              ]
            },
            {
              "name": "NotLocked",
              "docs": [
                " The target account does not have a lock."
              ]
            },
            {
              "name": "NotExpired",
              "docs": [
                " The lock on the account to be unlocked has not yet expired."
              ]
            },
            {
              "name": "NotVoter",
              "docs": [
                " The given account did not vote on the referendum."
              ]
            },
            {
              "name": "NoPermission",
              "docs": [
                " The actor has no permission to conduct the action."
              ]
            },
            {
              "name": "AlreadyDelegating",
              "docs": [
                " The account is already delegating."
              ]
            },
            {
              "name": "InsufficientFunds",
              "docs": [
                " Too high a balance was provided that the account cannot afford."
              ]
            },
            {
              "name": "NotDelegating",
              "docs": [
                " The account is not currently delegating."
              ]
            },
            {
              "name": "VotesExist",
              "docs": [
                " The account currently has votes attached to it and the operation cannot succeed until",
                " these are removed, either through `unvote` or `reap_vote`."
              ]
            },
            {
              "name": "InstantNotAllowed",
              "docs": [
                " The instant referendum origin is currently disallowed."
              ]
            },
            {
              "name": "Nonsense",
              "docs": [
                " Delegation to oneself makes no sense."
              ]
            },
            {
              "name": "WrongUpperBound",
              "docs": [
                " Invalid upper bound."
              ]
            },
            {
              "name": "MaxVotesReached",
              "docs": [
                " Maximum number of votes reached."
              ]
            },
            {
              "name": "InvalidWitness",
              "docs": [
                " The provided witness data is wrong."
              ]
            },
            {
              "name": "TooManyProposals",
              "docs": [
                " Maximum number of proposals reached."
              ]
            }
          ],
          "index": 30
        },
        {
          "name": "Council",
          "storage": {
            "prefix": "Instance1Collective",
            "items": [
              {
                "name": "Proposals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "docs": [
                  " The hashes of the active proposals."
                ]
              },
              {
                "name": "ProposalOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Proposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Actual proposal for a given hash, if it's current."
                ]
              },
              {
                "name": "Voting",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Votes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Votes on a given proposal, if it is ongoing."
                ]
              },
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Proposals so far."
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current members of the collective. This is stored sorted (just by value)."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "docs": [
                  " 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"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " A motion was approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Disapproved",
              "args": [
                "Hash"
              ],
              "docs": [
                " A motion was not approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Executed",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "docs": [
                " A motion was executed; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "MemberExecuted",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "docs": [
                " A single member did some action; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "Closed",
              "args": [
                "Hash",
                "MemberCount",
                "MemberCount"
              ],
              "docs": [
                " A proposal was closed because its threshold was reached or after its duration was up.",
                " \\[proposal_hash, yes, no\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NotMember",
              "docs": [
                " Account is not a member"
              ]
            },
            {
              "name": "DuplicateProposal",
              "docs": [
                " Duplicate proposals not allowed"
              ]
            },
            {
              "name": "ProposalMissing",
              "docs": [
                " Proposal must exist"
              ]
            },
            {
              "name": "WrongIndex",
              "docs": [
                " Mismatched index"
              ]
            },
            {
              "name": "DuplicateVote",
              "docs": [
                " Duplicate vote ignored"
              ]
            },
            {
              "name": "AlreadyInitialized",
              "docs": [
                " Members are already initialized!"
              ]
            },
            {
              "name": "TooEarly",
              "docs": [
                " The close call was made too early, before the end of the voting."
              ]
            },
            {
              "name": "TooManyProposals",
              "docs": [
                " There can only be a maximum of `MaxProposals` active proposals."
              ]
            },
            {
              "name": "WrongProposalWeight",
              "docs": [
                " The given weight bound for the proposal was too low."
              ]
            },
            {
              "name": "WrongProposalLength",
              "docs": [
                " The given length bound for the proposal was too low."
              ]
            }
          ],
          "index": 31
        },
        {
          "name": "TechnicalCommittee",
          "storage": {
            "prefix": "Instance2Collective",
            "items": [
              {
                "name": "Proposals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<Hash>"
                },
                "fallback": "0x00",
                "docs": [
                  " The hashes of the active proposals."
                ]
              },
              {
                "name": "ProposalOf",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Proposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Actual proposal for a given hash, if it's current."
                ]
              },
              {
                "name": "Voting",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Identity",
                    "key": "Hash",
                    "value": "Votes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Votes on a given proposal, if it is ongoing."
                ]
              },
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "u32"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Proposals so far."
                ]
              },
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current members of the collective. This is stored sorted (just by value)."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "docs": [
                  " 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"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " A motion was approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Disapproved",
              "args": [
                "Hash"
              ],
              "docs": [
                " A motion was not approved by the required threshold.",
                " \\[proposal_hash\\]"
              ]
            },
            {
              "name": "Executed",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "docs": [
                " A motion was executed; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "MemberExecuted",
              "args": [
                "Hash",
                "DispatchResult"
              ],
              "docs": [
                " A single member did some action; result will be `Ok` if it returned without error.",
                " \\[proposal_hash, result\\]"
              ]
            },
            {
              "name": "Closed",
              "args": [
                "Hash",
                "MemberCount",
                "MemberCount"
              ],
              "docs": [
                " A proposal was closed because its threshold was reached or after its duration was up.",
                " \\[proposal_hash, yes, no\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "NotMember",
              "docs": [
                " Account is not a member"
              ]
            },
            {
              "name": "DuplicateProposal",
              "docs": [
                " Duplicate proposals not allowed"
              ]
            },
            {
              "name": "ProposalMissing",
              "docs": [
                " Proposal must exist"
              ]
            },
            {
              "name": "WrongIndex",
              "docs": [
                " Mismatched index"
              ]
            },
            {
              "name": "DuplicateVote",
              "docs": [
                " Duplicate vote ignored"
              ]
            },
            {
              "name": "AlreadyInitialized",
              "docs": [
                " Members are already initialized!"
              ]
            },
            {
              "name": "TooEarly",
              "docs": [
                " The close call was made too early, before the end of the voting."
              ]
            },
            {
              "name": "TooManyProposals",
              "docs": [
                " There can only be a maximum of `MaxProposals` active proposals."
              ]
            },
            {
              "name": "WrongProposalWeight",
              "docs": [
                " The given weight bound for the proposal was too low."
              ]
            },
            {
              "name": "WrongProposalLength",
              "docs": [
                " The given length bound for the proposal was too low."
              ]
            }
          ],
          "index": 32
        },
        {
          "name": "Elections",
          "storage": {
            "prefix": "Elections",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<SeatHolder>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current elected members.",
                  "",
                  " Invariant: Always sorted based on account id."
                ]
              },
              {
                "name": "RunnersUp",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<SeatHolder>"
                },
                "fallback": "0x00",
                "docs": [
                  " 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",
                "docs": [
                  " 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",
                "docs": [
                  " 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",
                "docs": [
                  " 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>"
                }
              ],
              "docs": [
                " 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": [],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " Renounce one's intention to be a candidate for the next election round. 3 potential",
                " outcomes exist:",
                "",
                " - `origin` is a candidate and not elected in any set. In this case, the 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"
                }
              ],
              "docs": [
                " Remove a particular member from the set. This is effective immediately and the bond of",
                " the outgoing member is slashed.",
                "",
                " If a runner-up is available, then the best runner-up will be removed and replaces the",
                " outgoing member. Otherwise, a new phragmen 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"
                }
              ],
              "docs": [
                " 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)>"
              ],
              "docs": [
                " 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": [],
              "docs": [
                " No (or not enough) candidates existed for this round. This is different from",
                " `NewTerm(\\[\\])`. See the description of `NewTerm`."
              ]
            },
            {
              "name": "ElectionError",
              "args": [],
              "docs": [
                " Internal error happened while trying to perform election."
              ]
            },
            {
              "name": "MemberKicked",
              "args": [
                "AccountId"
              ],
              "docs": [
                " A \\[member\\] has been removed. This should always be followed by either `NewTerm` or",
                " `EmptyTerm`."
              ]
            },
            {
              "name": "Renounced",
              "args": [
                "AccountId"
              ],
              "docs": [
                " Someone has renounced their candidacy."
              ]
            },
            {
              "name": "CandidateSlashed",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " A \\[seat holder\\] was slashed by \\[amount\\] by being forcefully removed from the set."
              ]
            }
          ],
          "constants": [
            {
              "name": "PalletId",
              "type": "LockIdentifier",
              "value": "0x706872656c656374",
              "docs": [
                " Identifier for the elections-phragmen pallet's lock"
              ]
            },
            {
              "name": "CandidacyBond",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " How much should be locked up in order to submit one's candidacy."
              ]
            },
            {
              "name": "VotingBondBase",
              "type": "BalanceOf",
              "value": "0x005c88fea00300000000000000000000",
              "docs": [
                " Base deposit associated with voting.",
                "",
                " This should be sensibly high to economically ensure the pallet cannot be attacked by",
                " creating a gigantic number of votes."
              ]
            },
            {
              "name": "VotingBondFactor",
              "type": "BalanceOf",
              "value": "0x0000eb08bf0100000000000000000000",
              "docs": [
                " The amount of bond that need to be locked for each vote (32 bytes)."
              ]
            },
            {
              "name": "DesiredMembers",
              "type": "u32",
              "value": "0x13000000",
              "docs": [
                " Number of members to elect."
              ]
            },
            {
              "name": "DesiredRunnersUp",
              "type": "u32",
              "value": "0x13000000",
              "docs": [
                " Number of runners_up to keep."
              ]
            },
            {
              "name": "TermDuration",
              "type": "BlockNumber",
              "value": "0x201c0000",
              "docs": [
                " How long each seat is kept. This defines the next block number at which an election",
                " round will happen. If set to zero, no elections are ever triggered and the module will",
                " be in passive mode."
              ]
            }
          ],
          "errors": [
            {
              "name": "UnableToVote",
              "docs": [
                " Cannot vote when no candidates or members exist."
              ]
            },
            {
              "name": "NoVotes",
              "docs": [
                " Must vote for at least one candidate."
              ]
            },
            {
              "name": "TooManyVotes",
              "docs": [
                " Cannot vote more than candidates."
              ]
            },
            {
              "name": "MaximumVotesExceeded",
              "docs": [
                " Cannot vote more than maximum allowed."
              ]
            },
            {
              "name": "LowBalance",
              "docs": [
                " Cannot vote with stake less than minimum balance."
              ]
            },
            {
              "name": "UnableToPayBond",
              "docs": [
                " Voter can not pay voting bond."
              ]
            },
            {
              "name": "MustBeVoter",
              "docs": [
                " Must be a voter."
              ]
            },
            {
              "name": "ReportSelf",
              "docs": [
                " Cannot report self."
              ]
            },
            {
              "name": "DuplicatedCandidate",
              "docs": [
                " Duplicated candidate submission."
              ]
            },
            {
              "name": "MemberSubmit",
              "docs": [
                " Member cannot re-submit candidacy."
              ]
            },
            {
              "name": "RunnerUpSubmit",
              "docs": [
                " Runner cannot re-submit candidacy."
              ]
            },
            {
              "name": "InsufficientCandidateFunds",
              "docs": [
                " Candidate does not have enough funds."
              ]
            },
            {
              "name": "NotMember",
              "docs": [
                " Not a member."
              ]
            },
            {
              "name": "InvalidWitnessData",
              "docs": [
                " The provided count of number of candidates is incorrect."
              ]
            },
            {
              "name": "InvalidVoteCount",
              "docs": [
                " The provided count of number of votes is incorrect."
              ]
            },
            {
              "name": "InvalidRenouncing",
              "docs": [
                " The renouncing origin presented a wrong `Renouncing` parameter."
              ]
            },
            {
              "name": "InvalidReplacement",
              "docs": [
                " Prediction regarding replacement after member removal is wrong."
              ]
            }
          ],
          "index": 33
        },
        {
          "name": "CouncilMembership",
          "storage": {
            "prefix": "Instance1Membership",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current membership, stored as an ordered Vec."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "docs": [
                  " The current prime member, if one exists."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Add a member `who` to the set.",
                "",
                " May only be called from `T::AddOrigin`."
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " Set the prime member. Must be a current member.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            },
            {
              "name": "clear_prime",
              "args": [],
              "docs": [
                " Remove the prime member if it exists.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            }
          ],
          "events": [
            {
              "name": "MemberAdded",
              "args": [],
              "docs": [
                " The given member was added; see the transaction for who."
              ]
            },
            {
              "name": "MemberRemoved",
              "args": [],
              "docs": [
                " The given member was removed; see the transaction for who."
              ]
            },
            {
              "name": "MembersSwapped",
              "args": [],
              "docs": [
                " Two members were swapped; see the transaction for who."
              ]
            },
            {
              "name": "MembersReset",
              "args": [],
              "docs": [
                " The membership was reset; see the transaction for who the new set is."
              ]
            },
            {
              "name": "KeyChanged",
              "args": [],
              "docs": [
                " One of the members' keys changed."
              ]
            },
            {
              "name": "Dummy",
              "args": [
                "PhantomData"
              ],
              "docs": [
                " Phantom member, never used."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "AlreadyMember",
              "docs": [
                " Already a member."
              ]
            },
            {
              "name": "NotMember",
              "docs": [
                " Not a member."
              ]
            }
          ],
          "index": 34
        },
        {
          "name": "TechnicalMembership",
          "storage": {
            "prefix": "Instance2Membership",
            "items": [
              {
                "name": "Members",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<AccountId>"
                },
                "fallback": "0x00",
                "docs": [
                  " The current membership, stored as an ordered Vec."
                ]
              },
              {
                "name": "Prime",
                "modifier": "Optional",
                "type": {
                  "plain": "AccountId"
                },
                "fallback": "0x00",
                "docs": [
                  " The current prime member, if one exists."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Add a member `who` to the set.",
                "",
                " May only be called from `T::AddOrigin`."
              ]
            },
            {
              "name": "remove_member",
              "args": [
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " Set the prime member. Must be a current member.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            },
            {
              "name": "clear_prime",
              "args": [],
              "docs": [
                " Remove the prime member if it exists.",
                "",
                " May only be called from `T::PrimeOrigin`."
              ]
            }
          ],
          "events": [
            {
              "name": "MemberAdded",
              "args": [],
              "docs": [
                " The given member was added; see the transaction for who."
              ]
            },
            {
              "name": "MemberRemoved",
              "args": [],
              "docs": [
                " The given member was removed; see the transaction for who."
              ]
            },
            {
              "name": "MembersSwapped",
              "args": [],
              "docs": [
                " Two members were swapped; see the transaction for who."
              ]
            },
            {
              "name": "MembersReset",
              "args": [],
              "docs": [
                " The membership was reset; see the transaction for who the new set is."
              ]
            },
            {
              "name": "KeyChanged",
              "args": [],
              "docs": [
                " One of the members' keys changed."
              ]
            },
            {
              "name": "Dummy",
              "args": [
                "PhantomData"
              ],
              "docs": [
                " Phantom member, never used."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "AlreadyMember",
              "docs": [
                " Already a member."
              ]
            },
            {
              "name": "NotMember",
              "docs": [
                " Not a member."
              ]
            }
          ],
          "index": 35
        },
        {
          "name": "Treasury",
          "storage": {
            "prefix": "Treasury",
            "items": [
              {
                "name": "ProposalCount",
                "modifier": "Default",
                "type": {
                  "plain": "ProposalIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Number of proposals that have been made."
                ]
              },
              {
                "name": "Proposals",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "ProposalIndex",
                    "value": "TreasuryProposal",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Proposals that have been made."
                ]
              },
              {
                "name": "Approvals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<ProposalIndex>"
                },
                "fallback": "0x00",
                "docs": [
                  " Proposal indices that have been approved but not yet awarded."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "propose_spend",
              "args": [
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "beneficiary",
                  "type": "LookupSource"
                }
              ],
              "docs": [
                " Put forward a suggestion for spending. A deposit proportional to the value",
                " is reserved and slashed if the proposal is rejected. It is returned once the",
                " proposal is awarded.",
                "",
                " # <weight>",
                " - Complexity: O(1)",
                " - DbReads: `ProposalCount`, `origin account`",
                " - DbWrites: `ProposalCount`, `Proposals`, `origin account`",
                " # </weight>"
              ]
            },
            {
              "name": "reject_proposal",
              "args": [
                {
                  "name": "proposal_id",
                  "type": "Compact<ProposalIndex>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " New proposal. \\[proposal_index\\]"
              ]
            },
            {
              "name": "Spending",
              "args": [
                "Balance"
              ],
              "docs": [
                " We have ended a spend period and will now allocate funds. \\[budget_remaining\\]"
              ]
            },
            {
              "name": "Awarded",
              "args": [
                "ProposalIndex",
                "Balance",
                "AccountId"
              ],
              "docs": [
                " Some funds have been allocated. \\[proposal_index, award, beneficiary\\]"
              ]
            },
            {
              "name": "Rejected",
              "args": [
                "ProposalIndex",
                "Balance"
              ],
              "docs": [
                " A proposal was rejected; funds were slashed. \\[proposal_index, slashed\\]"
              ]
            },
            {
              "name": "Burnt",
              "args": [
                "Balance"
              ],
              "docs": [
                " Some of our funds have been burnt. \\[burn\\]"
              ]
            },
            {
              "name": "Rollover",
              "args": [
                "Balance"
              ],
              "docs": [
                " Spending has finished; this is the amount that rolls over until next spend.",
                " \\[budget_remaining\\]"
              ]
            },
            {
              "name": "Deposit",
              "args": [
                "Balance"
              ],
              "docs": [
                " Some funds have been deposited. \\[deposit\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "ProposalBond",
              "type": "Permill",
              "value": "0x50c30000",
              "docs": [
                " Fraction of a proposal's value that should be bonded in order to place the proposal.",
                " An accepted proposal gets these back. A rejected proposal does not."
              ]
            },
            {
              "name": "ProposalBondMinimum",
              "type": "BalanceOf",
              "value": "0x00203d88792d00000000000000000000",
              "docs": [
                " Minimum amount of funds that should be placed in a deposit for making a proposal."
              ]
            },
            {
              "name": "SpendPeriod",
              "type": "BlockNumber",
              "value": "0xc0a80000",
              "docs": [
                " Period between successive spends."
              ]
            },
            {
              "name": "Burn",
              "type": "Permill",
              "value": "0xd0070000",
              "docs": [
                " Percentage of spare funds (if any) that are burnt per spend period."
              ]
            },
            {
              "name": "PalletId",
              "type": "PalletId",
              "value": "0x70792f7472737279",
              "docs": [
                " The treasury's module id, used for deriving its sovereign account ID."
              ]
            }
          ],
          "errors": [
            {
              "name": "InsufficientProposersBalance",
              "docs": [
                " Proposer's balance is too low."
              ]
            },
            {
              "name": "InvalidIndex",
              "docs": [
                " No proposal or bounty at that index."
              ]
            },
            {
              "name": "TooManyApprovals",
              "docs": [
                " Too many approvals in the queue."
              ]
            }
          ],
          "index": 36
        },
        {
          "name": "Bounties",
          "storage": {
            "prefix": "Treasury",
            "items": [
              {
                "name": "BountyCount",
                "modifier": "Default",
                "type": {
                  "plain": "BountyIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Number of bounty proposals that have been made."
                ]
              },
              {
                "name": "Bounties",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "BountyIndex",
                    "value": "Bounty",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Bounties that have been made."
                ]
              },
              {
                "name": "BountyDescriptions",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "BountyIndex",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The description of each bounty."
                ]
              },
              {
                "name": "BountyApprovals",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<BountyIndex>"
                },
                "fallback": "0x00",
                "docs": [
                  " Bounty indices that have been approved but not yet funded."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "propose_bounty",
              "args": [
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "description",
                  "type": "Bytes"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " New bounty proposal. \\[index\\]"
              ]
            },
            {
              "name": "BountyRejected",
              "args": [
                "BountyIndex",
                "Balance"
              ],
              "docs": [
                " A bounty proposal was rejected; funds were slashed. \\[index, bond\\]"
              ]
            },
            {
              "name": "BountyBecameActive",
              "args": [
                "BountyIndex"
              ],
              "docs": [
                " A bounty proposal is funded and became active. \\[index\\]"
              ]
            },
            {
              "name": "BountyAwarded",
              "args": [
                "BountyIndex",
                "AccountId"
              ],
              "docs": [
                " A bounty is awarded to a beneficiary. \\[index, beneficiary\\]"
              ]
            },
            {
              "name": "BountyClaimed",
              "args": [
                "BountyIndex",
                "Balance",
                "AccountId"
              ],
              "docs": [
                " A bounty is claimed by beneficiary. \\[index, payout, beneficiary\\]"
              ]
            },
            {
              "name": "BountyCanceled",
              "args": [
                "BountyIndex"
              ],
              "docs": [
                " A bounty is cancelled. \\[index\\]"
              ]
            },
            {
              "name": "BountyExtended",
              "args": [
                "BountyIndex"
              ],
              "docs": [
                " A bounty expiry is extended. \\[index\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "DataDepositPerByte",
              "type": "BalanceOf",
              "value": "0x00e87648170000000000000000000000",
              "docs": [
                " The amount held on deposit per byte within bounty description."
              ]
            },
            {
              "name": "BountyDepositBase",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The amount held on deposit for placing a bounty proposal."
              ]
            },
            {
              "name": "BountyDepositPayoutDelay",
              "type": "BlockNumber",
              "value": "0x80700000",
              "docs": [
                " The delay period for which a bounty beneficiary need to wait before claim the payout."
              ]
            },
            {
              "name": "BountyUpdatePeriod",
              "type": "BlockNumber",
              "value": "0x40e30900",
              "docs": [
                " Bounty duration in blocks."
              ]
            },
            {
              "name": "BountyCuratorDeposit",
              "type": "Permill",
              "value": "0x20a10700",
              "docs": [
                " Percentage of the curator fee that will be reserved upfront as deposit for bounty curator."
              ]
            },
            {
              "name": "BountyValueMinimum",
              "type": "BalanceOf",
              "value": "0x00a0724e180900000000000000000000",
              "docs": [
                " Minimum value for a bounty."
              ]
            },
            {
              "name": "MaximumReasonLength",
              "type": "u32",
              "value": "0x00400000",
              "docs": [
                " Maximum acceptable reason length."
              ]
            }
          ],
          "errors": [
            {
              "name": "InsufficientProposersBalance",
              "docs": [
                " Proposer's balance is too low."
              ]
            },
            {
              "name": "InvalidIndex",
              "docs": [
                " No proposal or bounty at that index."
              ]
            },
            {
              "name": "ReasonTooBig",
              "docs": [
                " The reason given is just too big."
              ]
            },
            {
              "name": "UnexpectedStatus",
              "docs": [
                " The bounty status is unexpected."
              ]
            },
            {
              "name": "RequireCurator",
              "docs": [
                " Require bounty curator."
              ]
            },
            {
              "name": "InvalidValue",
              "docs": [
                " Invalid bounty value."
              ]
            },
            {
              "name": "InvalidFee",
              "docs": [
                " Invalid bounty fee."
              ]
            },
            {
              "name": "PendingPayout",
              "docs": [
                " A bounty payout is pending.",
                " To cancel the bounty, you must unassign and slash the curator."
              ]
            },
            {
              "name": "Premature",
              "docs": [
                " The bounties cannot be claimed/closed because it's still in the countdown period."
              ]
            }
          ],
          "index": 37
        },
        {
          "name": "Tips",
          "storage": {
            "prefix": "Treasury",
            "items": [
              {
                "name": "Tips",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "Hash",
                    "value": "OpenTip",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " 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",
                "docs": [
                  " Simple preimage lookup from the reason's hash to the original data. Again, has an",
                  " insecure enumerable hash since the key is guaranteed to be the result of a secure hash."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "report_awesome",
              "args": [
                {
                  "name": "reason",
                  "type": "Bytes"
                },
                {
                  "name": "who",
                  "type": "AccountId"
                }
              ],
              "docs": [
                " Report something `reason` that deserves a tip and claim any eventual the finder's fee.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " Payment: `TipReportDepositBase` will be reserved from the origin account, as well as",
                " `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"
                }
              ],
              "docs": [
                " Retract a prior tip-report from `report_awesome`, and cancel the process of tipping.",
                "",
                " If successful, the original deposit will be unreserved.",
                "",
                " The dispatch origin for this call must be _Signed_ and the tip identified by `hash`",
                " must have been reported by the signing account through `report_awesome` (and not",
                " through `tip_new`).",
                "",
                " - `hash`: The identity of the open tip for which a tip value is declared. This is formed",
                "   as the hash of the tuple of the original tip `reason` and the beneficiary account ID.",
                "",
                " Emits `TipRetracted` if successful.",
                "",
                " # <weight>",
                " - 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>"
                }
              ],
              "docs": [
                " Give a tip for something new; no finder's fee will be taken.",
                "",
                " The dispatch origin for this call must be _Signed_ and the signing account must be a",
                " member of the `Tippers` set.",
                "",
                " - `reason`: The reason for, or the thing that deserves, the tip; generally this will be",
                "   a UTF-8-encoded URL.",
                " - `who`: The account which should be credited for the tip.",
                " - `tip_value`: The amount of tip that the sender would like to give. The median tip",
                "   value of active tippers will be given to the `who`.",
                "",
                " Emits `NewTip` if successful.",
                "",
                " # <weight>",
                " - 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>"
                }
              ],
              "docs": [
                " Declare a tip value for an already-open tip.",
                "",
                " The dispatch origin for this call must be _Signed_ and the signing account must be a",
                " member of the `Tippers` set.",
                "",
                " - `hash`: The identity of the open tip for which a tip value is declared. This is formed",
                "   as the hash of the tuple of the hash of the original tip `reason` and the beneficiary",
                "   account ID.",
                " - `tip_value`: The amount of tip that the sender would like to give. The median tip",
                "   value of active tippers will be given to the `who`.",
                "",
                " Emits `TipClosing` if the threshold of tippers has been reached and the countdown period",
                " has started.",
                "",
                " # <weight>",
                " - 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"
                }
              ],
              "docs": [
                " Close and payout a tip.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " The tip identified by `hash` must have finished its countdown period.",
                "",
                " - `hash`: The identity of the open tip for which a tip value is declared. This is formed",
                "   as the hash of the tuple of the original tip `reason` and the beneficiary account ID.",
                "",
                " # <weight>",
                " - 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"
                }
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " A new tip suggestion has been opened. \\[tip_hash\\]"
              ]
            },
            {
              "name": "TipClosing",
              "args": [
                "Hash"
              ],
              "docs": [
                " A tip suggestion has reached threshold and is closing. \\[tip_hash\\]"
              ]
            },
            {
              "name": "TipClosed",
              "args": [
                "Hash",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A tip suggestion has been closed. \\[tip_hash, who, payout\\]"
              ]
            },
            {
              "name": "TipRetracted",
              "args": [
                "Hash"
              ],
              "docs": [
                " A tip suggestion has been retracted. \\[tip_hash\\]"
              ]
            },
            {
              "name": "TipSlashed",
              "args": [
                "Hash",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " A tip suggestion has been slashed. \\[tip_hash, finder, deposit\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "TipCountdown",
              "type": "BlockNumber",
              "value": "0x201c0000",
              "docs": [
                " The period for which a tip remains open after is has achieved threshold tippers."
              ]
            },
            {
              "name": "TipFindersFee",
              "type": "Percent",
              "value": "0x14",
              "docs": [
                " The amount of the final tip which goes to the original reporter of the tip."
              ]
            },
            {
              "name": "TipReportDepositBase",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The amount held on deposit for placing a tip report."
              ]
            },
            {
              "name": "DataDepositPerByte",
              "type": "BalanceOf",
              "value": "0x00e87648170000000000000000000000",
              "docs": [
                " The amount held on deposit per byte within the tip report reason."
              ]
            },
            {
              "name": "MaximumReasonLength",
              "type": "u32",
              "value": "0x00400000",
              "docs": [
                " Maximum acceptable reason length."
              ]
            }
          ],
          "errors": [
            {
              "name": "ReasonTooBig",
              "docs": [
                " The reason given is just too big."
              ]
            },
            {
              "name": "AlreadyKnown",
              "docs": [
                " The tip was already found/started."
              ]
            },
            {
              "name": "UnknownTip",
              "docs": [
                " The tip hash is unknown."
              ]
            },
            {
              "name": "NotFinder",
              "docs": [
                " The account attempting to retract the tip is not the finder of the tip."
              ]
            },
            {
              "name": "StillOpen",
              "docs": [
                " The tip cannot be claimed/closed because there are not enough tippers yet."
              ]
            },
            {
              "name": "Premature",
              "docs": [
                " The tip cannot be claimed/closed because it's still in the countdown period."
              ]
            }
          ],
          "index": 38
        },
        {
          "name": "XcmpQueue",
          "storage": {
            "prefix": "XcmpQueue",
            "items": [
              {
                "name": "InboundXcmpStatus",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(ParaId,InboundStatus,Vec<(RelayBlockNumber,XcmpMessageFormat)>)>"
                },
                "fallback": "0x00",
                "docs": [
                  " Status of the inbound XCMP channels."
                ]
              },
              {
                "name": "InboundXcmpMessages",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_128Concat",
                    "key1": "ParaId",
                    "key2": "RelayBlockNumber",
                    "value": "Bytes",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Inbound aggregate XCMP messages. It can only be one per ParaId/block."
                ]
              },
              {
                "name": "OutboundXcmpStatus",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(ParaId,OutboundStatus,bool,u16,u16)>"
                },
                "fallback": "0x00",
                "docs": [
                  " The non-empty XCMP channels in order of becoming non-empty, and the index of the first",
                  " and last outbound message. If the two indices are equal, then it indicates an empty",
                  " queue and there must be a non-`Ok` `OutboundStatus`. We assume queues grow no greater",
                  " than 65535 items. Queue indices for normal messages begin at one; zero is reserved in",
                  " case of the need to send a high-priority signal message this block.",
                  " The bool is true if there is a signal message waiting to be sent."
                ]
              },
              {
                "name": "OutboundXcmpMessages",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_128Concat",
                    "key1": "ParaId",
                    "key2": "u16",
                    "value": "Bytes",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The messages outbound in a given XCMP channel."
                ]
              },
              {
                "name": "SignalMessages",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "ParaId",
                    "value": "Bytes",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Any signal messages waiting to be sent."
                ]
              },
              {
                "name": "QueueConfig",
                "modifier": "Default",
                "type": {
                  "plain": "QueueConfigData"
                },
                "fallback": "0x020000000500000001000000a0860100000000000200000000000000",
                "docs": [
                  " The configuration which controls the dynamics of the outbound queue."
                ]
              }
            ]
          },
          "calls": [],
          "events": [
            {
              "name": "Success",
              "args": [
                "Option<Hash>"
              ],
              "docs": [
                " Some XCM was executed ok."
              ]
            },
            {
              "name": "Fail",
              "args": [
                "Option<Hash>",
                "XcmError"
              ],
              "docs": [
                " Some XCM failed."
              ]
            },
            {
              "name": "BadVersion",
              "args": [
                "Option<Hash>"
              ],
              "docs": [
                " Bad XCM version used."
              ]
            },
            {
              "name": "BadFormat",
              "args": [
                "Option<Hash>"
              ],
              "docs": [
                " Bad XCM format used."
              ]
            },
            {
              "name": "UpwardMessageSent",
              "args": [
                "Option<Hash>"
              ],
              "docs": [
                " An upward message was sent to the relay chain."
              ]
            },
            {
              "name": "XcmpMessageSent",
              "args": [
                "Option<Hash>"
              ],
              "docs": [
                " An HRMP message was sent to a sibling parachain."
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "FailedToSend",
              "docs": [
                " Failed to send XCM message."
              ]
            },
            {
              "name": "BadXcmOrigin",
              "docs": [
                " Bad XCM origin."
              ]
            },
            {
              "name": "BadXcm",
              "docs": [
                " Bad XCM data."
              ]
            }
          ],
          "index": 40
        },
        {
          "name": "PolkadotXcm",
          "storage": null,
          "calls": [
            {
              "name": "send",
              "args": [
                {
                  "name": "dest",
                  "type": "MultiLocation"
                },
                {
                  "name": "message",
                  "type": "Xcm"
                }
              ],
              "docs": []
            },
            {
              "name": "teleport_assets",
              "args": [
                {
                  "name": "dest",
                  "type": "MultiLocation"
                },
                {
                  "name": "beneficiary",
                  "type": "MultiLocation"
                },
                {
                  "name": "assets",
                  "type": "Vec<MultiAsset>"
                },
                {
                  "name": "dest_weight",
                  "type": "Weight"
                }
              ],
              "docs": [
                " Teleport some assets from the local chain to some destination chain.",
                "",
                " - `origin`: Must be capable of withdrawing the `assets` and executing XCM.",
                " - `dest`: Destination context for the assets. Will typically be `X2(Parent, Parachain(..))` to send",
                "   from parachain to parachain, or `X1(Parachain(..))` to send from relay to parachain.",
                " - `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will generally be",
                "   an `AccountId32` value.",
                " - `assets`: The assets to be withdrawn. This should include the assets used to pay the fee on the",
                "   `dest` side.",
                " - `dest_weight`: Equal to the total weight on `dest` of the XCM message",
                "   `Teleport { assets, effects: [ BuyExecution{..}, DepositAsset{..} ] }`."
              ]
            },
            {
              "name": "reserve_transfer_assets",
              "args": [
                {
                  "name": "dest",
                  "type": "MultiLocation"
                },
                {
                  "name": "beneficiary",
                  "type": "MultiLocation"
                },
                {
                  "name": "assets",
                  "type": "Vec<MultiAsset>"
                },
                {
                  "name": "dest_weight",
                  "type": "Weight"
                }
              ],
              "docs": [
                " Transfer some assets from the local chain to the sovereign account of a destination chain and forward",
                " a notification XCM.",
                "",
                " - `origin`: Must be capable of withdrawing the `assets` and executing XCM.",
                " - `dest`: Destination context for the assets. Will typically be `X2(Parent, Parachain(..))` to send",
                "   from parachain to parachain, or `X1(Parachain(..))` to send from relay to parachain.",
                " - `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will generally be",
                "   an `AccountId32` value.",
                " - `assets`: The assets to be withdrawn. This should include the assets used to pay the fee on the",
                "   `dest` side.",
                " - `dest_weight`: Equal to the total weight on `dest` of the XCM message",
                "   `ReserveAssetDeposit { assets, effects: [ BuyExecution{..}, DepositAsset{..} ] }`."
              ]
            },
            {
              "name": "execute",
              "args": [
                {
                  "name": "message",
                  "type": "Xcm"
                },
                {
                  "name": "max_weight",
                  "type": "Weight"
                }
              ],
              "docs": [
                " Execute an XCM message from a local, signed, origin.",
                "",
                " An event is deposited indicating whether `msg` could be executed completely or only",
                " partially.",
                "",
                " No more than `max_weight` will be used in its attempted execution. If this is less than the",
                " maximum amount of weight that the message could take to be executed, then no execution",
                " attempt will be made.",
                "",
                " NOTE: A successful return to this does *not* imply that the `msg` was executed successfully",
                " to completion; only that *some* of it was executed."
              ]
            }
          ],
          "events": [
            {
              "name": "Attempted",
              "args": [
                "Outcome"
              ],
              "docs": []
            },
            {
              "name": "Sent",
              "args": [
                "MultiLocation",
                "MultiLocation",
                "Xcm"
              ],
              "docs": []
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "Unreachable",
              "docs": []
            },
            {
              "name": "SendFailure",
              "docs": []
            },
            {
              "name": "Filtered",
              "docs": [
                " The message execution fails the filter."
              ]
            },
            {
              "name": "UnweighableMessage",
              "docs": [
                " The message's weight could not be determined."
              ]
            }
          ],
          "index": 41
        },
        {
          "name": "CumulusXcm",
          "storage": null,
          "calls": [],
          "events": [
            {
              "name": "InvalidFormat",
              "args": [
                "[u8;8]"
              ],
              "docs": [
                " Downward message is invalid XCM.",
                " \\[ id \\]"
              ]
            },
            {
              "name": "UnsupportedVersion",
              "args": [
                "[u8;8]"
              ],
              "docs": [
                " Downward message is unsupported version of XCM.",
                " \\[ id \\]"
              ]
            },
            {
              "name": "ExecutedDownward",
              "args": [
                "[u8;8]",
                "Outcome"
              ],
              "docs": [
                " Downward message executed with the given outcome.",
                " \\[ id, outcome \\]"
              ]
            }
          ],
          "constants": [],
          "errors": [],
          "index": 42
        },
        {
          "name": "DmpQueue",
          "storage": {
            "prefix": "DmpQueue",
            "items": [
              {
                "name": "Configuration",
                "modifier": "Default",
                "type": {
                  "plain": "ConfigData"
                },
                "fallback": "0x00e40b5402000000",
                "docs": [
                  " The configuration."
                ]
              },
              {
                "name": "PageIndex",
                "modifier": "Default",
                "type": {
                  "plain": "PageIndexData"
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " The page index."
                ]
              },
              {
                "name": "Pages",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "PageCounter",
                    "value": "Vec<(RelayBlockNumber,Bytes)>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The queue pages."
                ]
              },
              {
                "name": "Overweight",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "OverweightIndex",
                    "value": "(RelayBlockNumber,Bytes)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " The overweight messages."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "service_overweight",
              "args": [
                {
                  "name": "index",
                  "type": "OverweightIndex"
                },
                {
                  "name": "weight_limit",
                  "type": "Weight"
                }
              ],
              "docs": [
                " Service a single overweight message.",
                "",
                " - `origin`: Must pass `ExecuteOverweightOrigin`.",
                " - `index`: The index of the overweight message to service.",
                " - `weight_limit`: The amount of weight that message execution may take.",
                "",
                " Errors:",
                " - `Unknown`: Message of `index` is unknown.",
                " - `OverLimit`: Message execution may use greater than `weight_limit`.",
                "",
                " Events:",
                " - `OverweightServiced`: On success."
              ]
            }
          ],
          "events": [
            {
              "name": "InvalidFormat",
              "args": [
                "MessageId"
              ],
              "docs": [
                " Downward message is invalid XCM.",
                " \\[ id \\]"
              ]
            },
            {
              "name": "UnsupportedVersion",
              "args": [
                "MessageId"
              ],
              "docs": [
                " Downward message is unsupported version of XCM.",
                " \\[ id \\]"
              ]
            },
            {
              "name": "ExecutedDownward",
              "args": [
                "MessageId",
                "Outcome"
              ],
              "docs": [
                " Downward message executed with the given outcome.",
                " \\[ id, outcome \\]"
              ]
            },
            {
              "name": "WeightExhausted",
              "args": [
                "MessageId",
                "Weight",
                "Weight"
              ],
              "docs": [
                " The weight limit for handling downward messages was reached.",
                " \\[ id, remaining, required \\]"
              ]
            },
            {
              "name": "OverweightEnqueued",
              "args": [
                "MessageId",
                "OverweightIndex",
                "Weight"
              ],
              "docs": [
                " Downward message is overweight and was placed in the overweight queue.",
                " \\[ id, index, required \\]"
              ]
            },
            {
              "name": "OverweightServiced",
              "args": [
                "OverweightIndex",
                "Weight"
              ],
              "docs": [
                " Downward message from the overweight queue was executed.",
                " \\[ index, used \\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "Unknown",
              "docs": [
                " The message index given is unknown."
              ]
            },
            {
              "name": "OverLimit",
              "docs": [
                " The amount of weight given is possibly not enough for executing the message."
              ]
            }
          ],
          "index": 43
        },
        {
          "name": "Utility",
          "storage": null,
          "calls": [
            {
              "name": "batch",
              "args": [
                {
                  "name": "calls",
                  "type": "Vec<Call>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " Batch of dispatches did not complete fully. Index of first failing dispatch given, as",
                " well as the error. \\[index, error\\]"
              ]
            },
            {
              "name": "BatchCompleted",
              "args": [],
              "docs": [
                " Batch of dispatches completed fully with no error."
              ]
            }
          ],
          "constants": [],
          "errors": [],
          "index": 50
        },
        {
          "name": "Scheduler",
          "storage": {
            "prefix": "Scheduler",
            "items": [
              {
                "name": "Agenda",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "BlockNumber",
                    "value": "Vec<Option<Scheduled>>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " 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",
                "docs": [
                  " Lookup from identity to the block number and index of the task."
                ]
              },
              {
                "name": "StorageVersion",
                "modifier": "Default",
                "type": {
                  "plain": "Releases"
                },
                "fallback": "0x00",
                "docs": [
                  " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " Schedule a named task after a delay.",
                "",
                " # <weight>",
                " Same as [`schedule_named`].",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "Scheduled",
              "args": [
                "BlockNumber",
                "u32"
              ],
              "docs": [
                " Scheduled some task. \\[when, index\\]"
              ]
            },
            {
              "name": "Canceled",
              "args": [
                "BlockNumber",
                "u32"
              ],
              "docs": [
                " Canceled some task. \\[when, index\\]"
              ]
            },
            {
              "name": "Dispatched",
              "args": [
                "TaskAddress",
                "Option<Bytes>",
                "DispatchResult"
              ],
              "docs": [
                " Dispatched some task. \\[task, id, result\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "FailedToSchedule",
              "docs": [
                " Failed to schedule a call"
              ]
            },
            {
              "name": "NotFound",
              "docs": [
                " Cannot find the scheduled call."
              ]
            },
            {
              "name": "TargetBlockNumberInPast",
              "docs": [
                " Given target block number is in the past."
              ]
            },
            {
              "name": "RescheduleNoChange",
              "docs": [
                " Reschedule failed because it does not change scheduled time."
              ]
            }
          ],
          "index": 51
        },
        {
          "name": "Proxy",
          "storage": {
            "prefix": "Proxy",
            "items": [
              {
                "name": "Proxies",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "(Vec<ProxyDefinition>,BalanceOf)",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000",
                "docs": [
                  " 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<ProxyAnnouncement>,BalanceOf)",
                    "linked": false
                  }
                },
                "fallback": "0x0000000000000000000000000000000000",
                "docs": [
                  " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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": [],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " Dispatch the given `call` from an account that the sender is authorized 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"
              ],
              "docs": [
                " A proxy was executed correctly, with the given \\[result\\]."
              ]
            },
            {
              "name": "AnonymousCreated",
              "args": [
                "AccountId",
                "AccountId",
                "ProxyType",
                "u16"
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " An announcement was placed to make a call in the future. \\[real, proxy, call_hash\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "ProxyDepositBase",
              "type": "BalanceOf",
              "value": "0x001cedae920000000000000000000000",
              "docs": [
                " The base amount of currency needed to reserve for creating a proxy.",
                "",
                " This is held for an additional storage item whose value size is",
                " `sizeof(Balance)` bytes and whose key size is `sizeof(AccountId)` bytes."
              ]
            },
            {
              "name": "ProxyDepositFactor",
              "type": "BalanceOf",
              "value": "0x00583201cd0100000000000000000000",
              "docs": [
                " The amount of currency needed per proxy added.",
                "",
                " This is held for adding 32 bytes plus an instance of `ProxyType` more into a pre-existing",
                " storage value. Thus, when configuring `ProxyDepositFactor` one should take into account",
                " `32 + proxy_type.encode().len()` bytes of data."
              ]
            },
            {
              "name": "MaxProxies",
              "type": "u32",
              "value": "0x20000000",
              "docs": [
                " The maximum amount of proxies allowed for a single account."
              ]
            },
            {
              "name": "MaxPending",
              "type": "u32",
              "value": "0x20000000",
              "docs": [
                " The maximum amount of time-delayed announcements that are allowed to be pending."
              ]
            },
            {
              "name": "AnnouncementDepositBase",
              "type": "BalanceOf",
              "value": "0x001cedae920000000000000000000000",
              "docs": [
                " The base amount of currency needed to reserve for creating an announcement.",
                "",
                " This is held when a new storage item holding a `Balance` is created (typically 16 bytes)."
              ]
            },
            {
              "name": "AnnouncementDepositFactor",
              "type": "BalanceOf",
              "value": "0x00b064029a0300000000000000000000",
              "docs": [
                " The amount of currency needed per announcement made.",
                "",
                " This is held for adding an `AccountId`, `Hash` and `BlockNumber` (typically 68 bytes)",
                " into a pre-existing storage value."
              ]
            }
          ],
          "errors": [
            {
              "name": "TooMany",
              "docs": [
                " There are too many proxies registered or too many announcements pending."
              ]
            },
            {
              "name": "NotFound",
              "docs": [
                " Proxy registration not found."
              ]
            },
            {
              "name": "NotProxy",
              "docs": [
                " Sender is not a proxy of the account to be proxied."
              ]
            },
            {
              "name": "Unproxyable",
              "docs": [
                " A call which is incompatible with the proxy type's filter was attempted."
              ]
            },
            {
              "name": "Duplicate",
              "docs": [
                " Account is already a proxy."
              ]
            },
            {
              "name": "NoPermission",
              "docs": [
                " Call may not be made by proxy because it may escalate its privileges."
              ]
            },
            {
              "name": "Unannounced",
              "docs": [
                " Announcement, if made at all, was made too recently."
              ]
            },
            {
              "name": "NoSelfProxy",
              "docs": [
                " Cannot add self as proxy."
              ]
            }
          ],
          "index": 52
        },
        {
          "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",
                "docs": [
                  " 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",
                "docs": []
              }
            ]
          },
          "calls": [
            {
              "name": "as_multi_threshold_1",
              "args": [
                {
                  "name": "other_signatories",
                  "type": "Vec<AccountId>"
                },
                {
                  "name": "call",
                  "type": "Call"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " Register approval for a dispatch to be made from a deterministic composite account if",
                " approved by a total of `threshold - 1` of `other_signatories`.",
                "",
                " If there are enough, then dispatch the call.",
                "",
                " Payment: `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"
                }
              ],
              "docs": [
                " Register approval for a dispatch to be made from a deterministic composite account if",
                " approved by a total of `threshold - 1` of `other_signatories`.",
                "",
                " Payment: `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]"
                }
              ],
              "docs": [
                " Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously",
                " for this operation will be unreserved on success.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " - `threshold`: The total number of approvals for this dispatch before it is executed.",
                " - `other_signatories`: The accounts (other than the sender) who can approve this",
                " dispatch. May not be empty.",
                " - `timepoint`: The timepoint (block number and transaction index) of the first approval",
                " transaction for this dispatch.",
                " - `call_hash`: The hash of the call to be executed.",
                "",
                " # <weight>",
                " - `O(S)`.",
                " - Up to one balance-reserve or unreserve operation.",
                " - One passthrough operation, one insert, both `O(S)` where `S` is the number of",
                "   signatories. `S` is capped by `MaxSignatories`, with weight being proportional.",
                " - One encode & hash, both of complexity `O(S)`.",
                " - One event.",
                " - I/O: 1 read `O(S)`, one remove.",
                " - Storage: removes one item.",
                " ----------------------------------",
                " - 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"
              ],
              "docs": [
                " A new multisig operation has begun. \\[approving, multisig, call_hash\\]"
              ]
            },
            {
              "name": "MultisigApproval",
              "args": [
                "AccountId",
                "Timepoint",
                "AccountId",
                "CallHash"
              ],
              "docs": [
                " A multisig operation has been approved by someone.",
                " \\[approving, timepoint, multisig, call_hash\\]"
              ]
            },
            {
              "name": "MultisigExecuted",
              "args": [
                "AccountId",
                "Timepoint",
                "AccountId",
                "CallHash",
                "DispatchResult"
              ],
              "docs": [
                " A multisig operation has been executed. \\[approving, timepoint, multisig, call_hash\\]"
              ]
            },
            {
              "name": "MultisigCancelled",
              "args": [
                "AccountId",
                "Timepoint",
                "AccountId",
                "CallHash"
              ],
              "docs": [
                " A multisig operation has been cancelled. \\[cancelling, timepoint, multisig, call_hash\\]"
              ]
            }
          ],
          "constants": [
            {
              "name": "DepositBase",
              "type": "BalanceOf",
              "value": "0x009c3845f00400000000000000000000",
              "docs": [
                " The base amount of currency needed to reserve for creating a multisig execution or to store",
                " a dispatch call for later.",
                "",
                " This is held for an additional storage item whose value size is",
                " `4 + sizeof((BlockNumber, Balance, AccountId))` bytes and whose key size is",
                " `32 + sizeof(AccountId)` bytes."
              ]
            },
            {
              "name": "DepositFactor",
              "type": "BalanceOf",
              "value": "0x0000eb08bf0100000000000000000000",
              "docs": [
                " The amount of currency needed per unit threshold when creating a multisig execution.",
                "",
                " This is held for adding 32 bytes more into a pre-existing storage value."
              ]
            },
            {
              "name": "MaxSignatories",
              "type": "u16",
              "value": "0x6400",
              "docs": [
                " The maximum amount of signatories allowed in the multisig."
              ]
            }
          ],
          "errors": [
            {
              "name": "MinimumThreshold",
              "docs": [
                " Threshold must be 2 or greater."
              ]
            },
            {
              "name": "AlreadyApproved",
              "docs": [
                " Call is already approved by this signatory."
              ]
            },
            {
              "name": "NoApprovalsNeeded",
              "docs": [
                " Call doesn't need any (more) approvals."
              ]
            },
            {
              "name": "TooFewSignatories",
              "docs": [
                " There are too few signatories in the list."
              ]
            },
            {
              "name": "TooManySignatories",
              "docs": [
                " There are too many signatories in the list."
              ]
            },
            {
              "name": "SignatoriesOutOfOrder",
              "docs": [
                " The signatories were provided out of order; they should be ordered."
              ]
            },
            {
              "name": "SenderInSignatories",
              "docs": [
                " The sender was contained in the other signatories; it shouldn't be."
              ]
            },
            {
              "name": "NotFound",
              "docs": [
                " Multisig operation not found when attempting to cancel."
              ]
            },
            {
              "name": "NotOwner",
              "docs": [
                " Only the account that originally created the multisig is able to cancel it."
              ]
            },
            {
              "name": "NoTimepoint",
              "docs": [
                " No timepoint was given, yet the multisig operation is already underway."
              ]
            },
            {
              "name": "WrongTimepoint",
              "docs": [
                " A different timepoint was given to the multisig operation that is underway."
              ]
            },
            {
              "name": "UnexpectedTimepoint",
              "docs": [
                " A timepoint was given, yet no multisig operation is underway."
              ]
            },
            {
              "name": "MaxWeightTooLow",
              "docs": [
                " The maximum weight information provided was too low."
              ]
            },
            {
              "name": "AlreadyStored",
              "docs": [
                " The data to be stored is already stored."
              ]
            }
          ],
          "index": 53
        },
        {
          "name": "Vesting",
          "storage": {
            "prefix": "Vesting",
            "items": [
              {
                "name": "Vesting",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "BifrostVestingInfo",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Information regarding the vesting of a given account."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "vest",
              "args": [],
              "docs": [
                " Unlock any vested funds of the sender account.",
                "",
                " The dispatch origin for this call must be _Signed_ and the sender must have funds still",
                " locked under this pallet.",
                "",
                " Emits either `VestingCompleted` or `VestingUpdated`.",
                "",
                " # <weight>",
                " - `O(1)`.",
                " - DbWeight: 2 Reads, 2 Writes",
                "     - Reads: Vesting Storage, Balances Locks, [Sender Account]",
                "     - Writes: Vesting Storage, Balances Locks, [Sender Account]",
                " # </weight>"
              ]
            },
            {
              "name": "vest_other",
              "args": [
                {
                  "name": "target",
                  "type": "LookupSource"
                }
              ],
              "docs": [
                " Unlock any vested funds of a `target` account.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " - `target`: The account whose vested funds should be unlocked. Must have funds still",
                " locked under this pallet.",
                "",
                " Emits either `VestingCompleted` or `VestingUpdated`.",
                "",
                " # <weight>",
                " - `O(1)`.",
                " - DbWeight: 3 Reads, 3 Writes",
                "     - Reads: Vesting Storage, Balances Locks, Target Account",
                "     - Writes: Vesting Storage, Balances Locks, Target Account",
                " # </weight>"
              ]
            },
            {
              "name": "vested_transfer",
              "args": [
                {
                  "name": "target",
                  "type": "LookupSource"
                },
                {
                  "name": "schedule",
                  "type": "BifrostVestingInfo"
                }
              ],
              "docs": [
                " Create a vested transfer.",
                "",
                " The dispatch origin for this call must be _Signed_.",
                "",
                " - `target`: The account that should be transferred the vested funds.",
                " - `amount`: The amount of funds to transfer and will be vested.",
                " - `schedule`: The vesting schedule attached to the transfer.",
                "",
                " Emits `VestingCreated`.",
                "",
                " # <weight>",
                " - `O(1)`.",
                " - DbWeight: 3 Reads, 3 Writes",
                "     - Reads: Vesting Storage, Balances Locks, Target Account, [Sender Account]",
                "     - Writes: Vesting Storage, Balances Locks, Target Account, [Sender Account]",
                " # </weight>"
              ]
            },
            {
              "name": "force_vested_transfer",
              "args": [
                {
                  "name": "source",
                  "type": "LookupSource"
                },
                {
                  "name": "target",
                  "type": "LookupSource"
                },
                {
                  "name": "schedule",
                  "type": "BifrostVestingInfo"
                }
              ],
              "docs": [
                " Force a vested transfer.",
                "",
                " The dispatch origin for this call must be _Root_.",
                "",
                " - `source`: The account whose funds should be transferred.",
                " - `target`: The account that should be transferred the vested funds.",
                " - `amount`: The amount of funds to transfer and will be vested.",
                " - `schedule`: The vesting schedule attached to the transfer.",
                "",
                " Emits `VestingCreated`.",
                "",
                " # <weight>",
                " - `O(1)`.",
                " - DbWeight: 4 Reads, 4 Writes",
                "     - Reads: Vesting Storage, Balances Locks, Target Account, Source Account",
                "     - Writes: Vesting Storage, Balances Locks, Target Account, Source Account",
                " # </weight>"
              ]
            }
          ],
          "events": [
            {
              "name": "VestingUpdated",
              "args": [
                "AccountId",
                "Balance"
              ],
              "docs": [
                " The amount vested has been updated. This could indicate more funds are available. The",
                " balance given is the amount which is left unvested (and thus locked).",
                " \\[account, unvested\\]"
              ]
            },
            {
              "name": "VestingCompleted",
              "args": [
                "AccountId"
              ],
              "docs": [
                " An \\[account\\] has become fully vested. No further vesting can happen."
              ]
            }
          ],
          "constants": [
            {
              "name": "MinVestedTransfer",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The minimum amount transferred to call `vested_transfer`."
              ]
            }
          ],
          "errors": [
            {
              "name": "NotVesting",
              "docs": [
                " The account given is not vesting."
              ]
            },
            {
              "name": "ExistingVestingSchedule",
              "docs": [
                " An existing vesting schedule already exists for this account that cannot be clobbered."
              ]
            },
            {
              "name": "AmountLow",
              "docs": [
                " Amount being transferred is too low to create a vesting schedule."
              ]
            }
          ],
          "index": 60
        },
        {
          "name": "ZenlinkProtocol",
          "storage": {
            "prefix": "ZenlinkProtocol",
            "items": [
              {
                "name": "ForeignLedger",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "(ZenlinkAssetId,AccountId)",
                    "value": "ZenlinkAssetBalance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " Foreign foreign storage",
                  " The number of units of assets held by any given account."
                ]
              },
              {
                "name": "ForeignMeta",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "ZenlinkAssetId",
                    "value": "ZenlinkAssetBalance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " TWOX-NOTE: `AssetId` is trusted, so this is safe."
                ]
              },
              {
                "name": "ForeignList",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<ZenlinkAssetId>"
                },
                "fallback": "0x00",
                "docs": []
              },
              {
                "name": "LiquidityMeta",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "(ZenlinkAssetId,ZenlinkAssetId)",
                    "value": "(AccountId,ZenlinkAssetBalance)",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Swap liquidity storage",
                  " TWOX-NOTE: `AssetId` is trusted, so this is safe.",
                  " (AssetId, AssetId) -> (PairAccountId, TotalSupply)"
                ]
              },
              {
                "name": "LiquidityLedger",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "((ZenlinkAssetId,ZenlinkAssetId),AccountId)",
                    "value": "ZenlinkAssetBalance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " ((AssetId, AssetId), AccountId) -> AssetBalance"
                ]
              },
              {
                "name": "LiquidityPairs",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<(ZenlinkAssetId,ZenlinkAssetId)>"
                },
                "fallback": "0x00",
                "docs": []
              }
            ]
          },
          "calls": [
            {
              "name": "transfer",
              "args": [
                {
                  "name": "asset_id",
                  "type": "ZenlinkAssetId"
                },
                {
                  "name": "recipient",
                  "type": "LookupSource"
                },
                {
                  "name": "amount",
                  "type": "Compact<ZenlinkAssetBalance>"
                }
              ],
              "docs": [
                " Move some assets from one holder to another.",
                "",
                " # Arguments",
                "",
                " - `asset_id`: The foreign id.",
                " - `target`: The receiver of the foreign.",
                " - `amount`: The amount of the foreign to transfer."
              ]
            },
            {
              "name": "transfer_to_parachain",
              "args": [
                {
                  "name": "asset_id",
                  "type": "ZenlinkAssetId"
                },
                {
                  "name": "para_id",
                  "type": "ParaId"
                },
                {
                  "name": "recipient",
                  "type": "AccountId"
                },
                {
                  "name": "amount",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "max_weight",
                  "type": "Weight"
                }
              ],
              "docs": [
                " Transfer zenlink assets to a sibling parachain.",
                "",
                " Zenlink assets can be either native or foreign to the sending parachain.",
                "",
                " # Arguments",
                "",
                " - `asset_id`: Global identifier for a zenlink foreign",
                " - `para_id`: Destination parachain",
                " - `account`: Destination account",
                " - `amount`: Amount to transfer"
              ]
            },
            {
              "name": "create_pair",
              "args": [
                {
                  "name": "asset_0",
                  "type": "ZenlinkAssetId"
                },
                {
                  "name": "asset_1",
                  "type": "ZenlinkAssetId"
                }
              ],
              "docs": [
                " Create pair by two assets.",
                "",
                " The order of foreign dot effect result.",
                "",
                " # Arguments",
                "",
                " - `asset_0`: Asset which make up Pair",
                " - `asset_1`: Asset which make up Pair"
              ]
            },
            {
              "name": "add_liquidity",
              "args": [
                {
                  "name": "asset_0",
                  "type": "ZenlinkAssetId"
                },
                {
                  "name": "asset_1",
                  "type": "ZenlinkAssetId"
                },
                {
                  "name": "amount_0_desired",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "amount_1_desired",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "amount_0_min",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "amount_1_min",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "deadline",
                  "type": "Compact<BlockNumber>"
                }
              ],
              "docs": [
                " Provide liquidity to a pair.",
                "",
                " The order of foreign dot effect result.",
                "",
                " # Arguments",
                "",
                " - `asset_0`: Asset which make up pair",
                " - `asset_1`: Asset which make up pair",
                " - `amount_0_desired`: Maximum amount of asset_0 added to the pair",
                " - `amount_1_desired`: Maximum amount of asset_1 added to the pair",
                " - `amount_0_min`: Minimum amount of asset_0 added to the pair",
                " - `amount_1_min`: Minimum amount of asset_1 added to the pair",
                " - `deadline`: Height of the cutoff block of this transaction"
              ]
            },
            {
              "name": "remove_liquidity",
              "args": [
                {
                  "name": "asset_0",
                  "type": "ZenlinkAssetId"
                },
                {
                  "name": "asset_1",
                  "type": "ZenlinkAssetId"
                },
                {
                  "name": "liquidity",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "amount_0_min",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "amount_1_min",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "recipient",
                  "type": "LookupSource"
                },
                {
                  "name": "deadline",
                  "type": "Compact<BlockNumber>"
                }
              ],
              "docs": [
                " Extract liquidity.",
                "",
                " The order of foreign dot effect result.",
                "",
                " # Arguments",
                "",
                " - `asset_0`: Asset which make up pair",
                " - `asset_1`: Asset which make up pair",
                " - `amount_asset_0_min`: Minimum amount of asset_0 to exact",
                " - `amount_asset_1_min`: Minimum amount of asset_1 to exact",
                " - `recipient`: Account that accepts withdrawal of assets",
                " - `deadline`: Height of the cutoff block of this transaction"
              ]
            },
            {
              "name": "swap_exact_assets_for_assets",
              "args": [
                {
                  "name": "amount_in",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "amount_out_min",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "path",
                  "type": "Vec<ZenlinkAssetId>"
                },
                {
                  "name": "recipient",
                  "type": "LookupSource"
                },
                {
                  "name": "deadline",
                  "type": "Compact<BlockNumber>"
                }
              ],
              "docs": [
                " Sell amount of foreign by path.",
                "",
                " # Arguments",
                "",
                " - `amount_in`: Amount of the foreign will be sold",
                " - `amount_out_min`: Minimum amount of target foreign",
                " - `path`: path can convert to pairs.",
                " - `recipient`: Account that receive the target foreign",
                " - `deadline`: Height of the cutoff block of this transaction"
              ]
            },
            {
              "name": "swap_assets_for_exact_assets",
              "args": [
                {
                  "name": "amount_out",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "amount_in_max",
                  "type": "Compact<ZenlinkAssetBalance>"
                },
                {
                  "name": "path",
                  "type": "Vec<ZenlinkAssetId>"
                },
                {
                  "name": "recipient",
                  "type": "LookupSource"
                },
                {
                  "name": "deadline",
                  "type": "Compact<BlockNumber>"
                }
              ],
              "docs": [
                " Buy amount of foreign by path.",
                "",
                " # Arguments",
                "",
                " - `amount_out`: Amount of the foreign will be bought",
                " - `amount_in_max`: Maximum amount of sold foreign",
                " - `path`: path can convert to pairs.",
                " - `recipient`: Account that receive the target foreign",
                " - `deadline`: Height of the cutoff block of this transaction"
              ]
            }
          ],
          "events": [
            {
              "name": "Transferred",
              "args": [
                "ZenlinkAssetId",
                "AccountId",
                "AccountId",
                "ZenlinkAssetBalance"
              ],
              "docs": [
                " Foreign Asset",
                " Some assets were transferred. \\[asset_id, owner, target, amount\\]"
              ]
            },
            {
              "name": "Burned",
              "args": [
                "ZenlinkAssetId",
                "AccountId",
                "ZenlinkAssetBalance"
              ],
              "docs": [
                " Some assets were burned. \\[asset_id, owner, amount\\]"
              ]
            },
            {
              "name": "Minted",
              "args": [
                "ZenlinkAssetId",
                "AccountId",
                "ZenlinkAssetBalance"
              ],
              "docs": [
                " Some assets were minted. \\[asset_id, owner, amount\\]"
              ]
            },
            {
              "name": "PairCreated",
              "args": [
                "AccountId",
                "ZenlinkAssetId",
                "ZenlinkAssetId"
              ],
              "docs": [
                " Swap",
                " Create a trading pair. \\[creator, asset_0, asset_1\\]"
              ]
            },
            {
              "name": "LiquidityAdded",
              "args": [
                "AccountId",
                "ZenlinkAssetId",
                "ZenlinkAssetId",
                "ZenlinkAssetBalance",
                "ZenlinkAssetBalance",
                "ZenlinkAssetBalance"
              ],
              "docs": [
                " Add liquidity. \\[owner, asset_0, asset_1, add_balance_0, add_balance_1, mint_balance_lp\\]"
              ]
            },
            {
              "name": "LiquidityRemoved",
              "args": [
                "AccountId",
                "AccountId",
                "ZenlinkAssetId",
                "ZenlinkAssetId",
                "ZenlinkAssetBalance",
                "ZenlinkAssetBalance",
                "ZenlinkAssetBalance"
              ],
              "docs": [
                " Remove liquidity. \\[owner, recipient, asset_0, asset_1, rm_balance_0, rm_balance_1, burn_balance_lp\\]"
              ]
            },
            {
              "name": "AssetSwap",
              "args": [
                "AccountId",
                "AccountId",
                "Vec<ZenlinkAssetId>",
                "ZenlinkAssetBalance",
                "ZenlinkAssetBalance"
              ],
              "docs": [
                " Transact in trading \\[owner, recipient, swap_path, balance_in, balance_out\\]"
              ]
            },
            {
              "name": "TransferredToParachain",
              "args": [
                "ZenlinkAssetId",
                "AccountId",
                "ParaId",
                "AccountId",
                "ZenlinkAssetBalance",
                "Weight"
              ],
              "docs": [
                " Transfer by xcm",
                " Transferred to parachain. \\[asset_id, src, para_id, dest, amount, used_weight\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "UnsupportedAssetType",
              "docs": [
                " Unsupported AssetId by this ZenlinkProtocol Version"
              ]
            },
            {
              "name": "InsufficientAssetBalance",
              "docs": [
                " Account balance must be greater than or equal to the transfer amount."
              ]
            },
            {
              "name": "NativeBalanceTooLow",
              "docs": [
                " Account native currency balance must be greater than ExistentialDeposit"
              ]
            },
            {
              "name": "DeniedCreatePair",
              "docs": [
                " Trading pair can't be created."
              ]
            },
            {
              "name": "PairAlreadyExists",
              "docs": [
                " Trading pair already exists."
              ]
            },
            {
              "name": "PairNotExists",
              "docs": [
                " Trading pair does not exist."
              ]
            },
            {
              "name": "AssetNotExists",
              "docs": [
                " Asset does not exist."
              ]
            },
            {
              "name": "InsufficientLiquidity",
              "docs": [
                " Liquidity is not enough."
              ]
            },
            {
              "name": "InsufficientPairReserve",
              "docs": [
                " Trading pair does have enough foreign."
              ]
            },
            {
              "name": "InsufficientTargetAmount",
              "docs": [
                " Get target amount is less than exception."
              ]
            },
            {
              "name": "ExcessiveSoldAmount",
              "docs": [
                " Sold amount is more than exception."
              ]
            },
            {
              "name": "InvalidPath",
              "docs": [
                " Can't find pair though trading path."
              ]
            },
            {
              "name": "IncorrectAssetAmountRange",
              "docs": [
                " Incorrect foreign amount range."
              ]
            },
            {
              "name": "Overflow",
              "docs": [
                " Overflow."
              ]
            },
            {
              "name": "Deadline",
              "docs": [
                " Transaction block number is larger than the end block number."
              ]
            },
            {
              "name": "AccountIdBadLocation",
              "docs": [
                " Location given was invalid or unsupported."
              ]
            },
            {
              "name": "ExecutionFailed",
              "docs": [
                " XCM execution failed"
              ]
            },
            {
              "name": "DeniedTransferToSelf",
              "docs": [
                " Transfer to self by XCM message"
              ]
            },
            {
              "name": "TargetChainNotRegistered",
              "docs": [
                " Not in ZenlinkRegistedParaChains"
              ]
            }
          ],
          "index": 61
        },
        {
          "name": "Tokens",
          "storage": {
            "prefix": "Tokens",
            "items": [
              {
                "name": "TotalIssuance",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "CurrencyId",
                    "value": "Balance",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " The total issuance of a token type."
                ]
              },
              {
                "name": "Locks",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_128Concat",
                    "key1": "AccountId",
                    "key2": "CurrencyId",
                    "value": "Vec<OrmlBalanceLock>",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " 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": "OrmlAccountData",
                    "key2Hasher": "Twox64Concat"
                  }
                },
                "fallback": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "docs": [
                  " 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": [
            {
              "name": "transfer",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "amount",
                  "type": "Compact<Balance>"
                }
              ],
              "docs": [
                " Transfer some balance to another account.",
                "",
                " The dispatch origin for this call must be `Signed` by the",
                " transactor."
              ]
            },
            {
              "name": "transfer_all",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                }
              ],
              "docs": [
                " Transfer all remaining balance to the given account.",
                "",
                " The dispatch origin for this call must be `Signed` by the",
                " transactor."
              ]
            }
          ],
          "events": [
            {
              "name": "Endowed",
              "args": [
                "CurrencyId",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " An account was created with some free balance. \\[currency_id,",
                " account, free_balance\\]"
              ]
            },
            {
              "name": "DustLost",
              "args": [
                "CurrencyId",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " An account was removed whose balance was non-zero but below",
                " ExistentialDeposit, resulting in an outright loss. \\[currency_id,",
                " account, balance\\]"
              ]
            },
            {
              "name": "Transfer",
              "args": [
                "CurrencyId",
                "AccountId",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " Transfer succeeded. \\[currency_id, from, to, value\\]"
              ]
            },
            {
              "name": "Reserved",
              "args": [
                "CurrencyId",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " Some balance was reserved (moved from free to reserved).",
                " \\[currency_id, who, value\\]"
              ]
            },
            {
              "name": "Unreserved",
              "args": [
                "CurrencyId",
                "AccountId",
                "Balance"
              ],
              "docs": [
                " Some balance was unreserved (moved from reserved to free).",
                " \\[currency_id, who, value\\]"
              ]
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "BalanceTooLow",
              "docs": [
                " The balance is too low"
              ]
            },
            {
              "name": "AmountIntoBalanceFailed",
              "docs": [
                " Cannot convert Amount into Balance type"
              ]
            },
            {
              "name": "LiquidityRestrictions",
              "docs": [
                " Failed because liquidity restrictions due to locking"
              ]
            },
            {
              "name": "MaxLocksExceeded",
              "docs": [
                " Failed because the maximum locks was exceeded"
              ]
            },
            {
              "name": "KeepAlive",
              "docs": [
                " Transfer/payment would kill account"
              ]
            },
            {
              "name": "ExistentialDeposit",
              "docs": [
                " Value too low to create account due to existential deposit"
              ]
            }
          ],
          "index": 71
        },
        {
          "name": "Currencies",
          "storage": null,
          "calls": [
            {
              "name": "transfer",
              "args": [
                {
                  "name": "dest",
                  "type": "LookupSource"
                },
                {
                  "name": "currency_id",
                  "type": "CurrencyIdOf"
                },
                {
                  "name": "amount",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " 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>"
                }
              ],
              "docs": [
                " 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"
                }
              ],
              "docs": [
                " 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"
              ],
              "docs": [
                " Currency transfer success. [currency_id, from, to, amount]"
              ]
            },
            {
              "name": "BalanceUpdated",
              "args": [
                "CurrencyIdOf",
                "AccountId",
                "AmountOf"
              ],
              "docs": [
                " Update balance success. [currency_id, who, amount]"
              ]
            },
            {
              "name": "Deposited",
              "args": [
                "CurrencyIdOf",
                "AccountId",
                "BalanceOf"
              ],
              "docs": [
                " Deposit success. [currency_id, who, amount]"
              ]
            },
            {
              "name": "Withdrawn",
              "args": [
                "CurrencyIdOf",
                "AccountId",
                "BalanceOf"
              ],
              "docs": [
                " Withdraw success. [currency_id, who, amount]"
              ]
            }
          ],
          "constants": [
            {
              "name": "GetNativeCurrencyId",
              "type": "CurrencyIdOf",
              "value": "0x0200",
              "docs": []
            }
          ],
          "errors": [
            {
              "name": "AmountIntoBalanceFailed",
              "docs": [
                " Unable to convert the Amount type into Balance."
              ]
            },
            {
              "name": "BalanceTooLow",
              "docs": [
                " Balance is too low."
              ]
            }
          ],
          "index": 72
        },
        {
          "name": "VtokenMint",
          "storage": {
            "prefix": "VtokenMint",
            "items": [
              {
                "name": "MintPool",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "CurrencyIdOf",
                    "value": "BalanceOf",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " Total mint pool"
                ]
              },
              {
                "name": "RedeemRecord",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_128Concat",
                    "key1": "AccountId",
                    "key2": "CurrencyIdOf",
                    "value": "Vec<(BlockNumber,BalanceOf)>",
                    "key2Hasher": "Blake2_128Concat"
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Record when and how much balance user want to redeem."
                ]
              },
              {
                "name": "StakingLockPeriod",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "CurrencyIdOf",
                    "value": "BlockNumber",
                    "linked": false
                  }
                },
                "fallback": "0x00000000",
                "docs": [
                  " List lock period while staking."
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "set_token_staking_lock_period",
              "args": [
                {
                  "name": "token_id",
                  "type": "CurrencyIdOf"
                },
                {
                  "name": "locking_blocks",
                  "type": "BlockNumber"
                }
              ],
              "docs": [
                " Set price for minting vtoken.",
                "",
                " The dispatch origin for this call must be `Root` by the",
                " transactor."
              ]
            },
            {
              "name": "set_vtoken_pool",
              "args": [
                {
                  "name": "token_id",
                  "type": "CurrencyIdOf"
                },
                {
                  "name": "new_token_pool",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "new_vtoken_pool",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Set staking lock period for a token"
              ]
            },
            {
              "name": "mint",
              "args": [
                {
                  "name": "vtoken_id",
                  "type": "CurrencyIdOf"
                },
                {
                  "name": "token_amount",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Mint vtoken.",
                "",
                " The dispatch origin for this call must be `Signed` by the",
                " transactor."
              ]
            },
            {
              "name": "redeem",
              "args": [
                {
                  "name": "token_id",
                  "type": "CurrencyIdOf"
                },
                {
                  "name": "vtoken_amount",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " Redeem token.",
                "",
                " The dispatch origin for this call must be `Signed` by the",
                " transactor."
              ]
            }
          ],
          "events": [
            {
              "name": "Minted",
              "args": [
                "AccountId",
                "CurrencyId",
                "Balance"
              ],
              "docs": []
            },
            {
              "name": "RedeemStarted",
              "args": [
                "AccountId",
                "CurrencyId",
                "Balance",
                "BlockNumber"
              ],
              "docs": []
            },
            {
              "name": "UpdateVtokenPoolSuccess",
              "args": [],
              "docs": []
            }
          ],
          "constants": [],
          "errors": [
            {
              "name": "BalanceLow",
              "docs": [
                " Account balance must be greater than or equal to the transfer amount."
              ]
            },
            {
              "name": "BalanceZero",
              "docs": [
                " Balance should be non-zero."
              ]
            },
            {
              "name": "NotSupportTokenType",
              "docs": [
                " Token type not support."
              ]
            },
            {
              "name": "EmptyVtokenPool",
              "docs": [
                " Empty vtoken pool, cause there's no price at all."
              ]
            },
            {
              "name": "NotEnoughVtokenPool",
              "docs": [
                " The amount of token you want to mint is bigger than the vtoken pool."
              ]
            },
            {
              "name": "CalculationOverflow",
              "docs": [
                " Calculation Overflow"
              ]
            }
          ],
          "index": 101
        },
        {
          "name": "MinterReward",
          "storage": {
            "prefix": "MinterReward",
            "items": [
              {
                "name": "RewardPerBlock",
                "modifier": "Default",
                "type": {
                  "plain": "BalanceOf"
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " How much BNC will be issued to minters each block after."
                ]
              },
              {
                "name": "CurrentRoundStartAt",
                "modifier": "Default",
                "type": {
                  "plain": "BlockNumberFor"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Ideally, BNC reward will be issued after each 50 blocks."
                ]
              },
              {
                "name": "CurrencyWeights",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "CurrencyIdOf",
                    "value": "ShareWeight",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": []
              },
              {
                "name": "TotalVtokenMinted",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "CurrencyIdOf",
                    "value": "BalanceOf",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": []
              },
              {
                "name": "Minter",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_128Concat",
                    "key1": "AccountId",
                    "key2": "CurrencyIdOf",
                    "value": "BalanceOf",
                    "key2Hasher": "Blake2_128Concat"
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " Who mints vtoken"
                ]
              },
              {
                "name": "MaximumVtokenMinted",
                "modifier": "Default",
                "type": {
                  "plain": "(BlockNumberFor,BalanceOf,CurrencyIdOf)"
                },
                "fallback": "0x00000000000000000000000000000000000000000201",
                "docs": [
                  " Record maximum vtoken value is minted and when minted"
                ]
              },
              {
                "name": "UserReward",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "AccountId",
                    "value": "BalanceOf",
                    "linked": false
                  }
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " Record a user how much bnc s/he receives."
                ]
              },
              {
                "name": "CurrentCycle",
                "modifier": "Default",
                "type": {
                  "plain": "u8"
                },
                "fallback": "0x00",
                "docs": [
                  " Record maximum vtoken value is minted and when minted"
                ]
              }
            ]
          },
          "calls": null,
          "events": [],
          "constants": [
            {
              "name": "HalvingCycle",
              "type": "BlockNumberFor",
              "value": "0x3c000000",
              "docs": [
                " Two year as a cycle, 600 * 24 * 365 * 2, which results in reward being cut half"
              ]
            },
            {
              "name": "RewardWindow",
              "type": "BlockNumberFor",
              "value": "0x0a000000",
              "docs": [
                " Reward period, normally it's 50 blocks after."
              ]
            },
            {
              "name": "MaximumExtendedPeriod",
              "type": "BlockNumberFor",
              "value": "0x14000000",
              "docs": [
                " Allow maximum blocks can be extended."
              ]
            },
            {
              "name": "StableCurrencyId",
              "type": "CurrencyId",
              "value": "0x0302",
              "docs": [
                " stable currency id currently used in the chain"
              ]
            }
          ],
          "errors": [
            {
              "name": "FailToGetSwapPrice",
              "docs": [
                " There's no price at all."
              ]
            },
            {
              "name": "ConversionError",
              "docs": []
            },
            {
              "name": "CalculationOverflow",
              "docs": []
            }
          ],
          "index": 102
        },
        {
          "name": "FlexibleFee",
          "storage": {
            "prefix": "FlexibleFee",
            "items": [
              {
                "name": "UserFeeChargeOrderList",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountId",
                    "value": "Vec<CurrencyId>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": []
              },
              {
                "name": "DefaultFeeChargeOrderList",
                "modifier": "Default",
                "type": {
                  "plain": "Vec<CurrencyId>"
                },
                "fallback": "0x18020003020003010300050105",
                "docs": []
              }
            ]
          },
          "calls": [
            {
              "name": "set_user_fee_charge_order",
              "args": [
                {
                  "name": "asset_order_list_vec",
                  "type": "Option<Vec<CurrencyId>>"
                }
              ],
              "docs": [
                " Set user fee charge assets order."
              ]
            }
          ],
          "events": [
            {
              "name": "FlexibleFeeExchanged",
              "args": [
                "CurrencyId",
                "u128"
              ],
              "docs": []
            }
          ],
          "constants": [
            {
              "name": "NativeCurrencyId",
              "type": "CurrencyId",
              "value": "0x0200",
              "docs": []
            }
          ],
          "errors": [
            {
              "name": "ConversionError",
              "docs": []
            }
          ],
          "index": 104
        },
        {
          "name": "Salp",
          "storage": {
            "prefix": "Salp",
            "items": [
              {
                "name": "CurrentTrieIndex",
                "modifier": "Default",
                "type": {
                  "plain": "TrieIndex"
                },
                "fallback": "0x00000000",
                "docs": [
                  " Tracker for the next available trie index"
                ]
              },
              {
                "name": "Funds",
                "modifier": "Default",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "ParaId",
                    "value": "Option<FundInfo>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Info on all of the funds."
                ]
              },
              {
                "name": "RefundPool",
                "modifier": "Default",
                "type": {
                  "plain": "BalanceOf"
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " The balance can be refunded to users."
                ]
              },
              {
                "name": "RedeemPool",
                "modifier": "Default",
                "type": {
                  "plain": "BalanceOf"
                },
                "fallback": "0x00000000000000000000000000000000",
                "docs": [
                  " The balance can be redeemed to users."
                ]
              },
              {
                "name": "RedeemExtras",
                "modifier": "Default",
                "type": {
                  "doubleMap": {
                    "hasher": "Blake2_128Concat",
                    "key1": "AccountIdOf",
                    "key2": "(ParaId,LeasePeriod,LeasePeriod)",
                    "value": "RedeemStatus",
                    "key2Hasher": "Blake2_128Concat"
                  }
                },
                "fallback": "0x00",
                "docs": []
              }
            ]
          },
          "calls": [
            {
              "name": "fund_success",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                }
              ],
              "docs": []
            },
            {
              "name": "fund_fail",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                }
              ],
              "docs": []
            },
            {
              "name": "fund_retire",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                }
              ],
              "docs": []
            },
            {
              "name": "fund_end",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                }
              ],
              "docs": []
            },
            {
              "name": "unlock",
              "args": [
                {
                  "name": "who",
                  "type": "AccountIdOf"
                },
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                }
              ],
              "docs": [
                " Unlock the reserved vsToken/vsBond after fund success"
              ]
            },
            {
              "name": "create",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                },
                {
                  "name": "cap",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "first_slot",
                  "type": "Compact<LeasePeriod>"
                },
                {
                  "name": "last_slot",
                  "type": "Compact<LeasePeriod>"
                }
              ],
              "docs": [
                " TODO: Refactor the docs.",
                " Create a new crowdloaning campaign for a parachain slot deposit for the current auction."
              ]
            },
            {
              "name": "contribute",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                },
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": [
                " TODO: Refactor the docs.",
                " Contribute to a crowd sale. This will transfer some balance over to fund a parachain",
                " slot. It will be withdrawable in two instances: the parachain becomes retired; or the",
                " slot is unable to be purchased and the timeout expires."
              ]
            },
            {
              "name": "confirm_contribute",
              "args": [
                {
                  "name": "who",
                  "type": "AccountIdOf"
                },
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                },
                {
                  "name": "is_success",
                  "type": "bool"
                }
              ],
              "docs": [
                " Confirm contribute"
              ]
            },
            {
              "name": "withdraw",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                }
              ],
              "docs": [
                " Withdraw full balance of the parachain. this function may need to be called multiple",
                " times",
                " - `index`: The parachain to whose crowdloan the contribution was made."
              ]
            },
            {
              "name": "confirm_withdraw",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                },
                {
                  "name": "is_success",
                  "type": "bool"
                }
              ],
              "docs": [
                " Confirm withdraw by fund owner temporarily"
              ]
            },
            {
              "name": "refund",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                }
              ],
              "docs": []
            },
            {
              "name": "confirm_refund",
              "args": [
                {
                  "name": "who",
                  "type": "AccountIdOf"
                },
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                },
                {
                  "name": "is_success",
                  "type": "bool"
                }
              ],
              "docs": []
            },
            {
              "name": "redeem",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                },
                {
                  "name": "first_slot",
                  "type": "Compact<LeasePeriod>"
                },
                {
                  "name": "last_slot",
                  "type": "Compact<LeasePeriod>"
                },
                {
                  "name": "value",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": []
            },
            {
              "name": "confirm_redeem",
              "args": [
                {
                  "name": "who",
                  "type": "AccountIdOf"
                },
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                },
                {
                  "name": "first_slot",
                  "type": "Compact<LeasePeriod>"
                },
                {
                  "name": "last_slot",
                  "type": "Compact<LeasePeriod>"
                },
                {
                  "name": "is_success",
                  "type": "bool"
                }
              ],
              "docs": []
            },
            {
              "name": "dissolve",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                }
              ],
              "docs": [
                " Remove a fund after the retirement period has ended and all funds have been returned."
              ]
            }
          ],
          "events": [
            {
              "name": "Created",
              "args": [
                "ParaId"
              ],
              "docs": [
                " Create a new crowdloaning campaign. [fund_index]"
              ]
            },
            {
              "name": "Contributing",
              "args": [
                "AccountIdOf",
                "ParaId",
                "BalanceOf"
              ],
              "docs": [
                " Contributing to a crowd sale. [who, fund_index, amount]"
              ]
            },
            {
              "name": "Contributed",
              "args": [
                "AccountIdOf",
                "ParaId",
                "BalanceOf"
              ],
              "docs": [
                " Contributed to a crowd sale. [who, fund_index, amount]"
              ]
            },
            {
              "name": "ContributeFailed",
              "args": [
                "AccountIdOf",
                "ParaId",
                "BalanceOf"
              ],
              "docs": [
                " Fail on contribute to crowd sale. [who, fund_index, amount]"
              ]
            },
            {
              "name": "Withdrawing",
              "args": [
                "AccountIdOf",
                "ParaId",
                "BalanceOf"
              ],
              "docs": [
                " Withdrawing full balance of a contributor. [who, fund_index, amount]"
              ]
            },
            {
              "name": "Withdrew",
              "args": [
                "AccountIdOf",
                "ParaId",
                "BalanceOf"
              ],
              "docs": [
                " Withdrew full balance of a contributor. [who, fund_index, amount]"
              ]
            },
            {
              "name": "WithdrawFailed",
              "args": [
                "AccountIdOf",
                "ParaId",
                "BalanceOf"
              ],
              "docs": [
                " Fail on withdraw full balance of a contributor. [who, fund_index, amount]"
              ]
            },
            {
              "name": "Refunding",
              "args": [
                "AccountIdOf",
                "ParaId",
                "BalanceOf"
              ],
              "docs": [
                " Refunding to account. [who, fund_index, amount]"
              ]
            },
            {
              "name": "Refunded",
              "args": [
                "AccountIdOf",
                "ParaId",
                "BalanceOf"
              ],
              "docs": [
                " Refunded to account. [who, fund_index, amount]"
              ]
            },
            {
              "name": "RefundFailed",
              "args": [
                "AccountIdOf",
                "ParaId",
                "BalanceOf"
              ],
              "docs": [
                " Fail on refund to account. [who,fund_index, amount]"
              ]
            },
            {
              "name": "Redeeming",
              "args": [
                "AccountIdOf",
                "ParaId",
                "LeasePeriod",
                "LeasePeriod",
                "BalanceOf"
              ],
              "docs": [
                " Redeeming to account. [who, fund_index, first_slot, last_slot, value]"
              ]
            },
            {
              "name": "Redeemed",
              "args": [
                "AccountIdOf",
                "ParaId",
                "LeasePeriod",
                "LeasePeriod",
                "BalanceOf"
              ],
              "docs": [
                " Redeemed to account. [who, fund_index, first_slot, last_slot, value]"
              ]
            },
            {
              "name": "RedeemFailed",
              "args": [
                "AccountIdOf",
                "ParaId",
                "LeasePeriod",
                "LeasePeriod",
                "BalanceOf"
              ],
              "docs": [
                " Fail on redeem to account. [who, fund_index, first_slot, last_slot, value]"
              ]
            },
            {
              "name": "Dissolved",
              "args": [
                "ParaId"
              ],
              "docs": [
                " Fund is dissolved. [fund_index]"
              ]
            },
            {
              "name": "Unlocked",
              "args": [
                "AccountIdOf",
                "ParaId",
                "BalanceOf"
              ],
              "docs": [
                " The vsToken/vsBond was be unlocked. [who, fund_index, value]"
              ]
            }
          ],
          "constants": [
            {
              "name": "PalletId",
              "type": "PalletId",
              "value": "0x62662f73616c7023",
              "docs": [
                " ModuleID for the crowdloan module. An appropriate value could be",
                " ```ModuleId(*b\"py/cfund\")```"
              ]
            },
            {
              "name": "MinContribution",
              "type": "BalanceOf",
              "value": "0x0010a5d4e80000000000000000000000",
              "docs": [
                " The minimum amount that may be contributed into a crowdloan. Should almost certainly be",
                " at least ExistentialDeposit."
              ]
            },
            {
              "name": "RelayChainToken",
              "type": "CurrencyId",
              "value": "0x0004",
              "docs": []
            },
            {
              "name": "DepositToken",
              "type": "CurrencyId",
              "value": "0x0200",
              "docs": []
            },
            {
              "name": "LeasePeriod",
              "type": "BlockNumberFor",
              "value": "0x409d0400",
              "docs": [
                " The number of blocks over which a single period lasts."
              ]
            },
            {
              "name": "VSBondValidPeriod",
              "type": "BlockNumberFor",
              "value": "0xc04b0300",
              "docs": []
            },
            {
              "name": "ReleaseCycle",
              "type": "LeasePeriod",
              "value": "0x201c0000",
              "docs": [
                " The time interval from 1:1 redeem-pool to bancor-pool to release."
              ]
            },
            {
              "name": "ReleaseRatio",
              "type": "Percent",
              "value": "0x32",
              "docs": [
                " The release ratio from the 1:1 redeem-pool to the bancor-pool per cycle.",
                "",
                " **NOTE: THE RELEASE RATIO MUST BE IN [0, 1].**"
              ]
            },
            {
              "name": "RemoveKeysLimit",
              "type": "u32",
              "value": "0xf4010000",
              "docs": []
            },
            {
              "name": "SlotLength",
              "type": "LeasePeriod",
              "value": "0x08000000",
              "docs": []
            },
            {
              "name": "XcmTransferOrigin",
              "type": "TransferOriginType",
              "value": "0x01",
              "docs": []
            }
          ],
          "errors": [
            {
              "name": "FirstSlotTooFarInFuture",
              "docs": [
                " The first slot needs to at least be less than 3 `max_value`."
              ]
            },
            {
              "name": "LastSlotBeforeFirstSlot",
              "docs": [
                " Last slot must be greater than first slot."
              ]
            },
            {
              "name": "LastSlotTooFarInFuture",
              "docs": [
                " The last slot cannot be more then 3 slots after the first slot."
              ]
            },
            {
              "name": "Overflow",
              "docs": [
                " There was an overflow."
              ]
            },
            {
              "name": "ContributionTooSmall",
              "docs": [
                " The contribution was below the minimum, `MinContribution`."
              ]
            },
            {
              "name": "ZeroContribution",
              "docs": [
                " The account doesn't have any contribution to the fund."
              ]
            },
            {
              "name": "InvalidParaId",
              "docs": [
                " Invalid fund index."
              ]
            },
            {
              "name": "InvalidFundStatus",
              "docs": [
                " Invalid fund status."
              ]
            },
            {
              "name": "InvalidContributionStatus",
              "docs": [
                " Invalid contribution status."
              ]
            },
            {
              "name": "CapExceeded",
              "docs": [
                " Contributions exceed maximum amount."
              ]
            },
            {
              "name": "UnauthorizedAccount",
              "docs": [
                " The origin of this call is invalid."
              ]
            },
            {
              "name": "FundAlreadyCreated",
              "docs": [
                " The fund has been registered."
              ]
            },
            {
              "name": "XcmFailed",
              "docs": [
                " Crosschain xcm failed"
              ]
            },
            {
              "name": "NotEnoughReservedAssetsToRefund",
              "docs": [
                " Don't have enough vsToken/vsBond to refund"
              ]
            },
            {
              "name": "NotEnoughBalanceInRefundPool",
              "docs": [
                " Don't have enough token to refund by users"
              ]
            },
            {
              "name": "NotEnoughBalanceToUnlock",
              "docs": [
                " Don't have enough vsToken/vsBond to unlock"
              ]
            },
            {
              "name": "VSBondExpired",
              "docs": [
                " The vsBond is expired now"
              ]
            },
            {
              "name": "UnRedeemableNow",
              "docs": [
                " The vsBond cannot be redeemed by now"
              ]
            },
            {
              "name": "NotEnoughFreeAssetsToRedeem",
              "docs": [
                " Dont have enough vsToken/vsBond to redeem"
              ]
            },
            {
              "name": "NotEnoughReservedAssetsToUnlockWhenRedeemFailed",
              "docs": [
                " Dont have enough vsToken/vsBond to unlock when redeem failed"
              ]
            },
            {
              "name": "NotEnoughBalanceInRedeemPool",
              "docs": [
                " Don't have enough token to redeem by users"
              ]
            },
            {
              "name": "InvalidRedeemStatus",
              "docs": [
                " Invalid redeem status"
              ]
            }
          ],
          "index": 105
        },
        {
          "name": "Bancor",
          "storage": {
            "prefix": "Bancor",
            "items": [
              {
                "name": "BancorPools",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "CurrencyId",
                    "value": "BancorPool",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": []
              },
              {
                "name": "BancorReserve",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Blake2_128Concat",
                    "key": "CurrencyId",
                    "value": "BalanceOf",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": [
                  " Reserve for releasing Tokens to the bancor pool"
                ]
              }
            ]
          },
          "calls": [
            {
              "name": "add_token_to_pool",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "token_amount",
                  "type": "BalanceOf"
                }
              ],
              "docs": []
            },
            {
              "name": "exchange_for_token",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "vstoken_amount",
                  "type": "BalanceOf"
                },
                {
                  "name": "token_out_min",
                  "type": "BalanceOf"
                }
              ],
              "docs": []
            },
            {
              "name": "exchange_for_vstoken",
              "args": [
                {
                  "name": "currency_id",
                  "type": "CurrencyId"
                },
                {
                  "name": "token_amount",
                  "type": "BalanceOf"
                },
                {
                  "name": "vstoken_out_min",
                  "type": "BalanceOf"
                }
              ],
              "docs": []
            }
          ],
          "events": [
            {
              "name": "TokenSold",
              "args": [
                "AccountIdOf",
                "CurrencyId",
                "BalanceOf",
                "BalanceOf"
              ],
              "docs": [
                " Token has been sold.",
                "",
                " [buyer, currencyId, token_sold, vsToken_paid]"
              ]
            },
            {
              "name": "VSTokenSold",
              "args": [
                "AccountIdOf",
                "CurrencyId",
                "BalanceOf",
                "BalanceOf"
              ],
              "docs": [
                " [buyer, currencyId, vsToken_sold, Token_paid]"
              ]
            }
          ],
          "constants": [
            {
              "name": "InterventionPercentage",
              "type": "Percent",
              "value": "0x4b",
              "docs": []
            },
            {
              "name": "DailyReleasePercentage",
              "type": "Percent",
              "value": "0x05",
              "docs": []
            }
          ],
          "errors": [
            {
              "name": "NotEnoughBalance",
              "docs": []
            },
            {
              "name": "CurrencyIdNotExist",
              "docs": []
            },
            {
              "name": "AmountNotGreaterThanZero",
              "docs": []
            },
            {
              "name": "BancorPoolNotExist",
              "docs": []
            },
            {
              "name": "ConversionError",
              "docs": []
            },
            {
              "name": "TokenSupplyNotEnough",
              "docs": []
            },
            {
              "name": "VSTokenSupplyNotEnough",
              "docs": []
            },
            {
              "name": "PriceNotQualified",
              "docs": []
            },
            {
              "name": "CalculationOverflow",
              "docs": []
            },
            {
              "name": "NotSupportTokenType",
              "docs": []
            }
          ],
          "index": 106
        },
        {
          "name": "VSBondAuction",
          "storage": {
            "prefix": "VSBondAuction",
            "items": [
              {
                "name": "NextOrderId",
                "modifier": "Default",
                "type": {
                  "plain": "OrderId"
                },
                "fallback": "0x0000000000000000",
                "docs": []
              },
              {
                "name": "InTradeOrderIds",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountIdOf",
                    "value": "BTreeSet<OrderId>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": []
              },
              {
                "name": "RevokedOrderIds",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountIdOf",
                    "value": "BTreeSet<OrderId>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": []
              },
              {
                "name": "ClinchdOrderIds",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "AccountIdOf",
                    "value": "BTreeSet<OrderId>",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": []
              },
              {
                "name": "TotalOrderInfos",
                "modifier": "Optional",
                "type": {
                  "map": {
                    "hasher": "Twox64Concat",
                    "key": "OrderId",
                    "value": "OrderInfo",
                    "linked": false
                  }
                },
                "fallback": "0x00",
                "docs": []
              }
            ]
          },
          "calls": [
            {
              "name": "create_order",
              "args": [
                {
                  "name": "index",
                  "type": "Compact<ParaId>"
                },
                {
                  "name": "first_slot",
                  "type": "Compact<LeasePeriodOf>"
                },
                {
                  "name": "last_slot",
                  "type": "Compact<LeasePeriodOf>"
                },
                {
                  "name": "supply",
                  "type": "Compact<BalanceOf>"
                },
                {
                  "name": "unit_price",
                  "type": "U64F64"
                }
              ],
              "docs": []
            },
            {
              "name": "revoke_order",
              "args": [
                {
                  "name": "order_id",
                  "type": "Compact<OrderId>"
                }
              ],
              "docs": []
            },
            {
              "name": "clinch_order",
              "args": [
                {
                  "name": "order_id",
                  "type": "Compact<OrderId>"
                }
              ],
              "docs": []
            },
            {
              "name": "partial_clinch_order",
              "args": [
                {
                  "name": "order_id",
                  "type": "Compact<OrderId>"
                },
                {
                  "name": "quantity",
                  "type": "Compact<BalanceOf>"
                }
              ],
              "docs": []
            }
          ],
          "events": [
            {
              "name": "OrderCreated",
              "args": [
                "OrderId",
                "OrderInfo"
              ],
              "docs": [
                " The order has been created.",
                "",
                " [order_id, order_info]"
              ]
            },
            {
              "name": "OrderRevoked",
              "args": [
                "OrderId",
                "AccountIdOf"
              ],
              "docs": [
                " The order has been revoked.",
                "",
                " [order_id_revoked, order_owner]"
              ]
            },
            {
              "name": "OrderClinchd",
              "args": [
                "OrderId",
                "AccountIdOf",
                "AccountIdOf",
                "BalanceOf"
              ],
              "docs": [
                " The order has been clinched.",
                "",
                " [order_id_clinched, order_owner, order_buyer, quantity]"
              ]
            }
          ],
          "constants": [
            {
              "name": "InvoicingCurrency",
              "type": "CurrencyId",
              "value": "0x0004",
              "docs": [
                " The currency type that buyer to pay"
              ]
            },
            {
              "name": "MaximumOrderInTrade",
              "type": "u32",
              "value": "0x05000000",
              "docs": [
                " The amount of orders in-trade that user can hold"
              ]
            },
            {
              "name": "MinimumSupply",
              "type": "BalanceOf",
              "value": "0x00000000000000000000000000000000",
              "docs": [
                " The sale quantity needs to be greater than `MinimumSupply` to create an order"
              ]
            }
          ],
          "errors": [
            {
              "name": "NotEnoughSupply",
              "docs": []
            },
            {
              "name": "NotFindOrderInfo",
              "docs": []
            },
            {
              "name": "NotEnoughBalanceToUnreserve",
              "docs": []
            },
            {
              "name": "NotEnoughBalanceToReserve",
              "docs": []
            },
            {
              "name": "CantPayThePrice",
              "docs": []
            },
            {
              "name": "ForbidRevokeOrderNotInTrade",
              "docs": []
            },
            {
              "name": "ForbidRevokeOrderWithoutOwnership",
              "docs": []
            },
            {
              "name": "ForbidClinchOrderNotInTrade",
              "docs": []
            },
            {
              "name": "ForbidClinchOrderWithinOwnership",
              "docs": []
            },
            {
              "name": "ExceedMaximumOrderInTrade",
              "docs": []
            },
            {
              "name": "Overflow",
              "docs": []
            },
            {
              "name": "Unexpected",
              "docs": []
            }
          ],
          "index": 107
        }
      ],
      "extrinsic": {
        "version": 4,
        "signedExtensions": [
          "CheckSpecVersion",
          "CheckGenesis",
          "CheckMortality",
          "CheckNonce",
          "CheckWeight",
          "ChargeTransactionPayment"
        ]
      }
    }
  }
}
