diff --git a/.github/workflows/build-readme.yml b/.github/workflows/build-readme.yml deleted file mode 100644 index e689914..0000000 --- a/.github/workflows/build-readme.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: build adocs - -on: - push: - paths: - - '**.adoc' - -jobs: - adoc_to_markdown: - runs-on: ubuntu-latest - name: Convert adoc to markdown - steps: - - uses: actions/checkout@v2 - - name: Get build container - id: adocbuild - uses: chevdor/asciidoctor-action@master - with: - program: "asciidoctor -b docbook -a leveloffset=+1 -o - README_src.adoc | pandoc --markdown-headings=atx --wrap=preserve -t markdown_strict -f docbook - > README.md" - - name: Print execution time - run: echo "Time ${{ steps.adocbuild.outputs.time }}" - - name: Deploy docs to ghpages - uses: peaceiris/actions-gh-pages@v3 - with: - deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} - publish_branch: gh-pages - publish_dir: ./ diff --git a/.github/workflows/quick-check.yml b/.github/workflows/quick-check.yml index c3aacd0..f482e00 100644 --- a/.github/workflows/quick-check.yml +++ b/.github/workflows/quick-check.yml @@ -3,7 +3,9 @@ name: Quick check on: - push + push: + tags-ignore: + - v* jobs: quick_check: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..feaf366 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,110 @@ +name: Release + +on: + push: + tags: + - "v*" + +jobs: + linux: + env: + TARGET_DIR: target/release + + runs-on: ubuntu-latest + steps: + - name: Install latest nightly + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + override: true + components: rustfmt, clippy + - uses: actions/checkout@v2 + - name: Install cargo deb + uses: actions-rs/cargo@v1 + with: + command: install + args: cargo-deb + + - name: Build debian package + shell: bash + run: | + cargo deb -p tera-cli -o "tera-cli_linux_amd64.deb" + + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: linux + path: "tera-cli_linux_amd64.deb" + + create_draft: + needs: ["linux"] + name: Create Draft + runs-on: ubuntu-latest + outputs: + release_url: ${{ steps.create-release.outputs.html_url }} + asset_upload_url: ${{ steps.create-release.outputs.upload_url }} + steps: + - uses: actions/checkout@v2 + - name: Get Release Version + run: | + echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + echo "SHORT_SHA=${GITHUB_SHA::8}" >> $GITHUB_ENV + - uses: actions/download-artifact@v2 + + - name: Install tera v0.1.0 + run: | + URL=https://github.com/chevdor/tera-cli/releases/download/v0.1.0-ae9bc49c/tera-cli_linux_amd64.deb + wget $URL + sudo dpkg -i tera-cli_linux_amd64.deb + tera --version + + - name: Generate changelog + id: change_log + run: | + LAST_TAG=$(git describe --tags --abbrev=0) + JSON=$(git log $LAST_TAG..HEAD \ + --pretty=format:'{ "commit": "%H", "short_sha": "%h", "author": "%an", "date": "%ad", "message": "%s"},' \ + $@ | \ + perl -pe 'BEGIN{print "{ \"since\": \"'${LAST_TAG}'\", \"commits\": ["}; END{print "]}"}' | \ + perl -pe 's/},]/}]/') + CHANGELOG=$(echo $JSON | tera --template templates/changelog.md --stdin) + echo "::set-output name=changes::$CHANGELOG" + + - name: Render release notes + run: | + export DEBIAN_URL="https://github.com/chevdor/tera-cli/releases/download/${{ env.RELEASE_VERSION }}/linux/tera-cli_linux_amd64.deb" + export CHANGELOG="${{ steps.change_log.outputs.changes }}" + tera --env --env-only --template templates/release.md > RELEASE_NOTES.md + + - name: Create Release + id: create-release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.RELEASE_VERSION }} + release_name: Tera ${{ env.RELEASE_VERSION }} (${{ env.SHORT_SHA }}) + body_path: ./RELEASE_NOTES.md + draft: false + + publish-binaries: + runs-on: ubuntu-latest + needs: ["create_draft"] + steps: + - uses: actions/checkout@v2 + - name: Get Release Version + run: | + echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + echo "SHORT_SHA=${GITHUB_SHA::8}" >> $GITHUB_ENV + + - uses: actions/download-artifact@v2 + + - name: Upload binaries + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create_draft.outputs.asset_upload_url }} + asset_path: "linux/tera-cli_linux_amd64.deb" + asset_name: "tera-cli_linux_amd64.deb" + asset_content_type: application/vnd.debian.binary-package diff --git a/Cargo.lock b/Cargo.lock index 83d203a..a55b159 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -213,6 +213,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +[[package]] +name = "float-cmp" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4" +dependencies = [ + "num-traits", +] + [[package]] name = "fnv" version = "1.0.7" @@ -372,6 +381,12 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" +[[package]] +name = "normalize-line-endings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" + [[package]] name = "num-integer" version = "0.1.44" @@ -480,7 +495,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df" dependencies = [ "difference", + "float-cmp", + "normalize-line-endings", "predicates-core", + "regex", ] [[package]] @@ -716,6 +734,7 @@ dependencies = [ "clap", "env_logger", "log", + "predicates", "serde", "serde_json", "serde_yaml", diff --git a/Cargo.toml b/Cargo.toml index 9c29b9a..a42009c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,8 +3,9 @@ authors = ["chevdor "] edition = "2018" name = "tera-cli" version = "0.1.0" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +description = "A command line utility written in Rust to render templates from json|toml|yaml && ENV, using the tera templating engine" +readme = "README.md" +license = "MIT" [dependencies] clap = "3.0.0-beta.2" @@ -18,13 +19,21 @@ toml = {version = "0.5.8", optional = false} [dev-dependencies] assert_cmd = "1.0.5" - -# [features] -# default = ["with_json"] -# with_json = [] -# with_toml = ["toml"] -# with_yaml = ["serde_yaml"] +predicates = "1.0.8" [[bin]] name = "tera" path = "src/main.rs" + +[package.metadata.deb] +assets = [ + ["target/release/tera", "usr/bin/", "755"], +] +copyright = "2021, Wilfried Kopp aka. Chevdor " +depends = "$auto" +extended-description = """\ +tera-ci offers powerful features related to your environment variables, allowing you to control the output **both** from the context data you pass but also from the ENV variables set on your system.""" +license-file = ["LICENSE", "0"] +maintainer = "Wilfried Kopp aka. Chevdor " +priority = "optional" +section = "utility" diff --git a/Formula/README.adoc b/Formula/README.adoc new file mode 100644 index 0000000..026868c --- /dev/null +++ b/Formula/README.adoc @@ -0,0 +1,9 @@ +You may test your template/data with: + + c watch -i Formula/tera.rb -s "tera -t Formula/template.tera Formula/data.yaml -o Formula/tera.rb" + +and render with: + + tera -t Formula/template.tera Formula/data.yaml -o Formula/tera.rb + +NOTE: The template covers a few default values so you don't need to pass everything. diff --git a/Formula/data.yaml b/Formula/data.yaml new file mode 100644 index 0000000..3990175 --- /dev/null +++ b/Formula/data.yaml @@ -0,0 +1,7 @@ +name: Tera +site: https://github.com +repo: chevdor/tera-cli +archive: "{{ name }}-mac-v1.2.3.tar.gz" +description: A command line utility written in Rust to render templates from json|toml|yaml && ENV, using the tera templating engine +version: 1.2.3 +sha256: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b diff --git a/Formula/tera.rb b/Formula/tera.rb new file mode 100644 index 0000000..c806764 --- /dev/null +++ b/Formula/tera.rb @@ -0,0 +1,11 @@ +class Tera < Formula + desc "A command line utility written in Rust to render templates using the tera templating engine" + homepage "https://github.com/chevdor/tera-cli" + url "https://github.com/chevdor/tera-cli/releases/download/v1.2.3/{{ name }}-mac-v1.2.3.tar.gz.tar.gz " + sha256 "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + version "1.2.3" + + def install + bin.install "tera" + end +end diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1ae744f --- /dev/null +++ b/LICENSE @@ -0,0 +1,7 @@ +Copyright 2021 - Wilfried Kopp aka. Chevdor + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 659a958..c173be8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,16 @@ -# Tera cli +# tera-cli -[tera](https://github.com/Keats/tera) is a template engine written in Rust and inspired by Jinja2. It allows merging some data called `context data` into a template and produces a new output. +## Intro -This project is a command line for the [tera template engine](https://github.com/Keats/tera). This project is called `tera-cli` but the command installed on your system is simply `tera`. +![tera cli logo 256](resources/logo/tera-cli-logo_256.png) + +[tera](https://github.com/Keats/tera) is a template engine written in Rust and inspired by Jinja2. It allows merging some data called `context data` into a template and produces a new output. This project, `tera-cli`, is a command line for the [tera template engine](https://github.com/Keats/tera). + +This project is called `tera-cli` but the command installed on your system is simply `tera`. + +`tera-ci` offers powerful features related to your environment variables, allowing you to control the output **both** from the context data you pass but also from the ENV variables set on your system. + +## Example Here is a basic example. For instance, you will pass data such as: @@ -30,13 +38,13 @@ as well as a template such as: -and a call such as `tera --template data/template.tmpl data/data.json` will produce: +and a call such as `tera --template template.tera data.json` will produce: .result Demo diff --git a/README_src.adoc b/README_src.adoc index 1883cd1..b940fce 100644 --- a/README_src.adoc +++ b/README_src.adoc @@ -1,28 +1,36 @@ -= Tera cli += tera-cli :toc: right :proj: tera-cli :cmd: cmd -:lib: +:lib: tera -https://github.com/Keats/tera[tera] is a template engine written in Rust and inspired by Jinja2. It allows merging some data called `context data` into a template and produces a new output. +== Intro +image::resources/logo/tera-cli-logo_256.png[width=256px, align=center] -This project is a command line for the https://github.com/Keats/tera[tera template engine]. This project is called `tera-cli` but the command installed on your system is simply `tera`. +https://github.com/Keats/tera[tera] is a template engine written in Rust and inspired by Jinja2. It allows merging some data called `context data` into a template and produces a new output. This project, `tera-cli`, is a command line for the https://github.com/Keats/tera[tera template engine]. + +This project is called `tera-cli` but the command installed on your system is simply `tera`. + +`tera-ci` offers powerful features related to your environment variables, allowing you to control the output **both** from the context data you pass but also from the ENV variables set on your system. + + +== Example Here is a basic example. For instance, you will pass data such as: ---- .data.json: -include::data/data.json[] +include::data/basic/basic.json[] ---- as well as a template such as: ---- .template.tmpl -include::data/template.tmpl[] +include::data/basic/basic.tera[] ---- -and a call such as `tera --template data/template.tmpl data/data.json` will produce: +and a call such as `tera --template template.tera data.json` will produce: ---- .result Demo diff --git a/data/data.json b/data/basic/basic.json similarity index 100% rename from data/data.json rename to data/basic/basic.json diff --git a/data/template.tmpl b/data/basic/basic.tera similarity index 80% rename from data/template.tmpl rename to data/basic/basic.tera index b40c948..12fff51 100644 --- a/data/template.tmpl +++ b/data/basic/basic.tera @@ -2,7 +2,7 @@
    {% for user in users -%} -
  • {{ user.username }} +
  • {{ user.username }} {{ user.username }} likes {% for color in user.fav_colors -%}{{ color }} {% endfor %}
  • {% endfor %} diff --git a/data/data.toml b/data/basic/basic.toml similarity index 68% rename from data/data.toml rename to data/basic/basic.toml index f8fd747..0f6f19b 100644 --- a/data/data.toml +++ b/data/basic/basic.toml @@ -3,7 +3,9 @@ title = "Demo" [[users]] username = "Alice" url = "http://example.org/alice" +fav_colors = ["red", "green", "yellow"] [[users]] username = "Bob" url = "http://example.org/bob" +fav_colors = ["orange"] diff --git a/data/data.yaml b/data/basic/basic.yaml similarity index 60% rename from data/data.yaml rename to data/basic/basic.yaml index 9707740..17306a6 100644 --- a/data/data.yaml +++ b/data/basic/basic.yaml @@ -2,6 +2,12 @@ title: "Demo" users: - username: "Alice" url: "http://example.org/alice" + fav_colors: + - red + - green + - yellow - username: "Bob" url: "http://example.org/bob" + fav_colors: + - orange diff --git a/data/cargo-toml/cargo-toml.tera b/data/cargo-toml/cargo-toml.tera new file mode 100644 index 0000000..b92a329 --- /dev/null +++ b/data/cargo-toml/cargo-toml.tera @@ -0,0 +1,23 @@ +# {{ package.name }} from {{ package.authors.0 }} + +This document is automatically generated from the Cargo.toml of the project. + +## Package information + +Here are some details about the package: + +{% for k, v in package -%} +- {{k}}: {{v}} +{% endfor%} + +## Binaries + +{% for o in bin -%} +- {{o.name}}: {{o.path}} +{% endfor%} + +## Dependencies + +{% for k, v in dependencies -%} +- {{k}}: {{v}} +{% endfor%} diff --git a/data/env-basic/env-count.tera b/data/env-basic/env-count.tera new file mode 100644 index 0000000..b2a860f --- /dev/null +++ b/data/env-basic/env-count.tera @@ -0,0 +1,10 @@ +{% if env | length > 0%} +LOOKING GOOD, we can see {{ env | length }} ENV variables, here is the list: + +{% for key, value in env -%} +- {{ key }}={{ value }} +{% endfor %} + +{% else %} +Uh Oh Nooo ! +{% endif %} diff --git a/data/env.tmpl b/data/env-basic/env-sample.tera similarity index 100% rename from data/env.tmpl rename to data/env-basic/env-sample.tera diff --git a/data/env-key.tmpl b/data/env-key/env-key.tera similarity index 100% rename from data/env-key.tmpl rename to data/env-key/env-key.tera diff --git a/data/metadata_v12_md.j2 b/data/polkadot-metadata/metdata.tera similarity index 57% rename from data/metadata_v12_md.j2 rename to data/polkadot-metadata/metdata.tera index 5c7e5c4..f5332dd 100644 --- a/data/metadata_v12_md.j2 +++ b/data/polkadot-metadata/metdata.tera @@ -5,22 +5,45 @@ {%- if V12 -%} {%- set version = "V12" -%} +{%- set root = V12 -%} +{%- endif -%} + +{%- if V13 -%} +{%- set version = "V13" -%} +{%- set root = V13 -%} +{%- endif -%} + +{%- if not DOC -%} +{%- set DOC = "false" -%} {%- endif -%} # Metadata version {{ version }} This document has been generated using tera and tera-cli from https://github.com/chevdor/tera. -Numbrer of modules: {{ V12.modules | length }} +Numbrer of modules: {{ root.modules | length }} + +{% for module in root.modules | sort(attribute="index") -%} -{% for module in V12.modules | sort(attribute="index") -%} +---- ## {{module.index}}: {{module.name}} -{%- if module.calls -%} + +{%- if module.calls %} +
    +Calls: {{ module.calls | length }} 🤙🏼 {% for c in module.calls %} -- {{c.name}} -{%- endfor %} +### {{loop.index -1 }}: {{c.name}} + +{% if DOC == "true" -%} +{{c.documentation}} +{%- endif %} + +{% endfor %} +
    + {% else %} no call {%- endif %} {% endfor %} + diff --git a/data/polkadot-metadata/v12.json b/data/polkadot-metadata/v12.json new file mode 100644 index 0000000..84e87dc --- /dev/null +++ b/data/polkadot-metadata/v12.json @@ -0,0 +1,12441 @@ +{ + "V12": { + "modules": [ + { + "name": "System", + "storage": { + "prefix": "System", + "entries": [ + { + "name": "Account", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::AccountId", + "value": "AccountInfo", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The full account information for a particular account ID." + ] + }, + { + "name": "ExtrinsicCount", + "modifier": "Optional", + "ty": { + "Plain": "u32" + }, + "default": [ + 0 + ], + "documentation": [ + " Total extrinsics count for the current block." + ] + }, + { + "name": "BlockWeight", + "modifier": "Default", + "ty": { + "Plain": "ConsumedWeight" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The current weight for the block." + ] + }, + { + "name": "AllExtrinsicsLen", + "modifier": "Optional", + "ty": { + "Plain": "u32" + }, + "default": [ + 0 + ], + "documentation": [ + " Total length (in bytes) for all extrinsics put together, for the current block." + ] + }, + { + "name": "BlockHash", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::BlockNumber", + "value": "T::Hash", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Map of block numbers to block hashes." + ] + }, + { + "name": "ExtrinsicData", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "u32", + "value": "Vec", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Extrinsics data for the current block (maps an extrinsic's index to its data)." + ] + }, + { + "name": "Number", + "modifier": "Default", + "ty": { + "Plain": "T::BlockNumber" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The current block number being processed. Set by `execute_block`." + ] + }, + { + "name": "ParentHash", + "modifier": "Default", + "ty": { + "Plain": "T::Hash" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Hash of the previous block." + ] + }, + { + "name": "Digest", + "modifier": "Default", + "ty": { + "Plain": "DigestOf" + }, + "default": [ + 0 + ], + "documentation": [ + " Digest of the current block, also part of the block header." + ] + }, + { + "name": "Events", + "modifier": "Default", + "ty": { + "Plain": "Vec>" + }, + "default": [ + 0 + ], + "documentation": [ + " Events deposited for the current block." + ] + }, + { + "name": "EventCount", + "modifier": "Default", + "ty": { + "Plain": "EventIndex" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The number of events in the `Events` list." + ] + }, + { + "name": "EventTopics", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::Hash", + "value": "Vec<(T::BlockNumber, EventIndex)>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Mapping between a topic (represented by T::Hash) and a vector of indexes", + " of events in the `>` 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", + "ty": { + "Plain": "LastRuntimeUpgradeInfo" + }, + "default": [ + 0 + ], + "documentation": [ + " Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened." + ] + }, + { + "name": "UpgradedToU32RefCount", + "modifier": "Default", + "ty": { + "Plain": "bool" + }, + "default": [ + 0 + ], + "documentation": [ + " True if we have upgraded so that `type RefCount` is `u32`. False (default) if not." + ] + }, + { + "name": "UpgradedToTripleRefCount", + "modifier": "Default", + "ty": { + "Plain": "bool" + }, + "default": [ + 0 + ], + "documentation": [ + " True if we have upgraded so that AccountInfo contains three types of `RefCount`. False", + " (default) if not." + ] + }, + { + "name": "ExecutionPhase", + "modifier": "Optional", + "ty": { + "Plain": "Phase" + }, + "default": [ + 0 + ], + "documentation": [ + " The execution phase of the block." + ] + } + ] + }, + "calls": [ + { + "name": "fill_block", + "arguments": [ + { + "name": "_ratio", + "ty": "Perbill" + } + ], + "documentation": [ + " A dispatch that will fill the block weight up to the given ratio." + ] + }, + { + "name": "remark", + "arguments": [ + { + "name": "_remark", + "ty": "Vec" + } + ], + "documentation": [ + " Make some on-chain remark.", + "", + " # ", + " - `O(1)`", + " # " + ] + }, + { + "name": "set_heap_pages", + "arguments": [ + { + "name": "pages", + "ty": "u64" + } + ], + "documentation": [ + " Set the number of pages in the WebAssembly environment's heap.", + "", + " # ", + " - `O(1)`", + " - 1 storage write.", + " - Base Weight: 1.405 µs", + " - 1 write to HEAP_PAGES", + " # " + ] + }, + { + "name": "set_code", + "arguments": [ + { + "name": "code", + "ty": "Vec" + } + ], + "documentation": [ + " Set the new runtime code.", + "", + " # ", + " - `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.", + " # " + ] + }, + { + "name": "set_code_without_checks", + "arguments": [ + { + "name": "code", + "ty": "Vec" + } + ], + "documentation": [ + " Set the new runtime code without doing any checks of the given `code`.", + "", + " # ", + " - `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.", + " # " + ] + }, + { + "name": "set_changes_trie_config", + "arguments": [ + { + "name": "changes_trie_config", + "ty": "Option" + } + ], + "documentation": [ + " Set the new changes trie configuration.", + "", + " # ", + " - `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", + " # " + ] + }, + { + "name": "set_storage", + "arguments": [ + { + "name": "items", + "ty": "Vec" + } + ], + "documentation": [ + " Set some items of storage.", + "", + " # ", + " - `O(I)` where `I` length of `items`", + " - `I` storage writes (`O(1)`).", + " - Base Weight: 0.568 * i µs", + " - Writes: Number of items", + " # " + ] + }, + { + "name": "kill_storage", + "arguments": [ + { + "name": "keys", + "ty": "Vec" + } + ], + "documentation": [ + " Kill some items from storage.", + "", + " # ", + " - `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", + " # " + ] + }, + { + "name": "kill_prefix", + "arguments": [ + { + "name": "prefix", + "ty": "Key" + }, + { + "name": "_subkeys", + "ty": "u32" + } + ], + "documentation": [ + " Kill all storage items with a key that starts with the given prefix.", + "", + " **NOTE:** We rely on the Root origin to provide us the number of subkeys under", + " the prefix we are removing to accurately calculate the weight of this function.", + "", + " # ", + " - `O(P)` where `P` amount of keys with prefix `prefix`", + " - `P` storage deletions.", + " - Base Weight: 0.834 * P µs", + " - Writes: Number of subkeys + 1", + " # " + ] + }, + { + "name": "remark_with_event", + "arguments": [ + { + "name": "remark", + "ty": "Vec" + } + ], + "documentation": [ + " Make some on-chain remark and emit event.", + "", + " # ", + " - `O(b)` where b is the length of the remark.", + " - 1 event.", + " # " + ] + } + ], + "event": [ + { + "name": "ExtrinsicSuccess", + "arguments": [ + "DispatchInfo" + ], + "documentation": [ + " An extrinsic completed successfully. \\[info\\]" + ] + }, + { + "name": "ExtrinsicFailed", + "arguments": [ + "DispatchError", + "DispatchInfo" + ], + "documentation": [ + " An extrinsic failed. \\[error, info\\]" + ] + }, + { + "name": "CodeUpdated", + "arguments": [], + "documentation": [ + " `:code` was updated." + ] + }, + { + "name": "NewAccount", + "arguments": [ + "AccountId" + ], + "documentation": [ + " A new \\[account\\] was created." + ] + }, + { + "name": "KilledAccount", + "arguments": [ + "AccountId" + ], + "documentation": [ + " An \\[account\\] was reaped." + ] + }, + { + "name": "Remarked", + "arguments": [ + "AccountId", + "Hash" + ], + "documentation": [ + " On on-chain remark happened. \\[origin, remark_hash\\]" + ] + } + ], + "constants": [ + { + "name": "BlockWeights", + "ty": "limits::BlockWeights", + "value": [ + 0, + 242, + 5, + 42, + 1, + 0, + 0, + 0, + 0, + 32, + 74, + 169, + 209, + 1, + 0, + 0, + 64, + 89, + 115, + 7, + 0, + 0, + 0, + 0, + 1, + 192, + 118, + 108, + 143, + 88, + 1, + 0, + 0, + 1, + 0, + 152, + 247, + 62, + 93, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64, + 89, + 115, + 7, + 0, + 0, + 0, + 0, + 1, + 192, + 254, + 190, + 249, + 204, + 1, + 0, + 0, + 1, + 0, + 32, + 74, + 169, + 209, + 1, + 0, + 0, + 1, + 0, + 136, + 82, + 106, + 116, + 0, + 0, + 0, + 64, + 89, + 115, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Block & extrinsics weights: base values and limits." + ] + }, + { + "name": "BlockLength", + "ty": "limits::BlockLength", + "value": [ + 0, + 0, + 60, + 0, + 0, + 0, + 80, + 0, + 0, + 0, + 80, + 0 + ], + "documentation": [ + " The maximum length of a block (in bytes)." + ] + }, + { + "name": "BlockHashCount", + "ty": "T::BlockNumber", + "value": [ + 96, + 9, + 0, + 0 + ], + "documentation": [ + " Maximum number of block number to block hash mappings to keep (oldest pruned first)." + ] + }, + { + "name": "DbWeight", + "ty": "RuntimeDbWeight", + "value": [ + 64, + 120, + 125, + 1, + 0, + 0, + 0, + 0, + 0, + 225, + 245, + 5, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The weight of runtime database operations the runtime can invoke." + ] + }, + { + "name": "Version", + "ty": "RuntimeVersion", + "value": [ + 32, + 112, + 111, + 108, + 107, + 97, + 100, + 111, + 116, + 60, + 112, + 97, + 114, + 105, + 116, + 121, + 45, + 112, + 111, + 108, + 107, + 97, + 100, + 111, + 116, + 0, + 0, + 0, + 0, + 30, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48, + 223, + 106, + 203, + 104, + 153, + 7, + 96, + 155, + 3, + 0, + 0, + 0, + 55, + 227, + 151, + 252, + 124, + 145, + 245, + 228, + 1, + 0, + 0, + 0, + 64, + 254, + 58, + 212, + 1, + 248, + 149, + 154, + 4, + 0, + 0, + 0, + 210, + 188, + 152, + 151, + 238, + 208, + 143, + 21, + 2, + 0, + 0, + 0, + 247, + 139, + 39, + 139, + 229, + 63, + 69, + 76, + 2, + 0, + 0, + 0, + 175, + 44, + 2, + 151, + 162, + 62, + 109, + 61, + 1, + 0, + 0, + 0, + 237, + 153, + 197, + 172, + 178, + 94, + 237, + 245, + 2, + 0, + 0, + 0, + 203, + 202, + 37, + 227, + 159, + 20, + 35, + 135, + 2, + 0, + 0, + 0, + 104, + 122, + 212, + 74, + 211, + 127, + 3, + 194, + 1, + 0, + 0, + 0, + 171, + 60, + 5, + 114, + 41, + 31, + 235, + 139, + 1, + 0, + 0, + 0, + 188, + 157, + 137, + 144, + 79, + 91, + 146, + 63, + 1, + 0, + 0, + 0, + 55, + 200, + 187, + 19, + 80, + 169, + 162, + 168, + 1, + 0, + 0, + 0, + 7, + 0, + 0, + 0 + ], + "documentation": [ + " Get the chain's current version." + ] + }, + { + "name": "SS58Prefix", + "ty": "u8", + "value": [ + 0 + ], + "documentation": [ + " The designated SS85 prefix of this chain.", + "", + " This replaces the \"ss58Format\" property declared in the chain spec. Reason is", + " that the runtime should know about the prefix in order to make use of it as", + " an identifier of the chain." + ] + } + ], + "errors": [ + { + "name": "InvalidSpecName", + "documentation": [ + " The name of specification does not match between the current runtime", + " and the new runtime." + ] + }, + { + "name": "SpecVersionNeedsToIncrease", + "documentation": [ + " The specification version is not allowed to decrease between the current runtime", + " and the new runtime." + ] + }, + { + "name": "FailedToExtractRuntimeVersion", + "documentation": [ + " Failed to extract the runtime version from the new runtime.", + "", + " Either calling `Core_version` or decoding `RuntimeVersion` failed." + ] + }, + { + "name": "NonDefaultComposite", + "documentation": [ + " Suicide called when the account has non-default composite data." + ] + }, + { + "name": "NonZeroRefCount", + "documentation": [ + " There is a non-zero reference count preventing the account from being purged." + ] + } + ], + "index": 0 + }, + { + "name": "RandomnessCollectiveFlip", + "storage": { + "prefix": "RandomnessCollectiveFlip", + "entries": [ + { + "name": "RandomMaterial", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " Series of block headers from the last 81 blocks that acts as random seed material. This", + " is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of", + " the oldest hash." + ] + } + ] + }, + "calls": null, + "event": null, + "constants": [], + "errors": [], + "index": 31 + }, + { + "name": "Scheduler", + "storage": { + "prefix": "Scheduler", + "entries": [ + { + "name": "Agenda", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::BlockNumber", + "value": "Vec::Call, T::BlockNumber, T::\nPalletsOrigin, T::AccountId>>>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Items to be executed, indexed by the block number that they should be executed on." + ] + }, + { + "name": "Lookup", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "Vec", + "value": "TaskAddress", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Lookup from identity to the block number and index of the task." + ] + }, + { + "name": "StorageVersion", + "modifier": "Default", + "ty": { + "Plain": "Releases" + }, + "default": [ + 0 + ], + "documentation": [ + " Storage version of the pallet.", + "", + " New networks start with last version." + ] + } + ] + }, + "calls": [ + { + "name": "schedule", + "arguments": [ + { + "name": "when", + "ty": "T::BlockNumber" + }, + { + "name": "maybe_periodic", + "ty": "Option>" + }, + { + "name": "priority", + "ty": "schedule::Priority" + }, + { + "name": "call", + "ty": "Box<::Call>" + } + ], + "documentation": [ + " Anonymously schedule a task.", + "", + " # ", + " - 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", + " # " + ] + }, + { + "name": "cancel", + "arguments": [ + { + "name": "when", + "ty": "T::BlockNumber" + }, + { + "name": "index", + "ty": "u32" + } + ], + "documentation": [ + " Cancel an anonymously scheduled task.", + "", + " # ", + " - 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", + " # " + ] + }, + { + "name": "schedule_named", + "arguments": [ + { + "name": "id", + "ty": "Vec" + }, + { + "name": "when", + "ty": "T::BlockNumber" + }, + { + "name": "maybe_periodic", + "ty": "Option>" + }, + { + "name": "priority", + "ty": "schedule::Priority" + }, + { + "name": "call", + "ty": "Box<::Call>" + } + ], + "documentation": [ + " Schedule a named task.", + "", + " # ", + " - 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", + " # " + ] + }, + { + "name": "cancel_named", + "arguments": [ + { + "name": "id", + "ty": "Vec" + } + ], + "documentation": [ + " Cancel a named scheduled task.", + "", + " # ", + " - 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", + " # " + ] + }, + { + "name": "schedule_after", + "arguments": [ + { + "name": "after", + "ty": "T::BlockNumber" + }, + { + "name": "maybe_periodic", + "ty": "Option>" + }, + { + "name": "priority", + "ty": "schedule::Priority" + }, + { + "name": "call", + "ty": "Box<::Call>" + } + ], + "documentation": [ + " Anonymously schedule a task after a delay.", + "", + " # ", + " Same as [`schedule`].", + " # " + ] + }, + { + "name": "schedule_named_after", + "arguments": [ + { + "name": "id", + "ty": "Vec" + }, + { + "name": "after", + "ty": "T::BlockNumber" + }, + { + "name": "maybe_periodic", + "ty": "Option>" + }, + { + "name": "priority", + "ty": "schedule::Priority" + }, + { + "name": "call", + "ty": "Box<::Call>" + } + ], + "documentation": [ + " Schedule a named task after a delay.", + "", + " # ", + " Same as [`schedule_named`].", + " # " + ] + } + ], + "event": [ + { + "name": "Scheduled", + "arguments": [ + "BlockNumber", + "u32" + ], + "documentation": [ + " Scheduled some task. \\[when, index\\]" + ] + }, + { + "name": "Canceled", + "arguments": [ + "BlockNumber", + "u32" + ], + "documentation": [ + " Canceled some task. \\[when, index\\]" + ] + }, + { + "name": "Dispatched", + "arguments": [ + "TaskAddress", + "Option>", + "DispatchResult" + ], + "documentation": [ + " Dispatched some task. \\[task, id, result\\]" + ] + } + ], + "constants": [], + "errors": [ + { + "name": "FailedToSchedule", + "documentation": [ + " Failed to schedule a call" + ] + }, + { + "name": "NotFound", + "documentation": [ + " Cannot find the scheduled call." + ] + }, + { + "name": "TargetBlockNumberInPast", + "documentation": [ + " Given target block number is in the past." + ] + }, + { + "name": "RescheduleNoChange", + "documentation": [ + " Reschedule failed because it does not change scheduled time." + ] + } + ], + "index": 1 + }, + { + "name": "Babe", + "storage": { + "prefix": "Babe", + "entries": [ + { + "name": "EpochIndex", + "modifier": "Default", + "ty": { + "Plain": "u64" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Current epoch index." + ] + }, + { + "name": "Authorities", + "modifier": "Default", + "ty": { + "Plain": "Vec<(AuthorityId, BabeAuthorityWeight)>" + }, + "default": [ + 0 + ], + "documentation": [ + " Current epoch authorities." + ] + }, + { + "name": "GenesisSlot", + "modifier": "Default", + "ty": { + "Plain": "Slot" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The slot at which the first epoch actually started. This is 0", + " until the first block of the chain." + ] + }, + { + "name": "CurrentSlot", + "modifier": "Default", + "ty": { + "Plain": "Slot" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Current slot number." + ] + }, + { + "name": "Randomness", + "modifier": "Default", + "ty": { + "Plain": "schnorrkel::Randomness" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The epoch randomness for the *current* epoch.", + "", + " # Security", + "", + " This MUST NOT be used for gambling, as it can be influenced by a", + " malicious validator in the short term. It MAY be used in many", + " cryptographic protocols, however, so long as one remembers that this", + " (like everything else on-chain) it is public. For example, it can be", + " used where a number is needed that cannot have been chosen by an", + " adversary, for purposes such as public-coin zero-knowledge proofs." + ] + }, + { + "name": "PendingEpochConfigChange", + "modifier": "Optional", + "ty": { + "Plain": "NextConfigDescriptor" + }, + "default": [ + 0 + ], + "documentation": [ + " Pending epoch configuration change that will be applied when the next epoch is enacted." + ] + }, + { + "name": "NextRandomness", + "modifier": "Default", + "ty": { + "Plain": "schnorrkel::Randomness" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Next epoch randomness." + ] + }, + { + "name": "NextAuthorities", + "modifier": "Default", + "ty": { + "Plain": "Vec<(AuthorityId, BabeAuthorityWeight)>" + }, + "default": [ + 0 + ], + "documentation": [ + " Next epoch authorities." + ] + }, + { + "name": "SegmentIndex", + "modifier": "Default", + "ty": { + "Plain": "u32" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Randomness under construction.", + "", + " We make a tradeoff between storage accesses and list length.", + " We store the under-construction randomness in segments of up to", + " `UNDER_CONSTRUCTION_SEGMENT_LENGTH`.", + "", + " Once a segment reaches this length, we begin the next one.", + " We reset all segments and return to `0` at the beginning of every", + " epoch." + ] + }, + { + "name": "UnderConstruction", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "u32", + "value": "Vec", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " TWOX-NOTE: `SegmentIndex` is an increasing integer, so this is okay." + ] + }, + { + "name": "Initialized", + "modifier": "Optional", + "ty": { + "Plain": "MaybeRandomness" + }, + "default": [ + 0 + ], + "documentation": [ + " Temporary value (cleared at block finalization) which is `Some`", + " if per-block initialization has already been called for current block." + ] + }, + { + "name": "AuthorVrfRandomness", + "modifier": "Default", + "ty": { + "Plain": "MaybeRandomness" + }, + "default": [ + 0 + ], + "documentation": [ + " Temporary value (cleared at block finalization) that includes the VRF output generated", + " at this block. This field should always be populated during block processing unless", + " secondary plain slots are enabled (which don't contain a VRF output)." + ] + }, + { + "name": "EpochStart", + "modifier": "Default", + "ty": { + "Plain": "(T::BlockNumber, T::BlockNumber)" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The block numbers when the last and current epoch have started, respectively `N-1` and", + " `N`.", + " NOTE: We track this is in order to annotate the block number when a given pool of", + " entropy was fixed (i.e. it was known to chain observers). Since epochs are defined in", + " slots, which may be skipped, the block numbers may not line up with the slot numbers." + ] + }, + { + "name": "Lateness", + "modifier": "Default", + "ty": { + "Plain": "T::BlockNumber" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " How late the current block is compared to its parent.", + "", + " This entry is populated as part of block execution and is cleaned up", + " on block finalization. Querying this storage entry outside of block", + " execution context should always yield zero." + ] + }, + { + "name": "EpochConfig", + "modifier": "Optional", + "ty": { + "Plain": "BabeEpochConfiguration" + }, + "default": [ + 0 + ], + "documentation": [ + " The configuration for the current epoch. Should never be `None` as it is initialized in genesis." + ] + }, + { + "name": "NextEpochConfig", + "modifier": "Optional", + "ty": { + "Plain": "BabeEpochConfiguration" + }, + "default": [ + 0 + ], + "documentation": [ + " The configuration for the next epoch, `None` if the config will not change", + " (you can fallback to `EpochConfig` instead in that case)." + ] + } + ] + }, + "calls": [ + { + "name": "report_equivocation", + "arguments": [ + { + "name": "equivocation_proof", + "ty": "EquivocationProof" + }, + { + "name": "key_owner_proof", + "ty": "T::KeyOwnerProof" + } + ], + "documentation": [ + " Report authority equivocation/misbehavior. This method will verify", + " the equivocation proof and validate the given key ownership proof", + " against the extracted offender. If both are valid, the offence will", + " be reported." + ] + }, + { + "name": "report_equivocation_unsigned", + "arguments": [ + { + "name": "equivocation_proof", + "ty": "EquivocationProof" + }, + { + "name": "key_owner_proof", + "ty": "T::KeyOwnerProof" + } + ], + "documentation": [ + " Report authority equivocation/misbehavior. This method will verify", + " the equivocation proof and validate the given key ownership proof", + " against the extracted offender. If both are valid, the offence will", + " be reported.", + " This extrinsic must be called unsigned and it is expected that only", + " block authors will call it (validated in `ValidateUnsigned`), as such", + " if the block author is defined it will be defined as the equivocation", + " reporter." + ] + }, + { + "name": "plan_config_change", + "arguments": [ + { + "name": "config", + "ty": "NextConfigDescriptor" + } + ], + "documentation": [ + " Plan an epoch config change. The epoch config change is recorded and will be enacted on", + " the next call to `enact_epoch_change`. The config will be activated one epoch after.", + " Multiple calls to this method will replace any existing planned config change that had", + " not been enacted yet." + ] + } + ], + "event": null, + "constants": [ + { + "name": "EpochDuration", + "ty": "u64", + "value": [ + 96, + 9, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount of time, in slots, that each epoch should last.", + " NOTE: Currently it is not possible to change the epoch duration after", + " the chain has started. Attempting to do so will brick block production." + ] + }, + { + "name": "ExpectedBlockTime", + "ty": "T::Moment", + "value": [ + 112, + 23, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The expected average block time at which BABE should be creating", + " blocks. Since BABE is probabilistic it is not trivial to figure out", + " what the expected average block time should be based on the slot", + " duration and the security parameter `c` (where `1 - c` represents", + " the probability of a slot being empty)." + ] + } + ], + "errors": [ + { + "name": "InvalidEquivocationProof", + "documentation": [ + " An equivocation proof provided as part of an equivocation report is invalid." + ] + }, + { + "name": "InvalidKeyOwnershipProof", + "documentation": [ + " A key ownership proof provided as part of an equivocation report is invalid." + ] + }, + { + "name": "DuplicateOffenceReport", + "documentation": [ + " A given equivocation report is valid but already previously reported." + ] + } + ], + "index": 2 + }, + { + "name": "Timestamp", + "storage": { + "prefix": "Timestamp", + "entries": [ + { + "name": "Now", + "modifier": "Default", + "ty": { + "Plain": "T::Moment" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Current time for the current block." + ] + }, + { + "name": "DidUpdate", + "modifier": "Default", + "ty": { + "Plain": "bool" + }, + "default": [ + 0 + ], + "documentation": [ + " Did the timestamp get updated in this block?" + ] + } + ] + }, + "calls": [ + { + "name": "set", + "arguments": [ + { + "name": "now", + "ty": "Compact" + } + ], + "documentation": [ + " Set the current time.", + "", + " This call should be invoked exactly once per block. It will panic at the finalization", + " phase, if this call hasn't been invoked by that time.", + "", + " The timestamp should be greater than the previous one by the amount specified by", + " `MinimumPeriod`.", + "", + " The dispatch origin for this call must be `Inherent`.", + "", + " # ", + " - `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)`.", + " # " + ] + } + ], + "event": null, + "constants": [ + { + "name": "MinimumPeriod", + "ty": "T::Moment", + "value": [ + 184, + 11, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The minimum period between blocks. Beware that this is different to the *expected* period", + " that the block production apparatus provides. Your chosen consensus system will generally", + " work with this to determine a sensible block time. e.g. For Aura, it will be double this", + " period on default settings." + ] + } + ], + "errors": [], + "index": 3 + }, + { + "name": "Indices", + "storage": { + "prefix": "Indices", + "entries": [ + { + "name": "Accounts", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::AccountIndex", + "value": "(T::AccountId, BalanceOf, bool)", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " The lookup from index to account." + ] + } + ] + }, + "calls": [ + { + "name": "claim", + "arguments": [ + { + "name": "index", + "ty": "T::AccountIndex" + } + ], + "documentation": [ + " Assign an previously unassigned index.", + "", + " Payment: `Deposit` is reserved from the sender account.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " - `index`: the index to be claimed. This must not be in use.", + "", + " Emits `IndexAssigned` if successful.", + "", + " # ", + " - `O(1)`.", + " - One storage mutation (codec `O(1)`).", + " - One reserve operation.", + " - One event.", + " -------------------", + " - DB Weight: 1 Read/Write (Accounts)", + " # " + ] + }, + { + "name": "transfer", + "arguments": [ + { + "name": "new", + "ty": "T::AccountId" + }, + { + "name": "index", + "ty": "T::AccountIndex" + } + ], + "documentation": [ + " Assign an index already owned by the sender to another account. The balance reservation", + " is effectively transferred to the new account.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " - `index`: the index to be re-assigned. This must be owned by the sender.", + " - `new`: the new owner of the index. This function is a no-op if it is equal to sender.", + "", + " Emits `IndexAssigned` if successful.", + "", + " # ", + " - `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)", + " # " + ] + }, + { + "name": "free", + "arguments": [ + { + "name": "index", + "ty": "T::AccountIndex" + } + ], + "documentation": [ + " Free up an index owned by the sender.", + "", + " Payment: Any previous deposit placed for the index is unreserved in the sender account.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must own the index.", + "", + " - `index`: the index to be freed. This must be owned by the sender.", + "", + " Emits `IndexFreed` if successful.", + "", + " # ", + " - `O(1)`.", + " - One storage mutation (codec `O(1)`).", + " - One reserve operation.", + " - One event.", + " -------------------", + " - DB Weight: 1 Read/Write (Accounts)", + " # " + ] + }, + { + "name": "force_transfer", + "arguments": [ + { + "name": "new", + "ty": "T::AccountId" + }, + { + "name": "index", + "ty": "T::AccountIndex" + }, + { + "name": "freeze", + "ty": "bool" + } + ], + "documentation": [ + " Force an index to an account. This doesn't require a deposit. If the index is already", + " held, then any deposit is reimbursed to its current owner.", + "", + " The dispatch origin for this call must be _Root_.", + "", + " - `index`: the index to be (re-)assigned.", + " - `new`: the new owner of the index. This function is a no-op if it is equal to sender.", + " - `freeze`: if set to `true`, will freeze the index so it cannot be transferred.", + "", + " Emits `IndexAssigned` if successful.", + "", + " # ", + " - `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)", + " # " + ] + }, + { + "name": "freeze", + "arguments": [ + { + "name": "index", + "ty": "T::AccountIndex" + } + ], + "documentation": [ + " Freeze an index so it will always point to the sender account. This consumes the deposit.", + "", + " The dispatch origin for this call must be _Signed_ and the signing account must have a", + " non-frozen account `index`.", + "", + " - `index`: the index to be frozen in place.", + "", + " Emits `IndexFrozen` if successful.", + "", + " # ", + " - `O(1)`.", + " - One storage mutation (codec `O(1)`).", + " - Up to one slash operation.", + " - One event.", + " -------------------", + " - DB Weight: 1 Read/Write (Accounts)", + " # " + ] + } + ], + "event": [ + { + "name": "IndexAssigned", + "arguments": [ + "AccountId", + "AccountIndex" + ], + "documentation": [ + " A account index was assigned. \\[index, who\\]" + ] + }, + { + "name": "IndexFreed", + "arguments": [ + "AccountIndex" + ], + "documentation": [ + " A account index has been freed up (unassigned). \\[index\\]" + ] + }, + { + "name": "IndexFrozen", + "arguments": [ + "AccountIndex", + "AccountId" + ], + "documentation": [ + " A account index has been frozen to its current account ID. \\[index, who\\]" + ] + } + ], + "constants": [ + { + "name": "Deposit", + "ty": "BalanceOf", + "value": [ + 0, + 232, + 118, + 72, + 23, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The deposit needed for reserving an index." + ] + } + ], + "errors": [], + "index": 4 + }, + { + "name": "Balances", + "storage": { + "prefix": "Balances", + "entries": [ + { + "name": "TotalIssuance", + "modifier": "Default", + "ty": { + "Plain": "T::Balance" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The total units issued in the system." + ] + }, + { + "name": "Account", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::AccountId", + "value": "AccountData", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The balance of an account.", + "", + " NOTE: This is only used in the case that this pallet is used to store balances." + ] + }, + { + "name": "Locks", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::AccountId", + "value": "Vec>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Any liquidity locks on some account balances.", + " NOTE: Should only be accessed when setting, changing and freeing a lock." + ] + }, + { + "name": "StorageVersion", + "modifier": "Default", + "ty": { + "Plain": "Releases" + }, + "default": [ + 0 + ], + "documentation": [ + " Storage version of the pallet.", + "", + " This is set to v2.0.0 for new networks." + ] + } + ] + }, + "calls": [ + { + "name": "transfer", + "arguments": [ + { + "name": "dest", + "ty": "::Source" + }, + { + "name": "value", + "ty": "Compact" + } + ], + "documentation": [ + " Transfer some liquid free balance to another account.", + "", + " `transfer` will set the `FreeBalance` of the sender and receiver.", + " It will decrease the total issuance of the system by the `TransferFee`.", + " If the sender's account is below the existential deposit as a result", + " of the transfer, the account will be reaped.", + "", + " The dispatch origin for this call must be `Signed` by the transactor.", + "", + " # ", + " - 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.", + " # " + ] + }, + { + "name": "set_balance", + "arguments": [ + { + "name": "who", + "ty": "::Source" + }, + { + "name": "new_free", + "ty": "Compact" + }, + { + "name": "new_reserved", + "ty": "Compact" + } + ], + "documentation": [ + " Set the balances of a given account.", + "", + " This will alter `FreeBalance` and `ReservedBalance` in storage. it will", + " also decrease the total issuance of the system (`TotalIssuance`).", + " If the new free or reserved balance is below the existential deposit,", + " it will reset the account nonce (`frame_system::AccountNonce`).", + "", + " The dispatch origin for this call is `root`.", + "", + " # ", + " - 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`", + " # " + ] + }, + { + "name": "force_transfer", + "arguments": [ + { + "name": "source", + "ty": "::Source" + }, + { + "name": "dest", + "ty": "::Source" + }, + { + "name": "value", + "ty": "Compact" + } + ], + "documentation": [ + " Exactly as `transfer`, except the origin must be root and the source account may be", + " specified.", + " # ", + " - Same as transfer, but additional read and write because the source account is", + " not assumed to be in the overlay.", + " # " + ] + }, + { + "name": "transfer_keep_alive", + "arguments": [ + { + "name": "dest", + "ty": "::Source" + }, + { + "name": "value", + "ty": "Compact" + } + ], + "documentation": [ + " Same as the [`transfer`] call, but with a check that the transfer will not kill the", + " origin account.", + "", + " 99% of the time you want [`transfer`] instead.", + "", + " [`transfer`]: struct.Pallet.html#method.transfer", + " # ", + " - 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)", + " #" + ] + } + ], + "event": [ + { + "name": "Endowed", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " An account was created with some free balance. \\[account, free_balance\\]" + ] + }, + { + "name": "DustLost", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " An account was removed whose balance was non-zero but below ExistentialDeposit,", + " resulting in an outright loss. \\[account, balance\\]" + ] + }, + { + "name": "Transfer", + "arguments": [ + "AccountId", + "AccountId", + "Balance" + ], + "documentation": [ + " Transfer succeeded. \\[from, to, value\\]" + ] + }, + { + "name": "BalanceSet", + "arguments": [ + "AccountId", + "Balance", + "Balance" + ], + "documentation": [ + " A balance was set by root. \\[who, free, reserved\\]" + ] + }, + { + "name": "Deposit", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " Some amount was deposited (e.g. for transaction fees). \\[who, deposit\\]" + ] + }, + { + "name": "Reserved", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " Some balance was reserved (moved from free to reserved). \\[who, value\\]" + ] + }, + { + "name": "Unreserved", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " Some balance was unreserved (moved from reserved to free). \\[who, value\\]" + ] + }, + { + "name": "ReserveRepatriated", + "arguments": [ + "AccountId", + "AccountId", + "Balance", + "Status" + ], + "documentation": [ + " Some balance was moved from the reserve of the first account to the second account.", + " Final argument indicates the destination balance type.", + " \\[from, to, balance, destination_status\\]" + ] + } + ], + "constants": [ + { + "name": "ExistentialDeposit", + "ty": "T::Balance", + "value": [ + 0, + 228, + 11, + 84, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The minimum amount required to keep an account open." + ] + } + ], + "errors": [ + { + "name": "VestingBalance", + "documentation": [ + " Vesting balance too high to send value" + ] + }, + { + "name": "LiquidityRestrictions", + "documentation": [ + " Account liquidity restrictions prevent withdrawal" + ] + }, + { + "name": "Overflow", + "documentation": [ + " Got an overflow after adding" + ] + }, + { + "name": "InsufficientBalance", + "documentation": [ + " Balance too low to send value" + ] + }, + { + "name": "ExistentialDeposit", + "documentation": [ + " Value too low to create account due to existential deposit" + ] + }, + { + "name": "KeepAlive", + "documentation": [ + " Transfer/payment would kill account" + ] + }, + { + "name": "ExistingVestingSchedule", + "documentation": [ + " A vesting schedule already exists for this account" + ] + }, + { + "name": "DeadAccount", + "documentation": [ + " Beneficiary account must pre-exist" + ] + } + ], + "index": 5 + }, + { + "name": "TransactionPayment", + "storage": { + "prefix": "TransactionPayment", + "entries": [ + { + "name": "NextFeeMultiplier", + "modifier": "Default", + "ty": { + "Plain": "Multiplier" + }, + "default": [ + 0, + 0, + 100, + 167, + 179, + 182, + 224, + 13, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [] + }, + { + "name": "StorageVersion", + "modifier": "Default", + "ty": { + "Plain": "Releases" + }, + "default": [ + 0 + ], + "documentation": [] + } + ] + }, + "calls": null, + "event": null, + "constants": [ + { + "name": "TransactionByteFee", + "ty": "BalanceOf", + "value": [ + 64, + 66, + 15, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The fee to be paid for making a transaction; the per-byte portion." + ] + }, + { + "name": "WeightToFee", + "ty": "Vec>>", + "value": [ + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 180, + 196, + 4, + 0, + 1 + ], + "documentation": [ + " The polynomial that is applied in order to derive fee from weight." + ] + } + ], + "errors": [], + "index": 32 + }, + { + "name": "Authorship", + "storage": { + "prefix": "Authorship", + "entries": [ + { + "name": "Uncles", + "modifier": "Default", + "ty": { + "Plain": "Vec>" + }, + "default": [ + 0 + ], + "documentation": [ + " Uncles" + ] + }, + { + "name": "Author", + "modifier": "Optional", + "ty": { + "Plain": "T::AccountId" + }, + "default": [ + 0 + ], + "documentation": [ + " Author of current block." + ] + }, + { + "name": "DidSetUncles", + "modifier": "Default", + "ty": { + "Plain": "bool" + }, + "default": [ + 0 + ], + "documentation": [ + " Whether uncles were already set in this block." + ] + } + ] + }, + "calls": [ + { + "name": "set_uncles", + "arguments": [ + { + "name": "new_uncles", + "ty": "Vec" + } + ], + "documentation": [ + " Provide a set of uncles." + ] + } + ], + "event": null, + "constants": [], + "errors": [ + { + "name": "InvalidUncleParent", + "documentation": [ + " The uncle parent not in the chain." + ] + }, + { + "name": "UnclesAlreadySet", + "documentation": [ + " Uncles already set in the block." + ] + }, + { + "name": "TooManyUncles", + "documentation": [ + " Too many uncles." + ] + }, + { + "name": "GenesisUncle", + "documentation": [ + " The uncle is genesis." + ] + }, + { + "name": "TooHighUncle", + "documentation": [ + " The uncle is too high in chain." + ] + }, + { + "name": "UncleAlreadyIncluded", + "documentation": [ + " The uncle is already included." + ] + }, + { + "name": "OldUncle", + "documentation": [ + " The uncle isn't recent enough to be included." + ] + } + ], + "index": 6 + }, + { + "name": "Staking", + "storage": { + "prefix": "Staking", + "entries": [ + { + "name": "HistoryDepth", + "modifier": "Default", + "ty": { + "Plain": "u32" + }, + "default": [ + 84, + 0, + 0, + 0 + ], + "documentation": [ + " Number of eras to keep in history.", + "", + " Information is kept for eras in `[current_era - history_depth; current_era]`.", + "", + " Must be more than the number of eras delayed by session otherwise. I.e. active era must", + " always be in history. I.e. `active_era > current_era - history_depth` must be", + " guaranteed." + ] + }, + { + "name": "ValidatorCount", + "modifier": "Default", + "ty": { + "Plain": "u32" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The ideal number of staking participants." + ] + }, + { + "name": "MinimumValidatorCount", + "modifier": "Default", + "ty": { + "Plain": "u32" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Minimum number of staking participants before emergency conditions are imposed." + ] + }, + { + "name": "Invulnerables", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " Any validators that may never be slashed or forcibly kicked. It's a Vec since they're", + " easy to initialize and the performance hit is minimal (we expect no more than four", + " invulnerables) and restricted to testnets." + ] + }, + { + "name": "Bonded", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "T::AccountId", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Map from all locked \"stash\" accounts to the controller account." + ] + }, + { + "name": "Ledger", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::AccountId", + "value": "StakingLedger>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Map from all (unlocked) \"controller\" accounts to the info regarding the staking." + ] + }, + { + "name": "Payee", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "RewardDestination", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Where the reward payment should be made. Keyed by stash." + ] + }, + { + "name": "Validators", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "ValidatorPrefs", + "unused": false + } + }, + "default": [ + 0, + 0 + ], + "documentation": [ + " The map from (wannabe) validator stash key to the preferences of that validator." + ] + }, + { + "name": "Nominators", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "Nominations", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " The map from nominator stash key to the set of stash keys of all validators to nominate." + ] + }, + { + "name": "CurrentEra", + "modifier": "Optional", + "ty": { + "Plain": "EraIndex" + }, + "default": [ + 0 + ], + "documentation": [ + " The current era index.", + "", + " This is the latest planned era, depending on how the Session pallet queues the validator", + " set, it might be active or not." + ] + }, + { + "name": "ActiveEra", + "modifier": "Optional", + "ty": { + "Plain": "ActiveEraInfo" + }, + "default": [ + 0 + ], + "documentation": [ + " The active era information, it holds index and start.", + "", + " The active era is the era being currently rewarded. Validator set of this era must be", + " equal to [`SessionInterface::validators`]." + ] + }, + { + "name": "ErasStartSessionIndex", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "EraIndex", + "value": "SessionIndex", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " The session index at which the era start for the last `HISTORY_DEPTH` eras.", + "", + " Note: This tracks the starting session (i.e. session index when era start being active)", + " for the eras in `[CurrentEra - HISTORY_DEPTH, CurrentEra]`." + ] + }, + { + "name": "ErasStakers", + "modifier": "Default", + "ty": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "EraIndex", + "key2": "T::AccountId", + "value": "Exposure>", + "key2_hasher": "Twox64Concat" + } + }, + "default": [ + 0, + 0, + 0 + ], + "documentation": [ + " Exposure of validator at era.", + "", + " This is keyed first by the era index to allow bulk deletion and then the stash account.", + "", + " Is it removed after `HISTORY_DEPTH` eras.", + " If stakers hasn't been set or has been removed then empty exposure is returned." + ] + }, + { + "name": "ErasStakersClipped", + "modifier": "Default", + "ty": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "EraIndex", + "key2": "T::AccountId", + "value": "Exposure>", + "key2_hasher": "Twox64Concat" + } + }, + "default": [ + 0, + 0, + 0 + ], + "documentation": [ + " Clipped Exposure of validator at era.", + "", + " This is similar to [`ErasStakers`] but number of nominators exposed is reduced to the", + " `T::MaxNominatorRewardedPerValidator` biggest stakers.", + " (Note: the field `total` and `own` of the exposure remains unchanged).", + " This is used to limit the i/o cost for the nominator payout.", + "", + " This is keyed fist by the era index to allow bulk deletion and then the stash account.", + "", + " Is it removed after `HISTORY_DEPTH` eras.", + " If stakers hasn't been set or has been removed then empty exposure is returned." + ] + }, + { + "name": "ErasValidatorPrefs", + "modifier": "Default", + "ty": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "EraIndex", + "key2": "T::AccountId", + "value": "ValidatorPrefs", + "key2_hasher": "Twox64Concat" + } + }, + "default": [ + 0, + 0 + ], + "documentation": [ + " Similar to `ErasStakers`, this holds the preferences of validators.", + "", + " This is keyed first by the era index to allow bulk deletion and then the stash account.", + "", + " Is it removed after `HISTORY_DEPTH` eras." + ] + }, + { + "name": "ErasValidatorReward", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "EraIndex", + "value": "BalanceOf", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " The total validator era payout for the last `HISTORY_DEPTH` eras.", + "", + " Eras that haven't finished yet or has been removed doesn't have reward." + ] + }, + { + "name": "ErasRewardPoints", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "EraIndex", + "value": "EraRewardPoints", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Rewards for the last `HISTORY_DEPTH` eras.", + " If reward hasn't been set or has been removed then 0 reward is returned." + ] + }, + { + "name": "ErasTotalStake", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "EraIndex", + "value": "BalanceOf", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The total amount staked for the last `HISTORY_DEPTH` eras.", + " If total hasn't been set or has been removed then 0 stake is returned." + ] + }, + { + "name": "ForceEra", + "modifier": "Default", + "ty": { + "Plain": "Forcing" + }, + "default": [ + 0 + ], + "documentation": [ + " Mode of era forcing." + ] + }, + { + "name": "SlashRewardFraction", + "modifier": "Default", + "ty": { + "Plain": "Perbill" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The percentage of the slash that is distributed to reporters.", + "", + " The rest of the slashed value is handled by the `Slash`." + ] + }, + { + "name": "CanceledSlashPayout", + "modifier": "Default", + "ty": { + "Plain": "BalanceOf" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount of currency given to reporters of a slash event which was", + " canceled by extraordinary circumstances (e.g. governance)." + ] + }, + { + "name": "UnappliedSlashes", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "EraIndex", + "value": "Vec>>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " All unapplied slashes that are queued for later." + ] + }, + { + "name": "BondedEras", + "modifier": "Default", + "ty": { + "Plain": "Vec<(EraIndex, SessionIndex)>" + }, + "default": [ + 0 + ], + "documentation": [ + " A mapping from still-bonded eras to the first session index of that era.", + "", + " Must contains information for eras for the range:", + " `[active_era - bounding_duration; active_era]`" + ] + }, + { + "name": "ValidatorSlashInEra", + "modifier": "Optional", + "ty": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "EraIndex", + "key2": "T::AccountId", + "value": "(Perbill, BalanceOf)", + "key2_hasher": "Twox64Concat" + } + }, + "default": [ + 0 + ], + "documentation": [ + " All slashing events on validators, mapped by era to the highest slash proportion", + " and slash value of the era." + ] + }, + { + "name": "NominatorSlashInEra", + "modifier": "Optional", + "ty": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "EraIndex", + "key2": "T::AccountId", + "value": "BalanceOf", + "key2_hasher": "Twox64Concat" + } + }, + "default": [ + 0 + ], + "documentation": [ + " All slashing events on nominators, mapped by era to the highest slash value of the era." + ] + }, + { + "name": "SlashingSpans", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "slashing::SlashingSpans", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Slashing spans for stash accounts." + ] + }, + { + "name": "SpanSlash", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "(T::AccountId, slashing::SpanIndex)", + "value": "slashing::SpanRecord>", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Records information about the maximum slash of a stash within a slashing span,", + " as well as how much reward has been paid out." + ] + }, + { + "name": "EarliestUnappliedSlash", + "modifier": "Optional", + "ty": { + "Plain": "EraIndex" + }, + "default": [ + 0 + ], + "documentation": [ + " The earliest era for which we have a pending, unapplied slash." + ] + }, + { + "name": "CurrentPlannedSession", + "modifier": "Default", + "ty": { + "Plain": "SessionIndex" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The last planned session scheduled by the session pallet.", + "", + " This is basically in sync with the call to [`SessionManager::new_session`]." + ] + }, + { + "name": "StorageVersion", + "modifier": "Default", + "ty": { + "Plain": "Releases" + }, + "default": [ + 5 + ], + "documentation": [ + " True if network has been upgraded to this version.", + " Storage version of the pallet.", + "", + " This is set to v6.0.0 for new networks." + ] + } + ] + }, + "calls": [ + { + "name": "bond", + "arguments": [ + { + "name": "controller", + "ty": "::Source" + }, + { + "name": "value", + "ty": "Compact>" + }, + { + "name": "payee", + "ty": "RewardDestination" + } + ], + "documentation": [ + " Take the origin account as a stash and lock up `value` of its balance. `controller` will", + " be the account that controls it.", + "", + " `value` must be more than the `minimum_balance` specified by `T::Currency`.", + "", + " The dispatch origin for this call must be _Signed_ by the stash account.", + "", + " Emits `Bonded`.", + "", + " # ", + " - Independent of the arguments. Moderate complexity.", + " - O(1).", + " - Three extra DB entries.", + "", + " NOTE: Two of the storage writes (`Self::bonded`, `Self::payee`) are _never_ cleaned", + " unless the `origin` falls below _existential deposit_ and gets removed as dust.", + " ------------------", + " Weight: O(1)", + " DB Weight:", + " - Read: Bonded, Ledger, [Origin Account], Current Era, History Depth, Locks", + " - Write: Bonded, Payee, [Origin Account], Locks, Ledger", + " # " + ] + }, + { + "name": "bond_extra", + "arguments": [ + { + "name": "max_additional", + "ty": "Compact>" + } + ], + "documentation": [ + " Add some extra amount that have appeared in the stash `free_balance` into the balance up", + " for staking.", + "", + " Use this if there are additional funds in your stash account that you wish to bond.", + " Unlike [`bond`] or [`unbond`] this function does not impose any limitation on the amount", + " that can be added.", + "", + " The dispatch origin for this call must be _Signed_ by the stash, not the controller and", + " it can be only called when [`EraElectionStatus`] is `Closed`.", + "", + " Emits `Bonded`.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - O(1).", + " - One DB entry.", + " ------------", + " DB Weight:", + " - Read: Era Election Status, Bonded, Ledger, [Origin Account], Locks", + " - Write: [Origin Account], Locks, Ledger", + " # " + ] + }, + { + "name": "unbond", + "arguments": [ + { + "name": "value", + "ty": "Compact>" + } + ], + "documentation": [ + " Schedule a portion of the stash to be unlocked ready for transfer out after the bond", + " period ends. If this leaves an amount actively bonded less than", + " T::Currency::minimum_balance(), then it is increased to the full amount.", + "", + " Once the unlock period is done, you can call `withdraw_unbonded` to actually move", + " the funds out of management ready for transfer.", + "", + " No more than a limited number of unlocking chunks (see `MAX_UNLOCKING_CHUNKS`)", + " can co-exists at the same time. In that case, [`Call::withdraw_unbonded`] need", + " to be called first to remove some of the chunks (if possible).", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + " And, it can be only called when [`EraElectionStatus`] is `Closed`.", + "", + " Emits `Unbonded`.", + "", + " See also [`Call::withdraw_unbonded`].", + "", + " # ", + " - Independent of the arguments. Limited but potentially exploitable complexity.", + " - Contains a limited number of reads.", + " - Each call (requires the remainder of the bonded balance to be above `minimum_balance`)", + " will cause a new entry to be inserted into a vector (`Ledger.unlocking`) kept in storage.", + " The only way to clean the aforementioned storage item is also user-controlled via", + " `withdraw_unbonded`.", + " - One DB entry.", + " ----------", + " Weight: O(1)", + " DB Weight:", + " - Read: EraElectionStatus, Ledger, CurrentEra, Locks, BalanceOf Stash,", + " - Write: Locks, Ledger, BalanceOf Stash,", + " " + ] + }, + { + "name": "withdraw_unbonded", + "arguments": [ + { + "name": "num_slashing_spans", + "ty": "u32" + } + ], + "documentation": [ + " Remove any unlocked chunks from the `unlocking` queue from our management.", + "", + " This essentially frees up that balance to be used by the stash account to do", + " whatever it wants.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + " And, it can be only called when [`EraElectionStatus`] is `Closed`.", + "", + " Emits `Withdrawn`.", + "", + " See also [`Call::unbond`].", + "", + " # ", + " - Could be dependent on the `origin` argument and how much `unlocking` chunks exist.", + " It implies `consolidate_unlocked` which loops over `Ledger.unlocking`, which is", + " indirectly user-controlled. See [`unbond`] for more detail.", + " - Contains a limited number of reads, yet the size of which could be large based on `ledger`.", + " - Writes are limited to the `origin` account key.", + " ---------------", + " Complexity O(S) where S is the number of slashing spans to remove", + " Update:", + " - Reads: EraElectionStatus, Ledger, Current Era, Locks, [Origin Account]", + " - Writes: [Origin Account], Locks, Ledger", + " Kill:", + " - Reads: EraElectionStatus, Ledger, Current Era, Bonded, Slashing Spans, [Origin", + " Account], Locks, BalanceOf stash", + " - Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators,", + " [Origin Account], Locks, BalanceOf stash.", + " - Writes Each: SpanSlash * S", + " NOTE: Weight annotation is the kill scenario, we refund otherwise.", + " # " + ] + }, + { + "name": "validate", + "arguments": [ + { + "name": "prefs", + "ty": "ValidatorPrefs" + } + ], + "documentation": [ + " Declare the desire to validate for the origin controller.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + " And, it can be only called when [`EraElectionStatus`] is `Closed`.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains a limited number of reads.", + " - Writes are limited to the `origin` account key.", + " -----------", + " Weight: O(1)", + " DB Weight:", + " - Read: Era Election Status, Ledger", + " - Write: Nominators, Validators", + " # " + ] + }, + { + "name": "nominate", + "arguments": [ + { + "name": "targets", + "ty": "Vec<::Source>" + } + ], + "documentation": [ + " Declare the desire to nominate `targets` for the origin controller.", + "", + " Effects will be felt at the beginning of the next era. This can only be called when", + " [`EraElectionStatus`] is `Closed`.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + " And, it can be only called when [`EraElectionStatus`] is `Closed`.", + "", + " # ", + " - The transaction's complexity is proportional to the size of `targets` (N)", + " which is capped at CompactAssignments::LIMIT (MAX_NOMINATIONS).", + " - Both the reads and writes follow a similar pattern.", + " ---------", + " Weight: O(N)", + " where N is the number of targets", + " DB Weight:", + " - Reads: Era Election Status, Ledger, Current Era", + " - Writes: Validators, Nominators", + " # " + ] + }, + { + "name": "chill", + "arguments": [], + "documentation": [ + " Declare no desire to either validate or nominate.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + " And, it can be only called when [`EraElectionStatus`] is `Closed`.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains one read.", + " - Writes are limited to the `origin` account key.", + " --------", + " Weight: O(1)", + " DB Weight:", + " - Read: EraElectionStatus, Ledger", + " - Write: Validators, Nominators", + " # " + ] + }, + { + "name": "set_payee", + "arguments": [ + { + "name": "payee", + "ty": "RewardDestination" + } + ], + "documentation": [ + " (Re-)set the payment target for a controller.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains a limited number of reads.", + " - Writes are limited to the `origin` account key.", + " ---------", + " - Weight: O(1)", + " - DB Weight:", + " - Read: Ledger", + " - Write: Payee", + " # " + ] + }, + { + "name": "set_controller", + "arguments": [ + { + "name": "controller", + "ty": "::Source" + } + ], + "documentation": [ + " (Re-)set the controller of a stash.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the stash, not the controller.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains a limited number of reads.", + " - Writes are limited to the `origin` account key.", + " ----------", + " Weight: O(1)", + " DB Weight:", + " - Read: Bonded, Ledger New Controller, Ledger Old Controller", + " - Write: Bonded, Ledger New Controller, Ledger Old Controller", + " # " + ] + }, + { + "name": "set_validator_count", + "arguments": [ + { + "name": "new", + "ty": "Compact" + } + ], + "documentation": [ + " Sets the ideal number of validators.", + "", + " The dispatch origin must be Root.", + "", + " # ", + " Weight: O(1)", + " Write: Validator Count", + " # " + ] + }, + { + "name": "increase_validator_count", + "arguments": [ + { + "name": "additional", + "ty": "Compact" + } + ], + "documentation": [ + " Increments the ideal number of validators.", + "", + " The dispatch origin must be Root.", + "", + " # ", + " Same as [`set_validator_count`].", + " # " + ] + }, + { + "name": "scale_validator_count", + "arguments": [ + { + "name": "factor", + "ty": "Percent" + } + ], + "documentation": [ + " Scale up the ideal number of validators by a factor.", + "", + " The dispatch origin must be Root.", + "", + " # ", + " Same as [`set_validator_count`].", + " # " + ] + }, + { + "name": "force_no_eras", + "arguments": [], + "documentation": [ + " Force there to be no new eras indefinitely.", + "", + " The dispatch origin must be Root.", + "", + " # ", + " - No arguments.", + " - Weight: O(1)", + " - Write: ForceEra", + " # " + ] + }, + { + "name": "force_new_era", + "arguments": [], + "documentation": [ + " Force there to be a new era at the end of the next session. After this, it will be", + " reset to normal (non-forced) behaviour.", + "", + " The dispatch origin must be Root.", + "", + " # ", + " - No arguments.", + " - Weight: O(1)", + " - Write ForceEra", + " # " + ] + }, + { + "name": "set_invulnerables", + "arguments": [ + { + "name": "invulnerables", + "ty": "Vec" + } + ], + "documentation": [ + " Set the validators who cannot be slashed (if any).", + "", + " The dispatch origin must be Root.", + "", + " # ", + " - O(V)", + " - Write: Invulnerables", + " # " + ] + }, + { + "name": "force_unstake", + "arguments": [ + { + "name": "stash", + "ty": "T::AccountId" + }, + { + "name": "num_slashing_spans", + "ty": "u32" + } + ], + "documentation": [ + " Force a current staker to become completely unstaked, immediately.", + "", + " The dispatch origin must be Root.", + "", + " # ", + " O(S) where S is the number of slashing spans to be removed", + " Reads: Bonded, Slashing Spans, Account, Locks", + " Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators, Account, Locks", + " Writes Each: SpanSlash * S", + " # " + ] + }, + { + "name": "force_new_era_always", + "arguments": [], + "documentation": [ + " Force there to be a new era at the end of sessions indefinitely.", + "", + " The dispatch origin must be Root.", + "", + " # ", + " - Weight: O(1)", + " - Write: ForceEra", + " # " + ] + }, + { + "name": "cancel_deferred_slash", + "arguments": [ + { + "name": "era", + "ty": "EraIndex" + }, + { + "name": "slash_indices", + "ty": "Vec" + } + ], + "documentation": [ + " Cancel enactment of a deferred slash.", + "", + " Can be called by the `T::SlashCancelOrigin`.", + "", + " Parameters: era and indices of the slashes for that era to kill.", + "", + " # ", + " Complexity: O(U + S)", + " with U unapplied slashes weighted with U=1000", + " and S is the number of slash indices to be canceled.", + " - Read: Unapplied Slashes", + " - Write: Unapplied Slashes", + " # " + ] + }, + { + "name": "payout_stakers", + "arguments": [ + { + "name": "validator_stash", + "ty": "T::AccountId" + }, + { + "name": "era", + "ty": "EraIndex" + } + ], + "documentation": [ + " Pay out all the stakers behind a single validator for a single era.", + "", + " - `validator_stash` is the stash account of the validator. Their nominators, up to", + " `T::MaxNominatorRewardedPerValidator`, will also receive their rewards.", + " - `era` may be any era between `[current_era - history_depth; current_era]`.", + "", + " The origin of this call must be _Signed_. Any account can call this function, even if", + " it is not one of the stakers.", + "", + " This can only be called when [`EraElectionStatus`] is `Closed`.", + "", + " # ", + " - Time complexity: at most O(MaxNominatorRewardedPerValidator).", + " - Contains a limited number of reads and writes.", + " -----------", + " N is the Number of payouts for the validator (including the validator)", + " Weight:", + " - Reward Destination Staked: O(N)", + " - Reward Destination Controller (Creating): O(N)", + " DB Weight:", + " - Read: EraElectionStatus, CurrentEra, HistoryDepth, ErasValidatorReward,", + " ErasStakersClipped, ErasRewardPoints, ErasValidatorPrefs (8 items)", + " - Read Each: Bonded, Ledger, Payee, Locks, System Account (5 items)", + " - Write Each: System Account, Locks, Ledger (3 items)", + "", + " NOTE: weights are assuming that payouts are made to alive stash account (Staked).", + " Paying even a dead controller is cheaper weight-wise. We don't do any refunds here.", + " # " + ] + }, + { + "name": "rebond", + "arguments": [ + { + "name": "value", + "ty": "Compact>" + } + ], + "documentation": [ + " Rebond a portion of the stash scheduled to be unlocked.", + "", + " The dispatch origin must be signed by the controller, and it can be only called when", + " [`EraElectionStatus`] is `Closed`.", + "", + " # ", + " - Time complexity: O(L), where L is unlocking chunks", + " - Bounded by `MAX_UNLOCKING_CHUNKS`.", + " - Storage changes: Can't increase storage, only decrease it.", + " ---------------", + " - DB Weight:", + " - Reads: EraElectionStatus, Ledger, Locks, [Origin Account]", + " - Writes: [Origin Account], Locks, Ledger", + " # " + ] + }, + { + "name": "set_history_depth", + "arguments": [ + { + "name": "new_history_depth", + "ty": "Compact" + }, + { + "name": "_era_items_deleted", + "ty": "Compact" + } + ], + "documentation": [ + " Set `HistoryDepth` value. This function will delete any history information", + " when `HistoryDepth` is reduced.", + "", + " Parameters:", + " - `new_history_depth`: The new history depth you would like to set.", + " - `era_items_deleted`: The number of items that will be deleted by this dispatch.", + " This should report all the storage items that will be deleted by clearing old", + " era history. Needed to report an accurate weight for the dispatch. Trusted by", + " `Root` to report an accurate number.", + "", + " Origin must be root.", + "", + " # ", + " - E: Number of history depths removed, i.e. 10 -> 7 = 3", + " - Weight: O(E)", + " - DB Weight:", + " - Reads: Current Era, History Depth", + " - Writes: History Depth", + " - Clear Prefix Each: Era Stakers, EraStakersClipped, ErasValidatorPrefs", + " - Writes Each: ErasValidatorReward, ErasRewardPoints, ErasTotalStake, ErasStartSessionIndex", + " # " + ] + }, + { + "name": "reap_stash", + "arguments": [ + { + "name": "stash", + "ty": "T::AccountId" + }, + { + "name": "num_slashing_spans", + "ty": "u32" + } + ], + "documentation": [ + " Remove all data structure concerning a staker/stash once its balance is at the minimum.", + " This is essentially equivalent to `withdraw_unbonded` except it can be called by anyone", + " and the target `stash` must have no funds left beyond the ED.", + "", + " This can be called from any origin.", + "", + " - `stash`: The stash account to reap. Its balance must be zero.", + "", + " # ", + " Complexity: O(S) where S is the number of slashing spans on the account.", + " DB Weight:", + " - Reads: Stash Account, Bonded, Slashing Spans, Locks", + " - Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators, Stash Account, Locks", + " - Writes Each: SpanSlash * S", + " # " + ] + }, + { + "name": "kick", + "arguments": [ + { + "name": "who", + "ty": "Vec<::Source>" + } + ], + "documentation": [ + " Remove the given nominations from the calling validator.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + " And, it can be only called when [`EraElectionStatus`] is `Closed`. The controller", + " account should represent a validator.", + "", + " - `who`: A list of nominator stash accounts who are nominating this validator which", + " should no longer be nominating this validator.", + "", + " Note: Making this call only makes sense if you first set the validator preferences to", + " block any further nominations." + ] + } + ], + "event": [ + { + "name": "EraPayout", + "arguments": [ + "EraIndex", + "Balance", + "Balance" + ], + "documentation": [ + " The era payout has been set; the first balance is the validator-payout; the second is", + " the remainder from the maximum amount of reward.", + " \\[era_index, validator_payout, remainder\\]" + ] + }, + { + "name": "Reward", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " The staker has been rewarded by this amount. \\[stash, amount\\]" + ] + }, + { + "name": "Slash", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " One validator (and its nominators) has been slashed by the given amount.", + " \\[validator, amount\\]" + ] + }, + { + "name": "OldSlashingReportDiscarded", + "arguments": [ + "SessionIndex" + ], + "documentation": [ + " An old slashing report from a prior era was discarded because it could", + " not be processed. \\[session_index\\]" + ] + }, + { + "name": "StakingElection", + "arguments": [], + "documentation": [ + " A new set of stakers was elected." + ] + }, + { + "name": "Bonded", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " An account has bonded this amount. \\[stash, amount\\]", + "", + " NOTE: This event is only emitted when funds are bonded via a dispatchable. Notably,", + " it will not be emitted for staking rewards when they are added to stake." + ] + }, + { + "name": "Unbonded", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " An account has unbonded this amount. \\[stash, amount\\]" + ] + }, + { + "name": "Withdrawn", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " An account has called `withdraw_unbonded` and removed unbonding chunks worth `Balance`", + " from the unlocking queue. \\[stash, amount\\]" + ] + }, + { + "name": "Kicked", + "arguments": [ + "AccountId", + "AccountId" + ], + "documentation": [ + " A nominator has been kicked from a validator. \\[nominator, stash\\]" + ] + } + ], + "constants": [ + { + "name": "SessionsPerEra", + "ty": "SessionIndex", + "value": [ + 6, + 0, + 0, + 0 + ], + "documentation": [ + " Number of sessions per era." + ] + }, + { + "name": "BondingDuration", + "ty": "EraIndex", + "value": [ + 28, + 0, + 0, + 0 + ], + "documentation": [ + " Number of eras that staked funds must remain bonded for." + ] + }, + { + "name": "SlashDeferDuration", + "ty": "EraIndex", + "value": [ + 27, + 0, + 0, + 0 + ], + "documentation": [ + " Number of eras that slashes are deferred by, after computation.", + "", + " This should be less than the bonding duration.", + " Set to 0 if slashes should be applied immediately, without opportunity for", + " intervention." + ] + }, + { + "name": "MaxNominatorRewardedPerValidator", + "ty": "u32", + "value": [ + 0, + 1, + 0, + 0 + ], + "documentation": [ + " The maximum number of nominators rewarded for each validator.", + "", + " For each validator only the `$MaxNominatorRewardedPerValidator` biggest stakers can claim", + " their reward. This used to limit the i/o cost for the nominator payout." + ] + }, + { + "name": "MaxNominations", + "ty": "u32", + "value": [ + 16, + 0, + 0, + 0 + ], + "documentation": [ + " Maximum number of nominations per nominator." + ] + } + ], + "errors": [ + { + "name": "NotController", + "documentation": [ + " Not a controller account." + ] + }, + { + "name": "NotStash", + "documentation": [ + " Not a stash account." + ] + }, + { + "name": "AlreadyBonded", + "documentation": [ + " Stash is already bonded." + ] + }, + { + "name": "AlreadyPaired", + "documentation": [ + " Controller is already paired." + ] + }, + { + "name": "EmptyTargets", + "documentation": [ + " Targets cannot be empty." + ] + }, + { + "name": "DuplicateIndex", + "documentation": [ + " Duplicate index." + ] + }, + { + "name": "InvalidSlashIndex", + "documentation": [ + " Slash record index out of bounds." + ] + }, + { + "name": "InsufficientValue", + "documentation": [ + " Can not bond with value less than minimum balance." + ] + }, + { + "name": "NoMoreChunks", + "documentation": [ + " Can not schedule more unlock chunks." + ] + }, + { + "name": "NoUnlockChunk", + "documentation": [ + " Can not rebond without unlocking chunks." + ] + }, + { + "name": "FundedTarget", + "documentation": [ + " Attempting to target a stash that still has funds." + ] + }, + { + "name": "InvalidEraToReward", + "documentation": [ + " Invalid era to reward." + ] + }, + { + "name": "InvalidNumberOfNominations", + "documentation": [ + " Invalid number of nominations." + ] + }, + { + "name": "NotSortedAndUnique", + "documentation": [ + " Items are not sorted and unique." + ] + }, + { + "name": "AlreadyClaimed", + "documentation": [ + " Rewards for this era have already been claimed for this validator." + ] + }, + { + "name": "IncorrectHistoryDepth", + "documentation": [ + " Incorrect previous history depth input provided." + ] + }, + { + "name": "IncorrectSlashingSpans", + "documentation": [ + " Incorrect number of slashing spans provided." + ] + }, + { + "name": "BadState", + "documentation": [ + " Internal state has become somehow corrupted and the operation cannot continue." + ] + }, + { + "name": "TooManyTargets", + "documentation": [ + " Too many nomination targets supplied." + ] + }, + { + "name": "BadTarget", + "documentation": [ + " A nomination target was supplied that was blocked or otherwise not a validator." + ] + } + ], + "index": 7 + }, + { + "name": "Offences", + "storage": { + "prefix": "Offences", + "entries": [ + { + "name": "Reports", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "ReportIdOf", + "value": "OffenceDetails", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " The primary structure that holds all offence records keyed by report identifiers." + ] + }, + { + "name": "DeferredOffences", + "modifier": "Default", + "ty": { + "Plain": "Vec>" + }, + "default": [ + 0 + ], + "documentation": [ + " Deferred reports that have been rejected by the offence handler and need to be submitted", + " at a later time." + ] + }, + { + "name": "ConcurrentReportsIndex", + "modifier": "Default", + "ty": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "Kind", + "key2": "OpaqueTimeSlot", + "value": "Vec>", + "key2_hasher": "Twox64Concat" + } + }, + "default": [ + 0 + ], + "documentation": [ + " A vector of reports of the same kind that happened at the same time slot." + ] + }, + { + "name": "ReportsByKindIndex", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "Kind", + "value": "Vec", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Enumerates all reports of a kind along with the time they happened.", + "", + " All reports are sorted by the time of offence.", + "", + " Note that the actual type of this mapping is `Vec`, this is because values of", + " different types are not supported at the moment so we are doing the manual serialization." + ] + } + ] + }, + "calls": [], + "event": [ + { + "name": "Offence", + "arguments": [ + "Kind", + "OpaqueTimeSlot", + "bool" + ], + "documentation": [ + " There is an offence reported of the given `kind` happened at the `session_index` and", + " (kind-specific) time slot. This event is not deposited for duplicate slashes. last", + " element indicates of the offence was applied (true) or queued (false)", + " \\[kind, timeslot, applied\\]." + ] + } + ], + "constants": [], + "errors": [], + "index": 8 + }, + { + "name": "Historical", + "storage": null, + "calls": null, + "event": null, + "constants": [], + "errors": [], + "index": 33 + }, + { + "name": "Session", + "storage": { + "prefix": "Session", + "entries": [ + { + "name": "Validators", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " The current set of validators." + ] + }, + { + "name": "CurrentIndex", + "modifier": "Default", + "ty": { + "Plain": "SessionIndex" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Current index of the session." + ] + }, + { + "name": "QueuedChanged", + "modifier": "Default", + "ty": { + "Plain": "bool" + }, + "default": [ + 0 + ], + "documentation": [ + " True if the underlying economic identities or weighting behind the validators", + " has changed in the queued validator set." + ] + }, + { + "name": "QueuedKeys", + "modifier": "Default", + "ty": { + "Plain": "Vec<(T::ValidatorId, T::Keys)>" + }, + "default": [ + 0 + ], + "documentation": [ + " The queued keys for the next session. When the next session begins, these keys", + " will be used to determine the validator's session keys." + ] + }, + { + "name": "DisabledValidators", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " Indices of disabled validators.", + "", + " The set is cleared when `on_session_ending` returns a new set of identities." + ] + }, + { + "name": "NextKeys", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::ValidatorId", + "value": "T::Keys", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " The next session keys for a validator." + ] + }, + { + "name": "KeyOwner", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "(KeyTypeId, Vec)", + "value": "T::ValidatorId", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " The owner of a key. The key is the `KeyTypeId` + the encoded key." + ] + } + ] + }, + "calls": [ + { + "name": "set_keys", + "arguments": [ + { + "name": "keys", + "ty": "T::Keys" + }, + { + "name": "proof", + "ty": "Vec" + } + ], + "documentation": [ + " Sets the session key(s) of the function caller to `keys`.", + " Allows an account to set its session key prior to becoming a validator.", + " This doesn't take effect until the next session.", + "", + " The dispatch origin of this function must be signed.", + "", + " # ", + " - 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`", + " # " + ] + }, + { + "name": "purge_keys", + "arguments": [], + "documentation": [ + " Removes any session key(s) of the function caller.", + " This doesn't take effect until the next session.", + "", + " The dispatch origin of this function must be signed.", + "", + " # ", + " - Complexity: `O(1)` in number of key types.", + " Actual cost depends on the number of length of `T::Keys::key_ids()` which is fixed.", + " - DbReads: `T::ValidatorIdOf`, `NextKeys`, `origin account`", + " - DbWrites: `NextKeys`, `origin account`", + " - DbWrites per key id: `KeyOwnder`", + " # " + ] + } + ], + "event": [ + { + "name": "NewSession", + "arguments": [ + "SessionIndex" + ], + "documentation": [ + " New session has happened. Note that the argument is the \\[session_index\\], not the block", + " number as the type might suggest." + ] + } + ], + "constants": [], + "errors": [ + { + "name": "InvalidProof", + "documentation": [ + " Invalid ownership proof." + ] + }, + { + "name": "NoAssociatedValidatorId", + "documentation": [ + " No associated validator ID for account." + ] + }, + { + "name": "DuplicatedKey", + "documentation": [ + " Registered duplicate key." + ] + }, + { + "name": "NoKeys", + "documentation": [ + " No keys are associated with this account." + ] + }, + { + "name": "NoAccount", + "documentation": [ + " Key setting account is not live, so it's impossible to associate keys." + ] + } + ], + "index": 9 + }, + { + "name": "Grandpa", + "storage": { + "prefix": "GrandpaFinality", + "entries": [ + { + "name": "State", + "modifier": "Default", + "ty": { + "Plain": "StoredState" + }, + "default": [ + 0 + ], + "documentation": [ + " State of the current authority set." + ] + }, + { + "name": "PendingChange", + "modifier": "Optional", + "ty": { + "Plain": "StoredPendingChange" + }, + "default": [ + 0 + ], + "documentation": [ + " Pending change: (signaled at, scheduled change)." + ] + }, + { + "name": "NextForced", + "modifier": "Optional", + "ty": { + "Plain": "T::BlockNumber" + }, + "default": [ + 0 + ], + "documentation": [ + " next block number where we can force a change." + ] + }, + { + "name": "Stalled", + "modifier": "Optional", + "ty": { + "Plain": "(T::BlockNumber, T::BlockNumber)" + }, + "default": [ + 0 + ], + "documentation": [ + " `true` if we are currently stalled." + ] + }, + { + "name": "CurrentSetId", + "modifier": "Default", + "ty": { + "Plain": "SetId" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The number of changes (both in terms of keys and underlying economic responsibilities)", + " in the \"set\" of Grandpa validators from genesis." + ] + }, + { + "name": "SetIdSession", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "SetId", + "value": "SessionIndex", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " A mapping from grandpa set ID to the index of the *most recent* session for which its", + " members were responsible.", + "", + " TWOX-NOTE: `SetId` is not under user control." + ] + } + ] + }, + "calls": [ + { + "name": "report_equivocation", + "arguments": [ + { + "name": "equivocation_proof", + "ty": "EquivocationProof" + }, + { + "name": "key_owner_proof", + "ty": "T::KeyOwnerProof" + } + ], + "documentation": [ + " Report voter equivocation/misbehavior. This method will verify the", + " equivocation proof and validate the given key ownership proof", + " against the extracted offender. If both are valid, the offence", + " will be reported." + ] + }, + { + "name": "report_equivocation_unsigned", + "arguments": [ + { + "name": "equivocation_proof", + "ty": "EquivocationProof" + }, + { + "name": "key_owner_proof", + "ty": "T::KeyOwnerProof" + } + ], + "documentation": [ + " Report voter equivocation/misbehavior. This method will verify the", + " equivocation proof and validate the given key ownership proof", + " against the extracted offender. If both are valid, the offence", + " will be reported.", + "", + " This extrinsic must be called unsigned and it is expected that only", + " block authors will call it (validated in `ValidateUnsigned`), as such", + " if the block author is defined it will be defined as the equivocation", + " reporter." + ] + }, + { + "name": "note_stalled", + "arguments": [ + { + "name": "delay", + "ty": "T::BlockNumber" + }, + { + "name": "best_finalized_block_number", + "ty": "T::BlockNumber" + } + ], + "documentation": [ + " Note that the current authority set of the GRANDPA finality gadget has", + " stalled. This will trigger a forced authority set change at the beginning", + " of the next session, to be enacted `delay` blocks after that. The delay", + " should be high enough to safely assume that the block signalling the", + " forced change will not be re-orged (e.g. 1000 blocks). The GRANDPA voters", + " will start the new authority set using the given finalized block as base.", + " Only callable by root." + ] + } + ], + "event": [ + { + "name": "NewAuthorities", + "arguments": [ + "AuthorityList" + ], + "documentation": [ + " New authority set has been applied. \\[authority_set\\]" + ] + }, + { + "name": "Paused", + "arguments": [], + "documentation": [ + " Current authority set has been paused." + ] + }, + { + "name": "Resumed", + "arguments": [], + "documentation": [ + " Current authority set has been resumed." + ] + } + ], + "constants": [], + "errors": [ + { + "name": "PauseFailed", + "documentation": [ + " Attempt to signal GRANDPA pause when the authority set isn't live", + " (either paused or already pending pause)." + ] + }, + { + "name": "ResumeFailed", + "documentation": [ + " Attempt to signal GRANDPA resume when the authority set isn't paused", + " (either live or already pending resume)." + ] + }, + { + "name": "ChangePending", + "documentation": [ + " Attempt to signal GRANDPA change with one already pending." + ] + }, + { + "name": "TooSoon", + "documentation": [ + " Cannot signal forced change so soon after last." + ] + }, + { + "name": "InvalidKeyOwnershipProof", + "documentation": [ + " A key ownership proof provided as part of an equivocation report is invalid." + ] + }, + { + "name": "InvalidEquivocationProof", + "documentation": [ + " An equivocation proof provided as part of an equivocation report is invalid." + ] + }, + { + "name": "DuplicateOffenceReport", + "documentation": [ + " A given equivocation report is valid but already previously reported." + ] + } + ], + "index": 11 + }, + { + "name": "ImOnline", + "storage": { + "prefix": "ImOnline", + "entries": [ + { + "name": "HeartbeatAfter", + "modifier": "Default", + "ty": { + "Plain": "T::BlockNumber" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The block number after which it's ok to send heartbeats in the current", + " session.", + "", + " At the beginning of each session we set this to a value that should fall", + " roughly in the middle of the session duration. The idea is to first wait for", + " the validators to produce a block in the current session, so that the", + " heartbeat later on will not be necessary.", + "", + " This value will only be used as a fallback if we fail to get a proper session", + " progress estimate from `NextSessionRotation`, as those estimates should be", + " more accurate then the value we calculate for `HeartbeatAfter`." + ] + }, + { + "name": "Keys", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " The current set of keys that may issue a heartbeat." + ] + }, + { + "name": "ReceivedHeartbeats", + "modifier": "Optional", + "ty": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "SessionIndex", + "key2": "AuthIndex", + "value": "Vec", + "key2_hasher": "Twox64Concat" + } + }, + "default": [ + 0 + ], + "documentation": [ + " For each session index, we keep a mapping of `AuthIndex` to", + " `offchain::OpaqueNetworkState`." + ] + }, + { + "name": "AuthoredBlocks", + "modifier": "Default", + "ty": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "SessionIndex", + "key2": "ValidatorId", + "value": "u32", + "key2_hasher": "Twox64Concat" + } + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " For each session index, we keep a mapping of `ValidatorId` to the", + " number of blocks authored by the given authority." + ] + } + ] + }, + "calls": [ + { + "name": "heartbeat", + "arguments": [ + { + "name": "heartbeat", + "ty": "Heartbeat" + }, + { + "name": "_signature", + "ty": "::Signature" + } + ], + "documentation": [ + " # ", + " - Complexity: `O(K + E)` where K is length of `Keys` (heartbeat.validators_len)", + " and E is length of `heartbeat.network_state.external_address`", + " - `O(K)`: decoding of length `K`", + " - `O(E)`: decoding/encoding of length `E`", + " - DbReads: pallet_session `Validators`, pallet_session `CurrentIndex`, `Keys`,", + " `ReceivedHeartbeats`", + " - DbWrites: `ReceivedHeartbeats`", + " # " + ] + } + ], + "event": [ + { + "name": "HeartbeatReceived", + "arguments": [ + "AuthorityId" + ], + "documentation": [ + " A new heartbeat was received from `AuthorityId` \\[authority_id\\]" + ] + }, + { + "name": "AllGood", + "arguments": [], + "documentation": [ + " At the end of the session, no offence was committed." + ] + }, + { + "name": "SomeOffline", + "arguments": [ + "Vec" + ], + "documentation": [ + " At the end of the session, at least one validator was found to be \\[offline\\]." + ] + } + ], + "constants": [], + "errors": [ + { + "name": "InvalidKey", + "documentation": [ + " Non existent public key." + ] + }, + { + "name": "DuplicatedHeartbeat", + "documentation": [ + " Duplicated heartbeat." + ] + } + ], + "index": 12 + }, + { + "name": "AuthorityDiscovery", + "storage": null, + "calls": [], + "event": null, + "constants": [], + "errors": [], + "index": 13 + }, + { + "name": "Democracy", + "storage": { + "prefix": "Democracy", + "entries": [ + { + "name": "PublicPropCount", + "modifier": "Default", + "ty": { + "Plain": "PropIndex" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The number of (public) proposals that have been made so far." + ] + }, + { + "name": "PublicProps", + "modifier": "Default", + "ty": { + "Plain": "Vec<(PropIndex, T::Hash, T::AccountId)>" + }, + "default": [ + 0 + ], + "documentation": [ + " The public proposals. Unsorted. The second item is the proposal's hash." + ] + }, + { + "name": "DepositOf", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "PropIndex", + "value": "(Vec, BalanceOf)", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Those who have locked a deposit.", + "", + " TWOX-NOTE: Safe, as increasing integer keys are safe." + ] + }, + { + "name": "Preimages", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "T::Hash", + "value": "PreimageStatus, T::BlockNumber>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " 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", + "ty": { + "Plain": "ReferendumIndex" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The next free referendum index, aka the number of referenda started so far." + ] + }, + { + "name": "LowestUnbaked", + "modifier": "Default", + "ty": { + "Plain": "ReferendumIndex" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The lowest referendum index representing an unbaked referendum. Equal to", + " `ReferendumCount` if there isn't a unbaked referendum." + ] + }, + { + "name": "ReferendumInfoOf", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "ReferendumIndex", + "value": "ReferendumInfo>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Information concerning any given referendum.", + "", + " TWOX-NOTE: SAFE as indexes are not under an attacker’s control." + ] + }, + { + "name": "VotingOf", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "Voting, T::AccountId, T::BlockNumber>", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " 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", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "T::BlockNumber", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " 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", + "ty": { + "Plain": "bool" + }, + "default": [ + 0 + ], + "documentation": [ + " True if the last referendum tabled was submitted externally. False if it was a public", + " proposal." + ] + }, + { + "name": "NextExternal", + "modifier": "Optional", + "ty": { + "Plain": "(T::Hash, VoteThreshold)" + }, + "default": [ + 0 + ], + "documentation": [ + " 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", + "ty": { + "Map": { + "hasher": "Identity", + "key": "T::Hash", + "value": "(T::BlockNumber, Vec)", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " 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", + "ty": { + "Map": { + "hasher": "Identity", + "key": "T::Hash", + "value": "bool", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Record of all proposals that have been subject to emergency cancellation." + ] + }, + { + "name": "StorageVersion", + "modifier": "Optional", + "ty": { + "Plain": "Releases" + }, + "default": [ + 0 + ], + "documentation": [ + " Storage version of the pallet.", + "", + " New networks start with last version." + ] + } + ] + }, + "calls": [ + { + "name": "propose", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + }, + { + "name": "value", + "ty": "Compact>" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "proposal", + "ty": "Compact" + }, + { + "name": "seconds_upper_bound", + "ty": "Compact" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "ref_index", + "ty": "Compact" + }, + { + "name": "vote", + "ty": "AccountVote>" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "ref_index", + "ty": "ReferendumIndex" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + }, + { + "name": "voting_period", + "ty": "T::BlockNumber" + }, + { + "name": "delay", + "ty": "T::BlockNumber" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "ref_index", + "ty": "Compact" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "which", + "ty": "ReferendumIndex" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "to", + "ty": "T::AccountId" + }, + { + "name": "conviction", + "ty": "Conviction" + }, + { + "name": "balance", + "ty": "BalanceOf" + } + ], + "documentation": [ + " 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", + "arguments": [], + "documentation": [ + " 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", + "arguments": [], + "documentation": [ + " Clears all public proposals.", + "", + " The dispatch origin of this call must be _Root_.", + "", + " Weight: `O(1)`." + ] + }, + { + "name": "note_preimage", + "arguments": [ + { + "name": "encoded_proposal", + "ty": "Vec" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "encoded_proposal", + "ty": "Vec" + } + ], + "documentation": [ + " Same as `note_preimage` but origin is `OperationalPreimageOrigin`." + ] + }, + { + "name": "note_imminent_preimage", + "arguments": [ + { + "name": "encoded_proposal", + "ty": "Vec" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "encoded_proposal", + "ty": "Vec" + } + ], + "documentation": [ + " Same as `note_imminent_preimage` but origin is `OperationalPreimageOrigin`." + ] + }, + { + "name": "reap_preimage", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + }, + { + "name": "proposal_len_upper_bound", + "ty": "Compact" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "target", + "ty": "T::AccountId" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "index", + "ty": "ReferendumIndex" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "target", + "ty": "T::AccountId" + }, + { + "name": "index", + "ty": "ReferendumIndex" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + }, + { + "name": "index", + "ty": "ReferendumIndex" + } + ], + "documentation": [ + " Enact a proposal from a referendum. For now we just make the weight be the maximum." + ] + }, + { + "name": "blacklist", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + }, + { + "name": "maybe_ref_index", + "ty": "Option" + } + ], + "documentation": [ + " 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", + "arguments": [ + { + "name": "prop_index", + "ty": "Compact" + } + ], + "documentation": [ + " 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::::decode_len()`" + ] + } + ], + "event": [ + { + "name": "Proposed", + "arguments": [ + "PropIndex", + "Balance" + ], + "documentation": [ + " A motion has been proposed by a public account. \\[proposal_index, deposit\\]" + ] + }, + { + "name": "Tabled", + "arguments": [ + "PropIndex", + "Balance", + "Vec" + ], + "documentation": [ + " A public proposal has been tabled for referendum vote. \\[proposal_index, deposit, depositors\\]" + ] + }, + { + "name": "ExternalTabled", + "arguments": [], + "documentation": [ + " An external proposal has been tabled." + ] + }, + { + "name": "Started", + "arguments": [ + "ReferendumIndex", + "VoteThreshold" + ], + "documentation": [ + " A referendum has begun. \\[ref_index, threshold\\]" + ] + }, + { + "name": "Passed", + "arguments": [ + "ReferendumIndex" + ], + "documentation": [ + " A proposal has been approved by referendum. \\[ref_index\\]" + ] + }, + { + "name": "NotPassed", + "arguments": [ + "ReferendumIndex" + ], + "documentation": [ + " A proposal has been rejected by referendum. \\[ref_index\\]" + ] + }, + { + "name": "Cancelled", + "arguments": [ + "ReferendumIndex" + ], + "documentation": [ + " A referendum has been cancelled. \\[ref_index\\]" + ] + }, + { + "name": "Executed", + "arguments": [ + "ReferendumIndex", + "bool" + ], + "documentation": [ + " A proposal has been enacted. \\[ref_index, is_ok\\]" + ] + }, + { + "name": "Delegated", + "arguments": [ + "AccountId", + "AccountId" + ], + "documentation": [ + " An account has delegated their vote to another account. \\[who, target\\]" + ] + }, + { + "name": "Undelegated", + "arguments": [ + "AccountId" + ], + "documentation": [ + " An \\[account\\] has cancelled a previous delegation operation." + ] + }, + { + "name": "Vetoed", + "arguments": [ + "AccountId", + "Hash", + "BlockNumber" + ], + "documentation": [ + " An external proposal has been vetoed. \\[who, proposal_hash, until\\]" + ] + }, + { + "name": "PreimageNoted", + "arguments": [ + "Hash", + "AccountId", + "Balance" + ], + "documentation": [ + " A proposal's preimage was noted, and the deposit taken. \\[proposal_hash, who, deposit\\]" + ] + }, + { + "name": "PreimageUsed", + "arguments": [ + "Hash", + "AccountId", + "Balance" + ], + "documentation": [ + " A proposal preimage was removed and used (the deposit was returned).", + " \\[proposal_hash, provider, deposit\\]" + ] + }, + { + "name": "PreimageInvalid", + "arguments": [ + "Hash", + "ReferendumIndex" + ], + "documentation": [ + " A proposal could not be executed because its preimage was invalid.", + " \\[proposal_hash, ref_index\\]" + ] + }, + { + "name": "PreimageMissing", + "arguments": [ + "Hash", + "ReferendumIndex" + ], + "documentation": [ + " A proposal could not be executed because its preimage was missing.", + " \\[proposal_hash, ref_index\\]" + ] + }, + { + "name": "PreimageReaped", + "arguments": [ + "Hash", + "AccountId", + "Balance", + "AccountId" + ], + "documentation": [ + " A registered preimage was removed and the deposit collected by the reaper.", + " \\[proposal_hash, provider, deposit, reaper\\]" + ] + }, + { + "name": "Unlocked", + "arguments": [ + "AccountId" + ], + "documentation": [ + " An \\[account\\] has been unlocked successfully." + ] + }, + { + "name": "Blacklisted", + "arguments": [ + "Hash" + ], + "documentation": [ + " A proposal \\[hash\\] has been blacklisted permanently." + ] + } + ], + "constants": [ + { + "name": "EnactmentPeriod", + "ty": "T::BlockNumber", + "value": [ + 0, + 39, + 6, + 0 + ], + "documentation": [ + " 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", + "ty": "T::BlockNumber", + "value": [ + 0, + 39, + 6, + 0 + ], + "documentation": [ + " How often (in blocks) new public referenda are launched." + ] + }, + { + "name": "VotingPeriod", + "ty": "T::BlockNumber", + "value": [ + 0, + 39, + 6, + 0 + ], + "documentation": [ + " How often (in blocks) to check for new votes." + ] + }, + { + "name": "MinimumDeposit", + "ty": "BalanceOf", + "value": [ + 0, + 16, + 165, + 212, + 232, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The minimum amount to be used as a deposit for a public referendum proposal." + ] + }, + { + "name": "FastTrackVotingPeriod", + "ty": "T::BlockNumber", + "value": [ + 8, + 7, + 0, + 0 + ], + "documentation": [ + " Minimum voting period allowed for an emergency referendum." + ] + }, + { + "name": "CooloffPeriod", + "ty": "T::BlockNumber", + "value": [ + 192, + 137, + 1, + 0 + ], + "documentation": [ + " Period in blocks where an external proposal may not be re-submitted after being vetoed." + ] + }, + { + "name": "PreimageByteDeposit", + "ty": "BalanceOf", + "value": [ + 0, + 225, + 245, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount of balance that must be deposited per byte of preimage stored." + ] + }, + { + "name": "MaxVotes", + "ty": "u32", + "value": [ + 100, + 0, + 0, + 0 + ], + "documentation": [ + " The maximum number of votes for an account." + ] + } + ], + "errors": [ + { + "name": "ValueLow", + "documentation": [ + " Value too low" + ] + }, + { + "name": "ProposalMissing", + "documentation": [ + " Proposal does not exist" + ] + }, + { + "name": "BadIndex", + "documentation": [ + " Unknown index" + ] + }, + { + "name": "AlreadyCanceled", + "documentation": [ + " Cannot cancel the same proposal twice" + ] + }, + { + "name": "DuplicateProposal", + "documentation": [ + " Proposal already made" + ] + }, + { + "name": "ProposalBlacklisted", + "documentation": [ + " Proposal still blacklisted" + ] + }, + { + "name": "NotSimpleMajority", + "documentation": [ + " Next external proposal not simple majority" + ] + }, + { + "name": "InvalidHash", + "documentation": [ + " Invalid hash" + ] + }, + { + "name": "NoProposal", + "documentation": [ + " No external proposal" + ] + }, + { + "name": "AlreadyVetoed", + "documentation": [ + " Identity may not veto a proposal twice" + ] + }, + { + "name": "NotDelegated", + "documentation": [ + " Not delegated" + ] + }, + { + "name": "DuplicatePreimage", + "documentation": [ + " Preimage already noted" + ] + }, + { + "name": "NotImminent", + "documentation": [ + " Not imminent" + ] + }, + { + "name": "TooEarly", + "documentation": [ + " Too early" + ] + }, + { + "name": "Imminent", + "documentation": [ + " Imminent" + ] + }, + { + "name": "PreimageMissing", + "documentation": [ + " Preimage not found" + ] + }, + { + "name": "ReferendumInvalid", + "documentation": [ + " Vote given for invalid referendum" + ] + }, + { + "name": "PreimageInvalid", + "documentation": [ + " Invalid preimage" + ] + }, + { + "name": "NoneWaiting", + "documentation": [ + " No proposals waiting" + ] + }, + { + "name": "NotLocked", + "documentation": [ + " The target account does not have a lock." + ] + }, + { + "name": "NotExpired", + "documentation": [ + " The lock on the account to be unlocked has not yet expired." + ] + }, + { + "name": "NotVoter", + "documentation": [ + " The given account did not vote on the referendum." + ] + }, + { + "name": "NoPermission", + "documentation": [ + " The actor has no permission to conduct the action." + ] + }, + { + "name": "AlreadyDelegating", + "documentation": [ + " The account is already delegating." + ] + }, + { + "name": "Overflow", + "documentation": [ + " An unexpected integer overflow occurred." + ] + }, + { + "name": "Underflow", + "documentation": [ + " An unexpected integer underflow occurred." + ] + }, + { + "name": "InsufficientFunds", + "documentation": [ + " Too high a balance was provided that the account cannot afford." + ] + }, + { + "name": "NotDelegating", + "documentation": [ + " The account is not currently delegating." + ] + }, + { + "name": "VotesExist", + "documentation": [ + " 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", + "documentation": [ + " The instant referendum origin is currently disallowed." + ] + }, + { + "name": "Nonsense", + "documentation": [ + " Delegation to oneself makes no sense." + ] + }, + { + "name": "WrongUpperBound", + "documentation": [ + " Invalid upper bound." + ] + }, + { + "name": "MaxVotesReached", + "documentation": [ + " Maximum number of votes reached." + ] + }, + { + "name": "InvalidWitness", + "documentation": [ + " The provided witness data is wrong." + ] + }, + { + "name": "TooManyProposals", + "documentation": [ + " Maximum number of proposals reached." + ] + } + ], + "index": 14 + }, + { + "name": "Council", + "storage": { + "prefix": "Instance1Collective", + "entries": [ + { + "name": "Proposals", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " The hashes of the active proposals." + ] + }, + { + "name": "ProposalOf", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "T::Hash", + "value": ">::Proposal", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Actual proposal for a given hash, if it's current." + ] + }, + { + "name": "Voting", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "T::Hash", + "value": "Votes", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Votes on a given proposal, if it is ongoing." + ] + }, + { + "name": "ProposalCount", + "modifier": "Default", + "ty": { + "Plain": "u32" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Proposals so far." + ] + }, + { + "name": "Members", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " The current members of the collective. This is stored sorted (just by value)." + ] + }, + { + "name": "Prime", + "modifier": "Optional", + "ty": { + "Plain": "T::AccountId" + }, + "default": [ + 0 + ], + "documentation": [ + " The prime member that helps determine the default vote behavior in case of absentations." + ] + } + ] + }, + "calls": [ + { + "name": "set_members", + "arguments": [ + { + "name": "new_members", + "ty": "Vec" + }, + { + "name": "prime", + "ty": "Option" + }, + { + "name": "old_count", + "ty": "MemberCount" + } + ], + "documentation": [ + " Set the collective's membership.", + "", + " - `new_members`: The new member list. Be nice to the chain and provide it sorted.", + " - `prime`: The prime member whose vote sets the default.", + " - `old_count`: The upper bound for the previous number of members in storage.", + " Used for weight estimation.", + "", + " Requires root origin.", + "", + " NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but", + " the weight estimations rely on it to estimate dispatchable weight.", + "", + " # ", + " ## Weight", + " - `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", + " # " + ] + }, + { + "name": "execute", + "arguments": [ + { + "name": "proposal", + "ty": "Box<>::Proposal>" + }, + { + "name": "length_bound", + "ty": "Compact" + } + ], + "documentation": [ + " Dispatch a proposal from a member using the `Member` origin.", + "", + " Origin must be a member of the collective.", + "", + " # ", + " ## 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", + " # " + ] + }, + { + "name": "propose", + "arguments": [ + { + "name": "threshold", + "ty": "Compact" + }, + { + "name": "proposal", + "ty": "Box<>::Proposal>" + }, + { + "name": "length_bound", + "ty": "Compact" + } + ], + "documentation": [ + " Add a new proposal to either be voted on or executed directly.", + "", + " Requires the sender to be member.", + "", + " `threshold` determines whether `proposal` is executed directly (`threshold < 2`)", + " or put up for voting.", + "", + " # ", + " ## Weight", + " - `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", + " # " + ] + }, + { + "name": "vote", + "arguments": [ + { + "name": "proposal", + "ty": "T::Hash" + }, + { + "name": "index", + "ty": "Compact" + }, + { + "name": "approve", + "ty": "bool" + } + ], + "documentation": [ + " Add an aye or nay vote for the sender to the given proposal.", + "", + " Requires the sender to be a member.", + "", + " Transaction fees will be waived if the member is voting on any particular proposal", + " for the first time and the call is successful. Subsequent vote changes will charge a fee.", + " # ", + " ## Weight", + " - `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", + " # " + ] + }, + { + "name": "close", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + }, + { + "name": "index", + "ty": "Compact" + }, + { + "name": "proposal_weight_bound", + "ty": "Compact" + }, + { + "name": "length_bound", + "ty": "Compact" + } + ], + "documentation": [ + " Close a vote that is either approved, disapproved or whose voting period has ended.", + "", + " May be called by any signed account in order to finish voting and close the proposal.", + "", + " If called before the end of the voting period it will only close the vote if it is", + " has enough votes to be approved or disapproved.", + "", + " If called after the end of the voting period abstentions are counted as rejections", + " unless there is a prime member set and the prime member cast an approval.", + "", + " If the close operation completes successfully with disapproval, the transaction fee will", + " be waived. Otherwise execution of the approved operation will be charged to the caller.", + "", + " + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed proposal.", + " + `length_bound`: The upper bound for the length of the proposal in storage. Checked via", + " `storage::read` so it is `size_of::() == 4` larger than the pure length.", + "", + " # ", + " ## 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", + " # " + ] + }, + { + "name": "disapprove_proposal", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + } + ], + "documentation": [ + " Disapprove a proposal, close, and remove it from the system, regardless of its current state.", + "", + " Must be called by the Root origin.", + "", + " Parameters:", + " * `proposal_hash`: The hash of the proposal that should be disapproved.", + "", + " # ", + " Complexity: O(P) where P is the number of max proposals", + " DB Weight:", + " * Reads: Proposals", + " * Writes: Voting, Proposals, ProposalOf", + " # " + ] + } + ], + "event": [ + { + "name": "Proposed", + "arguments": [ + "AccountId", + "ProposalIndex", + "Hash", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been proposed (by given account) with a threshold (given", + " `MemberCount`).", + " \\[account, proposal_index, proposal_hash, threshold\\]" + ] + }, + { + "name": "Voted", + "arguments": [ + "AccountId", + "Hash", + "bool", + "MemberCount", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been voted on by given account, leaving", + " a tally (yes votes and no votes given respectively as `MemberCount`).", + " \\[account, proposal_hash, voted, yes, no\\]" + ] + }, + { + "name": "Approved", + "arguments": [ + "Hash" + ], + "documentation": [ + " A motion was approved by the required threshold.", + " \\[proposal_hash\\]" + ] + }, + { + "name": "Disapproved", + "arguments": [ + "Hash" + ], + "documentation": [ + " A motion was not approved by the required threshold.", + " \\[proposal_hash\\]" + ] + }, + { + "name": "Executed", + "arguments": [ + "Hash", + "DispatchResult" + ], + "documentation": [ + " A motion was executed; result will be `Ok` if it returned without error.", + " \\[proposal_hash, result\\]" + ] + }, + { + "name": "MemberExecuted", + "arguments": [ + "Hash", + "DispatchResult" + ], + "documentation": [ + " A single member did some action; result will be `Ok` if it returned without error.", + " \\[proposal_hash, result\\]" + ] + }, + { + "name": "Closed", + "arguments": [ + "Hash", + "MemberCount", + "MemberCount" + ], + "documentation": [ + " A proposal was closed because its threshold was reached or after its duration was up.", + " \\[proposal_hash, yes, no\\]" + ] + } + ], + "constants": [], + "errors": [ + { + "name": "NotMember", + "documentation": [ + " Account is not a member" + ] + }, + { + "name": "DuplicateProposal", + "documentation": [ + " Duplicate proposals not allowed" + ] + }, + { + "name": "ProposalMissing", + "documentation": [ + " Proposal must exist" + ] + }, + { + "name": "WrongIndex", + "documentation": [ + " Mismatched index" + ] + }, + { + "name": "DuplicateVote", + "documentation": [ + " Duplicate vote ignored" + ] + }, + { + "name": "AlreadyInitialized", + "documentation": [ + " Members are already initialized!" + ] + }, + { + "name": "TooEarly", + "documentation": [ + " The close call was made too early, before the end of the voting." + ] + }, + { + "name": "TooManyProposals", + "documentation": [ + " There can only be a maximum of `MaxProposals` active proposals." + ] + }, + { + "name": "WrongProposalWeight", + "documentation": [ + " The given weight bound for the proposal was too low." + ] + }, + { + "name": "WrongProposalLength", + "documentation": [ + " The given length bound for the proposal was too low." + ] + } + ], + "index": 15 + }, + { + "name": "TechnicalCommittee", + "storage": { + "prefix": "Instance2Collective", + "entries": [ + { + "name": "Proposals", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " The hashes of the active proposals." + ] + }, + { + "name": "ProposalOf", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "T::Hash", + "value": ">::Proposal", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Actual proposal for a given hash, if it's current." + ] + }, + { + "name": "Voting", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "T::Hash", + "value": "Votes", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Votes on a given proposal, if it is ongoing." + ] + }, + { + "name": "ProposalCount", + "modifier": "Default", + "ty": { + "Plain": "u32" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Proposals so far." + ] + }, + { + "name": "Members", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " The current members of the collective. This is stored sorted (just by value)." + ] + }, + { + "name": "Prime", + "modifier": "Optional", + "ty": { + "Plain": "T::AccountId" + }, + "default": [ + 0 + ], + "documentation": [ + " The prime member that helps determine the default vote behavior in case of absentations." + ] + } + ] + }, + "calls": [ + { + "name": "set_members", + "arguments": [ + { + "name": "new_members", + "ty": "Vec" + }, + { + "name": "prime", + "ty": "Option" + }, + { + "name": "old_count", + "ty": "MemberCount" + } + ], + "documentation": [ + " Set the collective's membership.", + "", + " - `new_members`: The new member list. Be nice to the chain and provide it sorted.", + " - `prime`: The prime member whose vote sets the default.", + " - `old_count`: The upper bound for the previous number of members in storage.", + " Used for weight estimation.", + "", + " Requires root origin.", + "", + " NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but", + " the weight estimations rely on it to estimate dispatchable weight.", + "", + " # ", + " ## Weight", + " - `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", + " # " + ] + }, + { + "name": "execute", + "arguments": [ + { + "name": "proposal", + "ty": "Box<>::Proposal>" + }, + { + "name": "length_bound", + "ty": "Compact" + } + ], + "documentation": [ + " Dispatch a proposal from a member using the `Member` origin.", + "", + " Origin must be a member of the collective.", + "", + " # ", + " ## 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", + " # " + ] + }, + { + "name": "propose", + "arguments": [ + { + "name": "threshold", + "ty": "Compact" + }, + { + "name": "proposal", + "ty": "Box<>::Proposal>" + }, + { + "name": "length_bound", + "ty": "Compact" + } + ], + "documentation": [ + " Add a new proposal to either be voted on or executed directly.", + "", + " Requires the sender to be member.", + "", + " `threshold` determines whether `proposal` is executed directly (`threshold < 2`)", + " or put up for voting.", + "", + " # ", + " ## Weight", + " - `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", + " # " + ] + }, + { + "name": "vote", + "arguments": [ + { + "name": "proposal", + "ty": "T::Hash" + }, + { + "name": "index", + "ty": "Compact" + }, + { + "name": "approve", + "ty": "bool" + } + ], + "documentation": [ + " Add an aye or nay vote for the sender to the given proposal.", + "", + " Requires the sender to be a member.", + "", + " Transaction fees will be waived if the member is voting on any particular proposal", + " for the first time and the call is successful. Subsequent vote changes will charge a fee.", + " # ", + " ## Weight", + " - `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", + " # " + ] + }, + { + "name": "close", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + }, + { + "name": "index", + "ty": "Compact" + }, + { + "name": "proposal_weight_bound", + "ty": "Compact" + }, + { + "name": "length_bound", + "ty": "Compact" + } + ], + "documentation": [ + " Close a vote that is either approved, disapproved or whose voting period has ended.", + "", + " May be called by any signed account in order to finish voting and close the proposal.", + "", + " If called before the end of the voting period it will only close the vote if it is", + " has enough votes to be approved or disapproved.", + "", + " If called after the end of the voting period abstentions are counted as rejections", + " unless there is a prime member set and the prime member cast an approval.", + "", + " If the close operation completes successfully with disapproval, the transaction fee will", + " be waived. Otherwise execution of the approved operation will be charged to the caller.", + "", + " + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed proposal.", + " + `length_bound`: The upper bound for the length of the proposal in storage. Checked via", + " `storage::read` so it is `size_of::() == 4` larger than the pure length.", + "", + " # ", + " ## 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", + " # " + ] + }, + { + "name": "disapprove_proposal", + "arguments": [ + { + "name": "proposal_hash", + "ty": "T::Hash" + } + ], + "documentation": [ + " Disapprove a proposal, close, and remove it from the system, regardless of its current state.", + "", + " Must be called by the Root origin.", + "", + " Parameters:", + " * `proposal_hash`: The hash of the proposal that should be disapproved.", + "", + " # ", + " Complexity: O(P) where P is the number of max proposals", + " DB Weight:", + " * Reads: Proposals", + " * Writes: Voting, Proposals, ProposalOf", + " # " + ] + } + ], + "event": [ + { + "name": "Proposed", + "arguments": [ + "AccountId", + "ProposalIndex", + "Hash", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been proposed (by given account) with a threshold (given", + " `MemberCount`).", + " \\[account, proposal_index, proposal_hash, threshold\\]" + ] + }, + { + "name": "Voted", + "arguments": [ + "AccountId", + "Hash", + "bool", + "MemberCount", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been voted on by given account, leaving", + " a tally (yes votes and no votes given respectively as `MemberCount`).", + " \\[account, proposal_hash, voted, yes, no\\]" + ] + }, + { + "name": "Approved", + "arguments": [ + "Hash" + ], + "documentation": [ + " A motion was approved by the required threshold.", + " \\[proposal_hash\\]" + ] + }, + { + "name": "Disapproved", + "arguments": [ + "Hash" + ], + "documentation": [ + " A motion was not approved by the required threshold.", + " \\[proposal_hash\\]" + ] + }, + { + "name": "Executed", + "arguments": [ + "Hash", + "DispatchResult" + ], + "documentation": [ + " A motion was executed; result will be `Ok` if it returned without error.", + " \\[proposal_hash, result\\]" + ] + }, + { + "name": "MemberExecuted", + "arguments": [ + "Hash", + "DispatchResult" + ], + "documentation": [ + " A single member did some action; result will be `Ok` if it returned without error.", + " \\[proposal_hash, result\\]" + ] + }, + { + "name": "Closed", + "arguments": [ + "Hash", + "MemberCount", + "MemberCount" + ], + "documentation": [ + " A proposal was closed because its threshold was reached or after its duration was up.", + " \\[proposal_hash, yes, no\\]" + ] + } + ], + "constants": [], + "errors": [ + { + "name": "NotMember", + "documentation": [ + " Account is not a member" + ] + }, + { + "name": "DuplicateProposal", + "documentation": [ + " Duplicate proposals not allowed" + ] + }, + { + "name": "ProposalMissing", + "documentation": [ + " Proposal must exist" + ] + }, + { + "name": "WrongIndex", + "documentation": [ + " Mismatched index" + ] + }, + { + "name": "DuplicateVote", + "documentation": [ + " Duplicate vote ignored" + ] + }, + { + "name": "AlreadyInitialized", + "documentation": [ + " Members are already initialized!" + ] + }, + { + "name": "TooEarly", + "documentation": [ + " The close call was made too early, before the end of the voting." + ] + }, + { + "name": "TooManyProposals", + "documentation": [ + " There can only be a maximum of `MaxProposals` active proposals." + ] + }, + { + "name": "WrongProposalWeight", + "documentation": [ + " The given weight bound for the proposal was too low." + ] + }, + { + "name": "WrongProposalLength", + "documentation": [ + " The given length bound for the proposal was too low." + ] + } + ], + "index": 16 + }, + { + "name": "ElectionsPhragmen", + "storage": { + "prefix": "PhragmenElection", + "entries": [ + { + "name": "Members", + "modifier": "Default", + "ty": { + "Plain": "Vec>>" + }, + "default": [ + 0 + ], + "documentation": [ + " The current elected members.", + "", + " Invariant: Always sorted based on account id." + ] + }, + { + "name": "RunnersUp", + "modifier": "Default", + "ty": { + "Plain": "Vec>>" + }, + "default": [ + 0 + ], + "documentation": [ + " The current reserved runners-up.", + "", + " Invariant: Always sorted based on rank (worse to best). Upon removal of a member, the", + " last (i.e. _best_) runner-up will be replaced." + ] + }, + { + "name": "Candidates", + "modifier": "Default", + "ty": { + "Plain": "Vec<(T::AccountId, BalanceOf)>" + }, + "default": [ + 0 + ], + "documentation": [ + " The present candidate list. A current member or runner-up can never enter this vector", + " and is always implicitly assumed to be a candidate.", + "", + " Second element is the deposit.", + "", + " Invariant: Always sorted based on account id." + ] + }, + { + "name": "ElectionRounds", + "modifier": "Default", + "ty": { + "Plain": "u32" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The total number of vote rounds that have happened, excluding the upcoming one." + ] + }, + { + "name": "Voting", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "Voter>", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Votes and locked stake of a particular voter.", + "", + " TWOX-NOTE: SAFE as `AccountId` is a crypto hash." + ] + } + ] + }, + "calls": [ + { + "name": "vote", + "arguments": [ + { + "name": "votes", + "ty": "Vec" + }, + { + "name": "value", + "ty": "Compact>" + } + ], + "documentation": [ + " Vote for a set of candidates for the upcoming round of election. This can be called to", + " set the initial votes, or update already existing votes.", + "", + " Upon initial voting, `value` units of `who`'s balance is locked and a deposit amount is", + " reserved. The deposit is based on the number of votes and can be updated over time.", + "", + " The `votes` should:", + " - not be empty.", + " - be less than the number of possible candidates. Note that all current members and", + " runners-up are also automatically candidates for the next round.", + "", + " If `value` is more than `who`'s total balance, then the maximum of the two is used.", + "", + " The dispatch origin of this call must be signed.", + "", + " ### Warning", + "", + " It is the responsibility of the caller to **NOT** place all of their balance into the", + " lock and keep some for further operations.", + "", + " # ", + " We assume the maximum weight among all 3 cases: vote_equal, vote_more and vote_less.", + " # " + ] + }, + { + "name": "remove_voter", + "arguments": [], + "documentation": [ + " Remove `origin` as a voter.", + "", + " This removes the lock and returns the deposit.", + "", + " The dispatch origin of this call must be signed and be a voter." + ] + }, + { + "name": "submit_candidacy", + "arguments": [ + { + "name": "candidate_count", + "ty": "Compact" + } + ], + "documentation": [ + " Submit oneself for candidacy. A fixed amount of deposit is recorded.", + "", + " All candidates are wiped at the end of the term. They either become a member/runner-up,", + " or leave the system while their deposit is slashed.", + "", + " The dispatch origin of this call must be signed.", + "", + " ### Warning", + "", + " Even if a candidate ends up being a member, they must call [`Call::renounce_candidacy`]", + " to get their deposit back. Losing the spot in an election will always lead to a slash.", + "", + " # ", + " The number of current candidates must be provided as witness data.", + " # " + ] + }, + { + "name": "renounce_candidacy", + "arguments": [ + { + "name": "renouncing", + "ty": "Renouncing" + } + ], + "documentation": [ + " Renounce one's intention to be a candidate for the next election round. 3 potential", + " outcomes exist:", + "", + " - `origin` is a candidate and not elected in any set. In this case, the deposit is", + " unreserved, returned and origin is removed as a candidate.", + " - `origin` is a current runner-up. In this case, the deposit is unreserved, returned and", + " origin is removed as a runner-up.", + " - `origin` is a current member. In this case, the deposit is unreserved and origin is", + " removed as a member, consequently not being a candidate for the next round anymore.", + " Similar to [`remove_members`], if replacement runners exists, they are immediately used.", + " If the prime is renouncing, then no prime will exist until the next round.", + "", + " The dispatch origin of this call must be signed, and have one of the above roles.", + "", + " # ", + " The type of renouncing must be provided as witness data.", + " # " + ] + }, + { + "name": "remove_member", + "arguments": [ + { + "name": "who", + "ty": "::Source" + }, + { + "name": "has_replacement", + "ty": "bool" + } + ], + "documentation": [ + " Remove a particular member from the set. This is effective immediately and the bond of", + " the outgoing member is slashed.", + "", + " If a runner-up is available, then the best runner-up will be removed and replaces the", + " outgoing member. Otherwise, a new phragmen election is started.", + "", + " The dispatch origin of this call must be root.", + "", + " Note that this does not affect the designated block number of the next election.", + "", + " # ", + " 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.", + " # " + ] + }, + { + "name": "clean_defunct_voters", + "arguments": [ + { + "name": "_num_voters", + "ty": "u32" + }, + { + "name": "_num_defunct", + "ty": "u32" + } + ], + "documentation": [ + " Clean all voters who are defunct (i.e. they do not serve any purpose at all). The", + " deposit of the removed voters are returned.", + "", + " This is an root function to be used only for cleaning the state.", + "", + " The dispatch origin of this call must be root.", + "", + " # ", + " The total number of voters and those that are defunct must be provided as witness data.", + " # " + ] + } + ], + "event": [ + { + "name": "NewTerm", + "arguments": [ + "Vec<(AccountId, Balance)>" + ], + "documentation": [ + " A new term with \\[new_members\\]. This indicates that enough candidates existed to run the", + " election, not that enough have has been elected. The inner value must be examined for", + " this purpose. A `NewTerm(\\[\\])` indicates that some candidates got their bond slashed and", + " none were elected, whilst `EmptyTerm` means that no candidates existed to begin with." + ] + }, + { + "name": "EmptyTerm", + "arguments": [], + "documentation": [ + " No (or not enough) candidates existed for this round. This is different from", + " `NewTerm(\\[\\])`. See the description of `NewTerm`." + ] + }, + { + "name": "ElectionError", + "arguments": [], + "documentation": [ + " Internal error happened while trying to perform election." + ] + }, + { + "name": "MemberKicked", + "arguments": [ + "AccountId" + ], + "documentation": [ + " A \\[member\\] has been removed. This should always be followed by either `NewTerm` or", + " `EmptyTerm`." + ] + }, + { + "name": "Renounced", + "arguments": [ + "AccountId" + ], + "documentation": [ + " Someone has renounced their candidacy." + ] + }, + { + "name": "CandidateSlashed", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " A \\[candidate\\] was slashed by \\[amount\\] due to failing to obtain a seat as member or", + " runner-up.", + "", + " Note that old members and runners-up are also candidates." + ] + }, + { + "name": "SeatHolderSlashed", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " A \\[seat holder\\] was slashed by \\[amount\\] by being forcefully removed from the set." + ] + } + ], + "constants": [ + { + "name": "CandidacyBond", + "ty": "BalanceOf", + "value": [ + 0, + 16, + 165, + 212, + 232, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [] + }, + { + "name": "VotingBondBase", + "ty": "BalanceOf", + "value": [ + 0, + 112, + 19, + 183, + 46, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [] + }, + { + "name": "VotingBondFactor", + "ty": "BalanceOf", + "value": [ + 0, + 208, + 18, + 19, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [] + }, + { + "name": "DesiredMembers", + "ty": "u32", + "value": [ + 13, + 0, + 0, + 0 + ], + "documentation": [] + }, + { + "name": "DesiredRunnersUp", + "ty": "u32", + "value": [ + 20, + 0, + 0, + 0 + ], + "documentation": [] + }, + { + "name": "TermDuration", + "ty": "T::BlockNumber", + "value": [ + 192, + 137, + 1, + 0 + ], + "documentation": [] + }, + { + "name": "ModuleId", + "ty": "LockIdentifier", + "value": [ + 112, + 104, + 114, + 101, + 108, + 101, + 99, + 116 + ], + "documentation": [] + } + ], + "errors": [ + { + "name": "UnableToVote", + "documentation": [ + " Cannot vote when no candidates or members exist." + ] + }, + { + "name": "NoVotes", + "documentation": [ + " Must vote for at least one candidate." + ] + }, + { + "name": "TooManyVotes", + "documentation": [ + " Cannot vote more than candidates." + ] + }, + { + "name": "MaximumVotesExceeded", + "documentation": [ + " Cannot vote more than maximum allowed." + ] + }, + { + "name": "LowBalance", + "documentation": [ + " Cannot vote with stake less than minimum balance." + ] + }, + { + "name": "UnableToPayBond", + "documentation": [ + " Voter can not pay voting bond." + ] + }, + { + "name": "MustBeVoter", + "documentation": [ + " Must be a voter." + ] + }, + { + "name": "ReportSelf", + "documentation": [ + " Cannot report self." + ] + }, + { + "name": "DuplicatedCandidate", + "documentation": [ + " Duplicated candidate submission." + ] + }, + { + "name": "MemberSubmit", + "documentation": [ + " Member cannot re-submit candidacy." + ] + }, + { + "name": "RunnerUpSubmit", + "documentation": [ + " Runner cannot re-submit candidacy." + ] + }, + { + "name": "InsufficientCandidateFunds", + "documentation": [ + " Candidate does not have enough funds." + ] + }, + { + "name": "NotMember", + "documentation": [ + " Not a member." + ] + }, + { + "name": "InvalidWitnessData", + "documentation": [ + " The provided count of number of candidates is incorrect." + ] + }, + { + "name": "InvalidVoteCount", + "documentation": [ + " The provided count of number of votes is incorrect." + ] + }, + { + "name": "InvalidRenouncing", + "documentation": [ + " The renouncing origin presented a wrong `Renouncing` parameter." + ] + }, + { + "name": "InvalidReplacement", + "documentation": [ + " Prediction regarding replacement after member removal is wrong." + ] + } + ], + "index": 17 + }, + { + "name": "TechnicalMembership", + "storage": { + "prefix": "Instance1Membership", + "entries": [ + { + "name": "Members", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " The current membership, stored as an ordered Vec." + ] + }, + { + "name": "Prime", + "modifier": "Optional", + "ty": { + "Plain": "T::AccountId" + }, + "default": [ + 0 + ], + "documentation": [ + " The current prime member, if one exists." + ] + } + ] + }, + "calls": [ + { + "name": "add_member", + "arguments": [ + { + "name": "who", + "ty": "T::AccountId" + } + ], + "documentation": [ + " Add a member `who` to the set.", + "", + " May only be called from `T::AddOrigin`." + ] + }, + { + "name": "remove_member", + "arguments": [ + { + "name": "who", + "ty": "T::AccountId" + } + ], + "documentation": [ + " Remove a member `who` from the set.", + "", + " May only be called from `T::RemoveOrigin`." + ] + }, + { + "name": "swap_member", + "arguments": [ + { + "name": "remove", + "ty": "T::AccountId" + }, + { + "name": "add", + "ty": "T::AccountId" + } + ], + "documentation": [ + " Swap out one member `remove` for another `add`.", + "", + " May only be called from `T::SwapOrigin`.", + "", + " Prime membership is *not* passed from `remove` to `add`, if extant." + ] + }, + { + "name": "reset_members", + "arguments": [ + { + "name": "members", + "ty": "Vec" + } + ], + "documentation": [ + " Change the membership to a new set, disregarding the existing membership. Be nice and", + " pass `members` pre-sorted.", + "", + " May only be called from `T::ResetOrigin`." + ] + }, + { + "name": "change_key", + "arguments": [ + { + "name": "new", + "ty": "T::AccountId" + } + ], + "documentation": [ + " Swap out the sending member for some other key `new`.", + "", + " May only be called from `Signed` origin of a current member.", + "", + " Prime membership is passed from the origin account to `new`, if extant." + ] + }, + { + "name": "set_prime", + "arguments": [ + { + "name": "who", + "ty": "T::AccountId" + } + ], + "documentation": [ + " Set the prime member. Must be a current member.", + "", + " May only be called from `T::PrimeOrigin`." + ] + }, + { + "name": "clear_prime", + "arguments": [], + "documentation": [ + " Remove the prime member if it exists.", + "", + " May only be called from `T::PrimeOrigin`." + ] + } + ], + "event": [ + { + "name": "MemberAdded", + "arguments": [], + "documentation": [ + " The given member was added; see the transaction for who." + ] + }, + { + "name": "MemberRemoved", + "arguments": [], + "documentation": [ + " The given member was removed; see the transaction for who." + ] + }, + { + "name": "MembersSwapped", + "arguments": [], + "documentation": [ + " Two members were swapped; see the transaction for who." + ] + }, + { + "name": "MembersReset", + "arguments": [], + "documentation": [ + " The membership was reset; see the transaction for who the new set is." + ] + }, + { + "name": "KeyChanged", + "arguments": [], + "documentation": [ + " One of the members' keys changed." + ] + }, + { + "name": "Dummy", + "arguments": [ + "sp_std::marker::PhantomData<(AccountId, Event)>" + ], + "documentation": [ + " Phantom member, never used." + ] + } + ], + "constants": [], + "errors": [], + "index": 18 + }, + { + "name": "Treasury", + "storage": { + "prefix": "Treasury", + "entries": [ + { + "name": "ProposalCount", + "modifier": "Default", + "ty": { + "Plain": "ProposalIndex" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Number of proposals that have been made." + ] + }, + { + "name": "Proposals", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "ProposalIndex", + "value": "Proposal>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Proposals that have been made." + ] + }, + { + "name": "Approvals", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " Proposal indices that have been approved but not yet awarded." + ] + } + ] + }, + "calls": [ + { + "name": "propose_spend", + "arguments": [ + { + "name": "value", + "ty": "Compact>" + }, + { + "name": "beneficiary", + "ty": "::Source" + } + ], + "documentation": [ + " Put forward a suggestion for spending. A deposit proportional to the value", + " is reserved and slashed if the proposal is rejected. It is returned once the", + " proposal is awarded.", + "", + " # ", + " - Complexity: O(1)", + " - DbReads: `ProposalCount`, `origin account`", + " - DbWrites: `ProposalCount`, `Proposals`, `origin account`", + " # " + ] + }, + { + "name": "reject_proposal", + "arguments": [ + { + "name": "proposal_id", + "ty": "Compact" + } + ], + "documentation": [ + " Reject a proposed spend. The original deposit will be slashed.", + "", + " May only be called from `T::RejectOrigin`.", + "", + " # ", + " - Complexity: O(1)", + " - DbReads: `Proposals`, `rejected proposer account`", + " - DbWrites: `Proposals`, `rejected proposer account`", + " # " + ] + }, + { + "name": "approve_proposal", + "arguments": [ + { + "name": "proposal_id", + "ty": "Compact" + } + ], + "documentation": [ + " Approve a proposal. At a later time, the proposal will be allocated to the beneficiary", + " and the original deposit will be returned.", + "", + " May only be called from `T::ApproveOrigin`.", + "", + " # ", + " - Complexity: O(1).", + " - DbReads: `Proposals`, `Approvals`", + " - DbWrite: `Approvals`", + " # " + ] + } + ], + "event": [ + { + "name": "Proposed", + "arguments": [ + "ProposalIndex" + ], + "documentation": [ + " New proposal. \\[proposal_index\\]" + ] + }, + { + "name": "Spending", + "arguments": [ + "Balance" + ], + "documentation": [ + " We have ended a spend period and will now allocate funds. \\[budget_remaining\\]" + ] + }, + { + "name": "Awarded", + "arguments": [ + "ProposalIndex", + "Balance", + "AccountId" + ], + "documentation": [ + " Some funds have been allocated. \\[proposal_index, award, beneficiary\\]" + ] + }, + { + "name": "Rejected", + "arguments": [ + "ProposalIndex", + "Balance" + ], + "documentation": [ + " A proposal was rejected; funds were slashed. \\[proposal_index, slashed\\]" + ] + }, + { + "name": "Burnt", + "arguments": [ + "Balance" + ], + "documentation": [ + " Some of our funds have been burnt. \\[burn\\]" + ] + }, + { + "name": "Rollover", + "arguments": [ + "Balance" + ], + "documentation": [ + " Spending has finished; this is the amount that rolls over until next spend.", + " \\[budget_remaining\\]" + ] + }, + { + "name": "Deposit", + "arguments": [ + "Balance" + ], + "documentation": [ + " Some funds have been deposited. \\[deposit\\]" + ] + } + ], + "constants": [ + { + "name": "ProposalBond", + "ty": "Permill", + "value": [ + 80, + 195, + 0, + 0 + ], + "documentation": [ + " Fraction of a proposal's value that should be bonded in order to place the proposal.", + " An accepted proposal gets these back. A rejected proposal does not." + ] + }, + { + "name": "ProposalBondMinimum", + "ty": "BalanceOf", + "value": [ + 0, + 16, + 165, + 212, + 232, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Minimum amount of funds that should be placed in a deposit for making a proposal." + ] + }, + { + "name": "SpendPeriod", + "ty": "T::BlockNumber", + "value": [ + 0, + 70, + 5, + 0 + ], + "documentation": [ + " Period between successive spends." + ] + }, + { + "name": "Burn", + "ty": "Permill", + "value": [ + 16, + 39, + 0, + 0 + ], + "documentation": [ + " Percentage of spare funds (if any) that are burnt per spend period." + ] + }, + { + "name": "ModuleId", + "ty": "ModuleId", + "value": [ + 112, + 121, + 47, + 116, + 114, + 115, + 114, + 121 + ], + "documentation": [ + " The treasury's module id, used for deriving its sovereign account ID." + ] + } + ], + "errors": [ + { + "name": "InsufficientProposersBalance", + "documentation": [ + " Proposer's balance is too low." + ] + }, + { + "name": "InvalidIndex", + "documentation": [ + " No proposal or bounty at that index." + ] + } + ], + "index": 19 + }, + { + "name": "Claims", + "storage": { + "prefix": "Claims", + "entries": [ + { + "name": "Claims", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "EthereumAddress", + "value": "BalanceOf", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [] + }, + { + "name": "Total", + "modifier": "Default", + "ty": { + "Plain": "BalanceOf" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [] + }, + { + "name": "Vesting", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "EthereumAddress", + "value": "(BalanceOf, BalanceOf, T::BlockNumber)", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Vesting schedule for a claim.", + " First balance is the total amount that should be held for vesting.", + " Second balance is how much should be unlocked per block.", + " The block number is when the vesting should start." + ] + }, + { + "name": "Signing", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "EthereumAddress", + "value": "StatementKind", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " The statement kind that must be signed, if any." + ] + }, + { + "name": "Preclaims", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "T::AccountId", + "value": "EthereumAddress", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Pre-claimed Ethereum accounts, by the Account ID that they are claimed to." + ] + } + ] + }, + "calls": [ + { + "name": "claim", + "arguments": [ + { + "name": "dest", + "ty": "T::AccountId" + }, + { + "name": "ethereum_signature", + "ty": "EcdsaSignature" + } + ], + "documentation": [ + " Make a claim to collect your DOTs.", + "", + " The dispatch origin for this call must be _None_.", + "", + " Unsigned Validation:", + " A call to claim is deemed valid if the signature provided matches", + " the expected signed message of:", + "", + " > Ethereum Signed Message:", + " > (configured prefix string)(address)", + "", + " and `address` matches the `dest` account.", + "", + " Parameters:", + " - `dest`: The destination account to payout the claim.", + " - `ethereum_signature`: The signature of an ethereum signed message", + " matching the format described above.", + "", + " ", + " The weight of this call is invariant over the input parameters.", + " Weight includes logic to validate unsigned `claim` call.", + "", + " Total Complexity: O(1)", + " " + ] + }, + { + "name": "mint_claim", + "arguments": [ + { + "name": "who", + "ty": "EthereumAddress" + }, + { + "name": "value", + "ty": "BalanceOf" + }, + { + "name": "vesting_schedule", + "ty": "Option<(BalanceOf, BalanceOf, T::BlockNumber)>" + }, + { + "name": "statement", + "ty": "Option" + } + ], + "documentation": [ + " Mint a new claim to collect DOTs.", + "", + " The dispatch origin for this call must be _Root_.", + "", + " Parameters:", + " - `who`: The Ethereum address allowed to collect this claim.", + " - `value`: The number of DOTs that will be claimed.", + " - `vesting_schedule`: An optional vesting schedule for these DOTs.", + "", + " ", + " The weight of this call is invariant over the input parameters.", + " We assume worst case that both vesting and statement is being inserted.", + "", + " Total Complexity: O(1)", + " " + ] + }, + { + "name": "claim_attest", + "arguments": [ + { + "name": "dest", + "ty": "T::AccountId" + }, + { + "name": "ethereum_signature", + "ty": "EcdsaSignature" + }, + { + "name": "statement", + "ty": "Vec" + } + ], + "documentation": [ + " Make a claim to collect your DOTs by signing a statement.", + "", + " The dispatch origin for this call must be _None_.", + "", + " Unsigned Validation:", + " A call to `claim_attest` is deemed valid if the signature provided matches", + " the expected signed message of:", + "", + " > Ethereum Signed Message:", + " > (configured prefix string)(address)(statement)", + "", + " and `address` matches the `dest` account; the `statement` must match that which is", + " expected according to your purchase arrangement.", + "", + " Parameters:", + " - `dest`: The destination account to payout the claim.", + " - `ethereum_signature`: The signature of an ethereum signed message", + " matching the format described above.", + " - `statement`: The identity of the statement which is being attested to in the signature.", + "", + " ", + " The weight of this call is invariant over the input parameters.", + " Weight includes logic to validate unsigned `claim_attest` call.", + "", + " Total Complexity: O(1)", + " " + ] + }, + { + "name": "attest", + "arguments": [ + { + "name": "statement", + "ty": "Vec" + } + ], + "documentation": [ + " Attest to a statement, needed to finalize the claims process.", + "", + " WARNING: Insecure unless your chain includes `PrevalidateAttests` as a `SignedExtension`.", + "", + " Unsigned Validation:", + " A call to attest is deemed valid if the sender has a `Preclaim` registered", + " and provides a `statement` which is expected for the account.", + "", + " Parameters:", + " - `statement`: The identity of the statement which is being attested to in the signature.", + "", + " ", + " The weight of this call is invariant over the input parameters.", + " Weight includes logic to do pre-validation on `attest` call.", + "", + " Total Complexity: O(1)", + " " + ] + }, + { + "name": "move_claim", + "arguments": [ + { + "name": "old", + "ty": "EthereumAddress" + }, + { + "name": "new", + "ty": "EthereumAddress" + }, + { + "name": "maybe_preclaim", + "ty": "Option" + } + ], + "documentation": [] + } + ], + "event": [ + { + "name": "Claimed", + "arguments": [ + "AccountId", + "EthereumAddress", + "Balance" + ], + "documentation": [ + " Someone claimed some DOTs. [who, ethereum_address, amount]" + ] + } + ], + "constants": [ + { + "name": "Prefix", + "ty": "&[u8]", + "value": [ + 132, + 80, + 97, + 121, + 32, + 68, + 79, + 84, + 115, + 32, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 80, + 111, + 108, + 107, + 97, + 100, + 111, + 116, + 32, + 97, + 99, + 99, + 111, + 117, + 110, + 116, + 58 + ], + "documentation": [ + " The Prefix that is used in signed Ethereum messages for this network" + ] + } + ], + "errors": [ + { + "name": "InvalidEthereumSignature", + "documentation": [ + " Invalid Ethereum signature." + ] + }, + { + "name": "SignerHasNoClaim", + "documentation": [ + " Ethereum address has no claim." + ] + }, + { + "name": "SenderHasNoClaim", + "documentation": [ + " Account ID sending tx has no claim." + ] + }, + { + "name": "PotUnderflow", + "documentation": [ + " There's not enough in the pot to pay out some unvested amount. Generally implies a logic", + " error." + ] + }, + { + "name": "InvalidStatement", + "documentation": [ + " A needed statement was not included." + ] + }, + { + "name": "VestedBalanceExists", + "documentation": [ + " The account already has a vested balance." + ] + } + ], + "index": 24 + }, + { + "name": "Vesting", + "storage": { + "prefix": "Vesting", + "entries": [ + { + "name": "Vesting", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::AccountId", + "value": "VestingInfo, T::BlockNumber>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Information regarding the vesting of a given account." + ] + } + ] + }, + "calls": [ + { + "name": "vest", + "arguments": [], + "documentation": [ + " 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`.", + "", + " # ", + " - `O(1)`.", + " - DbWeight: 2 Reads, 2 Writes", + " - Reads: Vesting Storage, Balances Locks, [Sender Account]", + " - Writes: Vesting Storage, Balances Locks, [Sender Account]", + " # " + ] + }, + { + "name": "vest_other", + "arguments": [ + { + "name": "target", + "ty": "::Source" + } + ], + "documentation": [ + " 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`.", + "", + " # ", + " - `O(1)`.", + " - DbWeight: 3 Reads, 3 Writes", + " - Reads: Vesting Storage, Balances Locks, Target Account", + " - Writes: Vesting Storage, Balances Locks, Target Account", + " # " + ] + }, + { + "name": "vested_transfer", + "arguments": [ + { + "name": "target", + "ty": "::Source" + }, + { + "name": "schedule", + "ty": "VestingInfo, T::BlockNumber>" + } + ], + "documentation": [ + " 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`.", + "", + " # ", + " - `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]", + " # " + ] + }, + { + "name": "force_vested_transfer", + "arguments": [ + { + "name": "source", + "ty": "::Source" + }, + { + "name": "target", + "ty": "::Source" + }, + { + "name": "schedule", + "ty": "VestingInfo, T::BlockNumber>" + } + ], + "documentation": [ + " 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`.", + "", + " # ", + " - `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", + " # " + ] + } + ], + "event": [ + { + "name": "VestingUpdated", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " 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", + "arguments": [ + "AccountId" + ], + "documentation": [ + " An \\[account\\] has become fully vested. No further vesting can happen." + ] + } + ], + "constants": [ + { + "name": "MinVestedTransfer", + "ty": "BalanceOf", + "value": [ + 0, + 16, + 165, + 212, + 232, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The minimum amount transferred to call `vested_transfer`." + ] + } + ], + "errors": [ + { + "name": "NotVesting", + "documentation": [ + " The account given is not vesting." + ] + }, + { + "name": "ExistingVestingSchedule", + "documentation": [ + " An existing vesting schedule already exists for this account that cannot be clobbered." + ] + }, + { + "name": "AmountLow", + "documentation": [ + " Amount being transferred is too low to create a vesting schedule." + ] + } + ], + "index": 25 + }, + { + "name": "Utility", + "storage": null, + "calls": [ + { + "name": "batch", + "arguments": [ + { + "name": "calls", + "ty": "Vec<::Call>" + } + ], + "documentation": [ + " Send a batch of dispatch calls.", + "", + " May be called from any origin.", + "", + " - `calls`: The calls to be dispatched from the same origin.", + "", + " If origin is root then call are dispatch without checking origin filter. (This includes", + " bypassing `frame_system::Config::BaseCallFilter`).", + "", + " # ", + " - Complexity: O(C) where C is the number of calls to be batched.", + " # ", + "", + " 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", + "arguments": [ + { + "name": "index", + "ty": "u16" + }, + { + "name": "call", + "ty": "Box<::Call>" + } + ], + "documentation": [ + " Send a call through an indexed pseudonym of the sender.", + "", + " Filter from origin are passed along. The call will be dispatched with an origin which", + " use the same filter as the origin of this call.", + "", + " NOTE: If you need to ensure that any account-based filtering is not honored (i.e.", + " because you expect `proxy` to have been used prior in the call stack and you do not want", + " the call restrictions to apply to any sub-accounts), then use `as_multi_threshold_1`", + " in the Multisig pallet instead.", + "", + " NOTE: Prior to version *12, this was called `as_limited_sub`.", + "", + " The dispatch origin for this call must be _Signed_." + ] + }, + { + "name": "batch_all", + "arguments": [ + { + "name": "calls", + "ty": "Vec<::Call>" + } + ], + "documentation": [ + " Send a batch of dispatch calls and atomically execute them.", + " The whole transaction will rollback and fail if any of the calls failed.", + "", + " May be called from any origin.", + "", + " - `calls`: The calls to be dispatched from the same origin.", + "", + " If origin is root then call are dispatch without checking origin filter. (This includes", + " bypassing `frame_system::Config::BaseCallFilter`).", + "", + " # ", + " - Complexity: O(C) where C is the number of calls to be batched.", + " # " + ] + } + ], + "event": [ + { + "name": "BatchInterrupted", + "arguments": [ + "u32", + "DispatchError" + ], + "documentation": [ + " Batch of dispatches did not complete fully. Index of first failing dispatch given, as", + " well as the error. \\[index, error\\]" + ] + }, + { + "name": "BatchCompleted", + "arguments": [], + "documentation": [ + " Batch of dispatches completed fully with no error." + ] + } + ], + "constants": [], + "errors": [], + "index": 26 + }, + { + "name": "Identity", + "storage": { + "prefix": "Identity", + "entries": [ + { + "name": "IdentityOf", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "Registration>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Information that is pertinent to identify the entity behind an account.", + "", + " TWOX-NOTE: OK ― `AccountId` is a secure hash." + ] + }, + { + "name": "SuperOf", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::AccountId", + "value": "(T::AccountId, Data)", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " The super-identity of an alternative \"sub\" identity together with its name, within that", + " context. If the account is not some other account's sub-identity, then just `None`." + ] + }, + { + "name": "SubsOf", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "(BalanceOf, Vec)", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Alternative \"sub\" identities of this account.", + "", + " The first item is the deposit, the second is a vector of the accounts.", + "", + " TWOX-NOTE: OK ― `AccountId` is a secure hash." + ] + }, + { + "name": "Registrars", + "modifier": "Default", + "ty": { + "Plain": "Vec, T::AccountId>>>" + }, + "default": [ + 0 + ], + "documentation": [ + " The set of registrars. Not expected to get very big as can only be added through a", + " special origin (likely a council motion).", + "", + " The index into this can be cast to `RegistrarIndex` to get a valid value." + ] + } + ] + }, + "calls": [ + { + "name": "add_registrar", + "arguments": [ + { + "name": "account", + "ty": "T::AccountId" + } + ], + "documentation": [ + " Add a registrar to the system.", + "", + " The dispatch origin for this call must be `T::RegistrarOrigin`.", + "", + " - `account`: the account of the registrar.", + "", + " Emits `RegistrarAdded` if successful.", + "", + " # ", + " - `O(R)` where `R` registrar-count (governance-bounded and code-bounded).", + " - One storage mutation (codec `O(R)`).", + " - One event.", + " # " + ] + }, + { + "name": "set_identity", + "arguments": [ + { + "name": "info", + "ty": "IdentityInfo" + } + ], + "documentation": [ + " Set an account's identity information and reserve the appropriate deposit.", + "", + " If the account already has identity information, the deposit is taken as part payment", + " for the new deposit.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " - `info`: The identity information.", + "", + " Emits `IdentitySet` if successful.", + "", + " # ", + " - `O(X + X' + R)`", + " - where `X` additional-field-count (deposit-bounded and code-bounded)", + " - where `R` judgements-count (registrar-count-bounded)", + " - One balance reserve operation.", + " - One storage mutation (codec-read `O(X' + R)`, codec-write `O(X + R)`).", + " - One event.", + " # " + ] + }, + { + "name": "set_subs", + "arguments": [ + { + "name": "subs", + "ty": "Vec<(T::AccountId, Data)>" + } + ], + "documentation": [ + " Set the sub-accounts of the sender.", + "", + " Payment: Any aggregate balance reserved by previous `set_subs` calls will be returned", + " and an amount `SubAccountDeposit` will be reserved for each item in `subs`.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must have a registered", + " identity.", + "", + " - `subs`: The identity's (new) sub-accounts.", + "", + " # ", + " - `O(P + S)`", + " - where `P` old-subs-count (hard- and deposit-bounded).", + " - where `S` subs-count (hard- and deposit-bounded).", + " - At most one balance operations.", + " - DB:", + " - `P + S` storage mutations (codec complexity `O(1)`)", + " - One storage read (codec complexity `O(P)`).", + " - One storage write (codec complexity `O(S)`).", + " - One storage-exists (`IdentityOf::contains_key`).", + " # " + ] + }, + { + "name": "clear_identity", + "arguments": [], + "documentation": [ + " Clear an account's identity info and all sub-accounts and return all deposits.", + "", + " Payment: All reserved balances on the account are returned.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must have a registered", + " identity.", + "", + " Emits `IdentityCleared` if successful.", + "", + " # ", + " - `O(R + S + X)`", + " - where `R` registrar-count (governance-bounded).", + " - where `S` subs-count (hard- and deposit-bounded).", + " - where `X` additional-field-count (deposit-bounded and code-bounded).", + " - One balance-unreserve operation.", + " - `2` storage reads and `S + 2` storage deletions.", + " - One event.", + " # " + ] + }, + { + "name": "request_judgement", + "arguments": [ + { + "name": "reg_index", + "ty": "Compact" + }, + { + "name": "max_fee", + "ty": "Compact>" + } + ], + "documentation": [ + " Request a judgement from a registrar.", + "", + " Payment: At most `max_fee` will be reserved for payment to the registrar if judgement", + " given.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must have a", + " registered identity.", + "", + " - `reg_index`: The index of the registrar whose judgement is requested.", + " - `max_fee`: The maximum fee that may be paid. This should just be auto-populated as:", + "", + " ```nocompile", + " Self::registrars().get(reg_index).unwrap().fee", + " ```", + "", + " Emits `JudgementRequested` if successful.", + "", + " # ", + " - `O(R + X)`.", + " - One balance-reserve operation.", + " - Storage: 1 read `O(R)`, 1 mutate `O(X + R)`.", + " - One event.", + " # " + ] + }, + { + "name": "cancel_request", + "arguments": [ + { + "name": "reg_index", + "ty": "RegistrarIndex" + } + ], + "documentation": [ + " Cancel a previous request.", + "", + " Payment: A previously reserved deposit is returned on success.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must have a", + " registered identity.", + "", + " - `reg_index`: The index of the registrar whose judgement is no longer requested.", + "", + " Emits `JudgementUnrequested` if successful.", + "", + " # ", + " - `O(R + X)`.", + " - One balance-reserve operation.", + " - One storage mutation `O(R + X)`.", + " - One event", + " # " + ] + }, + { + "name": "set_fee", + "arguments": [ + { + "name": "index", + "ty": "Compact" + }, + { + "name": "fee", + "ty": "Compact>" + } + ], + "documentation": [ + " Set the fee required for a judgement to be requested from a registrar.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must be the account", + " of the registrar whose index is `index`.", + "", + " - `index`: the index of the registrar whose fee is to be set.", + " - `fee`: the new fee.", + "", + " # ", + " - `O(R)`.", + " - One storage mutation `O(R)`.", + " - Benchmark: 7.315 + R * 0.329 µs (min squares analysis)", + " # " + ] + }, + { + "name": "set_account_id", + "arguments": [ + { + "name": "index", + "ty": "Compact" + }, + { + "name": "new", + "ty": "T::AccountId" + } + ], + "documentation": [ + " Change the account associated with a registrar.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must be the account", + " of the registrar whose index is `index`.", + "", + " - `index`: the index of the registrar whose fee is to be set.", + " - `new`: the new account ID.", + "", + " # ", + " - `O(R)`.", + " - One storage mutation `O(R)`.", + " - Benchmark: 8.823 + R * 0.32 µs (min squares analysis)", + " # " + ] + }, + { + "name": "set_fields", + "arguments": [ + { + "name": "index", + "ty": "Compact" + }, + { + "name": "fields", + "ty": "IdentityFields" + } + ], + "documentation": [ + " Set the field information for a registrar.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must be the account", + " of the registrar whose index is `index`.", + "", + " - `index`: the index of the registrar whose fee is to be set.", + " - `fields`: the fields that the registrar concerns themselves with.", + "", + " # ", + " - `O(R)`.", + " - One storage mutation `O(R)`.", + " - Benchmark: 7.464 + R * 0.325 µs (min squares analysis)", + " # " + ] + }, + { + "name": "provide_judgement", + "arguments": [ + { + "name": "reg_index", + "ty": "Compact" + }, + { + "name": "target", + "ty": "::Source" + }, + { + "name": "judgement", + "ty": "Judgement>" + } + ], + "documentation": [ + " Provide a judgement for an account's identity.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must be the account", + " of the registrar whose index is `reg_index`.", + "", + " - `reg_index`: the index of the registrar whose judgement is being made.", + " - `target`: the account whose identity the judgement is upon. This must be an account", + " with a registered identity.", + " - `judgement`: the judgement of the registrar of index `reg_index` about `target`.", + "", + " Emits `JudgementGiven` if successful.", + "", + " # ", + " - `O(R + X)`.", + " - One balance-transfer operation.", + " - Up to one account-lookup operation.", + " - Storage: 1 read `O(R)`, 1 mutate `O(R + X)`.", + " - One event.", + " # " + ] + }, + { + "name": "kill_identity", + "arguments": [ + { + "name": "target", + "ty": "::Source" + } + ], + "documentation": [ + " Remove an account's identity and sub-account information and slash the deposits.", + "", + " Payment: Reserved balances from `set_subs` and `set_identity` are slashed and handled by", + " `Slash`. Verification request deposits are not returned; they should be cancelled", + " manually using `cancel_request`.", + "", + " The dispatch origin for this call must match `T::ForceOrigin`.", + "", + " - `target`: the account whose identity the judgement is upon. This must be an account", + " with a registered identity.", + "", + " Emits `IdentityKilled` if successful.", + "", + " # ", + " - `O(R + S + X)`.", + " - One balance-reserve operation.", + " - `S + 2` storage mutations.", + " - One event.", + " # " + ] + }, + { + "name": "add_sub", + "arguments": [ + { + "name": "sub", + "ty": "::Source" + }, + { + "name": "data", + "ty": "Data" + } + ], + "documentation": [ + " Add the given account to the sender's subs.", + "", + " Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated", + " to the sender.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must have a registered", + " sub identity of `sub`." + ] + }, + { + "name": "rename_sub", + "arguments": [ + { + "name": "sub", + "ty": "::Source" + }, + { + "name": "data", + "ty": "Data" + } + ], + "documentation": [ + " Alter the associated name of the given sub-account.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must have a registered", + " sub identity of `sub`." + ] + }, + { + "name": "remove_sub", + "arguments": [ + { + "name": "sub", + "ty": "::Source" + } + ], + "documentation": [ + " Remove the given account from the sender's subs.", + "", + " Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated", + " to the sender.", + "", + " The dispatch origin for this call must be _Signed_ and the sender must have a registered", + " sub identity of `sub`." + ] + }, + { + "name": "quit_sub", + "arguments": [], + "documentation": [ + " Remove the sender as a sub-account.", + "", + " Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated", + " to the sender (*not* the original depositor).", + "", + " The dispatch origin for this call must be _Signed_ and the sender must have a registered", + " super-identity.", + "", + " NOTE: This should not normally be used, but is provided in the case that the non-", + " controller of an account is maliciously registered as a sub-account." + ] + } + ], + "event": [ + { + "name": "IdentitySet", + "arguments": [ + "AccountId" + ], + "documentation": [ + " A name was set or reset (which will remove all judgements). \\[who\\]" + ] + }, + { + "name": "IdentityCleared", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " A name was cleared, and the given balance returned. \\[who, deposit\\]" + ] + }, + { + "name": "IdentityKilled", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " A name was removed and the given balance slashed. \\[who, deposit\\]" + ] + }, + { + "name": "JudgementRequested", + "arguments": [ + "AccountId", + "RegistrarIndex" + ], + "documentation": [ + " A judgement was asked from a registrar. \\[who, registrar_index\\]" + ] + }, + { + "name": "JudgementUnrequested", + "arguments": [ + "AccountId", + "RegistrarIndex" + ], + "documentation": [ + " A judgement request was retracted. \\[who, registrar_index\\]" + ] + }, + { + "name": "JudgementGiven", + "arguments": [ + "AccountId", + "RegistrarIndex" + ], + "documentation": [ + " A judgement was given by a registrar. \\[target, registrar_index\\]" + ] + }, + { + "name": "RegistrarAdded", + "arguments": [ + "RegistrarIndex" + ], + "documentation": [ + " A registrar was added. \\[registrar_index\\]" + ] + }, + { + "name": "SubIdentityAdded", + "arguments": [ + "AccountId", + "AccountId", + "Balance" + ], + "documentation": [ + " A sub-identity was added to an identity and the deposit paid. \\[sub, main, deposit\\]" + ] + }, + { + "name": "SubIdentityRemoved", + "arguments": [ + "AccountId", + "AccountId", + "Balance" + ], + "documentation": [ + " A sub-identity was removed from an identity and the deposit freed.", + " \\[sub, main, deposit\\]" + ] + }, + { + "name": "SubIdentityRevoked", + "arguments": [ + "AccountId", + "AccountId", + "Balance" + ], + "documentation": [ + " A sub-identity was cleared, and the given deposit repatriated from the", + " main identity account to the sub-identity account. \\[sub, main, deposit\\]" + ] + } + ], + "constants": [ + { + "name": "BasicDeposit", + "ty": "BalanceOf", + "value": [ + 0, + 125, + 181, + 42, + 47, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount held on deposit for a registered identity." + ] + }, + { + "name": "FieldDeposit", + "ty": "BalanceOf", + "value": [ + 0, + 205, + 86, + 39, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount held on deposit per additional field for a registered identity." + ] + }, + { + "name": "SubAccountDeposit", + "ty": "BalanceOf", + "value": [ + 128, + 248, + 132, + 176, + 46, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount held on deposit for a registered subaccount. This should account for the fact", + " that one storage item's value will increase by the size of an account ID, and there will be", + " another trie item whose value is the size of an account ID plus 32 bytes." + ] + }, + { + "name": "MaxSubAccounts", + "ty": "u32", + "value": [ + 100, + 0, + 0, + 0 + ], + "documentation": [ + " The maximum number of sub-accounts allowed per identified account." + ] + }, + { + "name": "MaxAdditionalFields", + "ty": "u32", + "value": [ + 100, + 0, + 0, + 0 + ], + "documentation": [ + " Maximum number of additional fields that may be stored in an ID. Needed to bound the I/O", + " required to access an identity, but can be pretty high." + ] + }, + { + "name": "MaxRegistrars", + "ty": "u32", + "value": [ + 20, + 0, + 0, + 0 + ], + "documentation": [ + " Maxmimum number of registrars allowed in the system. Needed to bound the complexity", + " of, e.g., updating judgements." + ] + } + ], + "errors": [ + { + "name": "TooManySubAccounts", + "documentation": [ + " Too many subs-accounts." + ] + }, + { + "name": "NotFound", + "documentation": [ + " Account isn't found." + ] + }, + { + "name": "NotNamed", + "documentation": [ + " Account isn't named." + ] + }, + { + "name": "EmptyIndex", + "documentation": [ + " Empty index." + ] + }, + { + "name": "FeeChanged", + "documentation": [ + " Fee is changed." + ] + }, + { + "name": "NoIdentity", + "documentation": [ + " No identity found." + ] + }, + { + "name": "StickyJudgement", + "documentation": [ + " Sticky judgement." + ] + }, + { + "name": "JudgementGiven", + "documentation": [ + " Judgement given." + ] + }, + { + "name": "InvalidJudgement", + "documentation": [ + " Invalid judgement." + ] + }, + { + "name": "InvalidIndex", + "documentation": [ + " The index is invalid." + ] + }, + { + "name": "InvalidTarget", + "documentation": [ + " The target is invalid." + ] + }, + { + "name": "TooManyFields", + "documentation": [ + " Too many additional fields." + ] + }, + { + "name": "TooManyRegistrars", + "documentation": [ + " Maximum amount of registrars reached. Cannot add any more." + ] + }, + { + "name": "AlreadyClaimed", + "documentation": [ + " Account ID is already named." + ] + }, + { + "name": "NotSub", + "documentation": [ + " Sender is not a sub-account." + ] + }, + { + "name": "NotOwned", + "documentation": [ + " Sub-account isn't owned by sender." + ] + } + ], + "index": 28 + }, + { + "name": "Proxy", + "storage": { + "prefix": "Proxy", + "entries": [ + { + "name": "Proxies", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "(Vec>,\n BalanceOf)", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The set of account proxies. Maps the account which has delegated to the accounts", + " which are being delegated to, together with the amount held on deposit." + ] + }, + { + "name": "Announcements", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::AccountId", + "value": "(Vec, T::BlockNumber>>,\n BalanceOf)", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The announcements made by the proxy (key)." + ] + } + ] + }, + "calls": [ + { + "name": "proxy", + "arguments": [ + { + "name": "real", + "ty": "T::AccountId" + }, + { + "name": "force_proxy_type", + "ty": "Option" + }, + { + "name": "call", + "ty": "Box<::Call>" + } + ], + "documentation": [ + " Dispatch the given `call` from an account that the sender is authorised for through", + " `add_proxy`.", + "", + " Removes any corresponding announcement(s).", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " Parameters:", + " - `real`: The account that the proxy will make a call on behalf of.", + " - `force_proxy_type`: Specify the exact proxy type to be used and checked for this call.", + " - `call`: The call to be made by the `real` account.", + "", + " # ", + " Weight is a function of the number of proxies the user has (P).", + " # " + ] + }, + { + "name": "add_proxy", + "arguments": [ + { + "name": "delegate", + "ty": "T::AccountId" + }, + { + "name": "proxy_type", + "ty": "T::ProxyType" + }, + { + "name": "delay", + "ty": "T::BlockNumber" + } + ], + "documentation": [ + " Register a proxy account for the sender that is able to make calls on its behalf.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " Parameters:", + " - `proxy`: The account that the `caller` would like to make a proxy.", + " - `proxy_type`: The permissions allowed for this proxy account.", + " - `delay`: The announcement period required of the initial proxy. Will generally be", + " zero.", + "", + " # ", + " Weight is a function of the number of proxies the user has (P).", + " # " + ] + }, + { + "name": "remove_proxy", + "arguments": [ + { + "name": "delegate", + "ty": "T::AccountId" + }, + { + "name": "proxy_type", + "ty": "T::ProxyType" + }, + { + "name": "delay", + "ty": "T::BlockNumber" + } + ], + "documentation": [ + " Unregister a proxy account for the sender.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " Parameters:", + " - `proxy`: The account that the `caller` would like to remove as a proxy.", + " - `proxy_type`: The permissions currently enabled for the removed proxy account.", + "", + " # ", + " Weight is a function of the number of proxies the user has (P).", + " # " + ] + }, + { + "name": "remove_proxies", + "arguments": [], + "documentation": [ + " Unregister all proxy accounts for the sender.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " WARNING: This may be called on accounts created by `anonymous`, however if done, then", + " the unreserved fees will be inaccessible. **All access to this account will be lost.**", + "", + " # ", + " Weight is a function of the number of proxies the user has (P).", + " # " + ] + }, + { + "name": "anonymous", + "arguments": [ + { + "name": "proxy_type", + "ty": "T::ProxyType" + }, + { + "name": "delay", + "ty": "T::BlockNumber" + }, + { + "name": "index", + "ty": "u16" + } + ], + "documentation": [ + " Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and", + " initialize it with a proxy of `proxy_type` for `origin` sender.", + "", + " Requires a `Signed` origin.", + "", + " - `proxy_type`: The type of the proxy that the sender will be registered as over the", + " new account. This will almost always be the most permissive `ProxyType` possible to", + " allow for maximum flexibility.", + " - `index`: A disambiguation index, in case this is called multiple times in the same", + " transaction (e.g. with `utility::batch`). Unless you're using `batch` you probably just", + " want to use `0`.", + " - `delay`: The announcement period required of the initial proxy. Will generally be", + " zero.", + "", + " Fails with `Duplicate` if this has already been called in this transaction, from the", + " same sender, with the same parameters.", + "", + " Fails if there are insufficient funds to pay for deposit.", + "", + " # ", + " Weight is a function of the number of proxies the user has (P).", + " # ", + " TODO: Might be over counting 1 read" + ] + }, + { + "name": "kill_anonymous", + "arguments": [ + { + "name": "spawner", + "ty": "T::AccountId" + }, + { + "name": "proxy_type", + "ty": "T::ProxyType" + }, + { + "name": "index", + "ty": "u16" + }, + { + "name": "height", + "ty": "Compact" + }, + { + "name": "ext_index", + "ty": "Compact" + } + ], + "documentation": [ + " Removes a previously spawned anonymous proxy.", + "", + " WARNING: **All access to this account will be lost.** Any funds held in it will be", + " inaccessible.", + "", + " Requires a `Signed` origin, and the sender account must have been created by a call to", + " `anonymous` with corresponding parameters.", + "", + " - `spawner`: The account that originally called `anonymous` to create this account.", + " - `index`: The disambiguation index originally passed to `anonymous`. Probably `0`.", + " - `proxy_type`: The proxy type originally passed to `anonymous`.", + " - `height`: The height of the chain when the call to `anonymous` was processed.", + " - `ext_index`: The extrinsic index in which the call to `anonymous` was processed.", + "", + " Fails with `NoPermission` in case the caller is not a previously created anonymous", + " account whose `anonymous` call has corresponding parameters.", + "", + " # ", + " Weight is a function of the number of proxies the user has (P).", + " # " + ] + }, + { + "name": "announce", + "arguments": [ + { + "name": "real", + "ty": "T::AccountId" + }, + { + "name": "call_hash", + "ty": "CallHashOf" + } + ], + "documentation": [ + " Publish the hash of a proxy-call that will be made in the future.", + "", + " This must be called some number of blocks before the corresponding `proxy` is attempted", + " if the delay associated with the proxy relationship is greater than zero.", + "", + " No more than `MaxPending` announcements may be made at any one time.", + "", + " This will take a deposit of `AnnouncementDepositFactor` as well as", + " `AnnouncementDepositBase` if there are no other pending announcements.", + "", + " The dispatch origin for this call must be _Signed_ and a proxy of `real`.", + "", + " Parameters:", + " - `real`: The account that the proxy will make a call on behalf of.", + " - `call_hash`: The hash of the call to be made by the `real` account.", + "", + " # ", + " Weight is a function of:", + " - A: the number of announcements made.", + " - P: the number of proxies the user has.", + " # " + ] + }, + { + "name": "remove_announcement", + "arguments": [ + { + "name": "real", + "ty": "T::AccountId" + }, + { + "name": "call_hash", + "ty": "CallHashOf" + } + ], + "documentation": [ + " Remove a given announcement.", + "", + " May be called by a proxy account to remove a call they previously announced and return", + " the deposit.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " Parameters:", + " - `real`: The account that the proxy will make a call on behalf of.", + " - `call_hash`: The hash of the call to be made by the `real` account.", + "", + " # ", + " Weight is a function of:", + " - A: the number of announcements made.", + " - P: the number of proxies the user has.", + " # " + ] + }, + { + "name": "reject_announcement", + "arguments": [ + { + "name": "delegate", + "ty": "T::AccountId" + }, + { + "name": "call_hash", + "ty": "CallHashOf" + } + ], + "documentation": [ + " Remove the given announcement of a delegate.", + "", + " May be called by a target (proxied) account to remove a call that one of their delegates", + " (`delegate`) has announced they want to execute. The deposit is returned.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " Parameters:", + " - `delegate`: The account that previously announced the call.", + " - `call_hash`: The hash of the call to be made.", + "", + " # ", + " Weight is a function of:", + " - A: the number of announcements made.", + " - P: the number of proxies the user has.", + " # " + ] + }, + { + "name": "proxy_announced", + "arguments": [ + { + "name": "delegate", + "ty": "T::AccountId" + }, + { + "name": "real", + "ty": "T::AccountId" + }, + { + "name": "force_proxy_type", + "ty": "Option" + }, + { + "name": "call", + "ty": "Box<::Call>" + } + ], + "documentation": [ + " 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 is a function of:", + " - A: the number of announcements made.", + " - P: the number of proxies the user has.", + " # " + ] + } + ], + "event": [ + { + "name": "ProxyExecuted", + "arguments": [ + "DispatchResult" + ], + "documentation": [ + " A proxy was executed correctly, with the given \\[result\\]." + ] + }, + { + "name": "AnonymousCreated", + "arguments": [ + "AccountId", + "AccountId", + "ProxyType", + "u16" + ], + "documentation": [ + " Anonymous account has been created by new proxy with given", + " disambiguation index and proxy type. \\[anonymous, who, proxy_type, disambiguation_index\\]" + ] + }, + { + "name": "Announced", + "arguments": [ + "AccountId", + "AccountId", + "Hash" + ], + "documentation": [ + " An announcement was placed to make a call in the future. \\[real, proxy, call_hash\\]" + ] + } + ], + "constants": [ + { + "name": "ProxyDepositBase", + "ty": "BalanceOf", + "value": [ + 0, + 132, + 178, + 149, + 46, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " 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", + "ty": "BalanceOf", + "value": [ + 128, + 102, + 171, + 19, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " 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", + "ty": "u16", + "value": [ + 32, + 0 + ], + "documentation": [ + " The maximum amount of proxies allowed for a single account." + ] + }, + { + "name": "MaxPending", + "ty": "u32", + "value": [ + 32, + 0, + 0, + 0 + ], + "documentation": [ + " The maximum amount of time-delayed announcements that are allowed to be pending." + ] + }, + { + "name": "AnnouncementDepositBase", + "ty": "BalanceOf", + "value": [ + 0, + 132, + 178, + 149, + 46, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " 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", + "ty": "BalanceOf", + "value": [ + 0, + 205, + 86, + 39, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " 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", + "documentation": [ + " There are too many proxies registered or too many announcements pending." + ] + }, + { + "name": "NotFound", + "documentation": [ + " Proxy registration not found." + ] + }, + { + "name": "NotProxy", + "documentation": [ + " Sender is not a proxy of the account to be proxied." + ] + }, + { + "name": "Unproxyable", + "documentation": [ + " A call which is incompatible with the proxy type's filter was attempted." + ] + }, + { + "name": "Duplicate", + "documentation": [ + " Account is already a proxy." + ] + }, + { + "name": "NoPermission", + "documentation": [ + " Call may not be made by proxy because it may escalate its privileges." + ] + }, + { + "name": "Unannounced", + "documentation": [ + " Announcement, if made at all, was made too recently." + ] + }, + { + "name": "NoSelfProxy", + "documentation": [ + " Cannot add self as proxy." + ] + } + ], + "index": 29 + }, + { + "name": "Multisig", + "storage": { + "prefix": "Multisig", + "entries": [ + { + "name": "Multisigs", + "modifier": "Optional", + "ty": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "T::AccountId", + "key2": "[u8; 32]", + "value": "Multisig, T::AccountId>", + "key2_hasher": "Blake2_128Concat" + } + }, + "default": [ + 0 + ], + "documentation": [ + " The set of open multisig operations." + ] + }, + { + "name": "Calls", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "[u8; 32]", + "value": "(OpaqueCall, T::AccountId, BalanceOf)", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [] + } + ] + }, + "calls": [ + { + "name": "as_multi_threshold_1", + "arguments": [ + { + "name": "other_signatories", + "ty": "Vec" + }, + { + "name": "call", + "ty": "Box<::Call>" + } + ], + "documentation": [ + " Immediately dispatch a multi-signature call using a single approval from the caller.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " - `other_signatories`: The accounts (other than the sender) who are part of the", + " multi-signature, but do not participate in the approval process.", + " - `call`: The call to be executed.", + "", + " Result is equivalent to the dispatched result.", + "", + " # ", + " O(Z + C) where Z is the length of the call and C its execution weight.", + " -------------------------------", + " - DB Weight: None", + " - Plus Call Weight", + " # " + ] + }, + { + "name": "as_multi", + "arguments": [ + { + "name": "threshold", + "ty": "u16" + }, + { + "name": "other_signatories", + "ty": "Vec" + }, + { + "name": "maybe_timepoint", + "ty": "Option>" + }, + { + "name": "call", + "ty": "OpaqueCall" + }, + { + "name": "store_call", + "ty": "bool" + }, + { + "name": "max_weight", + "ty": "Weight" + } + ], + "documentation": [ + " Register approval for a dispatch to be made from a deterministic composite account if", + " approved by a total of `threshold - 1` of `other_signatories`.", + "", + " If there are enough, then dispatch the call.", + "", + " Payment: `DepositBase` will be reserved if this is the first approval, plus", + " `threshold` times `DepositFactor`. It is returned once this dispatch happens or", + " is cancelled.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " - `threshold`: The total number of approvals for this dispatch before it is executed.", + " - `other_signatories`: The accounts (other than the sender) who can approve this", + " dispatch. May not be empty.", + " - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is", + " not the first approval, then it must be `Some`, with the timepoint (block number and", + " transaction index) of the first approval transaction.", + " - `call`: The call to be executed.", + "", + " NOTE: Unless this is the final approval, you will generally want to use", + " `approve_as_multi` instead, since it only requires a hash of the call.", + "", + " Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise", + " on success, result is `Ok` and the result from the interior call, if it was executed,", + " may be found in the deposited `MultisigExecuted` event.", + "", + " # ", + " - `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", + " # " + ] + }, + { + "name": "approve_as_multi", + "arguments": [ + { + "name": "threshold", + "ty": "u16" + }, + { + "name": "other_signatories", + "ty": "Vec" + }, + { + "name": "maybe_timepoint", + "ty": "Option>" + }, + { + "name": "call_hash", + "ty": "[u8; 32]" + }, + { + "name": "max_weight", + "ty": "Weight" + } + ], + "documentation": [ + " Register approval for a dispatch to be made from a deterministic composite account if", + " approved by a total of `threshold - 1` of `other_signatories`.", + "", + " Payment: `DepositBase` will be reserved if this is the first approval, plus", + " `threshold` times `DepositFactor`. It is returned once this dispatch happens or", + " is cancelled.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " - `threshold`: The total number of approvals for this dispatch before it is executed.", + " - `other_signatories`: The accounts (other than the sender) who can approve this", + " dispatch. May not be empty.", + " - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is", + " not the first approval, then it must be `Some`, with the timepoint (block number and", + " transaction index) of the first approval transaction.", + " - `call_hash`: The hash of the call to be executed.", + "", + " NOTE: If this is the final approval, you will want to use `as_multi` instead.", + "", + " # ", + " - `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]", + " # " + ] + }, + { + "name": "cancel_as_multi", + "arguments": [ + { + "name": "threshold", + "ty": "u16" + }, + { + "name": "other_signatories", + "ty": "Vec" + }, + { + "name": "timepoint", + "ty": "Timepoint" + }, + { + "name": "call_hash", + "ty": "[u8; 32]" + } + ], + "documentation": [ + " Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously", + " for this operation will be unreserved on success.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " - `threshold`: The total number of approvals for this dispatch before it is executed.", + " - `other_signatories`: The accounts (other than the sender) who can approve this", + " dispatch. May not be empty.", + " - `timepoint`: The timepoint (block number and transaction index) of the first approval", + " transaction for this dispatch.", + " - `call_hash`: The hash of the call to be executed.", + "", + " # ", + " - `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", + " # " + ] + } + ], + "event": [ + { + "name": "NewMultisig", + "arguments": [ + "AccountId", + "AccountId", + "CallHash" + ], + "documentation": [ + " A new multisig operation has begun. \\[approving, multisig, call_hash\\]" + ] + }, + { + "name": "MultisigApproval", + "arguments": [ + "AccountId", + "Timepoint", + "AccountId", + "CallHash" + ], + "documentation": [ + " A multisig operation has been approved by someone.", + " \\[approving, timepoint, multisig, call_hash\\]" + ] + }, + { + "name": "MultisigExecuted", + "arguments": [ + "AccountId", + "Timepoint", + "AccountId", + "CallHash", + "DispatchResult" + ], + "documentation": [ + " A multisig operation has been executed. \\[approving, timepoint, multisig, call_hash\\]" + ] + }, + { + "name": "MultisigCancelled", + "arguments": [ + "AccountId", + "Timepoint", + "AccountId", + "CallHash" + ], + "documentation": [ + " A multisig operation has been cancelled. \\[cancelling, timepoint, multisig, call_hash\\]" + ] + } + ], + "constants": [ + { + "name": "DepositBase", + "ty": "BalanceOf", + "value": [ + 0, + 140, + 97, + 197, + 46, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The base amount of currency needed to reserve for creating a multisig execution or to store", + " a dispatch call for later." + ] + }, + { + "name": "DepositFactor", + "ty": "BalanceOf", + "value": [ + 0, + 208, + 18, + 19, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount of currency needed per unit threshold when creating a multisig execution." + ] + }, + { + "name": "MaxSignatories", + "ty": "u16", + "value": [ + 100, + 0 + ], + "documentation": [ + " The maximum amount of signatories allowed for a given multisig." + ] + } + ], + "errors": [ + { + "name": "MinimumThreshold", + "documentation": [ + " Threshold must be 2 or greater." + ] + }, + { + "name": "AlreadyApproved", + "documentation": [ + " Call is already approved by this signatory." + ] + }, + { + "name": "NoApprovalsNeeded", + "documentation": [ + " Call doesn't need any (more) approvals." + ] + }, + { + "name": "TooFewSignatories", + "documentation": [ + " There are too few signatories in the list." + ] + }, + { + "name": "TooManySignatories", + "documentation": [ + " There are too many signatories in the list." + ] + }, + { + "name": "SignatoriesOutOfOrder", + "documentation": [ + " The signatories were provided out of order; they should be ordered." + ] + }, + { + "name": "SenderInSignatories", + "documentation": [ + " The sender was contained in the other signatories; it shouldn't be." + ] + }, + { + "name": "NotFound", + "documentation": [ + " Multisig operation not found when attempting to cancel." + ] + }, + { + "name": "NotOwner", + "documentation": [ + " Only the account that originally created the multisig is able to cancel it." + ] + }, + { + "name": "NoTimepoint", + "documentation": [ + " No timepoint was given, yet the multisig operation is already underway." + ] + }, + { + "name": "WrongTimepoint", + "documentation": [ + " A different timepoint was given to the multisig operation that is underway." + ] + }, + { + "name": "UnexpectedTimepoint", + "documentation": [ + " A timepoint was given, yet no multisig operation is underway." + ] + }, + { + "name": "MaxWeightTooLow", + "documentation": [ + " The maximum weight information provided was too low." + ] + }, + { + "name": "AlreadyStored", + "documentation": [ + " The data to be stored is already stored." + ] + } + ], + "index": 30 + }, + { + "name": "Bounties", + "storage": { + "prefix": "Treasury", + "entries": [ + { + "name": "BountyCount", + "modifier": "Default", + "ty": { + "Plain": "BountyIndex" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Number of bounty proposals that have been made." + ] + }, + { + "name": "Bounties", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "BountyIndex", + "value": "Bounty, T::BlockNumber>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Bounties that have been made." + ] + }, + { + "name": "BountyDescriptions", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "BountyIndex", + "value": "Vec", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " The description of each bounty." + ] + }, + { + "name": "BountyApprovals", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " Bounty indices that have been approved but not yet funded." + ] + } + ] + }, + "calls": [ + { + "name": "propose_bounty", + "arguments": [ + { + "name": "value", + "ty": "Compact>" + }, + { + "name": "description", + "ty": "Vec" + } + ], + "documentation": [ + " Propose a new bounty.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " Payment: `TipReportDepositBase` will be reserved from the origin account, as well as", + " `DataDepositPerByte` for each byte in `reason`. It will be unreserved upon approval,", + " or slashed when rejected.", + "", + " - `curator`: The curator account whom will manage this bounty.", + " - `fee`: The curator fee.", + " - `value`: The total payment amount of this bounty, curator fee included.", + " - `description`: The description of this bounty." + ] + }, + { + "name": "approve_bounty", + "arguments": [ + { + "name": "bounty_id", + "ty": "Compact" + } + ], + "documentation": [ + " Approve a bounty proposal. At a later time, the bounty will be funded and become active", + " and the original deposit will be returned.", + "", + " May only be called from `T::ApproveOrigin`.", + "", + " # ", + " - O(1).", + " # " + ] + }, + { + "name": "propose_curator", + "arguments": [ + { + "name": "bounty_id", + "ty": "Compact" + }, + { + "name": "curator", + "ty": "::Source" + }, + { + "name": "fee", + "ty": "Compact>" + } + ], + "documentation": [ + " Assign a curator to a funded bounty.", + "", + " May only be called from `T::ApproveOrigin`.", + "", + " # ", + " - O(1).", + " # " + ] + }, + { + "name": "unassign_curator", + "arguments": [ + { + "name": "bounty_id", + "ty": "Compact" + } + ], + "documentation": [ + " Unassign curator from a bounty.", + "", + " This function can only be called by the `RejectOrigin` a signed origin.", + "", + " If this function is called by the `RejectOrigin`, we assume that the curator is malicious", + " or inactive. As a result, we will slash the curator when possible.", + "", + " If the origin is the curator, we take this as a sign they are unable to do their job and", + " they willingly give up. We could slash them, but for now we allow them to recover their", + " deposit and exit without issue. (We may want to change this if it is abused.)", + "", + " Finally, the origin can be anyone if and only if the curator is \"inactive\". This allows", + " anyone in the community to call out that a curator is not doing their due diligence, and", + " we should pick a new curator. In this case the curator should also be slashed.", + "", + " # ", + " - O(1).", + " # " + ] + }, + { + "name": "accept_curator", + "arguments": [ + { + "name": "bounty_id", + "ty": "Compact" + } + ], + "documentation": [ + " Accept the curator role for a bounty.", + " A deposit will be reserved from curator and refund upon successful payout.", + "", + " May only be called from the curator.", + "", + " # ", + " - O(1).", + " # " + ] + }, + { + "name": "award_bounty", + "arguments": [ + { + "name": "bounty_id", + "ty": "Compact" + }, + { + "name": "beneficiary", + "ty": "::Source" + } + ], + "documentation": [ + " Award bounty to a beneficiary account. The beneficiary will be able to claim the funds after a delay.", + "", + " The dispatch origin for this call must be the curator of this bounty.", + "", + " - `bounty_id`: Bounty ID to award.", + " - `beneficiary`: The beneficiary account whom will receive the payout.", + "", + " # ", + " - O(1).", + " # " + ] + }, + { + "name": "claim_bounty", + "arguments": [ + { + "name": "bounty_id", + "ty": "Compact" + } + ], + "documentation": [ + " Claim the payout from an awarded bounty after payout delay.", + "", + " The dispatch origin for this call must be the beneficiary of this bounty.", + "", + " - `bounty_id`: Bounty ID to claim.", + "", + " # ", + " - O(1).", + " # " + ] + }, + { + "name": "close_bounty", + "arguments": [ + { + "name": "bounty_id", + "ty": "Compact" + } + ], + "documentation": [ + " Cancel a proposed or active bounty. All the funds will be sent to treasury and", + " the curator deposit will be unreserved if possible.", + "", + " Only `T::RejectOrigin` is able to cancel a bounty.", + "", + " - `bounty_id`: Bounty ID to cancel.", + "", + " # ", + " - O(1).", + " # " + ] + }, + { + "name": "extend_bounty_expiry", + "arguments": [ + { + "name": "bounty_id", + "ty": "Compact" + }, + { + "name": "_remark", + "ty": "Vec" + } + ], + "documentation": [ + " Extend the expiry time of an active bounty.", + "", + " The dispatch origin for this call must be the curator of this bounty.", + "", + " - `bounty_id`: Bounty ID to extend.", + " - `remark`: additional information.", + "", + " # ", + " - O(1).", + " # " + ] + } + ], + "event": [ + { + "name": "BountyProposed", + "arguments": [ + "BountyIndex" + ], + "documentation": [ + " New bounty proposal. \\[index\\]" + ] + }, + { + "name": "BountyRejected", + "arguments": [ + "BountyIndex", + "Balance" + ], + "documentation": [ + " A bounty proposal was rejected; funds were slashed. \\[index, bond\\]" + ] + }, + { + "name": "BountyBecameActive", + "arguments": [ + "BountyIndex" + ], + "documentation": [ + " A bounty proposal is funded and became active. \\[index\\]" + ] + }, + { + "name": "BountyAwarded", + "arguments": [ + "BountyIndex", + "AccountId" + ], + "documentation": [ + " A bounty is awarded to a beneficiary. \\[index, beneficiary\\]" + ] + }, + { + "name": "BountyClaimed", + "arguments": [ + "BountyIndex", + "Balance", + "AccountId" + ], + "documentation": [ + " A bounty is claimed by beneficiary. \\[index, payout, beneficiary\\]" + ] + }, + { + "name": "BountyCanceled", + "arguments": [ + "BountyIndex" + ], + "documentation": [ + " A bounty is cancelled. \\[index\\]" + ] + }, + { + "name": "BountyExtended", + "arguments": [ + "BountyIndex" + ], + "documentation": [ + " A bounty expiry is extended. \\[index\\]" + ] + } + ], + "constants": [ + { + "name": "DataDepositPerByte", + "ty": "BalanceOf", + "value": [ + 0, + 225, + 245, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount held on deposit per byte within bounty description." + ] + }, + { + "name": "BountyDepositBase", + "ty": "BalanceOf", + "value": [ + 0, + 228, + 11, + 84, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount held on deposit for placing a bounty proposal." + ] + }, + { + "name": "BountyDepositPayoutDelay", + "ty": "T::BlockNumber", + "value": [ + 0, + 194, + 1, + 0 + ], + "documentation": [ + " The delay period for which a bounty beneficiary need to wait before claim the payout." + ] + }, + { + "name": "BountyUpdatePeriod", + "ty": "T::BlockNumber", + "value": [ + 128, + 198, + 19, + 0 + ], + "documentation": [ + " Bounty duration in blocks." + ] + }, + { + "name": "BountyCuratorDeposit", + "ty": "Permill", + "value": [ + 32, + 161, + 7, + 0 + ], + "documentation": [ + " Percentage of the curator fee that will be reserved upfront as deposit for bounty curator." + ] + }, + { + "name": "BountyValueMinimum", + "ty": "BalanceOf", + "value": [ + 0, + 232, + 118, + 72, + 23, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Minimum value for a bounty." + ] + }, + { + "name": "MaximumReasonLength", + "ty": "u32", + "value": [ + 0, + 64, + 0, + 0 + ], + "documentation": [ + " Maximum acceptable reason length." + ] + } + ], + "errors": [ + { + "name": "InsufficientProposersBalance", + "documentation": [ + " Proposer's balance is too low." + ] + }, + { + "name": "InvalidIndex", + "documentation": [ + " No proposal or bounty at that index." + ] + }, + { + "name": "ReasonTooBig", + "documentation": [ + " The reason given is just too big." + ] + }, + { + "name": "UnexpectedStatus", + "documentation": [ + " The bounty status is unexpected." + ] + }, + { + "name": "RequireCurator", + "documentation": [ + " Require bounty curator." + ] + }, + { + "name": "InvalidValue", + "documentation": [ + " Invalid bounty value." + ] + }, + { + "name": "InvalidFee", + "documentation": [ + " Invalid bounty fee." + ] + }, + { + "name": "PendingPayout", + "documentation": [ + " A bounty payout is pending.", + " To cancel the bounty, you must unassign and slash the curator." + ] + }, + { + "name": "Premature", + "documentation": [ + " The bounties cannot be claimed/closed because it's still in the countdown period." + ] + } + ], + "index": 34 + }, + { + "name": "Tips", + "storage": { + "prefix": "Treasury", + "entries": [ + { + "name": "Tips", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::Hash", + "value": "OpenTip, T::BlockNumber, T::Hash>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " TipsMap that are not yet completed. Keyed by the hash of `(reason, who)` from the value.", + " This has the insecure enumerable hash function since the key itself is already", + " guaranteed to be a secure hash." + ] + }, + { + "name": "Reasons", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Identity", + "key": "T::Hash", + "value": "Vec", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Simple preimage lookup from the reason's hash to the original data. Again, has an", + " insecure enumerable hash since the key is guaranteed to be the result of a secure hash." + ] + } + ] + }, + "calls": [ + { + "name": "report_awesome", + "arguments": [ + { + "name": "reason", + "ty": "Vec" + }, + { + "name": "who", + "ty": "T::AccountId" + } + ], + "documentation": [ + " Report something `reason` that deserves a tip and claim any eventual the finder's fee.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " Payment: `TipReportDepositBase` will be reserved from the origin account, as well as", + " `DataDepositPerByte` for each byte in `reason`.", + "", + " - `reason`: The reason for, or the thing that deserves, the tip; generally this will be", + " a UTF-8-encoded URL.", + " - `who`: The account which should be credited for the tip.", + "", + " Emits `NewTip` if successful.", + "", + " # ", + " - Complexity: `O(R)` where `R` length of `reason`.", + " - encoding and hashing of 'reason'", + " - DbReads: `Reasons`, `Tips`", + " - DbWrites: `Reasons`, `Tips`", + " # " + ] + }, + { + "name": "retract_tip", + "arguments": [ + { + "name": "hash", + "ty": "T::Hash" + } + ], + "documentation": [ + " Retract a prior tip-report from `report_awesome`, and cancel the process of tipping.", + "", + " If successful, the original deposit will be unreserved.", + "", + " The dispatch origin for this call must be _Signed_ and the tip identified by `hash`", + " must have been reported by the signing account through `report_awesome` (and not", + " through `tip_new`).", + "", + " - `hash`: The identity of the open tip for which a tip value is declared. This is formed", + " as the hash of the tuple of the original tip `reason` and the beneficiary account ID.", + "", + " Emits `TipRetracted` if successful.", + "", + " # ", + " - Complexity: `O(1)`", + " - Depends on the length of `T::Hash` which is fixed.", + " - DbReads: `Tips`, `origin account`", + " - DbWrites: `Reasons`, `Tips`, `origin account`", + " # " + ] + }, + { + "name": "tip_new", + "arguments": [ + { + "name": "reason", + "ty": "Vec" + }, + { + "name": "who", + "ty": "T::AccountId" + }, + { + "name": "tip_value", + "ty": "Compact>" + } + ], + "documentation": [ + " Give a tip for something new; no finder's fee will be taken.", + "", + " The dispatch origin for this call must be _Signed_ and the signing account must be a", + " member of the `Tippers` set.", + "", + " - `reason`: The reason for, or the thing that deserves, the tip; generally this will be", + " a UTF-8-encoded URL.", + " - `who`: The account which should be credited for the tip.", + " - `tip_value`: The amount of tip that the sender would like to give. The median tip", + " value of active tippers will be given to the `who`.", + "", + " Emits `NewTip` if successful.", + "", + " # ", + " - 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`", + " # " + ] + }, + { + "name": "tip", + "arguments": [ + { + "name": "hash", + "ty": "T::Hash" + }, + { + "name": "tip_value", + "ty": "Compact>" + } + ], + "documentation": [ + " Declare a tip value for an already-open tip.", + "", + " The dispatch origin for this call must be _Signed_ and the signing account must be a", + " member of the `Tippers` set.", + "", + " - `hash`: The identity of the open tip for which a tip value is declared. This is formed", + " as the hash of the tuple of the hash of the original tip `reason` and the beneficiary", + " account ID.", + " - `tip_value`: The amount of tip that the sender would like to give. The median tip", + " value of active tippers will be given to the `who`.", + "", + " Emits `TipClosing` if the threshold of tippers has been reached and the countdown period", + " has started.", + "", + " # ", + " - 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`", + " # " + ] + }, + { + "name": "close_tip", + "arguments": [ + { + "name": "hash", + "ty": "T::Hash" + } + ], + "documentation": [ + " Close and payout a tip.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " The tip identified by `hash` must have finished its countdown period.", + "", + " - `hash`: The identity of the open tip for which a tip value is declared. This is formed", + " as the hash of the tuple of the original tip `reason` and the beneficiary account ID.", + "", + " # ", + " - 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`", + " # " + ] + }, + { + "name": "slash_tip", + "arguments": [ + { + "name": "hash", + "ty": "T::Hash" + } + ], + "documentation": [ + " Remove and slash an already-open tip.", + "", + " May only be called from `T::RejectOrigin`.", + "", + " As a result, the finder is slashed and the deposits are lost.", + "", + " Emits `TipSlashed` if successful.", + "", + " # ", + " `T` is charged as upper bound given by `ContainsLengthBound`.", + " The actual cost depends on the implementation of `T::Tippers`.", + " # " + ] + } + ], + "event": [ + { + "name": "NewTip", + "arguments": [ + "Hash" + ], + "documentation": [ + " A new tip suggestion has been opened. \\[tip_hash\\]" + ] + }, + { + "name": "TipClosing", + "arguments": [ + "Hash" + ], + "documentation": [ + " A tip suggestion has reached threshold and is closing. \\[tip_hash\\]" + ] + }, + { + "name": "TipClosed", + "arguments": [ + "Hash", + "AccountId", + "Balance" + ], + "documentation": [ + " A tip suggestion has been closed. \\[tip_hash, who, payout\\]" + ] + }, + { + "name": "TipRetracted", + "arguments": [ + "Hash" + ], + "documentation": [ + " A tip suggestion has been retracted. \\[tip_hash\\]" + ] + }, + { + "name": "TipSlashed", + "arguments": [ + "Hash", + "AccountId", + "Balance" + ], + "documentation": [ + " A tip suggestion has been slashed. \\[tip_hash, finder, deposit\\]" + ] + } + ], + "constants": [ + { + "name": "TipCountdown", + "ty": "T::BlockNumber", + "value": [ + 64, + 56, + 0, + 0 + ], + "documentation": [ + " The period for which a tip remains open after is has achieved threshold tippers." + ] + }, + { + "name": "TipFindersFee", + "ty": "Percent", + "value": [ + 20 + ], + "documentation": [ + " The amount of the final tip which goes to the original reporter of the tip." + ] + }, + { + "name": "TipReportDepositBase", + "ty": "BalanceOf", + "value": [ + 0, + 228, + 11, + 84, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount held on deposit for placing a tip report." + ] + }, + { + "name": "DataDepositPerByte", + "ty": "BalanceOf", + "value": [ + 0, + 225, + 245, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The amount held on deposit per byte within the tip report reason." + ] + }, + { + "name": "MaximumReasonLength", + "ty": "u32", + "value": [ + 0, + 64, + 0, + 0 + ], + "documentation": [ + " Maximum acceptable reason length." + ] + } + ], + "errors": [ + { + "name": "ReasonTooBig", + "documentation": [ + " The reason given is just too big." + ] + }, + { + "name": "AlreadyKnown", + "documentation": [ + " The tip was already found/started." + ] + }, + { + "name": "UnknownTip", + "documentation": [ + " The tip hash is unknown." + ] + }, + { + "name": "NotFinder", + "documentation": [ + " The account attempting to retract the tip is not the finder of the tip." + ] + }, + { + "name": "StillOpen", + "documentation": [ + " The tip cannot be claimed/closed because there are not enough tippers yet." + ] + }, + { + "name": "Premature", + "documentation": [ + " The tip cannot be claimed/closed because it's still in the countdown period." + ] + } + ], + "index": 35 + }, + { + "name": "ElectionProviderMultiPhase", + "storage": { + "prefix": "ElectionProviderMultiPhase", + "entries": [ + { + "name": "Round", + "modifier": "Default", + "ty": { + "Plain": "u32" + }, + "default": [ + 1, + 0, + 0, + 0 + ], + "documentation": [ + " Internal counter for the number of rounds.", + "", + " This is useful for de-duplication of transactions submitted to the pool, and general", + " diagnostics of the pallet.", + "", + " This is merely incremented once per every time that an upstream `elect` is called." + ] + }, + { + "name": "CurrentPhase", + "modifier": "Default", + "ty": { + "Plain": "Phase" + }, + "default": [ + 0 + ], + "documentation": [ + " Current phase." + ] + }, + { + "name": "QueuedSolution", + "modifier": "Optional", + "ty": { + "Plain": "ReadySolution" + }, + "default": [ + 0 + ], + "documentation": [ + " Current best solution, signed or unsigned, queued to be returned upon `elect`." + ] + }, + { + "name": "Snapshot", + "modifier": "Optional", + "ty": { + "Plain": "RoundSnapshot" + }, + "default": [ + 0 + ], + "documentation": [ + " Snapshot data of the round.", + "", + " This is created at the beginning of the signed phase and cleared upon calling `elect`." + ] + }, + { + "name": "DesiredTargets", + "modifier": "Optional", + "ty": { + "Plain": "u32" + }, + "default": [ + 0 + ], + "documentation": [ + " Desired number of targets to elect for this round.", + "", + " Only exists when [`Snapshot`] is present." + ] + }, + { + "name": "SnapshotMetadata", + "modifier": "Optional", + "ty": { + "Plain": "SolutionOrSnapshotSize" + }, + "default": [ + 0 + ], + "documentation": [ + " The metadata of the [`RoundSnapshot`]", + "", + " Only exists when [`Snapshot`] is present." + ] + } + ] + }, + "calls": [ + { + "name": "submit_unsigned", + "arguments": [ + { + "name": "solution", + "ty": "RawSolution>" + }, + { + "name": "witness", + "ty": "SolutionOrSnapshotSize" + } + ], + "documentation": [ + " Submit a solution for the unsigned phase.", + "", + " The dispatch origin fo this call must be __none__.", + "", + " This submission is checked on the fly. Moreover, this unsigned solution is only", + " validated when submitted to the pool from the **local** node. Effectively, this means", + " that only active validators can submit this transaction when authoring a block (similar", + " to an inherent).", + "", + " To prevent any incorrect solution (and thus wasted time/weight), this transaction will", + " panic if the solution submitted by the validator is invalid in any way, effectively", + " putting their authoring reward at risk.", + "", + " No deposit or reward is associated with this submission." + ] + } + ], + "event": [ + { + "name": "SolutionStored", + "arguments": [ + "ElectionCompute" + ], + "documentation": [ + " A solution was stored with the given compute.", + "", + " If the solution is signed, this means that it hasn't yet been processed. If the", + " solution is unsigned, this means that it has also been processed." + ] + }, + { + "name": "ElectionFinalized", + "arguments": [ + "Option" + ], + "documentation": [ + " The election has been finalized, with `Some` of the given computation, or else if the", + " election failed, `None`." + ] + }, + { + "name": "Rewarded", + "arguments": [ + "AccountId" + ], + "documentation": [ + " An account has been rewarded for their signed submission being finalized." + ] + }, + { + "name": "Slashed", + "arguments": [ + "AccountId" + ], + "documentation": [ + " An account has been slashed for submitting an invalid signed submission." + ] + }, + { + "name": "SignedPhaseStarted", + "arguments": [ + "u32" + ], + "documentation": [ + " The signed phase of the given round has started." + ] + }, + { + "name": "UnsignedPhaseStarted", + "arguments": [ + "u32" + ], + "documentation": [ + " The unsigned phase of the given round has started." + ] + } + ], + "constants": [ + { + "name": "UnsignedPhase", + "ty": "T::BlockNumber", + "value": [ + 88, + 2, + 0, + 0 + ], + "documentation": [ + " Duration of the unsigned phase." + ] + }, + { + "name": "SignedPhase", + "ty": "T::BlockNumber", + "value": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Duration of the signed phase." + ] + }, + { + "name": "SolutionImprovementThreshold", + "ty": "Perbill", + "value": [ + 32, + 161, + 7, + 0 + ], + "documentation": [ + " The minimum amount of improvement to the solution score that defines a solution as", + " \"better\" (in any phase)." + ] + } + ], + "errors": [ + { + "name": "PreDispatchEarlySubmission", + "documentation": [ + " Submission was too early." + ] + }, + { + "name": "PreDispatchWrongWinnerCount", + "documentation": [ + " Wrong number of winners presented." + ] + }, + { + "name": "PreDispatchWeakSubmission", + "documentation": [ + " Submission was too weak, score-wise." + ] + } + ], + "index": 36 + } + ], + "extrinsic": { + "version": 4, + "signed_extensions": [ + "CheckSpecVersion", + "CheckTxVersion", + "CheckGenesis", + "CheckMortality", + "CheckNonce", + "CheckWeight", + "ChargeTransactionPayment", + "PrevalidateAttests" + ] + } + } +} diff --git a/data/polkadot-metadata/v13.json b/data/polkadot-metadata/v13.json new file mode 100644 index 0000000..c55dbee --- /dev/null +++ b/data/polkadot-metadata/v13.json @@ -0,0 +1,2255 @@ +{ + "V13": { + "modules": [ + { + "name": "System", + "storage": { + "prefix": "System", + "entries": [ + { + "name": "Account", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::AccountId", + "value": "AccountInfo", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The full account information for a particular account ID." + ] + }, + { + "name": "ExtrinsicCount", + "modifier": "Optional", + "ty": { + "Plain": "u32" + }, + "default": [ + 0 + ], + "documentation": [ + " Total extrinsics count for the current block." + ] + }, + { + "name": "BlockWeight", + "modifier": "Default", + "ty": { + "Plain": "ConsumedWeight" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The current weight for the block." + ] + }, + { + "name": "AllExtrinsicsLen", + "modifier": "Optional", + "ty": { + "Plain": "u32" + }, + "default": [ + 0 + ], + "documentation": [ + " Total length (in bytes) for all extrinsics put together, for the current block." + ] + }, + { + "name": "BlockHash", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "T::BlockNumber", + "value": "T::Hash", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Map of block numbers to block hashes." + ] + }, + { + "name": "ExtrinsicData", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "u32", + "value": "Vec", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Extrinsics data for the current block (maps an extrinsic's index to its data)." + ] + }, + { + "name": "Number", + "modifier": "Default", + "ty": { + "Plain": "T::BlockNumber" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The current block number being processed. Set by `execute_block`." + ] + }, + { + "name": "ParentHash", + "modifier": "Default", + "ty": { + "Plain": "T::Hash" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Hash of the previous block." + ] + }, + { + "name": "Digest", + "modifier": "Default", + "ty": { + "Plain": "DigestOf" + }, + "default": [ + 0 + ], + "documentation": [ + " Digest of the current block, also part of the block header." + ] + }, + { + "name": "Events", + "modifier": "Default", + "ty": { + "Plain": "Vec>" + }, + "default": [ + 0 + ], + "documentation": [ + " Events deposited for the current block." + ] + }, + { + "name": "EventCount", + "modifier": "Default", + "ty": { + "Plain": "EventIndex" + }, + "default": [ + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The number of events in the `Events` list." + ] + }, + { + "name": "EventTopics", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::Hash", + "value": "Vec<(T::BlockNumber, EventIndex)>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Mapping between a topic (represented by T::Hash) and a vector of indexes", + " of events in the `>` 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", + "ty": { + "Plain": "LastRuntimeUpgradeInfo" + }, + "default": [ + 0 + ], + "documentation": [ + " Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened." + ] + }, + { + "name": "UpgradedToU32RefCount", + "modifier": "Default", + "ty": { + "Plain": "bool" + }, + "default": [ + 0 + ], + "documentation": [ + " True if we have upgraded so that `type RefCount` is `u32`. False (default) if not." + ] + }, + { + "name": "UpgradedToTripleRefCount", + "modifier": "Default", + "ty": { + "Plain": "bool" + }, + "default": [ + 0 + ], + "documentation": [ + " True if we have upgraded so that AccountInfo contains three types of `RefCount`. False", + " (default) if not." + ] + }, + { + "name": "ExecutionPhase", + "modifier": "Optional", + "ty": { + "Plain": "Phase" + }, + "default": [ + 0 + ], + "documentation": [ + " The execution phase of the block." + ] + } + ] + }, + "calls": [ + { + "name": "fill_block", + "arguments": [ + { + "name": "_ratio", + "ty": "Perbill" + } + ], + "documentation": [ + " A dispatch that will fill the block weight up to the given ratio." + ] + }, + { + "name": "remark", + "arguments": [ + { + "name": "_remark", + "ty": "Vec" + } + ], + "documentation": [ + " Make some on-chain remark.", + "", + " # ", + " - `O(1)`", + " # " + ] + }, + { + "name": "set_heap_pages", + "arguments": [ + { + "name": "pages", + "ty": "u64" + } + ], + "documentation": [ + " Set the number of pages in the WebAssembly environment's heap.", + "", + " # ", + " - `O(1)`", + " - 1 storage write.", + " - Base Weight: 1.405 µs", + " - 1 write to HEAP_PAGES", + " # " + ] + }, + { + "name": "set_code", + "arguments": [ + { + "name": "code", + "ty": "Vec" + } + ], + "documentation": [ + " Set the new runtime code.", + "", + " # ", + " - `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.", + " # " + ] + }, + { + "name": "set_code_without_checks", + "arguments": [ + { + "name": "code", + "ty": "Vec" + } + ], + "documentation": [ + " Set the new runtime code without doing any checks of the given `code`.", + "", + " # ", + " - `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.", + " # " + ] + }, + { + "name": "set_changes_trie_config", + "arguments": [ + { + "name": "changes_trie_config", + "ty": "Option" + } + ], + "documentation": [ + " Set the new changes trie configuration.", + "", + " # ", + " - `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", + " # " + ] + }, + { + "name": "set_storage", + "arguments": [ + { + "name": "items", + "ty": "Vec" + } + ], + "documentation": [ + " Set some items of storage.", + "", + " # ", + " - `O(I)` where `I` length of `items`", + " - `I` storage writes (`O(1)`).", + " - Base Weight: 0.568 * i µs", + " - Writes: Number of items", + " # " + ] + }, + { + "name": "kill_storage", + "arguments": [ + { + "name": "keys", + "ty": "Vec" + } + ], + "documentation": [ + " Kill some items from storage.", + "", + " # ", + " - `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", + " # " + ] + }, + { + "name": "kill_prefix", + "arguments": [ + { + "name": "prefix", + "ty": "Key" + }, + { + "name": "_subkeys", + "ty": "u32" + } + ], + "documentation": [ + " Kill all storage items with a key that starts with the given prefix.", + "", + " **NOTE:** We rely on the Root origin to provide us the number of subkeys under", + " the prefix we are removing to accurately calculate the weight of this function.", + "", + " # ", + " - `O(P)` where `P` amount of keys with prefix `prefix`", + " - `P` storage deletions.", + " - Base Weight: 0.834 * P µs", + " - Writes: Number of subkeys + 1", + " # " + ] + }, + { + "name": "remark_with_event", + "arguments": [ + { + "name": "remark", + "ty": "Vec" + } + ], + "documentation": [ + " Make some on-chain remark and emit event.", + "", + " # ", + " - `O(b)` where b is the length of the remark.", + " - 1 event.", + " # " + ] + } + ], + "event": [ + { + "name": "ExtrinsicSuccess", + "arguments": [ + "DispatchInfo" + ], + "documentation": [ + " An extrinsic completed successfully. \\[info\\]" + ] + }, + { + "name": "ExtrinsicFailed", + "arguments": [ + "DispatchError", + "DispatchInfo" + ], + "documentation": [ + " An extrinsic failed. \\[error, info\\]" + ] + }, + { + "name": "CodeUpdated", + "arguments": [], + "documentation": [ + " `:code` was updated." + ] + }, + { + "name": "NewAccount", + "arguments": [ + "AccountId" + ], + "documentation": [ + " A new \\[account\\] was created." + ] + }, + { + "name": "KilledAccount", + "arguments": [ + "AccountId" + ], + "documentation": [ + " An \\[account\\] was reaped." + ] + }, + { + "name": "Remarked", + "arguments": [ + "AccountId", + "Hash" + ], + "documentation": [ + " On on-chain remark happened. \\[origin, remark_hash\\]" + ] + } + ], + "constants": [ + { + "name": "BlockWeights", + "ty": "limits::BlockWeights", + "value": [ + 0, + 242, + 5, + 42, + 1, + 0, + 0, + 0, + 0, + 32, + 74, + 169, + 209, + 1, + 0, + 0, + 64, + 89, + 115, + 7, + 0, + 0, + 0, + 0, + 1, + 192, + 110, + 150, + 166, + 46, + 1, + 0, + 0, + 1, + 0, + 152, + 247, + 62, + 93, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64, + 89, + 115, + 7, + 0, + 0, + 0, + 0, + 1, + 192, + 246, + 232, + 16, + 163, + 1, + 0, + 0, + 1, + 0, + 32, + 74, + 169, + 209, + 1, + 0, + 0, + 1, + 0, + 136, + 82, + 106, + 116, + 0, + 0, + 0, + 64, + 89, + 115, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Block & extrinsics weights: base values and limits." + ] + }, + { + "name": "BlockLength", + "ty": "limits::BlockLength", + "value": [ + 0, + 0, + 60, + 0, + 0, + 0, + 80, + 0, + 0, + 0, + 80, + 0 + ], + "documentation": [ + " The maximum length of a block (in bytes)." + ] + }, + { + "name": "BlockHashCount", + "ty": "T::BlockNumber", + "value": [ + 96, + 9, + 0, + 0 + ], + "documentation": [ + " Maximum number of block number to block hash mappings to keep (oldest pruned first)." + ] + }, + { + "name": "DbWeight", + "ty": "RuntimeDbWeight", + "value": [ + 64, + 120, + 125, + 1, + 0, + 0, + 0, + 0, + 0, + 225, + 245, + 5, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The weight of runtime database operations the runtime can invoke." + ] + }, + { + "name": "Version", + "ty": "RuntimeVersion", + "value": [ + 52, + 110, + 111, + 100, + 101, + 45, + 116, + 101, + 109, + 112, + 108, + 97, + 116, + 101, + 52, + 110, + 111, + 100, + 101, + 45, + 116, + 101, + 109, + 112, + 108, + 97, + 116, + 101, + 1, + 0, + 0, + 0, + 100, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 40, + 223, + 106, + 203, + 104, + 153, + 7, + 96, + 155, + 3, + 0, + 0, + 0, + 55, + 227, + 151, + 252, + 124, + 145, + 245, + 228, + 1, + 0, + 0, + 0, + 64, + 254, + 58, + 212, + 1, + 248, + 149, + 154, + 5, + 0, + 0, + 0, + 210, + 188, + 152, + 151, + 238, + 208, + 143, + 21, + 2, + 0, + 0, + 0, + 247, + 139, + 39, + 139, + 229, + 63, + 69, + 76, + 2, + 0, + 0, + 0, + 221, + 113, + 141, + 92, + 197, + 50, + 98, + 212, + 1, + 0, + 0, + 0, + 171, + 60, + 5, + 114, + 41, + 31, + 235, + 139, + 1, + 0, + 0, + 0, + 237, + 153, + 197, + 172, + 178, + 94, + 237, + 245, + 2, + 0, + 0, + 0, + 188, + 157, + 137, + 144, + 79, + 91, + 146, + 63, + 1, + 0, + 0, + 0, + 55, + 200, + 187, + 19, + 80, + 169, + 162, + 168, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + "documentation": [ + " Get the chain's current version." + ] + }, + { + "name": "SS58Prefix", + "ty": "u8", + "value": [ + 42 + ], + "documentation": [ + " The designated SS85 prefix of this chain.", + "", + " This replaces the \"ss58Format\" property declared in the chain spec. Reason is", + " that the runtime should know about the prefix in order to make use of it as", + " an identifier of the chain." + ] + } + ], + "errors": [ + { + "name": "InvalidSpecName", + "documentation": [ + " The name of specification does not match between the current runtime", + " and the new runtime." + ] + }, + { + "name": "SpecVersionNeedsToIncrease", + "documentation": [ + " The specification version is not allowed to decrease between the current runtime", + " and the new runtime." + ] + }, + { + "name": "FailedToExtractRuntimeVersion", + "documentation": [ + " Failed to extract the runtime version from the new runtime.", + "", + " Either calling `Core_version` or decoding `RuntimeVersion` failed." + ] + }, + { + "name": "NonDefaultComposite", + "documentation": [ + " Suicide called when the account has non-default composite data." + ] + }, + { + "name": "NonZeroRefCount", + "documentation": [ + " There is a non-zero reference count preventing the account from being purged." + ] + } + ], + "index": 0 + }, + { + "name": "RandomnessCollectiveFlip", + "storage": { + "prefix": "RandomnessCollectiveFlip", + "entries": [ + { + "name": "RandomMaterial", + "modifier": "Default", + "ty": { + "Plain": "Vec" + }, + "default": [ + 0 + ], + "documentation": [ + " Series of block headers from the last 81 blocks that acts as random seed material. This", + " is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of", + " the oldest hash." + ] + } + ] + }, + "calls": [], + "event": null, + "constants": [], + "errors": [], + "index": 1 + }, + { + "name": "Timestamp", + "storage": { + "prefix": "Timestamp", + "entries": [ + { + "name": "Now", + "modifier": "Default", + "ty": { + "Plain": "T::Moment" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " Current time for the current block." + ] + }, + { + "name": "DidUpdate", + "modifier": "Default", + "ty": { + "Plain": "bool" + }, + "default": [ + 0 + ], + "documentation": [ + " Did the timestamp get updated in this block?" + ] + } + ] + }, + "calls": [ + { + "name": "set", + "arguments": [ + { + "name": "now", + "ty": "Compact" + } + ], + "documentation": [ + " Set the current time.", + "", + " This call should be invoked exactly once per block. It will panic at the finalization", + " phase, if this call hasn't been invoked by that time.", + "", + " The timestamp should be greater than the previous one by the amount specified by", + " `MinimumPeriod`.", + "", + " The dispatch origin for this call must be `Inherent`.", + "", + " # ", + " - `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)`.", + " # " + ] + } + ], + "event": null, + "constants": [ + { + "name": "MinimumPeriod", + "ty": "T::Moment", + "value": [ + 184, + 11, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The minimum period between blocks. Beware that this is different to the *expected* period", + " that the block production apparatus provides. Your chosen consensus system will generally", + " work with this to determine a sensible block time. e.g. For Aura, it will be double this", + " period on default settings." + ] + } + ], + "errors": [], + "index": 2 + }, + { + "name": "Aura", + "storage": null, + "calls": null, + "event": null, + "constants": [], + "errors": [], + "index": 3 + }, + { + "name": "Grandpa", + "storage": { + "prefix": "GrandpaFinality", + "entries": [ + { + "name": "State", + "modifier": "Default", + "ty": { + "Plain": "StoredState" + }, + "default": [ + 0 + ], + "documentation": [ + " State of the current authority set." + ] + }, + { + "name": "PendingChange", + "modifier": "Optional", + "ty": { + "Plain": "StoredPendingChange" + }, + "default": [ + 0 + ], + "documentation": [ + " Pending change: (signaled at, scheduled change)." + ] + }, + { + "name": "NextForced", + "modifier": "Optional", + "ty": { + "Plain": "T::BlockNumber" + }, + "default": [ + 0 + ], + "documentation": [ + " next block number where we can force a change." + ] + }, + { + "name": "Stalled", + "modifier": "Optional", + "ty": { + "Plain": "(T::BlockNumber, T::BlockNumber)" + }, + "default": [ + 0 + ], + "documentation": [ + " `true` if we are currently stalled." + ] + }, + { + "name": "CurrentSetId", + "modifier": "Default", + "ty": { + "Plain": "SetId" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The number of changes (both in terms of keys and underlying economic responsibilities)", + " in the \"set\" of Grandpa validators from genesis." + ] + }, + { + "name": "SetIdSession", + "modifier": "Optional", + "ty": { + "Map": { + "hasher": "Twox64Concat", + "key": "SetId", + "value": "SessionIndex", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " A mapping from grandpa set ID to the index of the *most recent* session for which its", + " members were responsible.", + "", + " TWOX-NOTE: `SetId` is not under user control." + ] + } + ] + }, + "calls": [ + { + "name": "report_equivocation", + "arguments": [ + { + "name": "equivocation_proof", + "ty": "EquivocationProof" + }, + { + "name": "key_owner_proof", + "ty": "T::KeyOwnerProof" + } + ], + "documentation": [ + " Report voter equivocation/misbehavior. This method will verify the", + " equivocation proof and validate the given key ownership proof", + " against the extracted offender. If both are valid, the offence", + " will be reported." + ] + }, + { + "name": "report_equivocation_unsigned", + "arguments": [ + { + "name": "equivocation_proof", + "ty": "EquivocationProof" + }, + { + "name": "key_owner_proof", + "ty": "T::KeyOwnerProof" + } + ], + "documentation": [ + " Report voter equivocation/misbehavior. This method will verify the", + " equivocation proof and validate the given key ownership proof", + " against the extracted offender. If both are valid, the offence", + " will be reported.", + "", + " This extrinsic must be called unsigned and it is expected that only", + " block authors will call it (validated in `ValidateUnsigned`), as such", + " if the block author is defined it will be defined as the equivocation", + " reporter." + ] + }, + { + "name": "note_stalled", + "arguments": [ + { + "name": "delay", + "ty": "T::BlockNumber" + }, + { + "name": "best_finalized_block_number", + "ty": "T::BlockNumber" + } + ], + "documentation": [ + " Note that the current authority set of the GRANDPA finality gadget has", + " stalled. This will trigger a forced authority set change at the beginning", + " of the next session, to be enacted `delay` blocks after that. The delay", + " should be high enough to safely assume that the block signalling the", + " forced change will not be re-orged (e.g. 1000 blocks). The GRANDPA voters", + " will start the new authority set using the given finalized block as base.", + " Only callable by root." + ] + } + ], + "event": [ + { + "name": "NewAuthorities", + "arguments": [ + "AuthorityList" + ], + "documentation": [ + " New authority set has been applied. \\[authority_set\\]" + ] + }, + { + "name": "Paused", + "arguments": [], + "documentation": [ + " Current authority set has been paused." + ] + }, + { + "name": "Resumed", + "arguments": [], + "documentation": [ + " Current authority set has been resumed." + ] + } + ], + "constants": [], + "errors": [ + { + "name": "PauseFailed", + "documentation": [ + " Attempt to signal GRANDPA pause when the authority set isn't live", + " (either paused or already pending pause)." + ] + }, + { + "name": "ResumeFailed", + "documentation": [ + " Attempt to signal GRANDPA resume when the authority set isn't paused", + " (either live or already pending resume)." + ] + }, + { + "name": "ChangePending", + "documentation": [ + " Attempt to signal GRANDPA change with one already pending." + ] + }, + { + "name": "TooSoon", + "documentation": [ + " Cannot signal forced change so soon after last." + ] + }, + { + "name": "InvalidKeyOwnershipProof", + "documentation": [ + " A key ownership proof provided as part of an equivocation report is invalid." + ] + }, + { + "name": "InvalidEquivocationProof", + "documentation": [ + " An equivocation proof provided as part of an equivocation report is invalid." + ] + }, + { + "name": "DuplicateOffenceReport", + "documentation": [ + " A given equivocation report is valid but already previously reported." + ] + } + ], + "index": 4 + }, + { + "name": "Balances", + "storage": { + "prefix": "Balances", + "entries": [ + { + "name": "TotalIssuance", + "modifier": "Default", + "ty": { + "Plain": "T::Balance" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The total units issued in the system." + ] + }, + { + "name": "Account", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::AccountId", + "value": "AccountData", + "unused": false + } + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The balance of an account.", + "", + " NOTE: This is only used in the case that this pallet is used to store balances." + ] + }, + { + "name": "Locks", + "modifier": "Default", + "ty": { + "Map": { + "hasher": "Blake2_128Concat", + "key": "T::AccountId", + "value": "Vec>", + "unused": false + } + }, + "default": [ + 0 + ], + "documentation": [ + " Any liquidity locks on some account balances.", + " NOTE: Should only be accessed when setting, changing and freeing a lock." + ] + }, + { + "name": "StorageVersion", + "modifier": "Default", + "ty": { + "Plain": "Releases" + }, + "default": [ + 0 + ], + "documentation": [ + " Storage version of the pallet.", + "", + " This is set to v2.0.0 for new networks." + ] + } + ] + }, + "calls": [ + { + "name": "transfer", + "arguments": [ + { + "name": "dest", + "ty": "::Source" + }, + { + "name": "value", + "ty": "Compact" + } + ], + "documentation": [ + " Transfer some liquid free balance to another account.", + "", + " `transfer` will set the `FreeBalance` of the sender and receiver.", + " It will decrease the total issuance of the system by the `TransferFee`.", + " If the sender's account is below the existential deposit as a result", + " of the transfer, the account will be reaped.", + "", + " The dispatch origin for this call must be `Signed` by the transactor.", + "", + " # ", + " - 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.", + " # " + ] + }, + { + "name": "set_balance", + "arguments": [ + { + "name": "who", + "ty": "::Source" + }, + { + "name": "new_free", + "ty": "Compact" + }, + { + "name": "new_reserved", + "ty": "Compact" + } + ], + "documentation": [ + " Set the balances of a given account.", + "", + " This will alter `FreeBalance` and `ReservedBalance` in storage. it will", + " also decrease the total issuance of the system (`TotalIssuance`).", + " If the new free or reserved balance is below the existential deposit,", + " it will reset the account nonce (`frame_system::AccountNonce`).", + "", + " The dispatch origin for this call is `root`.", + "", + " # ", + " - 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`", + " # " + ] + }, + { + "name": "force_transfer", + "arguments": [ + { + "name": "source", + "ty": "::Source" + }, + { + "name": "dest", + "ty": "::Source" + }, + { + "name": "value", + "ty": "Compact" + } + ], + "documentation": [ + " Exactly as `transfer`, except the origin must be root and the source account may be", + " specified.", + " # ", + " - Same as transfer, but additional read and write because the source account is", + " not assumed to be in the overlay.", + " # " + ] + }, + { + "name": "transfer_keep_alive", + "arguments": [ + { + "name": "dest", + "ty": "::Source" + }, + { + "name": "value", + "ty": "Compact" + } + ], + "documentation": [ + " Same as the [`transfer`] call, but with a check that the transfer will not kill the", + " origin account.", + "", + " 99% of the time you want [`transfer`] instead.", + "", + " [`transfer`]: struct.Pallet.html#method.transfer", + " # ", + " - 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)", + " #" + ] + } + ], + "event": [ + { + "name": "Endowed", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " An account was created with some free balance. \\[account, free_balance\\]" + ] + }, + { + "name": "DustLost", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " An account was removed whose balance was non-zero but below ExistentialDeposit,", + " resulting in an outright loss. \\[account, balance\\]" + ] + }, + { + "name": "Transfer", + "arguments": [ + "AccountId", + "AccountId", + "Balance" + ], + "documentation": [ + " Transfer succeeded. \\[from, to, value\\]" + ] + }, + { + "name": "BalanceSet", + "arguments": [ + "AccountId", + "Balance", + "Balance" + ], + "documentation": [ + " A balance was set by root. \\[who, free, reserved\\]" + ] + }, + { + "name": "Deposit", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " Some amount was deposited (e.g. for transaction fees). \\[who, deposit\\]" + ] + }, + { + "name": "Reserved", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " Some balance was reserved (moved from free to reserved). \\[who, value\\]" + ] + }, + { + "name": "Unreserved", + "arguments": [ + "AccountId", + "Balance" + ], + "documentation": [ + " Some balance was unreserved (moved from reserved to free). \\[who, value\\]" + ] + }, + { + "name": "ReserveRepatriated", + "arguments": [ + "AccountId", + "AccountId", + "Balance", + "Status" + ], + "documentation": [ + " Some balance was moved from the reserve of the first account to the second account.", + " Final argument indicates the destination balance type.", + " \\[from, to, balance, destination_status\\]" + ] + } + ], + "constants": [ + { + "name": "ExistentialDeposit", + "ty": "T::Balance", + "value": [ + 244, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The minimum amount required to keep an account open." + ] + } + ], + "errors": [ + { + "name": "VestingBalance", + "documentation": [ + " Vesting balance too high to send value" + ] + }, + { + "name": "LiquidityRestrictions", + "documentation": [ + " Account liquidity restrictions prevent withdrawal" + ] + }, + { + "name": "InsufficientBalance", + "documentation": [ + " Balance too low to send value" + ] + }, + { + "name": "ExistentialDeposit", + "documentation": [ + " Value too low to create account due to existential deposit" + ] + }, + { + "name": "KeepAlive", + "documentation": [ + " Transfer/payment would kill account" + ] + }, + { + "name": "ExistingVestingSchedule", + "documentation": [ + " A vesting schedule already exists for this account" + ] + }, + { + "name": "DeadAccount", + "documentation": [ + " Beneficiary account must pre-exist" + ] + } + ], + "index": 5 + }, + { + "name": "TransactionPayment", + "storage": { + "prefix": "TransactionPayment", + "entries": [ + { + "name": "NextFeeMultiplier", + "modifier": "Default", + "ty": { + "Plain": "Multiplier" + }, + "default": [ + 0, + 0, + 100, + 167, + 179, + 182, + 224, + 13, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [] + }, + { + "name": "StorageVersion", + "modifier": "Default", + "ty": { + "Plain": "Releases" + }, + "default": [ + 0 + ], + "documentation": [] + } + ] + }, + "calls": null, + "event": null, + "constants": [ + { + "name": "TransactionByteFee", + "ty": "BalanceOf", + "value": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The fee to be paid for making a transaction; the per-byte portion." + ] + }, + { + "name": "WeightToFee", + "ty": "Vec>>", + "value": [ + 4, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "documentation": [ + " The polynomial that is applied in order to derive fee from weight." + ] + } + ], + "errors": [], + "index": 6 + }, + { + "name": "Sudo", + "storage": { + "prefix": "Sudo", + "entries": [ + { + "name": "Key", + "modifier": "Default", + "ty": { + "Plain": "T::AccountId" + }, + "default": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "documentation": [ + " The `AccountId` of the sudo key." + ] + } + ] + }, + "calls": [ + { + "name": "sudo", + "arguments": [ + { + "name": "call", + "ty": "Box<::Call>" + } + ], + "documentation": [ + " Authenticates the sudo key and dispatches a function call with `Root` origin.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB write (event).", + " - Weight of derivative `call` execution + 10,000.", + " # " + ] + }, + { + "name": "sudo_unchecked_weight", + "arguments": [ + { + "name": "call", + "ty": "Box<::Call>" + }, + { + "name": "_weight", + "ty": "Weight" + } + ], + "documentation": [ + " Authenticates the sudo key and dispatches a function call with `Root` origin.", + " This function does not check the weight of the call, and instead allows the", + " Sudo user to specify the weight of the call.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - The weight of this call is defined by the caller.", + " # " + ] + }, + { + "name": "set_key", + "arguments": [ + { + "name": "new", + "ty": "::Source" + } + ], + "documentation": [ + " Authenticates the current sudo key and sets the given AccountId (`new`) as the new sudo key.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB change.", + " # " + ] + }, + { + "name": "sudo_as", + "arguments": [ + { + "name": "who", + "ty": "::Source" + }, + { + "name": "call", + "ty": "Box<::Call>" + } + ], + "documentation": [ + " Authenticates the sudo key and dispatches a function call with `Signed` origin from", + " a given account.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB write (event).", + " - Weight of derivative `call` execution + 10,000.", + " # " + ] + } + ], + "event": [ + { + "name": "Sudid", + "arguments": [ + "DispatchResult" + ], + "documentation": [ + " A sudo just took place. \\[result\\]" + ] + }, + { + "name": "KeyChanged", + "arguments": [ + "AccountId" + ], + "documentation": [ + " The \\[sudoer\\] just switched identity; the old key is supplied." + ] + }, + { + "name": "SudoAsDone", + "arguments": [ + "DispatchResult" + ], + "documentation": [ + " A sudo just took place. \\[result\\]" + ] + } + ], + "constants": [], + "errors": [ + { + "name": "RequireSudo", + "documentation": [ + " Sender must be the Sudo account" + ] + } + ], + "index": 7 + }, + { + "name": "TemplateModule", + "storage": { + "prefix": "TemplateModule", + "entries": [ + { + "name": "Something", + "modifier": "Optional", + "ty": { + "Plain": "u32" + }, + "default": [ + 0 + ], + "documentation": [] + } + ] + }, + "calls": [ + { + "name": "do_something", + "arguments": [ + { + "name": "something", + "ty": "u32" + } + ], + "documentation": [ + " An example dispatchable that takes a singles value as a parameter, writes the value to", + " storage and emits an event. This function must be dispatched by a signed extrinsic." + ] + }, + { + "name": "cause_error", + "arguments": [], + "documentation": [ + " An example dispatchable that may throw a custom error." + ] + } + ], + "event": [ + { + "name": "SomethingStored", + "arguments": [ + "u32", + "AccountId" + ], + "documentation": [ + " Event documentation should end with an array that provides descriptive names for event", + " parameters. [something, who]" + ] + } + ], + "constants": [], + "errors": [ + { + "name": "NoneValue", + "documentation": [ + " Error names should be descriptive." + ] + }, + { + "name": "StorageOverflow", + "documentation": [ + " Errors should have helpful documentation associated with them." + ] + } + ], + "index": 8 + } + ], + "extrinsic": { + "version": 4, + "signed_extensions": [ + "CheckSpecVersion", + "CheckTxVersion", + "CheckGenesis", + "CheckMortality", + "CheckNonce", + "CheckWeight", + "ChargeTransactionPayment" + ] + } + } +} diff --git a/resources/logo/tera-cli-logo_256.png b/resources/logo/tera-cli-logo_256.png new file mode 100644 index 0000000..59657f1 Binary files /dev/null and b/resources/logo/tera-cli-logo_256.png differ diff --git a/resources/logo/tera-cli-logo_512.png b/resources/logo/tera-cli-logo_512.png new file mode 100644 index 0000000..fd7b857 Binary files /dev/null and b/resources/logo/tera-cli-logo_512.png differ diff --git a/resources/logo/tera-cli-logo_512.svg b/resources/logo/tera-cli-logo_512.svg new file mode 100644 index 0000000..4c9f63c --- /dev/null +++ b/resources/logo/tera-cli-logo_512.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main.rs b/src/main.rs index e59e569..c93be11 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,7 +27,6 @@ fn main() -> Result<(), String> { wrapped_context.create_context(); let context: &Context = wrapped_context.context(); - // let context: Context = get_context(opts.context, opts.env, opts.env_key.as_deref()).unwrap(); trace!("context:\n{:#?}", context); let rendered = Tera::one_off(&template, &context, autoescape).unwrap(); diff --git a/src/opts.rs b/src/opts.rs index bb30d12..bde360c 100644 --- a/src/opts.rs +++ b/src/opts.rs @@ -27,7 +27,7 @@ pub struct Opts { /// By default, if --env is set, the environment variables will be attached at the root of the context. /// This is convenient but may end up conflicting with your data. To prevent collisions, you can provide /// a custom key with this option. - #[clap(long, requires = "env")] + #[clap(long)] pub env_key: Option, /// By default, the context is made of the data you pass and the ENV is applied @@ -42,7 +42,7 @@ pub struct Opts { /// If you want to solely use the ENV as context, you may pass /// this option. This will prevent an error about no context being passed /// to be raised. - #[clap(long, requires = "env")] + #[clap(long)] pub env_only: bool, /// Optional output file. If not passed, using stdout. diff --git a/src/wrapped_context.rs b/src/wrapped_context.rs index 6bdef6d..ad5ed23 100644 --- a/src/wrapped_context.rs +++ b/src/wrapped_context.rs @@ -94,7 +94,7 @@ impl WrappedContext { } pub fn create_context(&mut self) { - if self.opts.env && self.opts.env_first { + if (self.opts.env || self.opts.env_only) && self.opts.env_first { info!("Appending env to context first, env-key: {:?}", self.opts.env_key); self.append_env(); } @@ -117,7 +117,7 @@ impl WrappedContext { // _ => {} // } self.append_json(&input); - } else { + } else if self.opts.context.is_some() { // here we know that we have a Path since --stdin is not passed let context_file = self.opts.context.as_ref().unwrap(); let input = fs::read_to_string(context_file).unwrap(); @@ -132,7 +132,7 @@ impl WrappedContext { }; }; - if self.opts.env && !self.opts.env_first { + if (self.opts.env || self.opts.env_only) && !self.opts.env_first { info!("Appending env to context, env-key: {:?}", self.opts.env_key); self.append_env(); } diff --git a/templates/changelog.md b/templates/changelog.md new file mode 100644 index 0000000..7fbc56d --- /dev/null +++ b/templates/changelog.md @@ -0,0 +1,13 @@ +{% if commits | length %} +# Changes since {{ since }} + +{% for commit in commits %} +{%- set s = commit.message | split(pat=":") -%} +{% if s | length > 1 -%} + - {{ commit.short_sha }}: {{ s.0 }} -{{ s.1 }} [{{ commit.author }}] +{% else -%} + - {{ commit.short_sha }}: {{ commit.message }} [{{ commit.author }}] +{% endif -%} +{%- endfor %} + +{% endif -%} diff --git a/templates/release.md b/templates/release.md new file mode 100644 index 0000000..6d5eb8f --- /dev/null +++ b/templates/release.md @@ -0,0 +1,20 @@ +# Description + +You can find the changelogs below. + +# Downloads + +Download the binary for your OS from below: +- **Linux** + - [deb package]({{ DEBIAN_URL }}) + +# Install + +``` +URL={{ DEBIAN_URL }} +wget $URL +dpkg -i tera-cli_linux_amd64.deb +tera --version +``` + +{{ CHANGELOG }} diff --git a/templates/tera.rb b/templates/tera.rb new file mode 100644 index 0000000..ff02675 --- /dev/null +++ b/templates/tera.rb @@ -0,0 +1,14 @@ +{% set bin = bin | default(value=name | lower) %} +{%- set homepage = homepage | default(value=site ~ "/" ~ repo) -%} + +class {{ name }} < Formula + desc "{{ description }}" + homepage "{{ homepage}}" + url "{{ site }}/{{ repo }}/releases/download/v{{ version}}/{{ archive | default(value= bin ~"-mac-v" ~ version) }}.tar.gz " + sha256 "{{ sha256 }}" + version "{{ version }}" + + def install + bin.install "{{ bin }}" + end +end diff --git a/tests/test.rs b/tests/test.rs index 68d3921..260fda9 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -7,20 +7,188 @@ mod cli_tests { #[test] fn it_shows_help() { - let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME")).unwrap(); + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); let assert = cmd.arg("--help").assert(); assert.success().code(0); } } #[cfg(test)] - mod info { + mod basic { use assert_cmd::Command; + use predicates::prelude::*; + + #[test] + fn it_process_json_to_stdout() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd.arg("-t").arg("data/basic/basic.tera").arg("data/basic/basic.json").assert(); + assert.success().stdout(predicate::str::contains("Bob likes orange")); + } + + #[test] + fn it_process_yaml_to_stdout() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd.arg("-t").arg("data/basic/basic.tera").arg("data/basic/basic.yaml").assert(); + assert.success().stdout(predicate::str::contains("Bob likes orange")); + } + #[test] fn it_process_toml_to_stdout() { - let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME")).unwrap(); - let assert = cmd.arg("tcp://foo.bar").assert(); - assert.failure().code(2); + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd.arg("-t").arg("data/basic/basic.tera").arg("data/basic/basic.toml").assert(); + assert.success().stdout(predicate::str::contains("Bob likes orange")); + } + } + + #[cfg(test)] + mod env { + use assert_cmd::Command; + use predicates::prelude::*; + + #[test] + fn it_process_env_sample() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd + .arg("-t") + .arg("data/env-basic/env-sample.tera") + .arg("--env-only") + .env("HOME", "/home/bob") + .env("EDITOR", "joe") + .env("LOGNAME", "bob") + .assert(); + assert.success().stdout(predicate::str::contains("Hello **bob**.")); + } + + #[test] + fn it_process_env_key_sample() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd + .arg("-t") + .arg("data/env-key/env-key.tera") + .arg("--env-key") + .arg("env") + .arg("--env-only") + .env("HOME", "/home/bob") + .env("EDITOR", "joe") + .env("LOGNAME", "bob") + .assert(); + assert.success().stdout(predicate::str::contains("Home: /home/bob")); + } + + #[test] + fn it_fetches_env() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd + .arg("-t") + .arg("data/env-basic/env-count.tera") + .arg("--env-only") + .arg("--env-key") + .arg("env") + .env("FOOBAR", "945727385") + .assert(); + assert.success().stdout(predicate::str::contains("FOOBAR=945727385")); + } + } + + #[cfg(test)] + mod collisions { + use assert_cmd::Command; + use predicates::prelude::*; + + #[test] + fn it_process_json_with_collision() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd + .arg("--env") + .arg("-t") + .arg("data/basic/basic.tera") + .arg("data/basic/basic.json") + .env("title", "foobar") + .assert(); + assert.success().stdout(predicate::str::contains(" foobar ")); + } + + #[test] + fn it_process_json_with_collision_and_env_first() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd + .arg("--env") + .arg("--env-first") + .arg("-t") + .arg("data/basic/basic.tera") + .arg("data/basic/basic.json") + .env("title", "foobar") + .assert(); + assert.success().stdout(predicate::str::contains(" Demo ")); + } + + #[test] + fn it_fails_on_collision() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd + .arg("--env") + .arg("--fail-on-collision") + .arg("-t") + .arg("data/basic/basic.tera") + .arg("data/basic/basic.json") + .env("title", "foobar") + .assert(); + assert.failure().code(1); + } + } + + #[cfg(test)] + mod big { + use assert_cmd::Command; + use predicates::prelude::*; + + #[test] + fn it_process_big_json_v12_nodoc() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd + .arg("--env") + .arg("-t") + .arg("data/polkadot-metadata/metdata.tera") + .arg("data/polkadot-metadata/v12.json") + .assert(); + assert.success().stdout(predicate::str::contains("Metadata version V12")); + } + + #[test] + fn it_process_big_json_v12_with_doc() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd + .arg("--env") + .arg("-t") + .arg("data/polkadot-metadata/metdata.tera") + .arg("data/polkadot-metadata/v12.json") + .env("DOC", "true") + .assert(); + assert.success().stdout(predicate::str::contains("Metadata version V12")); + } + + #[test] + fn it_process_big_json_v13() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd + .arg("--env") + .arg("-t") + .arg("data/polkadot-metadata/metdata.tera") + .arg("data/polkadot-metadata/v13.json") + .assert(); + assert.success().stdout(predicate::str::contains("Metadata version V13")); + } + } + + #[cfg(test)] + mod misc { + use assert_cmd::Command; + + #[test] + fn it_makes_markdown_from_cargo_toml() { + let mut cmd = Command::cargo_bin(env!("CARGO_BIN_EXE_tera")).unwrap(); + let assert = cmd.arg("-t").arg("data/cargo-toml/cargo-toml.tera").arg("Cargo.toml").assert(); + assert.success().code(0); } } }