From 707fe8118a8d34379cbc742a4d36e5b04e2fbbbe Mon Sep 17 00:00:00 2001 From: Polkadot Wiki CI Date: Thu, 28 Mar 2024 00:14:08 +0000 Subject: [PATCH] Deploy website - based on 3eafc4ae9c8d6c9477f088ff6c8d8a6d33c22fd4 --- 404.html | 8 ++-- ...cking-30d83e1ed114a3fb5e4ac44e58e2d6dc.png | Bin 118545 -> 0 bytes ...cking-97a966a8148c023012205ad71a146bcc.png | Bin 0 -> 60078 bytes ...cking-39f23741e043faaf52bb5ddc880ea409.png | Bin 0 -> 48988 bytes ...cking-e5c74751cd62df36651f23fab421f7cf.png | Bin 98972 -> 0 bytes ...faa87.29317d51.js => 113faa87.8278d46b.js} | 2 +- assets/js/12331e8b.27119ba5.js | 1 + assets/js/12331e8b.37d9cdce.js | 1 - assets/js/131c7f55.1aa6a0d8.js | 1 + assets/js/131c7f55.1d8405cd.js | 1 - assets/js/2be0d940.62d9ef04.js | 1 + assets/js/2be0d940.908d07d4.js | 1 - assets/js/43cda9e8.112598c7.js | 1 - assets/js/43cda9e8.f288a13f.js | 1 + ...74a08.c534a999.js => 48074a08.54738057.js} | 2 +- assets/js/4f031749.191c540a.js | 1 - assets/js/4f031749.c0514a09.js | 1 + ...672cd.026cdae7.js => 694672cd.6da92c0d.js} | 2 +- ...389ad.98b0975e.js => 7e9389ad.469e67df.js} | 2 +- assets/js/804b1e9f.0786ac2c.js | 1 + assets/js/804b1e9f.fc9d38a4.js | 1 - assets/js/84ede15a.4f745ebe.js | 1 - assets/js/84ede15a.f1d7baef.js | 1 + assets/js/918b38b6.283b8160.js | 1 - assets/js/918b38b6.de40ab7a.js | 1 + assets/js/935f2afb.bbb025cb.js | 1 + assets/js/935f2afb.bf2e94d0.js | 1 - assets/js/967fa6d4.9fd74d74.js | 1 - assets/js/967fa6d4.e1ab3ff0.js | 1 + assets/js/9e2042f5.15b12687.js | 1 + assets/js/9e2042f5.701df6e6.js | 1 - assets/js/9f804621.3dffb346.js | 1 + assets/js/9f804621.7e9f7f10.js | 1 - assets/js/b0a48d97.5a7adf6a.js | 1 + assets/js/b0a48d97.a554336b.js | 1 - assets/js/b9c2850c.0933da80.js | 1 - assets/js/bb8b1738.19788ab0.js | 1 - assets/js/bb8b1738.c1eeadbf.js | 1 + assets/js/c07c2447.762ee8d7.js | 1 - assets/js/c07c2447.f6edae7b.js | 1 + assets/js/c8dd560b.54b67c94.js | 1 + assets/js/c8dd560b.741f4575.js | 1 - ...afd28.5590c4d6.js => cb9afd28.3bcf28bf.js} | 2 +- assets/js/ccc1222e.9a1f2884.js | 1 + assets/js/ccc1222e.cf52621d.js | 1 - ...44357.4c7efdf9.js => cd144357.83cfa5bf.js} | 2 +- assets/js/cda87995.07fc26a3.js | 1 + assets/js/cda87995.1ea09317.js | 1 - assets/js/dbbd9e76.985d034c.js | 1 - assets/js/dbbd9e76.ed32f583.js | 1 + assets/js/dd2fa029.01163b0e.js | 1 + assets/js/ec3b6a32.03a19c6b.js | 1 - assets/js/ec3b6a32.47637506.js | 1 + assets/js/ed3409b3.31e512ea.js | 1 - assets/js/ed3409b3.6861a858.js | 1 + assets/js/eef3f1dd.2e6b0474.js | 1 + assets/js/eef3f1dd.dfb7ed91.js | 1 - assets/js/f0ff685a.32e462fb.js | 1 - assets/js/f0ff685a.b45f4759.js | 1 + ...351c1.6ee81354.js => f14351c1.461d06e3.js} | 2 +- assets/js/f3027c84.6df02cfe.js | 1 + assets/js/f3027c84.f254b300.js | 1 - assets/js/f4130007.72a10007.js | 1 - assets/js/f4130007.8735c350.js | 1 + assets/js/f7acb151.65364809.js | 1 + assets/js/f7acb151.8b126346.js | 1 - assets/js/main.3e8f395a.js | 2 - assets/js/main.4ce15711.js | 2 + ...CENSE.txt => main.4ce15711.js.LICENSE.txt} | 0 assets/js/runtime~main.01af0de1.js | 1 - assets/js/runtime~main.c8d7134d.js | 1 + docs/alpha-program.html | 8 ++-- docs/ambassadors.html | 8 ++-- docs/apps-index.html | 8 ++-- docs/bug-bounty.html | 8 ++-- docs/build-client-index.html | 8 ++-- docs/build-dapp.html | 8 ++-- docs/build-data.html | 8 ++-- docs/build-guide.html | 8 ++-- docs/build-hackathon.html | 8 ++-- docs/build-hrmp-channels.html | 8 ++-- docs/build-index.html | 8 ++-- docs/build-integrate-assets.html | 8 ++-- docs/build-integration.html | 8 ++-- docs/build-light-clients.html | 8 ++-- docs/build-network-index.html | 8 ++-- docs/build-network-overview.html | 8 ++-- docs/build-node-interaction.html | 8 ++-- docs/build-node-management.html | 8 ++-- docs/build-open-source.html | 12 +++--- docs/build-oracle.html | 8 ++-- docs/build-pdk.html | 8 ++-- docs/build-protocol-index.html | 8 ++-- docs/build-protocol-info.html | 8 ++-- docs/build-smart-contracts.html | 8 ++-- docs/build-storage.html | 8 ++-- docs/build-tools-index.html | 13 +++--- docs/build-transaction-construction.html | 8 ++-- docs/community-index.html | 8 ++-- docs/community.html | 8 ++-- docs/contributing.html | 8 ++-- docs/contributors.html | 8 ++-- docs/dashboards-index.html | 8 ++-- docs/decentralized-futures.html | 8 ++-- docs/decentralized-voices.html | 8 ++-- docs/dev-heroes.html | 8 ++-- docs/en/learn-polkadotjs-index/index.html | 11 ----- docs/en/learn-polkadotjs/index.html | 11 +++++ docs/explore-index.html | 8 ++-- docs/faq.html | 8 ++-- docs/general-index.html | 8 ++-- docs/getting-started.html | 8 ++-- docs/glossary.html | 8 ++-- docs/governance-apps.html | 8 ++-- docs/grants.html | 8 ++-- docs/how-to-dyor.html | 8 ++-- docs/kusama-adversarial-cheatsheet.html | 8 ++-- docs/kusama-bug-bounty.html | 8 ++-- docs/kusama-claims.html | 8 ++-- docs/kusama-coc.html | 8 ++-- docs/kusama-community.html | 8 ++-- docs/kusama-getting-started.html | 8 ++-- docs/kusama-index.html | 8 ++-- docs/kusama-parameters.html | 8 ++-- docs/kusama-social-recovery.html | 8 ++-- docs/kusama-timeline.html | 8 ++-- docs/learn-DOT.html | 10 ++--- docs/learn-account-abstraction.html | 10 ++--- docs/learn-account-advanced.html | 10 ++--- docs/learn-account-multisig.html | 10 ++--- docs/learn-accounts.html | 10 ++--- docs/learn-advanced-index.html | 10 ++--- docs/learn-agile-coretime-index.html | 10 ++--- docs/learn-agile-coretime.html | 10 ++--- docs/learn-architecture-index.html | 10 ++--- docs/learn-architecture.html | 12 +++--- docs/learn-archive.html | 8 ++-- docs/learn-assets-index.html | 10 ++--- docs/learn-assets.html | 10 ++--- docs/learn-async-backing.html | 38 +++++++++--------- docs/learn-auction.html | 10 ++--- docs/learn-basics-index.html | 10 ++--- docs/learn-bridges.html | 10 ++--- docs/learn-collator.html | 14 ++++--- docs/learn-comparisons-avalanche.html | 8 ++-- docs/learn-comparisons-cosmos.html | 8 ++-- docs/learn-comparisons-ethereum-2.html | 8 ++-- docs/learn-comparisons-index.html | 8 ++-- docs/learn-comparisons-kusama.html | 8 ++-- docs/learn-comparisons-rollups.html | 8 ++-- docs/learn-comparisons.html | 8 ++-- docs/learn-components-index.html | 10 ++--- docs/learn-consensus.html | 10 ++--- docs/learn-crowdloans.html | 10 ++--- docs/learn-cryptography.html | 10 ++--- docs/learn-future-implementations-index.html | 8 ++-- docs/learn-guides-accounts-multisig.html | 17 ++++---- docs/learn-guides-accounts-proxy-pure.html | 17 ++++---- docs/learn-guides-accounts-proxy.html | 17 ++++---- docs/learn-guides-accounts.html | 17 ++++---- docs/learn-guides-assets-create.html | 17 ++++---- docs/learn-guides-assets-ledger.html | 17 ++++---- docs/learn-guides-assets.html | 15 +++---- docs/learn-guides-bounties.html | 17 ++++---- docs/learn-guides-identity.html | 17 ++++---- docs/learn-guides-ledger.html | 17 ++++---- docs/learn-guides-nominator.html | 17 ++++---- docs/learn-guides-polkadot-opengov.html | 17 ++++---- docs/learn-guides-staking-pools.html | 17 ++++---- docs/learn-guides-staking.html | 15 +++---- docs/learn-guides-transfers.html | 17 ++++---- docs/learn-guides-treasury.html | 17 ++++---- docs/learn-guides-vault.html | 17 ++++---- docs/learn-hyperbridge.html | 8 ++-- docs/learn-identity.html | 10 ++--- docs/learn-implementations.html | 8 ++-- docs/learn-index.html | 8 ++-- docs/learn-inflation.html | 10 ++--- docs/learn-nft-pallets.html | 10 ++--- docs/learn-nft-projects.html | 8 ++-- docs/learn-nft.html | 12 +++--- docs/learn-nomination-pools.html | 10 ++--- docs/learn-nominator.html | 10 ++--- docs/learn-parachains-faq.html | 10 ++--- docs/learn-parachains-index.html | 10 ++--- docs/learn-parachains-protocol.html | 10 ++--- docs/learn-parachains.html | 10 ++--- docs/learn-parathreads.html | 8 ++-- docs/learn-participants-index.html | 10 ++--- docs/learn-phragmen.html | 10 ++--- docs/learn-polkadot-host.html | 10 ++--- docs/learn-polkadot-js-guides.html | 15 ++++--- docs/learn-polkadot-opengov-index.html | 10 ++--- docs/learn-polkadot-opengov-origins.html | 10 ++--- docs/learn-polkadot-opengov-treasury.html | 10 ++--- docs/learn-polkadot-opengov.html | 10 ++--- docs/learn-polkadot-technical-fellowship.html | 10 ++--- docs/learn-polkadotjs-index.html | 31 -------------- docs/learn-polkadotjs.html | 34 ++++++++++++++++ docs/learn-polkadotjs/index.html | 11 ----- docs/learn-proxies-pure.html | 10 ++--- docs/learn-proxies.html | 10 ++--- docs/learn-runtime-upgrades.html | 10 ++--- docs/learn-sassafras.html | 8 ++-- docs/learn-scams.html | 8 ++-- docs/learn-spree.html | 8 ++-- docs/learn-staking-advanced.html | 10 ++--- docs/learn-staking-index.html | 10 ++--- docs/learn-staking.html | 10 ++--- docs/learn-system-chains.html | 10 ++--- docs/learn-teleport.html | 10 ++--- docs/learn-transaction-fees.html | 10 ++--- docs/learn-transactions.html | 10 ++--- docs/learn-validator.html | 15 ++++--- docs/learn-video-tutorials.html | 8 ++-- docs/learn-wasm.html | 10 ++--- docs/learn-xcm-index.html | 10 ++--- docs/learn-xcm-instructions.html | 10 ++--- docs/learn-xcm-pallet.html | 10 ++--- docs/learn-xcm-transport.html | 10 ++--- docs/learn-xcm-usecases.html | 10 ++--- docs/learn-xcm.html | 10 ++--- docs/learn-xcvm.html | 10 ++--- docs/learn/learn-controller.html | 8 ++-- docs/learn/learn-governance.html | 8 ++-- docs/learn/learn-launch.html | 8 ++-- docs/learn/learn-redenomination.html | 8 ++-- docs/learn/learn-treasury.html | 8 ++-- docs/learn/xcm.html | 8 ++-- docs/learn/xcm/config-deep-dive.html | 8 ++-- docs/learn/xcm/fundamentals-fees.html | 8 ++-- docs/learn/xcm/fundamentals-multiasset.html | 8 ++-- docs/learn/xcm/fundamentals-summary.html | 8 ++-- docs/learn/xcm/fundamentals-xcvm.html | 8 ++-- docs/learn/xcm/fundamentals.html | 8 ++-- .../fundamentals/multilocation-example.html | 8 ++-- .../fundamentals/multilocation-junctions.html | 8 ++-- .../fundamentals/multilocation-summary.html | 8 ++-- .../learn/xcm/fundamentals/multilocation.html | 8 ++-- docs/learn/xcm/introduction.html | 8 ++-- docs/learn/xcm/journey-assets.html | 8 ++-- docs/learn/xcm/journey-channels.html | 8 ++-- docs/learn/xcm/journey-expectations.html | 8 ++-- docs/learn/xcm/journey-fees.html | 8 ++-- docs/learn/xcm/journey-holding.html | 8 ++-- docs/learn/xcm/journey-locks.html | 8 ++-- docs/learn/xcm/journey-origin.html | 8 ++-- docs/learn/xcm/journey-queries.html | 8 ++-- docs/learn/xcm/journey-register.html | 8 ++-- docs/learn/xcm/journey-summary.html | 8 ++-- docs/learn/xcm/journey-transact.html | 8 ++-- docs/learn/xcm/journey-version.html | 8 ++-- docs/learn/xcm/journey.html | 8 ++-- docs/learn/xcm/journey/transfers-reserve.html | 8 ++-- docs/learn/xcm/journey/transfers-summary.html | 8 ++-- .../learn/xcm/journey/transfers-teleport.html | 8 ++-- docs/learn/xcm/journey/transfers.html | 8 ++-- docs/learn/xcm/overview-architecture.html | 8 ++-- docs/learn/xcm/overview-format.html | 8 ++-- docs/learn/xcm/overview-intro.html | 8 ++-- docs/learn/xcm/overview-summary.html | 8 ++-- docs/learn/xcm/overview-xcvm.html | 8 ++-- docs/learn/xcm/overview.html | 8 ++-- docs/learn/xcm/quickstart-first-look.html | 8 ++-- docs/learn/xcm/quickstart-simulator.html | 8 ++-- docs/learn/xcm/quickstart-summary.html | 8 ++-- docs/learn/xcm/quickstart.html | 8 ++-- docs/learn/xcm/reference-glossary.html | 8 ++-- docs/learn/xcm/reference-xcvm-registers.html | 8 ++-- docs/learn/xcm/references.html | 8 ++-- docs/learn/xcm/testing.html | 8 ++-- docs/ledger.html | 8 ++-- docs/maintain-archive.html | 8 ++-- docs/maintain-bootnode.html | 8 ++-- docs/maintain-collator-index.html | 8 ++-- docs/maintain-endpoints.html | 8 ++-- docs/maintain-errors.html | 8 ++-- docs/maintain-guides-async-backing.html | 8 ++-- docs/maintain-guides-avoid-slashing.html | 8 ++-- docs/maintain-guides-how-to-chill.html | 8 ++-- ...ntain-guides-how-to-monitor-your-node.html | 8 ++-- ...aintain-guides-how-to-stop-validating.html | 8 ++-- docs/maintain-guides-how-to-systemd.html | 8 ++-- docs/maintain-guides-how-to-upgrade.html | 8 ++-- ...aintain-guides-how-to-validate-kusama.html | 8 ++-- ...ntain-guides-how-to-validate-polkadot.html | 8 ++-- docs/maintain-guides-secure-validator.html | 8 ++-- docs/maintain-guides-society-kusama.html | 8 ++-- docs/maintain-guides-validator-community.html | 8 ++-- docs/maintain-guides-validator-payout.html | 8 ++-- docs/maintain-index.html | 8 ++-- docs/maintain-networks.html | 8 ++-- docs/maintain-node-index.html | 8 ++-- docs/maintain-polkadot-parameters.html | 8 ++-- docs/maintain-rpc.html | 8 ++-- docs/maintain-sync.html | 8 ++-- docs/maintain-validator-index.html | 8 ++-- docs/maintain-wss.html | 8 ++-- docs/maintain/maintain-guides-democracy.html | 8 ++-- .../maintain-guides-how-to-join-council.html | 8 ++-- ...aintain-guides-how-to-vote-councillor.html | 8 ++-- docs/metadata.html | 8 ++-- docs/multisig-apps.html | 8 ++-- docs/parachains-apps.html | 8 ++-- docs/polkadot-direction.html | 8 ++-- docs/polkadot-v1.html | 8 ++-- docs/polkadot-vault.html | 8 ++-- docs/polkadot-vision-index.html | 8 ++-- docs/polkadotjs-ui.html | 18 ++++----- docs/polkadotjs.html | 15 ++++--- docs/programs-index.html | 8 ++-- docs/research.html | 8 ++-- docs/staking-apps.html | 8 ++-- docs/staking-dashboard.html | 8 ++-- docs/start-building.html | 8 ++-- docs/stay-safe-index.html | 8 ++-- docs/thousand-contributors.html | 8 ++-- docs/thousand-validators.html | 8 ++-- docs/transaction-attacks.html | 8 ++-- docs/wallets-and-extensions.html | 16 ++++---- docs/wallets-index.html | 8 ++-- docs/web3-and-polkadot.html | 8 ++-- index.html | 8 ++-- search.html | 8 ++-- sitemap.xml | 2 +- 325 files changed, 1264 insertions(+), 1249 deletions(-) delete mode 100644 assets/images/async-backing-30d83e1ed114a3fb5e4ac44e58e2d6dc.png create mode 100644 assets/images/async-backing-97a966a8148c023012205ad71a146bcc.png create mode 100644 assets/images/sync-backing-39f23741e043faaf52bb5ddc880ea409.png delete mode 100644 assets/images/sync-backing-e5c74751cd62df36651f23fab421f7cf.png rename assets/js/{113faa87.29317d51.js => 113faa87.8278d46b.js} (64%) create mode 100644 assets/js/12331e8b.27119ba5.js delete mode 100644 assets/js/12331e8b.37d9cdce.js create mode 100644 assets/js/131c7f55.1aa6a0d8.js delete mode 100644 assets/js/131c7f55.1d8405cd.js create mode 100644 assets/js/2be0d940.62d9ef04.js delete mode 100644 assets/js/2be0d940.908d07d4.js delete mode 100644 assets/js/43cda9e8.112598c7.js create mode 100644 assets/js/43cda9e8.f288a13f.js rename assets/js/{48074a08.c534a999.js => 48074a08.54738057.js} (88%) delete mode 100644 assets/js/4f031749.191c540a.js create mode 100644 assets/js/4f031749.c0514a09.js rename assets/js/{694672cd.026cdae7.js => 694672cd.6da92c0d.js} (88%) rename assets/js/{7e9389ad.98b0975e.js => 7e9389ad.469e67df.js} (70%) create mode 100644 assets/js/804b1e9f.0786ac2c.js delete mode 100644 assets/js/804b1e9f.fc9d38a4.js delete mode 100644 assets/js/84ede15a.4f745ebe.js create mode 100644 assets/js/84ede15a.f1d7baef.js delete mode 100644 assets/js/918b38b6.283b8160.js create mode 100644 assets/js/918b38b6.de40ab7a.js create mode 100644 assets/js/935f2afb.bbb025cb.js delete mode 100644 assets/js/935f2afb.bf2e94d0.js delete mode 100644 assets/js/967fa6d4.9fd74d74.js create mode 100644 assets/js/967fa6d4.e1ab3ff0.js create mode 100644 assets/js/9e2042f5.15b12687.js delete mode 100644 assets/js/9e2042f5.701df6e6.js create mode 100644 assets/js/9f804621.3dffb346.js delete mode 100644 assets/js/9f804621.7e9f7f10.js create mode 100644 assets/js/b0a48d97.5a7adf6a.js delete mode 100644 assets/js/b0a48d97.a554336b.js delete mode 100644 assets/js/b9c2850c.0933da80.js delete mode 100644 assets/js/bb8b1738.19788ab0.js create mode 100644 assets/js/bb8b1738.c1eeadbf.js delete mode 100644 assets/js/c07c2447.762ee8d7.js create mode 100644 assets/js/c07c2447.f6edae7b.js create mode 100644 assets/js/c8dd560b.54b67c94.js delete mode 100644 assets/js/c8dd560b.741f4575.js rename assets/js/{cb9afd28.5590c4d6.js => cb9afd28.3bcf28bf.js} (60%) create mode 100644 assets/js/ccc1222e.9a1f2884.js delete mode 100644 assets/js/ccc1222e.cf52621d.js rename assets/js/{cd144357.4c7efdf9.js => cd144357.83cfa5bf.js} (57%) create mode 100644 assets/js/cda87995.07fc26a3.js delete mode 100644 assets/js/cda87995.1ea09317.js delete mode 100644 assets/js/dbbd9e76.985d034c.js create mode 100644 assets/js/dbbd9e76.ed32f583.js create mode 100644 assets/js/dd2fa029.01163b0e.js delete mode 100644 assets/js/ec3b6a32.03a19c6b.js create mode 100644 assets/js/ec3b6a32.47637506.js delete mode 100644 assets/js/ed3409b3.31e512ea.js create mode 100644 assets/js/ed3409b3.6861a858.js create mode 100644 assets/js/eef3f1dd.2e6b0474.js delete mode 100644 assets/js/eef3f1dd.dfb7ed91.js delete mode 100644 assets/js/f0ff685a.32e462fb.js create mode 100644 assets/js/f0ff685a.b45f4759.js rename assets/js/{f14351c1.6ee81354.js => f14351c1.461d06e3.js} (60%) create mode 100644 assets/js/f3027c84.6df02cfe.js delete mode 100644 assets/js/f3027c84.f254b300.js delete mode 100644 assets/js/f4130007.72a10007.js create mode 100644 assets/js/f4130007.8735c350.js create mode 100644 assets/js/f7acb151.65364809.js delete mode 100644 assets/js/f7acb151.8b126346.js delete mode 100644 assets/js/main.3e8f395a.js create mode 100644 assets/js/main.4ce15711.js rename assets/js/{main.3e8f395a.js.LICENSE.txt => main.4ce15711.js.LICENSE.txt} (100%) delete mode 100644 assets/js/runtime~main.01af0de1.js create mode 100644 assets/js/runtime~main.c8d7134d.js delete mode 100644 docs/en/learn-polkadotjs-index/index.html create mode 100644 docs/en/learn-polkadotjs/index.html delete mode 100644 docs/learn-polkadotjs-index.html create mode 100644 docs/learn-polkadotjs.html delete mode 100644 docs/learn-polkadotjs/index.html diff --git a/404.html b/404.html index 9d2f7a2dffca..c2b4f1545740 100644 --- a/404.html +++ b/404.html @@ -19,13 +19,13 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/assets/images/async-backing-30d83e1ed114a3fb5e4ac44e58e2d6dc.png b/assets/images/async-backing-30d83e1ed114a3fb5e4ac44e58e2d6dc.png deleted file mode 100644 index 84ef0384f992ffd89a9168fa8f06db00c61a6322..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118545 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

* 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%0A86ySrnx9Px#$edBB&Hq(mz9gF>7i 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.d(t,{Zo:()=>d,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||s;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=r.length,i=new Array(s);i[0]=m;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[u]="string"==typeof e?e:a,i[1]=o;for(var c=2;c{r.d(t,{Z:()=>y});var n=r(67294),a=r(86010),s=r(53438),i=r(39960),o=r(13919),l=r(95999);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){var t=e.href,r=e.children;return n.createElement(i.Z,{href:t,className:(0,a.Z)("card padding--lg",c.cardContainer)},r)}function u(e){var t=e.href,r=e.icon,s=e.title,i=e.description;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,a.Z)("text--truncate",c.cardTitle),title:s},r," ",s),i&&n.createElement("p",{className:(0,a.Z)("text--truncate",c.cardDescription),title:i},i))}function p(e){var t,r=e.item,a=(0,s.Wl)(r);return a?n.createElement(u,{href:a,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r,a=e.item,i=(0,o.Z)(a.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,s.xz)(null!=(t=a.docId)?t:void 0);return n.createElement(u,{href:a.href,icon:i,title:a.label,description:null!=(r=a.description)?r:null==l?void 0:l.description})}function f(e){var t=e.item;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function b(e){var t=e.className,r=(0,s.jA)();return n.createElement(y,{items:r.items,className:t})}function y(e){var t=e.items,r=e.className;if(!t)return n.createElement(b,e);var i=(0,s.MN)(t);return n.createElement("section",{className:(0,a.Z)("row",r)},i.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},30998:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>b,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=r(87462),a=r(63366),s=(r(67294),r(3905)),i=r(52991),o=["components"],l={id:"learn-guides-assets",title:"Polkadot-JS Guides about Asset Hub",sidebar_label:"Asset Hub Guides",description:"Polkadot-JS Guides about Asset Hub.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets"},c=void 0,d={unversionedId:"learn/learn-guides-assets",id:"learn/learn-guides-assets",title:"Polkadot-JS Guides about Asset Hub",description:"Polkadot-JS Guides about Asset Hub.",source:"@site/../docs/learn/learn-guides-assets.md",sourceDirName:"learn",slug:"/learn-guides-assets",permalink:"/docs/learn-guides-assets",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-assets",title:"Polkadot-JS Guides about Asset Hub",sidebar_label:"Asset Hub Guides",description:"Polkadot-JS Guides about Asset Hub.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets"},sidebar:"docs",previous:{title:"Polkadot Vault Guides",permalink:"/docs/learn-guides-vault"},next:{title:"Create Asset Guides",permalink:"/docs/learn-guides-assets-create"}},u={},p=[],m={toc:p},f="wrapper";function b(e){var t=e.components,r=(0,a.Z)(e,o);return(0,s.kt)(f,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("div",{className:"sticky",style:{zIndex:1}},(0,s.kt)("br",null),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,s.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,s.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,s.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,s.kt)(i.Z,{mdxType:"DocCardList"}))}b.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7738],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||s;return r?n.createElement(f,o(o({ref:t},d),{},{components:r})):n.createElement(f,o({ref:t},d))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=r.length,o=new Array(s);o[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:a,o[1]=i;for(var c=2;c{r.d(t,{Z:()=>y});var n=r(67294),a=r(86010),s=r(53438),o=r(39960),i=r(13919),l=r(95999);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){var t=e.href,r=e.children;return n.createElement(o.Z,{href:t,className:(0,a.Z)("card padding--lg",c.cardContainer)},r)}function u(e){var t=e.href,r=e.icon,s=e.title,o=e.description;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,a.Z)("text--truncate",c.cardTitle),title:s},r," ",s),o&&n.createElement("p",{className:(0,a.Z)("text--truncate",c.cardDescription),title:o},o))}function p(e){var t,r=e.item,a=(0,s.Wl)(r);return a?n.createElement(u,{href:a,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r,a=e.item,o=(0,i.Z)(a.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,s.xz)(null!=(t=a.docId)?t:void 0);return n.createElement(u,{href:a.href,icon:o,title:a.label,description:null!=(r=a.description)?r:null==l?void 0:l.description})}function f(e){var t=e.item;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function b(e){var t=e.className,r=(0,s.jA)();return n.createElement(y,{items:r.items,className:t})}function y(e){var t=e.items,r=e.className;if(!t)return n.createElement(b,e);var o=(0,s.MN)(t);return n.createElement("section",{className:(0,a.Z)("row",r)},o.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},30998:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>b,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=r(87462),a=r(63366),s=(r(67294),r(3905)),o=r(52991),i=["components"],l={id:"learn-guides-assets",title:"Polkadot-JS Guides about Asset Hub",sidebar_label:"Asset Hub Guides",description:"Polkadot-JS Guides about Asset Hub.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets"},c=void 0,d={unversionedId:"learn/learn-guides-assets",id:"learn/learn-guides-assets",title:"Polkadot-JS Guides about Asset Hub",description:"Polkadot-JS Guides about Asset Hub.",source:"@site/../docs/learn/learn-guides-assets.md",sourceDirName:"learn",slug:"/learn-guides-assets",permalink:"/docs/learn-guides-assets",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-assets",title:"Polkadot-JS Guides about Asset Hub",sidebar_label:"Asset Hub Guides",description:"Polkadot-JS Guides about Asset Hub.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets"},sidebar:"docs",previous:{title:"Polkadot Vault Guides",permalink:"/docs/learn-guides-vault"},next:{title:"Create Asset Guides",permalink:"/docs/learn-guides-assets-create"}},u={},p=[],m={toc:p},f="wrapper";function b(e){var t=e.components,r=(0,a.Z)(e,i);return(0,s.kt)(f,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("div",{className:"sticky",style:{zIndex:1}},(0,s.kt)("br",null),(0,s.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,s.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,s.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,s.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,s.kt)(o.Z,{mdxType:"DocCardList"}))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/12331e8b.27119ba5.js b/assets/js/12331e8b.27119ba5.js new file mode 100644 index 000000000000..0dbb53ed265b --- /dev/null +++ b/assets/js/12331e8b.27119ba5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8270],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),c=p(a),u=o,k=c["".concat(l,".").concat(u)]||c[u]||h[u]||s;return a?n.createElement(k,r(r({ref:t},d),{},{components:a})):n.createElement(k,r({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=a.length,r=new Array(s);r[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:o,r[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>k,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var n=a(87462),o=a(63366),s=(a(67294),a(3905)),r=["components"],i={id:"polkadotjs",title:"Polkadot-JS Tooling",sidebar_label:"Polkadot-JS Tooling",description:"The Polkadot-JS Tool Collection.",keywords:["polkadotjs","polkadotjs apps","apps UI","extension"],slug:"../polkadotjs"},l=void 0,p={unversionedId:"general/polkadotjs",id:"general/polkadotjs",title:"Polkadot-JS Tooling",description:"The Polkadot-JS Tool Collection.",source:"@site/../docs/general/polkadotjs.md",sourceDirName:"general",slug:"/polkadotjs",permalink:"/docs/polkadotjs",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/polkadotjs.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"polkadotjs",title:"Polkadot-JS Tooling",sidebar_label:"Polkadot-JS Tooling",description:"The Polkadot-JS Tool Collection.",keywords:["polkadotjs","polkadotjs apps","apps UI","extension"],slug:"../polkadotjs"},sidebar:"docs",previous:{title:"Polkadot-JS",permalink:"/docs/learn-polkadotjs"},next:{title:"Polkadot-JS UI",permalink:"/docs/polkadotjs-ui"}},d={},c=[{value:"Polkadot-JS UI",id:"polkadot-js-ui",level:2},{value:"Polkadot-JS UI Desktop App",id:"polkadot-js-ui-desktop-app",level:3},{value:"Polkadot-JS Extension",id:"polkadot-js-extension",level:2},{value:"Polkadot-JS Phishing List",id:"polkadot-js-phishing-list",level:2},{value:"Polkadot-JS API",id:"polkadot-js-api",level:2},{value:"Querying On-chain Data",id:"querying-on-chain-data",level:3},{value:"Issuing Extrinsics",id:"issuing-extrinsics",level:3}],h={toc:c},u="wrapper";function k(e){var t=e.components,i=(0,o.Z)(e,r);return(0,s.kt)(u,(0,n.Z)({},h,i,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("div",{className:"sticky",style:{zIndex:1}},(0,s.kt)("br",null),(0,s.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,s.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,s.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,s.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/"},(0,s.kt)("strong",{parentName:"a"},"Polkadot-JS"))," is a collection of tools that interfaces with the\nPolkadot blockchain in a granular way. Below\nwe describe the different components of Polkadot-JS. For more information about Polkadot-JS you can\nconsult the ",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/"},(0,s.kt)("strong",{parentName:"a"},"official documentation")),"."),(0,s.kt)("h2",{id:"polkadot-js-ui"},"Polkadot-JS UI"),(0,s.kt)("admonition",{title:"For Developers and Power Users Only",type:"info"},(0,s.kt)("p",{parentName:"admonition"},"Please note that this wallet UI is oriented toward developers and power users. Explore Polkadot with\na secure and user-friendly wallets listed on the\n",(0,s.kt)("a",{parentName:"p",href:"https://www.polkadot.network/ecosystem/wallets/"},"Polkadot website"),". If you need help using the\nPolkadot-JS UI you can contact the\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},(0,s.kt)("strong",{parentName:"a"},"Polkadot Support Team")),".")),(0,s.kt)("p",null,"The Polkadot-JS UI is an application that loads in your browser. There is a standard DNS\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/"},(0,s.kt)("strong",{parentName:"a"},"hosted version")),", which always has the latest features, and an\n",(0,s.kt)("a",{parentName:"p",href:"https://dotapps.io/"},(0,s.kt)("strong",{parentName:"a"},"IPFS version"))," that is less frequently updated but is more decentralized.\nThis is also often referred to as Polkadot-JS Apps, UI or the Apps UI. In the Wiki pages we will\nalways refer to Polkadot-JS UI."),(0,s.kt)("p",null,"Polkadot-JS Apps has many capabilities that go beyond basic wallet functions such as account\ncreation and sending or receiving transactions. See the ",(0,s.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},(0,s.kt)("strong",{parentName:"a"},"dedicated section")),"\nfor more information about the UI."),(0,s.kt)("h3",{id:"polkadot-js-ui-desktop-app"},"Polkadot-JS UI Desktop App"),(0,s.kt)("p",null,"The Polkadot-JS UI also exists as a\n",(0,s.kt)("a",{parentName:"p",href:"https://github.com/polkadot-js/apps/releases/"},(0,s.kt)("strong",{parentName:"a"},"desktop application"))," for Windows, Mac and Linux.\nThe main advantage of using it is that by default it stores encrypted accounts on the filesystem\ninstead of browser's local storage. Local storage is susceptible to attacks using XSS (Cross-Site\nScripting). There's no such risk when with files stored on disk."),(0,s.kt)("p",null,"The desktop app uses the ",(0,s.kt)("a",{parentName:"p",href:"https://www.electronjs.org/"},(0,s.kt)("strong",{parentName:"a"},"Electron"))," framework. It provides the same\nfeatures as web app, the only difference being different account storage."),(0,s.kt)("admonition",{title:"Ledger not supported",type:"info"},(0,s.kt)("p",{parentName:"admonition"},"The desktop application does not support Ledger accounts. If you need a cold storage solution you\ncan try Parity Signer (aka Polkadot Vault).")),(0,s.kt)("h2",{id:"polkadot-js-extension"},"Polkadot-JS Extension"),(0,s.kt)("p",null,"The ",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/extension/"},(0,s.kt)("strong",{parentName:"a"},"Polkadot-JS browser extension"))," is not a wallet ",(0,s.kt)("em",{parentName:"p"},"per se"),"\nbut an account management tool. It allows you to create accounts and also import accounts from\n",(0,s.kt)("a",{parentName:"p",href:"/docs/ledger"},(0,s.kt)("strong",{parentName:"a"},"Ledger"))," devices or Parity Signer, allowing the signing of\n",(0,s.kt)("a",{parentName:"p",href:"/docs/learn-transactions"},(0,s.kt)("strong",{parentName:"a"},"extrinsics"))," using these accounts. It also allows you export\nexisting accounts and restore accounts (given you have the required information to restore them)."),(0,s.kt)("p",null,"The extension is a robust key storage tool, i.e. even if you clear the cache of your browser your\naccounts will be retained. The extension will recognize any websites that have been flagged for\nmalicious activity. For additional security, the extension will always ask if you want a specific\nwebsite to access the account information on it."),(0,s.kt)("p",null,"The extension does not let users interact directly with on-chain functions as one would find on a\nwallet app like Metamask, i.e. it does not allow you to transact or do anything else other than\nadding and managing accounts. However, it provides a simple interface for interacting with\nextension-compliant dApps such as the ",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},(0,s.kt)("strong",{parentName:"a"},"Polkadot-JS UI")),"\nand the ",(0,s.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},(0,s.kt)("strong",{parentName:"a"},"Polkadot Staking Dashboard")),". Check\n",(0,s.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"wallets and extensions")," page for wallets that are capable of\ntransacting on-chain directly."),(0,s.kt)("admonition",{title:"Metadata Updates",type:"info"},(0,s.kt)("p",{parentName:"admonition"},"The browser extension is a tool that interacts with the Polkadot network, but it is disconnected\nfrom it when it is not in use. It is important you\n",(0,s.kt)("a",{parentName:"p",href:"/docs/learn-guides-accounts#metadata-updates-with-the-polkadot-js-browser-extension"},(0,s.kt)("strong",{parentName:"a"},"always check for metadata updates")),"\nbefore using the extension or other account management tools such as Parity Signer (aka Polkadot\nVault).")),(0,s.kt)("h2",{id:"polkadot-js-phishing-list"},"Polkadot-JS Phishing List"),(0,s.kt)("p",null,"The ",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/phishing/"},(0,s.kt)("strong",{parentName:"a"},"Polkadot-JS phishing list"))," website is a community-driven\ncuration of malicious actors and operators. The Polkadot-JS extension uses this list to warn a user\nabout suspicious URLs and addresses that are part of the list, and automatically blocks the account\naddress."),(0,s.kt)("h2",{id:"polkadot-js-api"},"Polkadot-JS API"),(0,s.kt)("p",null,"The ",(0,s.kt)("a",{parentName:"p",href:"https://github.com/polkadot-js/api"},(0,s.kt)("strong",{parentName:"a"},"Polkadot-JS API"))," is a JavaScript API allowing for\nprograms to interface with the functionalities of\nPolkadot."),(0,s.kt)("p",null,"While interacting with the underlying\n",(0,s.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@polkadot/api"},(0,s.kt)("strong",{parentName:"a"},"@polkadot/api")),", most interfaces are generated\nautomatically when connecting to an available node. This is quite a departure from many other API\ndesigns where the interfaces are commonly static."),(0,s.kt)("p",null,"When the API connects to a node, it initially retrieves the\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/runtime"},(0,s.kt)("strong",{parentName:"a"},"metadata")),' which is used to "decorate" the API based on\nits contents. The metadata provides data in the form of ',(0,s.kt)("inlineCode",{parentName:"p"},"api...

")," where ",(0,s.kt)("inlineCode",{parentName:"p"},"type"),"\nfits into one of the following categories:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"consts")," - runtime constants (these are not functions so the values are returned directly as they\nare defined by the endpoint)"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"query")," - chain state values"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"tx")," - all extrinsics")),(0,s.kt)("p",null,"The metadata also provides information on\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/substrate/events/"},(0,s.kt)("strong",{parentName:"a"},"events")),", which can be queried using the\n",(0,s.kt)("inlineCode",{parentName:"p"},"api.query.system.events()")," interface."),(0,s.kt)("p",null,"None of the information contained within the ",(0,s.kt)("inlineCode",{parentName:"p"},"api.{consts, query, tx}..")," endpoints\nare hard-coded in the API. These values are defined by the decoration applied from the initial\nmetadata response and are therefore completely dynamic. This suggests that when you connect to\ndifferent parachains, the metadata and API decoration will change and provide varying interfaces\nbased on the chain."),(0,s.kt)("p",null,"A developer can use Polkadot-JS Apps to test code's functionality. Interacting with the Polkadot-JS\ncomes down to either ",(0,s.kt)("a",{parentName:"p",href:"#querying-on-chain-data"},(0,s.kt)("strong",{parentName:"a"},"querying on-chain data"))," or\n",(0,s.kt)("a",{parentName:"p",href:"#issuing-extrinsics"},(0,s.kt)("strong",{parentName:"a"},"issuing an extrinsic")),"."),(0,s.kt)("h3",{id:"querying-on-chain-data"},"Querying On-chain Data"),(0,s.kt)("p",null,"To populate the Apps UI, the web app queries the Polkadot-JS API. The API then queries a\nPolkadot node and uses JavaScript to return\ninformation that the UI will display on the screen. You can choose which node to connect to by\nchanging it in the upper-left-hand corner of the screen."),(0,s.kt)("p",null,"Let's see how we can query on-chain data with Polkadot-JS UI on the Polkadot network with an\nexample. To find out the current value for existential deposit, navigate to Developer > Chain\nstate > Constants and query the balances pallet for existential deposit as shown in the snapshot\nbelow. You need to click on the plus button to execute the query. The value displayed is in\n",(0,s.kt)("a",{parentName:"p",href:"learn-DOT#polkadot"},"plancks")),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"query chain state",src:a(75506).Z,width:"1728",height:"380"})),(0,s.kt)("h3",{id:"issuing-extrinsics"},"Issuing Extrinsics"),(0,s.kt)("p",null,"Extrinsics are pieces of information that come from outside the chain and are included in a block.\nExtrinsics can be one of three types: inherents, signed, and unsigned transactions."),(0,s.kt)("p",null,"Most extrinsics displayed on Polkadot-JS Apps are signed transactions. Inherits are non-signed and\nnon-gossiped pieces of information included in blocks by the block author, such as timestamps, which\nare \u201ctrue\u201d because a sufficient number of validators have agreed about validity."),(0,s.kt)("p",null,"Unsigned transactions are information that does not require a signature but will require some sort\nof spam prevention, whereas signed transactions are issued by the originator account of a\ntransaction which contains a signature of that account, which will be subject to a fee to include it\non the chain."))}k.isMDXComponent=!0},75506:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/chain-state-constant-8663ba40c98411da3308fdaf40cb13ee.png"}}]); \ No newline at end of file diff --git a/assets/js/12331e8b.37d9cdce.js b/assets/js/12331e8b.37d9cdce.js deleted file mode 100644 index 8a42068288e7..000000000000 --- a/assets/js/12331e8b.37d9cdce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8270],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},d=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,d=r(e,["components","mdxType","originalType","parentName"]),c=p(a),u=o,k=c["".concat(l,".").concat(u)]||c[u]||h[u]||i;return a?n.createElement(k,s(s({ref:t},d),{},{components:a})):n.createElement(k,s({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,s=new Array(i);s[0]=u;var r={};for(var l in t)hasOwnProperty.call(t,l)&&(r[l]=t[l]);r.originalType=e,r[c]="string"==typeof e?e:o,s[1]=r;for(var p=2;p{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>k,frontMatter:()=>r,metadata:()=>p,toc:()=>c});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),s=["components"],r={id:"polkadotjs",title:"Polkadot-JS Tooling",sidebar_label:"Polkadot-JS Tooling",description:"The Polkadot-JS Tool Collection.",keywords:["polkadotjs","polkadotjs apps","apps UI","extension"],slug:"../polkadotjs"},l=void 0,p={unversionedId:"general/polkadotjs",id:"general/polkadotjs",title:"Polkadot-JS Tooling",description:"The Polkadot-JS Tool Collection.",source:"@site/../docs/general/polkadotjs.md",sourceDirName:"general",slug:"/polkadotjs",permalink:"/docs/polkadotjs",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/polkadotjs.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1704367237,formattedLastUpdatedAt:"Jan 4, 2024",frontMatter:{id:"polkadotjs",title:"Polkadot-JS Tooling",sidebar_label:"Polkadot-JS Tooling",description:"The Polkadot-JS Tool Collection.",keywords:["polkadotjs","polkadotjs apps","apps UI","extension"],slug:"../polkadotjs"},sidebar:"docs",previous:{title:"Polkadot-JS",permalink:"/docs/learn-polkadotjs-index"},next:{title:"Polkadot-JS UI",permalink:"/docs/polkadotjs-ui"}},d={},c=[{value:"Polkadot-JS UI",id:"polkadot-js-ui",level:2},{value:"Polkadot-JS UI Desktop App",id:"polkadot-js-ui-desktop-app",level:3},{value:"Polkadot-JS Extension",id:"polkadot-js-extension",level:2},{value:"Polkadot-JS Phishing List",id:"polkadot-js-phishing-list",level:2},{value:"Polkadot-JS API",id:"polkadot-js-api",level:2},{value:"Querying On-chain Data",id:"querying-on-chain-data",level:3},{value:"Issuing Extrinsics",id:"issuing-extrinsics",level:3}],h={toc:c},u="wrapper";function k(e){var t=e.components,r=(0,o.Z)(e,s);return(0,i.kt)(u,(0,n.Z)({},h,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/"},(0,i.kt)("strong",{parentName:"a"},"Polkadot-JS"))," is a collection of tools that interfaces with the\nPolkadot blockchain in a granular way. Below\nwe describe the different components of Polkadot-JS. For more information about Polkadot-JS you can\nconsult the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/"},(0,i.kt)("strong",{parentName:"a"},"official documentation")),"."),(0,i.kt)("h2",{id:"polkadot-js-ui"},"Polkadot-JS UI"),(0,i.kt)("admonition",{title:"For Developers and Power Users Only",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Please note that this wallet UI is oriented toward developers and power users. Explore Polkadot with\na secure and user-friendly wallets listed on the\n",(0,i.kt)("a",{parentName:"p",href:"https://www.polkadot.network/ecosystem/wallets/"},"Polkadot website"),". If you need help using the\nPolkadot-JS UI you can contact the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},(0,i.kt)("strong",{parentName:"a"},"Polkadot Support Team")),".")),(0,i.kt)("p",null,"The Polkadot-JS UI is an application that loads in your browser. There is a standard DNS\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/"},(0,i.kt)("strong",{parentName:"a"},"hosted version")),", which always has the latest features, and an\n",(0,i.kt)("a",{parentName:"p",href:"https://dotapps.io/"},(0,i.kt)("strong",{parentName:"a"},"IPFS version"))," that is less frequently updated but is more decentralized.\nThis is also often referred to as Polkadot-JS Apps, UI or the Apps UI. In the Wiki pages we will\nalways refer to Polkadot-JS UI."),(0,i.kt)("p",null,"Polkadot-JS Apps has many capabilities that go beyond basic wallet functions such as account\ncreation and sending or receiving transactions. See the ",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},(0,i.kt)("strong",{parentName:"a"},"dedicated section")),"\nfor more information about the UI."),(0,i.kt)("h3",{id:"polkadot-js-ui-desktop-app"},"Polkadot-JS UI Desktop App"),(0,i.kt)("p",null,"The Polkadot-JS UI also exists as a\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/polkadot-js/apps/releases/"},(0,i.kt)("strong",{parentName:"a"},"desktop application"))," for Windows, Mac and Linux.\nThe main advantage of using it is that by default it stores encrypted accounts on the filesystem\ninstead of browser's local storage. Local storage is susceptible to attacks using XSS (Cross-Site\nScripting). There's no such risk when with files stored on disk."),(0,i.kt)("p",null,"The desktop app uses the ",(0,i.kt)("a",{parentName:"p",href:"https://www.electronjs.org/"},(0,i.kt)("strong",{parentName:"a"},"Electron"))," framework. It provides the same\nfeatures as web app, the only difference being different account storage."),(0,i.kt)("admonition",{title:"Ledger not supported",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The desktop application does not support Ledger accounts. If you need a cold storage solution you\ncan try Parity Signer (aka Polkadot Vault).")),(0,i.kt)("h2",{id:"polkadot-js-extension"},"Polkadot-JS Extension"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/extension/"},(0,i.kt)("strong",{parentName:"a"},"Polkadot-JS browser extension"))," is not a wallet ",(0,i.kt)("em",{parentName:"p"},"per se"),"\nbut an account management tool. It allows you to create accounts and also import accounts from\n",(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},(0,i.kt)("strong",{parentName:"a"},"Ledger"))," devices or Parity Signer, allowing the signing of\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-transactions"},(0,i.kt)("strong",{parentName:"a"},"extrinsics"))," using these accounts. It also allows you export\nexisting accounts and restore accounts (given you have the required information to restore them)."),(0,i.kt)("p",null,"The extension is a robust key storage tool, i.e. even if you clear the cache of your browser your\naccounts will be retained. The extension will recognize any websites that have been flagged for\nmalicious activity. For additional security, the extension will always ask if you want a specific\nwebsite to access the account information on it."),(0,i.kt)("p",null,"The extension does not let users interact directly with on-chain functions as one would find on a\nwallet app like Metamask, i.e. it does not allow you to transact or do anything else other than\nadding and managing accounts. However, it provides a simple interface for interacting with\nextension-compliant dApps such as the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},(0,i.kt)("strong",{parentName:"a"},"Polkadot-JS UI")),"\nand the ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},(0,i.kt)("strong",{parentName:"a"},"Polkadot Staking Dashboard")),". Check\n",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"wallets and extensions")," page for wallets that are capable of\ntransacting on-chain directly."),(0,i.kt)("admonition",{title:"Metadata Updates",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The browser extension is a tool that interacts with the Polkadot network, but it is disconnected\nfrom it when it is not in use. It is important you\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-accounts#metadata-updates-with-the-polkadot-js-browser-extension"},(0,i.kt)("strong",{parentName:"a"},"always check for metadata updates")),"\nbefore using the extension or other account management tools such as Parity Signer (aka Polkadot\nVault).")),(0,i.kt)("h2",{id:"polkadot-js-phishing-list"},"Polkadot-JS Phishing List"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/phishing/"},(0,i.kt)("strong",{parentName:"a"},"Polkadot-JS phishing list"))," website is a community-driven\ncuration of malicious actors and operators. The Polkadot-JS extension uses this list to warn a user\nabout suspicious URLs and addresses that are part of the list, and automatically blocks the account\naddress."),(0,i.kt)("h2",{id:"polkadot-js-api"},"Polkadot-JS API"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/polkadot-js/api"},(0,i.kt)("strong",{parentName:"a"},"Polkadot-JS API"))," is a JavaScript API allowing for\nprograms to interface with the functionalities of\nPolkadot."),(0,i.kt)("p",null,"While interacting with the underlying\n",(0,i.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@polkadot/api"},(0,i.kt)("strong",{parentName:"a"},"@polkadot/api")),", most interfaces are generated\nautomatically when connecting to an available node. This is quite a departure from many other API\ndesigns where the interfaces are commonly static."),(0,i.kt)("p",null,"When the API connects to a node, it initially retrieves the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/runtime"},(0,i.kt)("strong",{parentName:"a"},"metadata")),' which is used to "decorate" the API based on\nits contents. The metadata provides data in the form of ',(0,i.kt)("inlineCode",{parentName:"p"},"api...
")," where ",(0,i.kt)("inlineCode",{parentName:"p"},"type"),"\nfits into one of the following categories:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"consts")," - runtime constants (these are not functions so the values are returned directly as they\nare defined by the endpoint)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"query")," - chain state values"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"tx")," - all extrinsics")),(0,i.kt)("p",null,"The metadata also provides information on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/substrate/events/"},(0,i.kt)("strong",{parentName:"a"},"events")),", which can be queried using the\n",(0,i.kt)("inlineCode",{parentName:"p"},"api.query.system.events()")," interface."),(0,i.kt)("p",null,"None of the information contained within the ",(0,i.kt)("inlineCode",{parentName:"p"},"api.{consts, query, tx}..")," endpoints\nare hard-coded in the API. These values are defined by the decoration applied from the initial\nmetadata response and are therefore completely dynamic. This suggests that when you connect to\ndifferent parachains, the metadata and API decoration will change and provide varying interfaces\nbased on the chain."),(0,i.kt)("p",null,"A developer can use Polkadot-JS Apps to test code's functionality. Interacting with the Polkadot-JS\ncomes down to either ",(0,i.kt)("a",{parentName:"p",href:"#querying-on-chain-data"},(0,i.kt)("strong",{parentName:"a"},"querying on-chain data"))," or\n",(0,i.kt)("a",{parentName:"p",href:"#issuing-extrinsics"},(0,i.kt)("strong",{parentName:"a"},"issuing an extrinsic")),"."),(0,i.kt)("h3",{id:"querying-on-chain-data"},"Querying On-chain Data"),(0,i.kt)("p",null,"To populate the Apps UI, the web app queries the Polkadot-JS API. The API then queries a\nPolkadot node and uses JavaScript to return\ninformation that the UI will display on the screen. You can choose which node to connect to by\nchanging it in the upper-left-hand corner of the screen."),(0,i.kt)("p",null,"Let's see how we can query on-chain data with Polkadot-JS UI on the Polkadot network with an\nexample. To find out the current value for existential deposit, navigate to Developer > Chain\nstate > Constants and query the balances pallet for existential deposit as shown in the snapshot\nbelow. You need to click on the plus button to execute the query. The value displayed is in\n",(0,i.kt)("a",{parentName:"p",href:"learn-DOT#polkadot"},"plancks")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"query chain state",src:a(75506).Z,width:"1728",height:"380"})),(0,i.kt)("h3",{id:"issuing-extrinsics"},"Issuing Extrinsics"),(0,i.kt)("p",null,"Extrinsics are pieces of information that come from outside the chain and are included in a block.\nExtrinsics can be one of three types: inherents, signed, and unsigned transactions."),(0,i.kt)("p",null,"Most extrinsics displayed on Polkadot-JS Apps are signed transactions. Inherits are non-signed and\nnon-gossiped pieces of information included in blocks by the block author, such as timestamps, which\nare \u201ctrue\u201d because a sufficient number of validators have agreed about validity."),(0,i.kt)("p",null,"Unsigned transactions are information that does not require a signature but will require some sort\nof spam prevention, whereas signed transactions are issued by the originator account of a\ntransaction which contains a signature of that account, which will be subject to a fee to include it\non the chain."))}k.isMDXComponent=!0},75506:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/chain-state-constant-8663ba40c98411da3308fdaf40cb13ee.png"}}]); \ No newline at end of file diff --git a/assets/js/131c7f55.1aa6a0d8.js b/assets/js/131c7f55.1aa6a0d8.js new file mode 100644 index 000000000000..26423eca6ba8 --- /dev/null +++ b/assets/js/131c7f55.1aa6a0d8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9323],{3905:(e,a,t)=>{t.d(a,{Zo:()=>h,kt:()=>m});var r=t(67294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var l=r.createContext({}),c=function(e){var a=r.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},h=function(e){var a=c(e.components);return r.createElement(l.Provider,{value:a},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},u=r.forwardRef((function(e,a){var t=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),d=c(t),u=n,m=d["".concat(l,".").concat(u)]||d[u]||p[u]||o;return t?r.createElement(m,i(i({ref:a},h),{},{components:t})):r.createElement(m,i({ref:a},h))}));function m(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var o=t.length,i=new Array(o);i[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[d]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{t.r(a),t.d(a,{assets:()=>h,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=t(87462),n=t(63366),o=(t(67294),t(3905)),i=["components"],s={id:"learn-architecture",title:"Architecture",sidebar_label:"Architecture",description:"Key Components to Polkadot's Architecture.",keywords:["polkadot","components","architecture"],slug:"../learn-architecture"},l=void 0,c={unversionedId:"learn/learn-architecture",id:"learn/learn-architecture",title:"Architecture",description:"Key Components to Polkadot's Architecture.",source:"@site/../docs/learn/learn-architecture.md",sourceDirName:"learn",slug:"/learn-architecture",permalink:"/docs/learn-architecture",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-architecture.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1705420507,formattedLastUpdatedAt:"Jan 16, 2024",frontMatter:{id:"learn-architecture",title:"Architecture",sidebar_label:"Architecture",description:"Key Components to Polkadot's Architecture.",keywords:["polkadot","components","architecture"],slug:"../learn-architecture"},sidebar:"docs",previous:{title:"Architecture",permalink:"/docs/learn-architecture-index"},next:{title:"Parachains",permalink:"/docs/learn-parachains-index"}},h={},d=[{value:"Relay Chain",id:"relay-chain",level:2},{value:"Parachain and Parathread Slots",id:"parachain-and-parathread-slots",level:2},{value:"Shared Security",id:"shared-security",level:3},{value:"Interoperability",id:"interoperability",level:2},{value:"XCM",id:"xcm",level:3},{value:"Bridges",id:"bridges",level:3},{value:"Validators",id:"validators",level:2},{value:"Nominators",id:"nominators",level:2},{value:"Collators",id:"collators",level:2},{value:"Whiteboard Series",id:"whiteboard-series",level:2}],p={toc:d},u="wrapper";function m(e){var a=e.components,t=(0,n.Z)(e,i);return(0,o.kt)(u,(0,r.Z)({},p,t,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Polkadot is a heterogeneous multichain with\nshared security and interoperability."),(0,o.kt)("h2",{id:"relay-chain"},"Relay Chain"),(0,o.kt)("p",null,"The Relay Chain is the central chain of\nPolkadot. All validators of\nPolkadot are staked on the Relay Chain in DOT\nand validate for the Relay Chain. The Relay Chain is composed of a relatively small number of\ntransaction types that include ways to interact with the governance mechanism, parachain auctions,\nand participating in NPoS. The Relay Chain has deliberately minimal functionality - for instance,\nsmart contracts are not supported. The main responsibility is to coordinate the system as a whole,\nincluding parachains. Other specific work is delegated to the parachains, which have different\nimplementations and features."),(0,o.kt)("h2",{id:"parachain-and-parathread-slots"},(0,o.kt)("a",{parentName:"h2",href:"/docs/learn-parachains"},"Parachain")," and ",(0,o.kt)("a",{parentName:"h2",href:"/docs/learn-parathreads"},"Parathread")," Slots"),(0,o.kt)("p",null,"Polkadot can support a number of execution\nslots. These slots are like cores on a computer's processor (a modern laptop's processor may have\neight cores, for example). Each one of these cores can run one process at a time.\nPolkadot allows these slots using two\nsubscription models: parachains and parathreads. Parachains have a dedicated slot (core) for their\nchain and are like a process that runs constantly. Parathreads share slots amongst a group, and are\nthus more like processes that need to be woken up and run less frequently."),(0,o.kt)("p",null,"Most of the computation that happens across the\nPolkadot network as a whole will be delegated\nto specific parachain or parathread implementations that handle various use cases.\nPolkadot places no constraints over what\nparachains can do besides that they must be able to generate a proof that can be validated by the\nvalidators assigned to the parachain. This proof verifies the state transition of the parachain.\nSome parachains may be specific to a particular application, others may focus on specific features\nlike smart contracts, privacy, or scalability ","\u2014"," still, others might be experimental\narchitectures that are not necessarily blockchain in nature."),(0,o.kt)("p",null,"Polkadot provides many ways to secure a slot\nfor a parachain for a particular length of time. Parathreads are part of a pool that shares slots\nand must-win auctions for individual blocks. Parathreads and parachains have the same API; their\ndifference is economic. Parachains will have to reserve\nDOT for the duration of their slot lease;\nparathreads will pay on a per-block basis. Parathreads can become parachains, and vice-versa."),(0,o.kt)("h3",{id:"shared-security"},(0,o.kt)("a",{parentName:"h3",href:"/docs/learn-parachains"},"Shared Security")),(0,o.kt)("p",null,"Parachains connected to the Polkadot Relay\nChain all share in the security of the Relay Chain.\nPolkadot has a shared state between the Relay\nChain and all of the connected parachains. If the Relay Chain must revert for any reason, then all\nof the parachains would also revert. This is to ensure that the validity of the entire system can\npersist and no individual part is corruptible."),(0,o.kt)("p",null,"The shared state ensures that the trust assumptions when using\nPolkadot parachains are only those of the\nRelay Chain validator set and no other. Since the validator set on the Relay Chain is expected to be\nsecure with a large amount of stake put up to back it, parachains should benefit from this security."),(0,o.kt)("h2",{id:"interoperability"},"Interoperability"),(0,o.kt)("h3",{id:"xcm"},(0,o.kt)("a",{parentName:"h3",href:"learn-xcm"},"XCM")),(0,o.kt)("p",null,"XCM, short for cross-consensus message, is a format and not a protocol. The format does not assume\nanything about the receiver or senders consensus mechanism, it only cares about the format in which\nthe messages must be structured in. The XCM format is how parachains will be able to communicate\nwith one another. Different from XCMP, which is short for cross-chain messaging protocol, XCM is\nwhat gets delivered, and XCMP is the delivery mechanism. The best way to learn more about XCM is by\nreading the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/xcm-format"},"specification"),"."),(0,o.kt)("h3",{id:"bridges"},(0,o.kt)("a",{parentName:"h3",href:"/docs/learn-bridges"},"Bridges")),(0,o.kt)("p",null,"A blockchain ",(0,o.kt)("a",{parentName:"p",href:"/docs/glossary#bridge"},"bridge")," is a connection that allows for arbitrary data\nto transfer from one network to another. These chains are interoperable through the bridge but can\nexist as standalone chains with different protocols, rules, and governance models. In\nPolkadot, bridges connect to the Relay Chain\nand are secured through the Polkadot consensus\nmechanism, maintained by ",(0,o.kt)("a",{parentName:"p",href:"#collators"},"collators"),"."),(0,o.kt)("p",null,"Polkadot uses bridges to bridge the future of Web 3.0, as bridges are fundamental to\nPolkadot's interoperable architecture by\nacting as a ","[secure and robust]"," communication channel for chains in isolation."),(0,o.kt)("h1",{id:"main-actors"},"Main Actors"),(0,o.kt)("h2",{id:"validators"},"Validators"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/glossary#validator"},"Validators"),", if elected to the validator set, produce blocks on\nthe Relay Chain. They also accept proofs of valid state transition from collators and receive\nstaking rewards in return."),(0,o.kt)("p",null,"Validators are required to keep enough parachain blocks available for later use in their local\nstorage. Those blocks are retrievable by peers who lack that information, so that they can reliably\nconfirm the issued validity statements about parachain blocks. The\n",(0,o.kt)("a",{parentName:"p",href:"https://spec.polkadot.network/#chapter-anv"},"Availability & Validity")," (AnV) protocol consists of\nmultiple steps for successfully upholding those responsibilities."),(0,o.kt)("h2",{id:"nominators"},"Nominators"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/glossary#nominator"},"Nominators")," bond their stake to particular validators in order to\nhelp them get into the active validator set and thus produce blocks for the chain. In return,\nnominators are generally rewarded with a portion of the staking rewards from that validator."),(0,o.kt)("h2",{id:"collators"},"Collators"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/glossary#collator"},"Collators")," are full nodes on both a parachain and the Relay Chain.\nThey collect parachain transactions and produce state transition proofs for the validators on the\nRelay Chain. They can also send and receive messages from other parachains using XCMP."),(0,o.kt)("p",null,"Parachain blocks themselves are produced by collators, whereas the relay chain validators only\nverify their validity (and later, their availability)."),(0,o.kt)("hr",null),(0,o.kt)("h2",{id:"whiteboard-series"},"Whiteboard Series"),(0,o.kt)("p",null,"For a video overview of the architecture of\nPolkadot watch the video below for the\nwhiteboard interview with W3F researcher Alistair Stewart:"),(0,o.kt)("div",{className:"row"},(0,o.kt)("div",{className:"col text--center"},(0,o.kt)("a",{href:"https://www.youtube.com/watch?v=xBfC6uTjvbM"},(0,o.kt)("img",{src:"https://img.youtube.com/vi/xBfC6uTjvbM/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,o.kt)("p",null,(0,o.kt)("a",{href:"https://www.youtube.com/watch?v=xBfC6uTjvbM"},"Architecture Overview")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/131c7f55.1d8405cd.js b/assets/js/131c7f55.1d8405cd.js deleted file mode 100644 index b4f532212c27..000000000000 --- a/assets/js/131c7f55.1d8405cd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9323],{3905:(e,a,t)=>{t.d(a,{Zo:()=>h,kt:()=>m});var r=t(67294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var l=r.createContext({}),c=function(e){var a=r.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},h=function(e){var a=c(e.components);return r.createElement(l.Provider,{value:a},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},u=r.forwardRef((function(e,a){var t=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),d=c(t),u=n,m=d["".concat(l,".").concat(u)]||d[u]||p[u]||o;return t?r.createElement(m,i(i({ref:a},h),{},{components:t})):r.createElement(m,i({ref:a},h))}));function m(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var o=t.length,i=new Array(o);i[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[d]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{t.r(a),t.d(a,{assets:()=>h,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=t(87462),n=t(63366),o=(t(67294),t(3905)),i=["components"],s={id:"learn-architecture",title:"Architecture",sidebar_label:"Architecture",description:"Key Components to Polkadot's Architecture.",keywords:["polkadot","components","architecture"],slug:"../learn-architecture"},l=void 0,c={unversionedId:"learn/learn-architecture",id:"learn/learn-architecture",title:"Architecture",description:"Key Components to Polkadot's Architecture.",source:"@site/../docs/learn/learn-architecture.md",sourceDirName:"learn",slug:"/learn-architecture",permalink:"/docs/learn-architecture",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-architecture.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1705420507,formattedLastUpdatedAt:"Jan 16, 2024",frontMatter:{id:"learn-architecture",title:"Architecture",sidebar_label:"Architecture",description:"Key Components to Polkadot's Architecture.",keywords:["polkadot","components","architecture"],slug:"../learn-architecture"},sidebar:"docs",previous:{title:"Architecture",permalink:"/docs/learn-architecture-index"},next:{title:"Network Participants",permalink:"/docs/learn-participants-index"}},h={},d=[{value:"Relay Chain",id:"relay-chain",level:2},{value:"Parachain and Parathread Slots",id:"parachain-and-parathread-slots",level:2},{value:"Shared Security",id:"shared-security",level:3},{value:"Interoperability",id:"interoperability",level:2},{value:"XCM",id:"xcm",level:3},{value:"Bridges",id:"bridges",level:3},{value:"Validators",id:"validators",level:2},{value:"Nominators",id:"nominators",level:2},{value:"Collators",id:"collators",level:2},{value:"Whiteboard Series",id:"whiteboard-series",level:2}],p={toc:d},u="wrapper";function m(e){var a=e.components,t=(0,n.Z)(e,i);return(0,o.kt)(u,(0,r.Z)({},p,t,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Polkadot is a heterogeneous multichain with\nshared security and interoperability."),(0,o.kt)("h2",{id:"relay-chain"},"Relay Chain"),(0,o.kt)("p",null,"The Relay Chain is the central chain of\nPolkadot. All validators of\nPolkadot are staked on the Relay Chain in DOT\nand validate for the Relay Chain. The Relay Chain is composed of a relatively small number of\ntransaction types that include ways to interact with the governance mechanism, parachain auctions,\nand participating in NPoS. The Relay Chain has deliberately minimal functionality - for instance,\nsmart contracts are not supported. The main responsibility is to coordinate the system as a whole,\nincluding parachains. Other specific work is delegated to the parachains, which have different\nimplementations and features."),(0,o.kt)("h2",{id:"parachain-and-parathread-slots"},(0,o.kt)("a",{parentName:"h2",href:"/docs/learn-parachains"},"Parachain")," and ",(0,o.kt)("a",{parentName:"h2",href:"/docs/learn-parathreads"},"Parathread")," Slots"),(0,o.kt)("p",null,"Polkadot can support a number of execution\nslots. These slots are like cores on a computer's processor (a modern laptop's processor may have\neight cores, for example). Each one of these cores can run one process at a time.\nPolkadot allows these slots using two\nsubscription models: parachains and parathreads. Parachains have a dedicated slot (core) for their\nchain and are like a process that runs constantly. Parathreads share slots amongst a group, and are\nthus more like processes that need to be woken up and run less frequently."),(0,o.kt)("p",null,"Most of the computation that happens across the\nPolkadot network as a whole will be delegated\nto specific parachain or parathread implementations that handle various use cases.\nPolkadot places no constraints over what\nparachains can do besides that they must be able to generate a proof that can be validated by the\nvalidators assigned to the parachain. This proof verifies the state transition of the parachain.\nSome parachains may be specific to a particular application, others may focus on specific features\nlike smart contracts, privacy, or scalability ","\u2014"," still, others might be experimental\narchitectures that are not necessarily blockchain in nature."),(0,o.kt)("p",null,"Polkadot provides many ways to secure a slot\nfor a parachain for a particular length of time. Parathreads are part of a pool that shares slots\nand must-win auctions for individual blocks. Parathreads and parachains have the same API; their\ndifference is economic. Parachains will have to reserve\nDOT for the duration of their slot lease;\nparathreads will pay on a per-block basis. Parathreads can become parachains, and vice-versa."),(0,o.kt)("h3",{id:"shared-security"},(0,o.kt)("a",{parentName:"h3",href:"/docs/learn-parachains"},"Shared Security")),(0,o.kt)("p",null,"Parachains connected to the Polkadot Relay\nChain all share in the security of the Relay Chain.\nPolkadot has a shared state between the Relay\nChain and all of the connected parachains. If the Relay Chain must revert for any reason, then all\nof the parachains would also revert. This is to ensure that the validity of the entire system can\npersist and no individual part is corruptible."),(0,o.kt)("p",null,"The shared state ensures that the trust assumptions when using\nPolkadot parachains are only those of the\nRelay Chain validator set and no other. Since the validator set on the Relay Chain is expected to be\nsecure with a large amount of stake put up to back it, parachains should benefit from this security."),(0,o.kt)("h2",{id:"interoperability"},"Interoperability"),(0,o.kt)("h3",{id:"xcm"},(0,o.kt)("a",{parentName:"h3",href:"learn-xcm"},"XCM")),(0,o.kt)("p",null,"XCM, short for cross-consensus message, is a format and not a protocol. The format does not assume\nanything about the receiver or senders consensus mechanism, it only cares about the format in which\nthe messages must be structured in. The XCM format is how parachains will be able to communicate\nwith one another. Different from XCMP, which is short for cross-chain messaging protocol, XCM is\nwhat gets delivered, and XCMP is the delivery mechanism. The best way to learn more about XCM is by\nreading the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/xcm-format"},"specification"),"."),(0,o.kt)("h3",{id:"bridges"},(0,o.kt)("a",{parentName:"h3",href:"/docs/learn-bridges"},"Bridges")),(0,o.kt)("p",null,"A blockchain ",(0,o.kt)("a",{parentName:"p",href:"/docs/glossary#bridge"},"bridge")," is a connection that allows for arbitrary data\nto transfer from one network to another. These chains are interoperable through the bridge but can\nexist as standalone chains with different protocols, rules, and governance models. In\nPolkadot, bridges connect to the Relay Chain\nand are secured through the Polkadot consensus\nmechanism, maintained by ",(0,o.kt)("a",{parentName:"p",href:"#collators"},"collators"),"."),(0,o.kt)("p",null,"Polkadot uses bridges to bridge the future of Web 3.0, as bridges are fundamental to\nPolkadot's interoperable architecture by\nacting as a ","[secure and robust]"," communication channel for chains in isolation."),(0,o.kt)("h1",{id:"main-actors"},"Main Actors"),(0,o.kt)("h2",{id:"validators"},"Validators"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/glossary#validator"},"Validators"),", if elected to the validator set, produce blocks on\nthe Relay Chain. They also accept proofs of valid state transition from collators and receive\nstaking rewards in return."),(0,o.kt)("p",null,"Validators are required to keep enough parachain blocks available for later use in their local\nstorage. Those blocks are retrievable by peers who lack that information, so that they can reliably\nconfirm the issued validity statements about parachain blocks. The\n",(0,o.kt)("a",{parentName:"p",href:"https://spec.polkadot.network/#chapter-anv"},"Availability & Validity")," (AnV) protocol consists of\nmultiple steps for successfully upholding those responsibilities."),(0,o.kt)("h2",{id:"nominators"},"Nominators"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/glossary#nominator"},"Nominators")," bond their stake to particular validators in order to\nhelp them get into the active validator set and thus produce blocks for the chain. In return,\nnominators are generally rewarded with a portion of the staking rewards from that validator."),(0,o.kt)("h2",{id:"collators"},"Collators"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/glossary#collator"},"Collators")," are full nodes on both a parachain and the Relay Chain.\nThey collect parachain transactions and produce state transition proofs for the validators on the\nRelay Chain. They can also send and receive messages from other parachains using XCMP."),(0,o.kt)("p",null,"Parachain blocks themselves are produced by collators, whereas the relay chain validators only\nverify their validity (and later, their availability)."),(0,o.kt)("hr",null),(0,o.kt)("h2",{id:"whiteboard-series"},"Whiteboard Series"),(0,o.kt)("p",null,"For a video overview of the architecture of\nPolkadot watch the video below for the\nwhiteboard interview with W3F researcher Alistair Stewart:"),(0,o.kt)("div",{className:"row"},(0,o.kt)("div",{className:"col text--center"},(0,o.kt)("a",{href:"https://www.youtube.com/watch?v=xBfC6uTjvbM"},(0,o.kt)("img",{src:"https://img.youtube.com/vi/xBfC6uTjvbM/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,o.kt)("p",null,(0,o.kt)("a",{href:"https://www.youtube.com/watch?v=xBfC6uTjvbM"},"Architecture Overview")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2be0d940.62d9ef04.js b/assets/js/2be0d940.62d9ef04.js new file mode 100644 index 000000000000..2f2190cd7d6f --- /dev/null +++ b/assets/js/2be0d940.62d9ef04.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[2914],{47940:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var a=n(74165),i=n(15861),o=n(67294),s=n(87152),r=n(14741),d=n(67425);function l(t,e,n){return u.apply(this,arguments)}function u(){return(u=(0,i.Z)((0,a.Z)().mark((function t(e,n,i){var o,d,l,u,p;return(0,a.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=void 0,d=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){t.next=18;break}return t.abrupt("return");case 18:return l=new s.U(o),t.next=21,r.G.create({provider:l});case 21:u=t.sent,(p=n.split(".")).forEach((function(t){t in u&&(u=u[t])})),t.t1=p[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return d=u.toString(),t.abrupt("break",35);case 29:return t.next=31,u();case 31:return d=(d=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+n);case 35:return t.abrupt("return",d);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function p(t,e,n,a){switch(e){case"humanReadable":(0,d.HumanReadable)(t,n,a);break;case"precise":(0,d.Precise)(t,n,a);break;case"blocksToDays":(0,d.BlocksToDays)(t,a);break;case"erasToDays":(0,d.ErasToDays)(t,a,n);break;case"percentage":(0,d.Percentage)(t,a);break;case"permillToPercent":(0,d.PermillToPercent)(t,a);break;case"arrayLength":(0,d.ArrayLength)(t,a);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(t){var e=t.network,n=t.path,s=t.defaultValue,r=t.filter,d=void 0===r?void 0:r,u=(0,o.useState)(""),c=u[0],h=u[1];return e=e.toLowerCase(),(0,o.useEffect)((function(){void 0!==d?p(s.toString(),d,e,h):h(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var t=(0,i.Z)((0,a.Z)().mark((function t(){var i;return(0,a.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l(e,n,h);case 2:if(void 0!==(i=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==d?p(i,d,e,h):h(i);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),c}},67425:t=>{var e="polkadot",n="kusama",a="statemine",i="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var d=void 0;if(s===e||s===i)d=3;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");d=6}t=parseFloat(t),r((t=Number.isInteger(t/o[s].precision)?t/o[s].precision+" "+o[s].symbol:(t/o[s].precision).toFixed(d)+" "+o[s].symbol).toString())},Precise:function(t,e,n){n(t=(t=parseFloat(t))/o[e].precision+" "+o[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,o,s){var r=void 0;if(s===e||s===i)r=1;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},77078:(t,e,n)=>{"use strict";n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>k,frontMatter:()=>d,metadata:()=>u,toc:()=>c});var a=n(87462),i=n(63366),o=(n(67294),n(3905)),s=n(47940),r=["components"],d={id:"learn-guides-identity",title:"Polkadot-JS Guides about Identity",sidebar_label:"Identity Guides",description:"Polkadot-JS Guides about Identity.",keywords:["registrar","identity","sub-identity","polkadot-js"],slug:"../learn-guides-identity"},l=void 0,u={unversionedId:"learn/learn-guides-identity",id:"learn/learn-guides-identity",title:"Polkadot-JS Guides about Identity",description:"Polkadot-JS Guides about Identity.",source:"@site/../docs/learn/learn-guides-identity.md",sourceDirName:"learn",slug:"/learn-guides-identity",permalink:"/docs/learn-guides-identity",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-identity.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-identity",title:"Polkadot-JS Guides about Identity",sidebar_label:"Identity Guides",description:"Polkadot-JS Guides about Identity.",keywords:["registrar","identity","sub-identity","polkadot-js"],slug:"../learn-guides-identity"},sidebar:"docs",previous:{title:"Bounty Guides",permalink:"/docs/learn-guides-bounties"},next:{title:"Ledger Guides",permalink:"/docs/learn-guides-ledger"}},p={},c=[{value:"Setting an Identity",id:"setting-an-identity",level:2},{value:"Format Caveat",id:"format-caveat",level:3},{value:"Request Judgement",id:"request-judgement",level:2},{value:"Clearing and Killing an Identity",id:"clearing-and-killing-an-identity",level:2},{value:"Setting Sub-Identities",id:"setting-sub-identities",level:2},{value:"Setting Sub-Identity (Sub-ID) for your Ledger Account",id:"setting-sub-identity-sub-id-for-your-ledger-account",level:3},{value:"Registrars",id:"registrars",level:2},{value:"Becoming a Registrar",id:"becoming-a-registrar",level:3}],h={toc:c},m="wrapper";function k(t){var e=t.components,d=(0,i.Z)(t,r);return(0,o.kt)(m,(0,a.Z)({},h,d,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("p",null,"This is an advanced guide that is relevant for entities that would like to become registrars or\nwould like to set sub-identities to an existing account with an identity. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity"},"this page")," to learn about how to set an identity and have it verified."),(0,o.kt)("h2",{id:"setting-an-identity"},"Setting an Identity"),(0,o.kt)("p",null,"Users can set an identity by registering through default fields such as legal name, display name,\nwebsite, Twitter handle, Riot handle, etc. along with some extra, custom fields for which they would\nlike attestations (see ",(0,o.kt)("a",{parentName:"p",href:"#judgements"},"Judgements"),")."),(0,o.kt)("admonition",{title:"Instructions for setting and clearing Identities",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The procedure to set and clear identities is explained in detail in this support article -\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981-how-to-set-and-clear-an-identity"},"How to set and clear an Identity"))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The Ledger app on ",(0,o.kt)("strong",{parentName:"p"},"Nano S")," doesn't support the extrinsic for setting identity. As a workaround,\ncreate a primary identity with an on-chain account and then using that primary identity, assign a\n",(0,o.kt)("a",{parentName:"p",href:"#sub-accounts"},"sub-identity")," to the Ledger stash.")),(0,o.kt)("h3",{id:"format-caveat"},"Format Caveat"),(0,o.kt)("p",null,"Please note the following caveat: because the fields support different formats, from raw bytes to\nvarious hashes, a UI has no way of telling how to encode a given field it encounters. The\nPolkadot-JS UI currently encodes the raw bytes it encounters as UTF8 strings, which makes these\nvalues readable on-screen. However, given that there are no restrictions on the values that can be\nplaced into these fields, a different UI may interpret them as, for example, IPFS hashes or encoded\nbitmaps. This means any field stored as raw bytes will become unreadable by that specific UI. As\nfield standards crystallize, things will become easier to use but for now, every custom\nimplementation of displaying user information will likely have to make a conscious decision on the\napproach to take, or support multiple formats and then attempt multiple encodings until the output\nmakes sense."),(0,o.kt)("h2",{id:"request-judgement"},"Request Judgement"),(0,o.kt)("admonition",{title:"Instructions for requesting and cancelling Identity judgments",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The procedure to request and cancel identity judgments is explained in detail in this\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181990-how-to-request-and-cancel-identity-judgement"},"support article"))),(0,o.kt)("p",null,"To be judged after submitting your identity information, go to the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab in the Polkadot-JS UI")," and select the\n",(0,o.kt)("inlineCode",{parentName:"p"},"identity")," pallet, then ",(0,o.kt)("inlineCode",{parentName:"p"},"requestJudgement"),". For the ",(0,o.kt)("inlineCode",{parentName:"p"},"reg_index")," put the index of the registrar you\nwant to be judged by, and for the ",(0,o.kt)("inlineCode",{parentName:"p"},"max_fee")," put the maximum you're willing to pay for these\nconfirmations."),(0,o.kt)("p",null,"If you don't know which registrar to pick, first check the available registrars by going to\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Chain State tab in the Polkadot-JS UI")," and selecting\n",(0,o.kt)("inlineCode",{parentName:"p"},"identity.registrars()")," to get the full list."),(0,o.kt)("p",null,"To find out how to contact the registrar after the application for judgement or to learn who they\nare, you can check their identity by adding them to your Address Book. Their identity will be\nautomatically loaded."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Chevdor is registrar #1",src:n(65494).Z,width:"579",height:"217"})),(0,o.kt)("admonition",{title:"Requesting judgement through Web3 Foundation Registrar",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If you requested judgement for your on-chain identity through the Web3 Foundation Registrar (i.e.\nRegistrar #0) you will need to complete a few additional tasks. For more information visit\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179747-how-to-use-the-w3f-registrar-page"},"this support article"),".")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The set identity calls go on-chain. Hence, the contact information is available publicly, for both\nlegitimate entities, like registrars or validators, but also scammers who might impersonate them.\nThe strings in the identity fields are good candidates for homograph attacks, as someone could list\na fraudulent website (web3.f0undation instead of web3.foundation for example) and still get verified\nby the registrar (if the checks are automated)!"),(0,o.kt)("p",{parentName:"admonition"},"In a decentralized network, one should be cautious making transactions with accounts solely based on\ntheir identity. If an account on-chain claims to be of Web3 Foundation, it is wise to verify its\nauthenticity by checking directly with Web3 Foundation or examining the established history of that\naccount on-chain.")),(0,o.kt)("h2",{id:"clearing-and-killing-an-identity"},"Clearing and Killing an Identity"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},'Visit the section "Clear an Identity" on\n',(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981"},"this support article")," for\nguidelines about clearing identities.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Clearing:")," Users can clear their identity information and have their deposit returned. Clearing\nan identity also clears all sub accounts and returns their deposits."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Killing:")," The Council can kill an identity that it deems erroneous. This results in a slash of\nthe deposit."),(0,o.kt)("h2",{id:"setting-sub-identities"},"Setting Sub-Identities"),(0,o.kt)("p",null,"To set up sub-identities with Polkadot-JS see the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181991-how-to-set-identities-for-sub-accounts"},"how to set sub-identities"),"\nsupport article and this ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=0Yh1JYg3ZKU"},"video tutorial"),"."),(0,o.kt)("h3",{id:"setting-sub-identity-sub-id-for-your-ledger-account"},"Setting Sub-Identity (Sub-ID) for your Ledger Account"),(0,o.kt)("p",null,"Setting an Identity is not possible on Ledger app yet, but as a workaround, you can\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity#setting-an-identity"},"set the identity for an on-chain account ")," and then\nuse it to set a sub-identity to your Ledger account."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Go to ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"https://polkadot.js.org/apps/#/accounts"),". Click on the three vertical dots correponding to\nthe account to which you already set identity. You should see an option to set onchain\nsub-identities. Click on it."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Add sub-identity in PolkadotJS",src:n(6865).Z,width:"520",height:"338"}))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"In the pop-up window, select your Ledger account from the dropdown and enter text in sub name\nfield. Then, click on set subs button.\n",(0,o.kt)("img",{alt:"Set sub-identity in PolkadotJS",src:n(34440).Z,width:"2155",height:"554"}))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Sign and submit the transaction from the parent account with the identity"))),(0,o.kt)("p",null,"You should now see the sub-identity displayed on-chain. You need to be aware that\n",(0,o.kt)(s.Z,{network:"kusama",path:"consts.identity.basicDeposit",defaultValue:33333e6,filter:"humanReadable",mdxType:"RPC"}),"\n","\nis reserved for setting identity and\n",(0,o.kt)(s.Z,{network:"kusama",path:"consts.identity.subAccountDeposit",defaultValue:6666e6,filter:"humanReadable",mdxType:"RPC"}),"\n","\nfor each sub-identity. This reserved account balance is freed once you\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity#clearing-and-killing-an-identity"},"clear the identities")," on the account."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Sub-identity example",src:n(31495).Z,width:"370",height:"554"})),(0,o.kt)("h2",{id:"registrars"},"Registrars"),(0,o.kt)("h3",{id:"becoming-a-registrar"},"Becoming a Registrar"),(0,o.kt)("p",null,"To become a registrar, submit a pre-image and proposal on\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov"},"OpenGov"),", then wait for people to vote on it. For best\nresults, write a post about your identity and intentions beforehand, and once the proposal is in the\nqueue ask people to endorse it so that it gets ahead in the referendum queue."),(0,o.kt)("p",null,"Here's how to submit a proposal to become a registrar:"),(0,o.kt)("p",null,'Go to the Democracy tab, select "Submit preimage", and input the information for this motion -\nnotably which account you\'re nominating to be a registrar in the ',(0,o.kt)("inlineCode",{parentName:"p"},"identity.setRegistrar")," function."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Setting a registrar",src:n(59097).Z,width:"841",height:"417"})),(0,o.kt)("p",null,"Copy the preimage hash. In the above image, that's\n",(0,o.kt)("inlineCode",{parentName:"p"},"0x90a1b2f648fc4eaff4f236b9af9ead77c89ecac953225c5fafb069d27b7131b7"),". Submit the preimage by signing\na transaction."),(0,o.kt)("p",null,'Next, select "Submit Proposal" and enter the previously copied preimage hash. The ',(0,o.kt)("inlineCode",{parentName:"p"},"locked balance"),"\nfield needs to be at least\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.identity.basicDeposit",defaultValue:20258e7,filter:"humanReadable",mdxType:"RPC"}),".\n","\nYou can find out the minimum by querying the chain state under\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Chain State")," -> Constants -> democracy ->\nminimumDeposit."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Submitting a proposal",src:n(45208).Z,width:"852",height:"337"})),(0,o.kt)("p",null,"At this point, DOT holders can endorse the motion. With enough endorsements, the motion will become\na referendum, which is then voted on. If it passes, users will be able to request judgement from\nthis registrar."))}k.isMDXComponent=!0},59097:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/12-0b101bf170ff7602551199f625c54b7d.jpg"},45208:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/13-df6ee832e734da72fd9461f4446ea3b9.jpg"},65494:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/16-95dc969648d23cdfdd68bf04135818bb.jpg"},6865:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/sub-id-1-18df099d5c97fdff246815ad91922e32.png"},34440:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/sub-id-2-40b39041ca30296d805003d186f66763.png"},31495:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/sub-id-3-a650cce50e6bfef97c03ebd7b463419c.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/2be0d940.908d07d4.js b/assets/js/2be0d940.908d07d4.js deleted file mode 100644 index 1b86f3200b6f..000000000000 --- a/assets/js/2be0d940.908d07d4.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2914],{47940:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var a=n(74165),i=n(15861),o=n(67294),s=n(87152),r=n(14741),d=n(67425);function l(t,e,n){return u.apply(this,arguments)}function u(){return(u=(0,i.Z)((0,a.Z)().mark((function t(e,n,i){var o,d,l,u,p;return(0,a.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=void 0,d=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){t.next=18;break}return t.abrupt("return");case 18:return l=new s.U(o),t.next=21,r.G.create({provider:l});case 21:u=t.sent,(p=n.split(".")).forEach((function(t){t in u&&(u=u[t])})),t.t1=p[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return d=u.toString(),t.abrupt("break",35);case 29:return t.next=31,u();case 31:return d=(d=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+n);case 35:return t.abrupt("return",d);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function p(t,e,n,a){switch(e){case"humanReadable":(0,d.HumanReadable)(t,n,a);break;case"precise":(0,d.Precise)(t,n,a);break;case"blocksToDays":(0,d.BlocksToDays)(t,a);break;case"erasToDays":(0,d.ErasToDays)(t,a,n);break;case"percentage":(0,d.Percentage)(t,a);break;case"permillToPercent":(0,d.PermillToPercent)(t,a);break;case"arrayLength":(0,d.ArrayLength)(t,a);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(t){var e=t.network,n=t.path,s=t.defaultValue,r=t.filter,d=void 0===r?void 0:r,u=(0,o.useState)(""),c=u[0],h=u[1];return e=e.toLowerCase(),(0,o.useEffect)((function(){void 0!==d?p(s.toString(),d,e,h):h(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var t=(0,i.Z)((0,a.Z)().mark((function t(){var i;return(0,a.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l(e,n,h);case 2:if(void 0!==(i=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==d?p(i,d,e,h):h(i);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),c}},67425:t=>{var e="polkadot",n="kusama",a="statemine",i="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var d=void 0;if(s===e||s===i)d=3;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");d=6}t=parseFloat(t),r((t=Number.isInteger(t/o[s].precision)?t/o[s].precision+" "+o[s].symbol:(t/o[s].precision).toFixed(d)+" "+o[s].symbol).toString())},Precise:function(t,e,n){n(t=(t=parseFloat(t))/o[e].precision+" "+o[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,o,s){var r=void 0;if(s===e||s===i)r=1;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},77078:(t,e,n)=>{"use strict";n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>g,frontMatter:()=>d,metadata:()=>u,toc:()=>c});var a=n(87462),i=n(63366),o=(n(67294),n(3905)),s=n(47940),r=["components"],d={id:"learn-guides-identity",title:"Polkadot-JS Guides about Identity",sidebar_label:"Identity Guides",description:"Polkadot-JS Guides about Identity.",keywords:["registrar","identity","sub-identity","polkadot-js"],slug:"../learn-guides-identity"},l=void 0,u={unversionedId:"learn/learn-guides-identity",id:"learn/learn-guides-identity",title:"Polkadot-JS Guides about Identity",description:"Polkadot-JS Guides about Identity.",source:"@site/../docs/learn/learn-guides-identity.md",sourceDirName:"learn",slug:"/learn-guides-identity",permalink:"/docs/learn-guides-identity",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-identity.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-identity",title:"Polkadot-JS Guides about Identity",sidebar_label:"Identity Guides",description:"Polkadot-JS Guides about Identity.",keywords:["registrar","identity","sub-identity","polkadot-js"],slug:"../learn-guides-identity"},sidebar:"docs",previous:{title:"Bounty Guides",permalink:"/docs/learn-guides-bounties"},next:{title:"Ledger Guides",permalink:"/docs/learn-guides-ledger"}},p={},c=[{value:"Setting an Identity",id:"setting-an-identity",level:2},{value:"Format Caveat",id:"format-caveat",level:3},{value:"Request Judgement",id:"request-judgement",level:2},{value:"Clearing and Killing an Identity",id:"clearing-and-killing-an-identity",level:2},{value:"Setting Sub-Identities",id:"setting-sub-identities",level:2},{value:"Setting Sub-Identity (Sub-ID) for your Ledger Account",id:"setting-sub-identity-sub-id-for-your-ledger-account",level:3},{value:"Registrars",id:"registrars",level:2},{value:"Becoming a Registrar",id:"becoming-a-registrar",level:3}],h={toc:c},m="wrapper";function g(t){var e=t.components,d=(0,i.Z)(t,r);return(0,o.kt)(m,(0,a.Z)({},h,d,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("p",null,"This is an advanced guide that is relevant for entities that would like to become registrars or\nwould like to set sub-identities to an existing account with an identity. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity"},"this page")," to learn about how to set an identity and have it verified."),(0,o.kt)("h2",{id:"setting-an-identity"},"Setting an Identity"),(0,o.kt)("p",null,"Users can set an identity by registering through default fields such as legal name, display name,\nwebsite, Twitter handle, Riot handle, etc. along with some extra, custom fields for which they would\nlike attestations (see ",(0,o.kt)("a",{parentName:"p",href:"#judgements"},"Judgements"),")."),(0,o.kt)("admonition",{title:"Instructions for setting and clearing Identities",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The procedure to set and clear identities is explained in detail in this support article -\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981-how-to-set-and-clear-an-identity"},"How to set and clear an Identity"))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The Ledger app on ",(0,o.kt)("strong",{parentName:"p"},"Nano S")," doesn't support the extrinsic for setting identity. As a workaround,\ncreate a primary identity with an on-chain account and then using that primary identity, assign a\n",(0,o.kt)("a",{parentName:"p",href:"#sub-accounts"},"sub-identity")," to the Ledger stash.")),(0,o.kt)("h3",{id:"format-caveat"},"Format Caveat"),(0,o.kt)("p",null,"Please note the following caveat: because the fields support different formats, from raw bytes to\nvarious hashes, a UI has no way of telling how to encode a given field it encounters. The\nPolkadot-JS UI currently encodes the raw bytes it encounters as UTF8 strings, which makes these\nvalues readable on-screen. However, given that there are no restrictions on the values that can be\nplaced into these fields, a different UI may interpret them as, for example, IPFS hashes or encoded\nbitmaps. This means any field stored as raw bytes will become unreadable by that specific UI. As\nfield standards crystallize, things will become easier to use but for now, every custom\nimplementation of displaying user information will likely have to make a conscious decision on the\napproach to take, or support multiple formats and then attempt multiple encodings until the output\nmakes sense."),(0,o.kt)("h2",{id:"request-judgement"},"Request Judgement"),(0,o.kt)("admonition",{title:"Instructions for requesting and cancelling Identity judgments",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The procedure to request and cancel identity judgments is explained in detail in this\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181990-how-to-request-and-cancel-identity-judgement"},"support article"))),(0,o.kt)("p",null,"To be judged after submitting your identity information, go to the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab in the Polkadot-JS UI")," and select the\n",(0,o.kt)("inlineCode",{parentName:"p"},"identity")," pallet, then ",(0,o.kt)("inlineCode",{parentName:"p"},"requestJudgement"),". For the ",(0,o.kt)("inlineCode",{parentName:"p"},"reg_index")," put the index of the registrar you\nwant to be judged by, and for the ",(0,o.kt)("inlineCode",{parentName:"p"},"max_fee")," put the maximum you're willing to pay for these\nconfirmations."),(0,o.kt)("p",null,"If you don't know which registrar to pick, first check the available registrars by going to\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Chain State tab in the Polkadot-JS UI")," and selecting\n",(0,o.kt)("inlineCode",{parentName:"p"},"identity.registrars()")," to get the full list."),(0,o.kt)("p",null,"To find out how to contact the registrar after the application for judgement or to learn who they\nare, you can check their identity by adding them to your Address Book. Their identity will be\nautomatically loaded."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Chevdor is registrar #1",src:n(65494).Z,width:"579",height:"217"})),(0,o.kt)("admonition",{title:"Requesting judgement through Web3 Foundation Registrar",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If you requested judgement for your on-chain identity through the Web3 Foundation Registrar (i.e.\nRegistrar #0) you will need to complete a few additional tasks. For more information visit\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179747-how-to-use-the-w3f-registrar-page"},"this support article"),".")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The set identity calls go on-chain. Hence, the contact information is available publicly, for both\nlegitimate entities, like registrars or validators, but also scammers who might impersonate them.\nThe strings in the identity fields are good candidates for homograph attacks, as someone could list\na fraudulent website (web3.f0undation instead of web3.foundation for example) and still get verified\nby the registrar (if the checks are automated)!"),(0,o.kt)("p",{parentName:"admonition"},"In a decentralized network, one should be cautious making transactions with accounts solely based on\ntheir identity. If an account on-chain claims to be of Web3 Foundation, it is wise to verify its\nauthenticity by checking directly with Web3 Foundation or examining the established history of that\naccount on-chain.")),(0,o.kt)("h2",{id:"clearing-and-killing-an-identity"},"Clearing and Killing an Identity"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},'Visit the section "Clear an Identity" on\n',(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981"},"this support article")," for\nguidelines about clearing identities.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Clearing:")," Users can clear their identity information and have their deposit returned. Clearing\nan identity also clears all sub accounts and returns their deposits."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Killing:")," The Council can kill an identity that it deems erroneous. This results in a slash of\nthe deposit."),(0,o.kt)("h2",{id:"setting-sub-identities"},"Setting Sub-Identities"),(0,o.kt)("p",null,"To set up sub-identities with Polkadot-JS see the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181991-how-to-set-identities-for-sub-accounts"},"how to set sub-identities"),"\nsupport article and this ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=0Yh1JYg3ZKU"},"video tutorial"),"."),(0,o.kt)("h3",{id:"setting-sub-identity-sub-id-for-your-ledger-account"},"Setting Sub-Identity (Sub-ID) for your Ledger Account"),(0,o.kt)("p",null,"Setting an Identity is not possible on Ledger app yet, but as a workaround, you can\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity#setting-an-identity"},"set the identity for an on-chain account ")," and then\nuse it to set a sub-identity to your Ledger account."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Go to ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"https://polkadot.js.org/apps/#/accounts"),". Click on the three vertical dots correponding to\nthe account to which you already set identity. You should see an option to set onchain\nsub-identities. Click on it."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Add sub-identity in PolkadotJS",src:n(6865).Z,width:"520",height:"338"}))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"In the pop-up window, select your Ledger account from the dropdown and enter text in sub name\nfield. Then, click on set subs button.\n",(0,o.kt)("img",{alt:"Set sub-identity in PolkadotJS",src:n(34440).Z,width:"2155",height:"554"}))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Sign and submit the transaction from the parent account with the identity"))),(0,o.kt)("p",null,"You should now see the sub-identity displayed on-chain. You need to be aware that\n",(0,o.kt)(s.Z,{network:"kusama",path:"consts.identity.basicDeposit",defaultValue:33333e6,filter:"humanReadable",mdxType:"RPC"}),"\n","\nis reserved for setting identity and\n",(0,o.kt)(s.Z,{network:"kusama",path:"consts.identity.subAccountDeposit",defaultValue:6666e6,filter:"humanReadable",mdxType:"RPC"}),"\n","\nfor each sub-identity. This reserved account balance is freed once you\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-identity#clearing-and-killing-an-identity"},"clear the identities")," on the account."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Sub-identity example",src:n(31495).Z,width:"370",height:"554"})),(0,o.kt)("h2",{id:"registrars"},"Registrars"),(0,o.kt)("h3",{id:"becoming-a-registrar"},"Becoming a Registrar"),(0,o.kt)("p",null,"To become a registrar, submit a pre-image and proposal on\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov"},"OpenGov"),", then wait for people to vote on it. For best\nresults, write a post about your identity and intentions beforehand, and once the proposal is in the\nqueue ask people to endorse it so that it gets ahead in the referendum queue."),(0,o.kt)("p",null,"Here's how to submit a proposal to become a registrar:"),(0,o.kt)("p",null,'Go to the Democracy tab, select "Submit preimage", and input the information for this motion -\nnotably which account you\'re nominating to be a registrar in the ',(0,o.kt)("inlineCode",{parentName:"p"},"identity.setRegistrar")," function."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Setting a registrar",src:n(59097).Z,width:"841",height:"417"})),(0,o.kt)("p",null,"Copy the preimage hash. In the above image, that's\n",(0,o.kt)("inlineCode",{parentName:"p"},"0x90a1b2f648fc4eaff4f236b9af9ead77c89ecac953225c5fafb069d27b7131b7"),". Submit the preimage by signing\na transaction."),(0,o.kt)("p",null,'Next, select "Submit Proposal" and enter the previously copied preimage hash. The ',(0,o.kt)("inlineCode",{parentName:"p"},"locked balance"),"\nfield needs to be at least\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.identity.basicDeposit",defaultValue:20258e7,filter:"humanReadable",mdxType:"RPC"}),".\n","\nYou can find out the minimum by querying the chain state under\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Chain State")," -> Constants -> democracy ->\nminimumDeposit."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Submitting a proposal",src:n(45208).Z,width:"852",height:"337"})),(0,o.kt)("p",null,"At this point, DOT holders can endorse the motion. With enough endorsements, the motion will become\na referendum, which is then voted on. If it passes, users will be able to request judgement from\nthis registrar."))}g.isMDXComponent=!0},59097:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/12-0b101bf170ff7602551199f625c54b7d.jpg"},45208:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/13-df6ee832e734da72fd9461f4446ea3b9.jpg"},65494:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/16-95dc969648d23cdfdd68bf04135818bb.jpg"},6865:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/sub-id-1-18df099d5c97fdff246815ad91922e32.png"},34440:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/sub-id-2-40b39041ca30296d805003d186f66763.png"},31495:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const a=n.p+"assets/images/sub-id-3-a650cce50e6bfef97c03ebd7b463419c.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/43cda9e8.112598c7.js b/assets/js/43cda9e8.112598c7.js deleted file mode 100644 index d53e99d6d7d2..000000000000 --- a/assets/js/43cda9e8.112598c7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6357],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),d=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=d(n),h=a,k=p["".concat(l,".").concat(h)]||p[h]||c[h]||r;return n?o.createElement(k,i(i({ref:t},u),{},{components:n})):o.createElement(k,i({ref:t},u))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>k,frontMatter:()=>s,metadata:()=>d,toc:()=>p});var o=n(87462),a=n(63366),r=(n(67294),n(3905)),i=["components"],s={id:"learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",sidebar_label:"Asset Hub Ledger Guides",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",keywords:["asset hub","ledger","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-ledger"},l=void 0,d={unversionedId:"learn/learn-guides-assets-ledger",id:"learn/learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",source:"@site/../docs/learn/learn-guides-assets-ledger.md",sourceDirName:"learn",slug:"/learn-guides-assets-ledger",permalink:"/docs/learn-guides-assets-ledger",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets-ledger.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",sidebar_label:"Asset Hub Ledger Guides",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",keywords:["asset hub","ledger","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-ledger"},sidebar:"docs",previous:{title:"Create Asset Guides",permalink:"/docs/learn-guides-assets-create"},next:{title:"Architecture",permalink:"/docs/learn-architecture-index"}},u={},p=[{value:"Requirements",id:"requirements",level:2},{value:"Installing the Ledger Application",id:"installing-the-ledger-application",level:2},{value:"Using Ledger Live",id:"using-ledger-live",level:3},{value:"Using on Polkadot-JS Apps UI",id:"using-on-polkadot-js-apps-ui",level:2},{value:"Adding Your Account",id:"adding-your-account",level:3},{value:"Working on Relay Chains and Asset Hubs",id:"working-on-relay-chains-and-asset-hubs",level:3},{value:"Confirming the Address on your Device",id:"confirming-the-address-on-your-device",level:3},{value:"Using Polkadot-JS Apps",id:"using-polkadot-js-apps",level:4},{value:"Sending a Transfer",id:"sending-a-transfer",level:3},{value:"Receiving a Transfer",id:"receiving-a-transfer",level:3},{value:"Teleporting",id:"teleporting",level:3},{value:"Support",id:"support",level:2}],c={toc:p},h="wrapper";function k(e){var t=e.components,s=(0,a.Z)(e,i);return(0,r.kt)(h,(0,o.Z)({},c,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Because of required WebUSB support, Ledger wallets currently only work on Chromium-based browsers\nlike Brave, Chrome or Edge.")),(0,r.kt)("p",null,"The Asset Hub has a ",(0,r.kt)("a",{parentName:"p",href:"https://www.ledger.com/"},"Ledger")," application that is compatible with the Ledger\nNano S and Ledger Nano X devices. The Ledger devices are hardware wallets that keep your private key\nsecured on a physical device that does not get directly exposed to your computer or the internet."),(0,r.kt)("p",null,"The Statemine application allows you to manage your KSM and other tokens on the Asset Hub parachain.\nIt supports most of the available transaction types of the network in the XL version of the app\n(details ",(0,r.kt)("a",{parentName:"p",href:"#installing-the-ledger-application"},"below"),")."),(0,r.kt)("p",null,"If you have trouble using Ledger or following the directions below, you can try searching for your\nissue on the ",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/"},"Polkadot Support page"),"."),(0,r.kt)("admonition",{title:"Intro to Ledger Explainer",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please check out our\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/7VlTncHCGPc"},"intro to Ledger video on YouTube for more information"),".")),(0,r.kt)("h2",{id:"requirements"},"Requirements"),(0,r.kt)("p",null,"Here is a list of what you will need before starting:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"A Ledger Nano S or a Ledger Nano X."),(0,r.kt)("li",{parentName:"ul"},"The latest firmware installed."),(0,r.kt)("li",{parentName:"ul"},"Ledger Live is installed and at version 2.29 or newer (see settings -> about to find out if you're\nup to date)."),(0,r.kt)("li",{parentName:"ul"},"A web browser is installed that you can use to access\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),".")),(0,r.kt)("h2",{id:"installing-the-ledger-application"},"Installing the Ledger Application"),(0,r.kt)("h3",{id:"using-ledger-live"},"Using Ledger Live"),(0,r.kt)("admonition",{title:"Ledger Nano S",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"There are two versions of the Statemine app: the normal (light) version and the XL version. The\nlight version has smaller size but it supports only basic functionality. If you want access to all\nthe supported extrinsics, you need to install the XL version of the app. You can see\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Zondax/ledger-statemine"},"here")," a full list of the extrinsics supported by both\nversions.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Open the "Manager" tab in Ledger Live.'),(0,r.kt)("li",{parentName:"ul"},"Connect and unlock your Ledger device."),(0,r.kt)("li",{parentName:"ul"},"If asked, allow the manager on your device by pressing both buttons on the YES screen."),(0,r.kt)("li",{parentName:"ul"},"Search for Statemine in the app catalog."),(0,r.kt)("li",{parentName:"ul"},"If you are using a Ledger Nano S, install either the normal (light) version or the XL version. For\nLedger Nano X, there will only be one app available.")),(0,r.kt)("p",null,"Please proceed to the ",(0,r.kt)("a",{parentName:"p",href:"#using-on-polkadot-js-apps"},"usage instructions")," below."),(0,r.kt)("h2",{id:"using-on-polkadot-js-apps-ui"},"Using on Polkadot-JS Apps UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot extension doesn't support Statemine Ledger accounts at this point, so you need to add\nyour account on Polkadot-JS UI as described below.")),(0,r.kt)("h3",{id:"adding-your-account"},"Adding Your Account"),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"These instructions will guide you on how to add a Ledger account that's ",(0,r.kt)("strong",{parentName:"p"},"only")," available on the\nAsset Hub. If you want to use the same Ledger account on both\nPolkadot ",(0,r.kt)("strong",{parentName:"p"},"and")," the Asset Hub check the\ninstructions ",(0,r.kt)("a",{parentName:"p",href:"#working-on-relay-chains-and-asset-hubs"},"below"),".")),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI")," already has an integration with the\nLedger application so that your device will work with the browser interface after installation. The\nfunctionality is currently gated behind a feature setting that you will need to turn on."),(0,r.kt)("p",null,'In order to turn on the interoperability with the Statemine Ledger application, go to the "Settings"\ntab in ',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),'. Find the option for attaching\nLedger devices and switch the option from the default "Do not attach Ledger devices" to "Attach\nLedger via WebUSB" (',(0,r.kt)("strong",{parentName:"p"},"but see note above"),")."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Dropdown selector for allowing Ledger connections in Polkadot-JS Apps UI Settings",src:n(54035).Z,width:"531",height:"235"})),(0,r.kt)("p",null,'Click "Save" to keep your settings.'),(0,r.kt)("p",null,'Now when you go to the "Accounts" tab you will see a new button that says "Add via Ledger". Ensure\nthat your Ledger device is unlocked, Ledger Live is ',(0,r.kt)("strong",{parentName:"p"},"closed")," and you have\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169778-how-to-switch-network-nodes"},"switched over"),"\nto the Statemine application, then click this button."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Add Ledger button in Polkadot-JS Apps UI",src:n(26789).Z,width:"488",height:"83"})),(0,r.kt)("p",null,"A popup will appear asking you to select an account and derivation path."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Picking an account and derivation path",src:n(33414).Z,width:"1894",height:"643"})),(0,r.kt)("p",null,"The first option lets you select an account. You can have multiple accounts on a single Ledger\ndevice. The second dropdown lets you pick a derivation path - think of it like a formula from which\nchild accounts are generated. If in doubt, pick the default option for both."),(0,r.kt)("p",null,"Once you confirm your selection, depending on your browser and its security settings, you might need\nto confirm the USB connection through a popup like the one below when adding the Ledger device for\nthe first time:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Display the device connection popup",src:n(57302).Z,width:"468",height:"461"})),(0,r.kt)("p",null,'You should now be able to scroll down and find a new account on the page with the type "ledger".'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Displaying the Ledger account in the list",src:n(78465).Z,width:"867",height:"70"})),(0,r.kt)("p",null,"You can now use this account to interact with the Asset Hub on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI")," and it will prompt your ledger for\nconfirmation when you initiate a transaction."),(0,r.kt)("h3",{id:"working-on-relay-chains-and-asset-hubs"},"Working on Relay Chains and Asset Hubs"),(0,r.kt)("p",null,"Polkadot and Kusama accounts from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"extension"),"\nwill show up in the Asset Hub, even if they're not set to be used on all chains. The Asset Hub is a\nsystem parachains on Polkadot :polkadot}}"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"However"),", as mentioned above, the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"Polkadot extension")," does not support Statemine\nLedger accounts at the moment, but the Polkadot-JS UI does. So, if your Kusama account is in the\nPolkadot extension, you'll need to remove it from there and re-add it on Polkadot-JS UI directly\n",(0,r.kt)("strong",{parentName:"p"},"as a Kusama account"),", as described\n",(0,r.kt)("a",{parentName:"p",href:"https://guide.kusama.network/docs/kusama-ledger#using-on-polkadot-js-apps-ui"},"here"),". After that,\nyou will be able to make transactions with that account."),(0,r.kt)("p",null,"To remove an account from the Polkadot extension:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Open the extension"),(0,r.kt)("li",{parentName:"ol"},"Click on the three dots next to the account"),(0,r.kt)("li",{parentName:"ol"},'Select "Forget account".')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"As mentioned above, a Polkadot :polkadot}}")),(0,r.kt)("h3",{id:"confirming-the-address-on-your-device"},"Confirming the Address on your Device"),(0,r.kt)("p",null,'On the "Accounts" tab, find your Ledger-connected account. Click on the three vertical dots at the\nend of the row. This will open a new menu, here you can click the "Show address on hardware device"\noption to display the address on your device.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Options menu of an account in the Accounts screen of Polkadot-JS Apps UI",src:n(83566).Z,width:"419",height:"478"})),(0,r.kt)("p",null,"Here you can scroll through and make sure the address matches to what is displayed on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),"."),(0,r.kt)("h4",{id:"using-polkadot-js-apps"},"Using Polkadot-JS Apps"),(0,r.kt)("p",null,'Once you have your account loaded on the "Accounts" tab it should show a row with your Ledger\naccount. At the far right of the row is located your account\'s DOT balance. If you expand the\nbalance arrow, it will show details of your balance such as locks or reserved amounts.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Account row showing empty balance",src:n(78465).Z,width:"867",height:"70"})),(0,r.kt)("h3",{id:"sending-a-transfer"},"Sending a Transfer"),(0,r.kt)("p",null,"If you would like to send a transfer from your account housed on the Ledger device, the easiest\nmethod is to use ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),"."),(0,r.kt)("admonition",{title:"Transfers",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Transferring in this way sends tokens to another account on the Asset Hub parachain. If you need to\ntransfer KSM between the Asset Hub and\nPolkadot, see the ",(0,r.kt)("a",{parentName:"p",href:"#teleporting"},"Teleporting"),"\nsection below.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Click on the "Send" button next to your account.'),(0,r.kt)("li",{parentName:"ul"},"In the second input, select one of the accounts from the drop-down menu or paste the address that\nyou want to transfer funds to."),(0,r.kt)("li",{parentName:"ul"},"In the third input, enter the amount of KSM you want to transfer."),(0,r.kt)("li",{parentName:"ul"},'Click the "Make Transfer" button.'),(0,r.kt)("li",{parentName:"ul"},"Confirm the transaction on your device."),(0,r.kt)("li",{parentName:"ul"},"A green success notification will be displayed when the transaction is included in a block.")),(0,r.kt)("admonition",{title:'The "Transfer with Keep-Alive Checks" toggle',type:"note"},(0,r.kt)("p",{parentName:"admonition"},'Note the "Transfer with Keep-Alive Checks" toggle. While this toggle is in the ',(0,r.kt)("em",{parentName:"p"},"On")," state, your\naccount will be unable to make transactions which would get its balance below the existential\ndeposit. This prevents reaping of accounts with low balances. If you toggle this to ",(0,r.kt)("em",{parentName:"p"},"Off"),", you will\nbe able to go below existential deposit balance, causing your account to be deleted and any dust\namount of KSM to be burned. If you encounter KeepAlive errors when making transactions, this might\nbe the reason."),(0,r.kt)("p",{parentName:"admonition"},"A detailed guide on doing transfers is available\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-ledger#sending-a-transfer-with-ledger-devices"},"here"),".")),(0,r.kt)("h3",{id:"receiving-a-transfer"},"Receiving a Transfer"),(0,r.kt)("p",null,"In order to receive a transfer on the accounts stored on your Ledger device, you will need to\nprovide the sender (i.e. the payer) with your address."),(0,r.kt)("p",null,"The easiest way to get your address is to click on the account name which will open a sidebar. Your\naddress will be shown in this sidebar, along with some other information. Another method is just\nclicking on your account's avatar icon - this immediately copies your address to the clipboard."),(0,r.kt)("admonition",{title:"Your Asset Hub address is the same as your Relay Chain address",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Make sure that you clarify to the sender that you wish to receive your tokens on the Asset Hub\nparachain, otherwise (if you're receiving DOT\ntokens) they could be sent on the Polkadot\nchain.")),(0,r.kt)("admonition",{title:"Before giving anyone your address",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Make sure it matches what's really on the Ledger by\n",(0,r.kt)("a",{parentName:"p",href:"#confirming-the-address-on-your-device"},"confirming the address on your device"),". Some malware will\nintercept clicks and clipboard requests and can change your copied value in-flight, so being extra\nvigilant around copy-paste operations makes sense.")),(0,r.kt)("h3",{id:"teleporting"},"Teleporting"),(0,r.kt)("p",null,"Teleporting allows you to send tokens between the Relay Chain and a parachain, or between different\nparachains."),(0,r.kt)("p",null,"The Statemine Ledger app doesn't support the ",(0,r.kt)("inlineCode",{parentName:"p"},"teleport")," extrinsic at this point, so an intermediary\naccount needs to be created first."),(0,r.kt)("p",null,"To teleport KSM to the Relay Chain follow these steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Create an account outside your Ledger. Instructions can be found\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-accounts#account-generation"},"here"),"."),(0,r.kt)("li",{parentName:"ul"},"Transfer the desired amount as described ",(0,r.kt)("a",{parentName:"li",href:"#sending-a-transfer"},"above"),". If you want to send exactly\nthe amount you want to teleport, don't forget take into account the fees for teleporting that will\nbe deducted in the next step."),(0,r.kt)("li",{parentName:"ul"},"Teleport your tokens following the instructions you will find ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-teleport"},"here"),".")),(0,r.kt)("p",null,"Teleporting ",(0,r.kt)("strong",{parentName:"p"},"to")," a Ledger account from a non-Ledger account doesn't require these extra steps."),(0,r.kt)("h2",{id:"support"},"Support"),(0,r.kt)("p",null,"If you need support, please visit the ",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network"},"Polkadot Support page"),"."))}k.isMDXComponent=!0},83566:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/ledger-4-6f7e09be831f4a82031a066b8f222a6c.png"},54035:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/ledger-fd53351628660be133bf903bbc63f682.png"},33414:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/add-account-8690ff195ced1f005f03c2b2bbef349a.png"},78465:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/png;base64,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"},57302:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/query-device-d7d9e7e7d28a34a343c59094db864a1a.png"},26789:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/43cda9e8.f288a13f.js b/assets/js/43cda9e8.f288a13f.js new file mode 100644 index 000000000000..b76e4538355a --- /dev/null +++ b/assets/js/43cda9e8.f288a13f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6357],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),d=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=d(n),h=a,k=p["".concat(l,".").concat(h)]||p[h]||c[h]||r;return n?o.createElement(k,i(i({ref:t},u),{},{components:n})):o.createElement(k,i({ref:t},u))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>k,frontMatter:()=>s,metadata:()=>d,toc:()=>p});var o=n(87462),a=n(63366),r=(n(67294),n(3905)),i=["components"],s={id:"learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",sidebar_label:"Asset Hub Ledger Guides",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",keywords:["asset hub","ledger","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-ledger"},l=void 0,d={unversionedId:"learn/learn-guides-assets-ledger",id:"learn/learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",source:"@site/../docs/learn/learn-guides-assets-ledger.md",sourceDirName:"learn",slug:"/learn-guides-assets-ledger",permalink:"/docs/learn-guides-assets-ledger",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets-ledger.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-assets-ledger",title:"Polkadot-JS Guides about Asset Hub Ledger App",sidebar_label:"Asset Hub Ledger Guides",description:"Polkadot-JS Guides about Ledger and the Asset Hub.",keywords:["asset hub","ledger","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-ledger"},sidebar:"docs",previous:{title:"Create Asset Guides",permalink:"/docs/learn-guides-assets-create"},next:{title:"Architecture",permalink:"/docs/learn-architecture-index"}},u={},p=[{value:"Requirements",id:"requirements",level:2},{value:"Installing the Ledger Application",id:"installing-the-ledger-application",level:2},{value:"Using Ledger Live",id:"using-ledger-live",level:3},{value:"Using on Polkadot-JS Apps UI",id:"using-on-polkadot-js-apps-ui",level:2},{value:"Adding Your Account",id:"adding-your-account",level:3},{value:"Working on Relay Chains and Asset Hubs",id:"working-on-relay-chains-and-asset-hubs",level:3},{value:"Confirming the Address on your Device",id:"confirming-the-address-on-your-device",level:3},{value:"Using Polkadot-JS Apps",id:"using-polkadot-js-apps",level:4},{value:"Sending a Transfer",id:"sending-a-transfer",level:3},{value:"Receiving a Transfer",id:"receiving-a-transfer",level:3},{value:"Teleporting",id:"teleporting",level:3},{value:"Support",id:"support",level:2}],c={toc:p},h="wrapper";function k(e){var t=e.components,s=(0,a.Z)(e,i);return(0,r.kt)(h,(0,o.Z)({},c,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Because of required WebUSB support, Ledger wallets currently only work on Chromium-based browsers\nlike Brave, Chrome or Edge.")),(0,r.kt)("p",null,"The Asset Hub has a ",(0,r.kt)("a",{parentName:"p",href:"https://www.ledger.com/"},"Ledger")," application that is compatible with the Ledger\nNano S and Ledger Nano X devices. The Ledger devices are hardware wallets that keep your private key\nsecured on a physical device that does not get directly exposed to your computer or the internet."),(0,r.kt)("p",null,"The Statemine application allows you to manage your KSM and other tokens on the Asset Hub parachain.\nIt supports most of the available transaction types of the network in the XL version of the app\n(details ",(0,r.kt)("a",{parentName:"p",href:"#installing-the-ledger-application"},"below"),")."),(0,r.kt)("p",null,"If you have trouble using Ledger or following the directions below, you can try searching for your\nissue on the ",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/"},"Polkadot Support page"),"."),(0,r.kt)("admonition",{title:"Intro to Ledger Explainer",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please check out our\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/7VlTncHCGPc"},"intro to Ledger video on YouTube for more information"),".")),(0,r.kt)("h2",{id:"requirements"},"Requirements"),(0,r.kt)("p",null,"Here is a list of what you will need before starting:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"A Ledger Nano S or a Ledger Nano X."),(0,r.kt)("li",{parentName:"ul"},"The latest firmware installed."),(0,r.kt)("li",{parentName:"ul"},"Ledger Live is installed and at version 2.29 or newer (see settings -> about to find out if you're\nup to date)."),(0,r.kt)("li",{parentName:"ul"},"A web browser is installed that you can use to access\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),".")),(0,r.kt)("h2",{id:"installing-the-ledger-application"},"Installing the Ledger Application"),(0,r.kt)("h3",{id:"using-ledger-live"},"Using Ledger Live"),(0,r.kt)("admonition",{title:"Ledger Nano S",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"There are two versions of the Statemine app: the normal (light) version and the XL version. The\nlight version has smaller size but it supports only basic functionality. If you want access to all\nthe supported extrinsics, you need to install the XL version of the app. You can see\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Zondax/ledger-statemine"},"here")," a full list of the extrinsics supported by both\nversions.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Open the "Manager" tab in Ledger Live.'),(0,r.kt)("li",{parentName:"ul"},"Connect and unlock your Ledger device."),(0,r.kt)("li",{parentName:"ul"},"If asked, allow the manager on your device by pressing both buttons on the YES screen."),(0,r.kt)("li",{parentName:"ul"},"Search for Statemine in the app catalog."),(0,r.kt)("li",{parentName:"ul"},"If you are using a Ledger Nano S, install either the normal (light) version or the XL version. For\nLedger Nano X, there will only be one app available.")),(0,r.kt)("p",null,"Please proceed to the ",(0,r.kt)("a",{parentName:"p",href:"#using-on-polkadot-js-apps"},"usage instructions")," below."),(0,r.kt)("h2",{id:"using-on-polkadot-js-apps-ui"},"Using on Polkadot-JS Apps UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot extension doesn't support Statemine Ledger accounts at this point, so you need to add\nyour account on Polkadot-JS UI as described below.")),(0,r.kt)("h3",{id:"adding-your-account"},"Adding Your Account"),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"These instructions will guide you on how to add a Ledger account that's ",(0,r.kt)("strong",{parentName:"p"},"only")," available on the\nAsset Hub. If you want to use the same Ledger account on both\nPolkadot ",(0,r.kt)("strong",{parentName:"p"},"and")," the Asset Hub check the\ninstructions ",(0,r.kt)("a",{parentName:"p",href:"#working-on-relay-chains-and-asset-hubs"},"below"),".")),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI")," already has an integration with the\nLedger application so that your device will work with the browser interface after installation. The\nfunctionality is currently gated behind a feature setting that you will need to turn on."),(0,r.kt)("p",null,'In order to turn on the interoperability with the Statemine Ledger application, go to the "Settings"\ntab in ',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),'. Find the option for attaching\nLedger devices and switch the option from the default "Do not attach Ledger devices" to "Attach\nLedger via WebUSB" (',(0,r.kt)("strong",{parentName:"p"},"but see note above"),")."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Dropdown selector for allowing Ledger connections in Polkadot-JS Apps UI Settings",src:n(54035).Z,width:"531",height:"235"})),(0,r.kt)("p",null,'Click "Save" to keep your settings.'),(0,r.kt)("p",null,'Now when you go to the "Accounts" tab you will see a new button that says "Add via Ledger". Ensure\nthat your Ledger device is unlocked, Ledger Live is ',(0,r.kt)("strong",{parentName:"p"},"closed")," and you have\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169778-how-to-switch-network-nodes"},"switched over"),"\nto the Statemine application, then click this button."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Add Ledger button in Polkadot-JS Apps UI",src:n(26789).Z,width:"488",height:"83"})),(0,r.kt)("p",null,"A popup will appear asking you to select an account and derivation path."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Picking an account and derivation path",src:n(33414).Z,width:"1894",height:"643"})),(0,r.kt)("p",null,"The first option lets you select an account. You can have multiple accounts on a single Ledger\ndevice. The second dropdown lets you pick a derivation path - think of it like a formula from which\nchild accounts are generated. If in doubt, pick the default option for both."),(0,r.kt)("p",null,"Once you confirm your selection, depending on your browser and its security settings, you might need\nto confirm the USB connection through a popup like the one below when adding the Ledger device for\nthe first time:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Display the device connection popup",src:n(57302).Z,width:"468",height:"461"})),(0,r.kt)("p",null,'You should now be able to scroll down and find a new account on the page with the type "ledger".'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Displaying the Ledger account in the list",src:n(78465).Z,width:"867",height:"70"})),(0,r.kt)("p",null,"You can now use this account to interact with the Asset Hub on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI")," and it will prompt your ledger for\nconfirmation when you initiate a transaction."),(0,r.kt)("h3",{id:"working-on-relay-chains-and-asset-hubs"},"Working on Relay Chains and Asset Hubs"),(0,r.kt)("p",null,"Polkadot and Kusama accounts from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"extension"),"\nwill show up in the Asset Hub, even if they're not set to be used on all chains. The Asset Hub is a\nsystem parachains on Polkadot :polkadot}}"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"However"),", as mentioned above, the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"Polkadot extension")," does not support Statemine\nLedger accounts at the moment, but the Polkadot-JS UI does. So, if your Kusama account is in the\nPolkadot extension, you'll need to remove it from there and re-add it on Polkadot-JS UI directly\n",(0,r.kt)("strong",{parentName:"p"},"as a Kusama account"),", as described\n",(0,r.kt)("a",{parentName:"p",href:"https://guide.kusama.network/docs/kusama-ledger#using-on-polkadot-js-apps-ui"},"here"),". After that,\nyou will be able to make transactions with that account."),(0,r.kt)("p",null,"To remove an account from the Polkadot extension:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Open the extension"),(0,r.kt)("li",{parentName:"ol"},"Click on the three dots next to the account"),(0,r.kt)("li",{parentName:"ol"},'Select "Forget account".')),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"As mentioned above, a Polkadot :polkadot}}")),(0,r.kt)("h3",{id:"confirming-the-address-on-your-device"},"Confirming the Address on your Device"),(0,r.kt)("p",null,'On the "Accounts" tab, find your Ledger-connected account. Click on the three vertical dots at the\nend of the row. This will open a new menu, here you can click the "Show address on hardware device"\noption to display the address on your device.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Options menu of an account in the Accounts screen of Polkadot-JS Apps UI",src:n(83566).Z,width:"419",height:"478"})),(0,r.kt)("p",null,"Here you can scroll through and make sure the address matches to what is displayed on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),"."),(0,r.kt)("h4",{id:"using-polkadot-js-apps"},"Using Polkadot-JS Apps"),(0,r.kt)("p",null,'Once you have your account loaded on the "Accounts" tab it should show a row with your Ledger\naccount. At the far right of the row is located your account\'s DOT balance. If you expand the\nbalance arrow, it will show details of your balance such as locks or reserved amounts.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Account row showing empty balance",src:n(78465).Z,width:"867",height:"70"})),(0,r.kt)("h3",{id:"sending-a-transfer"},"Sending a Transfer"),(0,r.kt)("p",null,"If you would like to send a transfer from your account housed on the Ledger device, the easiest\nmethod is to use ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps UI"),"."),(0,r.kt)("admonition",{title:"Transfers",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Transferring in this way sends tokens to another account on the Asset Hub parachain. If you need to\ntransfer KSM between the Asset Hub and\nPolkadot, see the ",(0,r.kt)("a",{parentName:"p",href:"#teleporting"},"Teleporting"),"\nsection below.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Click on the "Send" button next to your account.'),(0,r.kt)("li",{parentName:"ul"},"In the second input, select one of the accounts from the drop-down menu or paste the address that\nyou want to transfer funds to."),(0,r.kt)("li",{parentName:"ul"},"In the third input, enter the amount of KSM you want to transfer."),(0,r.kt)("li",{parentName:"ul"},'Click the "Make Transfer" button.'),(0,r.kt)("li",{parentName:"ul"},"Confirm the transaction on your device."),(0,r.kt)("li",{parentName:"ul"},"A green success notification will be displayed when the transaction is included in a block.")),(0,r.kt)("admonition",{title:'The "Transfer with Keep-Alive Checks" toggle',type:"note"},(0,r.kt)("p",{parentName:"admonition"},'Note the "Transfer with Keep-Alive Checks" toggle. While this toggle is in the ',(0,r.kt)("em",{parentName:"p"},"On")," state, your\naccount will be unable to make transactions which would get its balance below the existential\ndeposit. This prevents reaping of accounts with low balances. If you toggle this to ",(0,r.kt)("em",{parentName:"p"},"Off"),", you will\nbe able to go below existential deposit balance, causing your account to be deleted and any dust\namount of KSM to be burned. If you encounter KeepAlive errors when making transactions, this might\nbe the reason."),(0,r.kt)("p",{parentName:"admonition"},"A detailed guide on doing transfers is available\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-ledger#sending-a-transfer-with-ledger-devices"},"here"),".")),(0,r.kt)("h3",{id:"receiving-a-transfer"},"Receiving a Transfer"),(0,r.kt)("p",null,"In order to receive a transfer on the accounts stored on your Ledger device, you will need to\nprovide the sender (i.e. the payer) with your address."),(0,r.kt)("p",null,"The easiest way to get your address is to click on the account name which will open a sidebar. Your\naddress will be shown in this sidebar, along with some other information. Another method is just\nclicking on your account's avatar icon - this immediately copies your address to the clipboard."),(0,r.kt)("admonition",{title:"Your Asset Hub address is the same as your Relay Chain address",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Make sure that you clarify to the sender that you wish to receive your tokens on the Asset Hub\nparachain, otherwise (if you're receiving DOT\ntokens) they could be sent on the Polkadot\nchain.")),(0,r.kt)("admonition",{title:"Before giving anyone your address",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Make sure it matches what's really on the Ledger by\n",(0,r.kt)("a",{parentName:"p",href:"#confirming-the-address-on-your-device"},"confirming the address on your device"),". Some malware will\nintercept clicks and clipboard requests and can change your copied value in-flight, so being extra\nvigilant around copy-paste operations makes sense.")),(0,r.kt)("h3",{id:"teleporting"},"Teleporting"),(0,r.kt)("p",null,"Teleporting allows you to send tokens between the Relay Chain and a parachain, or between different\nparachains."),(0,r.kt)("p",null,"The Statemine Ledger app doesn't support the ",(0,r.kt)("inlineCode",{parentName:"p"},"teleport")," extrinsic at this point, so an intermediary\naccount needs to be created first."),(0,r.kt)("p",null,"To teleport KSM to the Relay Chain follow these steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Create an account outside your Ledger. Instructions can be found\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-accounts#account-generation"},"here"),"."),(0,r.kt)("li",{parentName:"ul"},"Transfer the desired amount as described ",(0,r.kt)("a",{parentName:"li",href:"#sending-a-transfer"},"above"),". If you want to send exactly\nthe amount you want to teleport, don't forget take into account the fees for teleporting that will\nbe deducted in the next step."),(0,r.kt)("li",{parentName:"ul"},"Teleport your tokens following the instructions you will find ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-teleport"},"here"),".")),(0,r.kt)("p",null,"Teleporting ",(0,r.kt)("strong",{parentName:"p"},"to")," a Ledger account from a non-Ledger account doesn't require these extra steps."),(0,r.kt)("h2",{id:"support"},"Support"),(0,r.kt)("p",null,"If you need support, please visit the ",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network"},"Polkadot Support page"),"."))}k.isMDXComponent=!0},83566:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/ledger-4-6f7e09be831f4a82031a066b8f222a6c.png"},54035:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/ledger-fd53351628660be133bf903bbc63f682.png"},33414:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/add-account-8690ff195ced1f005f03c2b2bbef349a.png"},78465:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/png;base64,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"},57302:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/query-device-d7d9e7e7d28a34a343c59094db864a1a.png"},26789:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/48074a08.c534a999.js b/assets/js/48074a08.54738057.js similarity index 88% rename from assets/js/48074a08.c534a999.js rename to assets/js/48074a08.54738057.js index 8bdb9a6e8689..4b671a2fb476 100644 --- a/assets/js/48074a08.c534a999.js +++ b/assets/js/48074a08.54738057.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1825],{64515:e=>{e.exports=JSON.parse('{"title":"Advanced Concepts","description":"Advanced concepts to better understand Polkadot.","slug":"/learn-advanced-index","permalink":"/docs/learn-advanced-index","navigation":{"previous":{"title":"Consensus","permalink":"/docs/learn-consensus"},"next":{"title":"Polkadot-JS","permalink":"/docs/learn-polkadotjs-index"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1825],{64515:e=>{e.exports=JSON.parse('{"title":"Advanced Concepts","description":"Advanced concepts to better understand Polkadot.","slug":"/learn-advanced-index","permalink":"/docs/learn-advanced-index","navigation":{"previous":{"title":"Consensus","permalink":"/docs/learn-consensus"},"next":{"title":"Polkadot-JS","permalink":"/docs/learn-polkadotjs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/4f031749.191c540a.js b/assets/js/4f031749.191c540a.js deleted file mode 100644 index d975105d52c6..000000000000 --- a/assets/js/4f031749.191c540a.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2008],{47940:(e,t,o)=>{"use strict";o.d(t,{Z:()=>u});var a=o(74165),n=o(15861),s=o(67294),i=o(87152),r=o(14741),l=o(67425);function p(e,t,o){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,a.Z)().mark((function e(t,o,n){var s,l,p,d,c;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return s="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return s="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return s="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return s="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==s){e.next=18;break}return e.abrupt("return");case 18:return p=new i.U(s),e.next=21,r.G.create({provider:p});case 21:d=e.sent,(c=o.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+o);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,o,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,o,a);break;case"precise":(0,l.Precise)(e,o,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,o);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const u=function(e){var t=e.network,o=e.path,i=e.defaultValue,r=e.filter,l=void 0===r?void 0:r,d=(0,s.useState)(""),u=d[0],k=d[1];return t=t.toLowerCase(),(0,s.useEffect)((function(){void 0!==l?c(i.toString(),l,t,k):k(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var s=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,o,k);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(n,l,t,k):k(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{s()}catch(r){console.log(r)}}}),[]),u}},67425:e=>{var t="polkadot",o="kusama",a="statemine",n="statemint",s={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,r){var l=void 0;if(i===t||i===n)l=3;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),r((e=Number.isInteger(e/s[i].precision)?e/s[i].precision+" "+s[i].symbol:(e/s[i].precision).toFixed(l)+" "+s[i].symbol).toString())},Precise:function(e,t,o){o(e=(e=parseFloat(e))/s[t].precision+" "+s[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,s,i){var r=void 0;if(i===t||i===n)r=1;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}s((e/=r).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},44002:(e,t,o)=>{"use strict";o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var a=o(87462),n=o(63366),s=(o(67294),o(3905)),i=o(47940),r=["components"],l={id:"learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",sidebar_label:"Nomination Pool Guides",description:"Polkadot-JS Guides about Nomination Pools.",keyword:["stake","staking","pools","create","destroy","claim","rewards","polkadot-js"],slug:"../learn-guides-staking-pools"},p=void 0,d={unversionedId:"learn/learn-guides-staking-pools",id:"learn/learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",description:"Polkadot-JS Guides about Nomination Pools.",source:"@site/../docs/learn/learn-guides-staking-pools.md",sourceDirName:"learn",slug:"/learn-guides-staking-pools",permalink:"/docs/learn-guides-staking-pools",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-staking-pools.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",sidebar_label:"Nomination Pool Guides",description:"Polkadot-JS Guides about Nomination Pools.",keyword:["stake","staking","pools","create","destroy","claim","rewards","polkadot-js"],slug:"../learn-guides-staking-pools"},sidebar:"docs",previous:{title:"Nominator Guides",permalink:"/docs/learn-guides-nominator"},next:{title:"OpenGov Guides",permalink:"/docs/learn-guides-polkadot-opengov"}},c={},u=[{value:"Pool Creation with Polkadot-JS",id:"pool-creation-with-polkadot-js",level:2},{value:"Pool Upkeep with Polkadot-JS",id:"pool-upkeep-with-polkadot-js",level:2},{value:"Pool Destruction with Polkadot-JS",id:"pool-destruction-with-polkadot-js",level:2},{value:"Claim Rewards for Other Pool Members with Polkadot-JS",id:"claim-rewards-for-other-pool-members-with-polkadot-js",level:2}],k={toc:u},m="wrapper";function h(e){var t=e.components,l=(0,n.Z)(e,r);return(0,s.kt)(m,(0,a.Z)({},k,l,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("div",{className:"sticky",style:{zIndex:1}},(0,s.kt)("br",null),(0,s.kt)("p",null,(0,s.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,s.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,s.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,s.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,s.kt)("p",null,"See ",(0,s.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"this page")," to learn about nomination pools."),(0,s.kt)("h2",{id:"pool-creation-with-polkadot-js"},"Pool Creation with Polkadot-JS"),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"You easily create a pool using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Polkadot Staking Dashboard"),". See\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182388-staking-dashboard-how-to-create-a-nomination-pool#How-to-create-a-pool"},"this support article"),"\nfor more information.")),(0,s.kt)("p",null,"The depositor calls the ",(0,s.kt)("inlineCode",{parentName:"p"},"create")," extrinsic, setting the administrative roles and transferring some\nfunds to the pool to add themselves as the first member. As stated above, the depositor must always\nbe a member as long as the pool exists; they will be the last member to leave, ensuring they always\nhave some skin in the game. A significant stake from the depositor is always a good indicator of the\npool's credibility."),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"The current minimum bond to create a pool on"),"\n",(0,s.kt)("strong",{parentName:"p"},"Polkadot"),"","\n",(0,s.kt)("strong",{parentName:"p"},"is ",(0,s.kt)(i.Z,{network:"polkadot",path:"query.nominationPools.minCreateBond",defaultValue:5e12,filter:"humanReadable",mdxType:"RPC"}),"."),"\n",""),(0,s.kt)("p",null,"The pool\u2019s \u2018nominator role\u2019 selects validators with the nominate extrinsic. On Polkadot JS Apps UI,\nnavigate to Network > Staking > Pools and click on Add Pool button."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Create Nomination Pools",src:o(85209).Z,width:"1412",height:"638"})),(0,s.kt)("p",null,"The UI automatically assigns an ID to the pool and allows for entering the name of the pools and the\ndeposit to be bonded."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Create Nomination Pools - deposit",src:o(58732).Z,width:"1164",height:"458"})),(0,s.kt)("p",null,"When creating a pool using Polkadot JS Apps UI, all the roles are mapped to the Depositor account by\ndefault. If any of these roles need to be assigned to a different account, create the pool using\n",(0,s.kt)("inlineCode",{parentName:"p"},"create")," extrinsic available in\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics > nominationPools")," on Polkadot JS\nApps UI."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Nomination Pool Roles",src:o(12920).Z,width:"1426",height:"558"})),(0,s.kt)("h2",{id:"pool-upkeep-with-polkadot-js"},"Pool Upkeep with Polkadot-JS"),(0,s.kt)("p",null,"The nominator can update the pool\u2019s validator selection. On Polkadot JS Apps UI, navigate to\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Network > Staking > Accounts page")," and click on\nPooled button. If you have any pooled accounts with the role of nominator, you will notice the\noption to set nominees. Select the validators to nominate like you would normally using a nominator\naccount."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Nominate validators",src:o(22455).Z,width:"1810",height:"786"})),(0,s.kt)("p",null,"The root and bouncer can update the pool\u2019s state to blocked through ",(0,s.kt)("inlineCode",{parentName:"p"},"setState")," extrinsic and kick\nmembers by calling ",(0,s.kt)("inlineCode",{parentName:"p"},"unbond")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"withdrawUnbonded"),". (The state can also be toggled back to open)."),(0,s.kt)("h2",{id:"pool-destruction-with-polkadot-js"},"Pool Destruction with Polkadot-JS"),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"As a pool admin, you can easily destroy a pool and permissionlessly remove all members using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Polkadot Staking Dashboard"),". See\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182388-staking-dashboard-how-to-create-a-nomination-pool#How-to-destroy-a-pool"},"this support article"),"\nfor more information.")),(0,s.kt)("p",null,"A pool can be pushed into the \u201cdestroying\u201d state via one of:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"The root and bouncer set the pool to \u201cdestroying\u201d. This can be done by submitting the\n",(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.setState(poolId, state)")," extrinsic using the\n",(0,s.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/extrinsics"},"Polkadot-JS UI extrinsic tab"),". Where ",(0,s.kt)("inlineCode",{parentName:"li"},"poolId")," is the\nspecific ID of the pool and ",(0,s.kt)("inlineCode",{parentName:"li"},"state"),' is the pool\'s state that must be set to "destroying". Other\npossible states are "open" and "blocked".'),(0,s.kt)("li",{parentName:"ul"},"Any account can set the pool to destroying if over 90% of the pool's active bonded balance has\nbeen slashed.")),(0,s.kt)("p",null,"When a pool is in \u2018destroying\u2019 state, ",(0,s.kt)("inlineCode",{parentName:"p"},"unbond")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"withdrawUnbonded")," become permissionless, so\nanyone can help all the members exit."),(0,s.kt)("p",null,"The pool is destroyed once the depositor withdraws, no members belong to the pool, and all the\npool\u2019s resources are wiped from the state."),(0,s.kt)("h2",{id:"claim-rewards-for-other-pool-members-with-polkadot-js"},"Claim Rewards for Other Pool Members with Polkadot-JS"),(0,s.kt)("p",null,"As a pool member you can claim rewards for any other members who set their\n",(0,s.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools#claim-permissions"},"claim permissions")," to one of the ",(0,s.kt)("em",{parentName:"p"},"permissionless"),"\noptions."),(0,s.kt)("p",null,"Let's take the example of ALICE setting the claim permissions to ",(0,s.kt)("inlineCode",{parentName:"p"},"PermissionlessAll"),". Another\naccount STASH can now claim ALICE's rewards (as a free balance or compound them to the existing\nbonded balance). To do so, STASH can go to the\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Polkadot-JS UI Extrinsic Tab")," and issue the following\nextrisics:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.claimPayoutOthers")," extrinsic specifying ALICE's account. This will claim the\nrewards as a free balance on ALICE's account.")),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"pools-payoutOthers",src:o(51546).Z,width:"1499",height:"458"})),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.bondExtraOthers")," extrinsic specifying ALICE's account and the option to bond:",(0,s.kt)("ul",{parentName:"li"},(0,s.kt)("li",{parentName:"ul"},"the free balance currently available in ALICE's account (",(0,s.kt)("inlineCode",{parentName:"li"},"FreeBalance"),") or"),(0,s.kt)("li",{parentName:"ul"},"the pool rewards (",(0,s.kt)("inlineCode",{parentName:"li"},"Rewards"),") unclaimed by ALICE.")))),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"pools-bondExtraOthers",src:o(63547).Z,width:"1496",height:"643"})))}h.isMDXComponent=!0},63547:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nomination-pools-bondExtraOthers-d4492df464bbc1cd2c04be211a78eb46.png"},51546:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nomination-pools-payoutOthers-bfe1ad190e494f39c2c74d65e7edd12c.png"},85209:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-1-98ee6b5592f6851aa57c9d427d70598f.png"},58732:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-2-84da587a4d7591f2e2f79a4054214984.png"},22455:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-5-9b16b01bde4e095d3c8fa71aa9a9a6ca.png"},12920:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-7-74928d7825f19208592498e7b12dee5c.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/4f031749.c0514a09.js b/assets/js/4f031749.c0514a09.js new file mode 100644 index 000000000000..e310847c56d5 --- /dev/null +++ b/assets/js/4f031749.c0514a09.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[2008],{47940:(e,t,o)=>{"use strict";o.d(t,{Z:()=>u});var a=o(74165),n=o(15861),s=o(67294),i=o(87152),r=o(14741),l=o(67425);function p(e,t,o){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,a.Z)().mark((function e(t,o,n){var s,l,p,d,c;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return s="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return s="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return s="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return s="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==s){e.next=18;break}return e.abrupt("return");case 18:return p=new i.U(s),e.next=21,r.G.create({provider:p});case 21:d=e.sent,(c=o.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+o);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,o,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,o,a);break;case"precise":(0,l.Precise)(e,o,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,o);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const u=function(e){var t=e.network,o=e.path,i=e.defaultValue,r=e.filter,l=void 0===r?void 0:r,d=(0,s.useState)(""),u=d[0],k=d[1];return t=t.toLowerCase(),(0,s.useEffect)((function(){void 0!==l?c(i.toString(),l,t,k):k(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var s=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,o,k);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(n,l,t,k):k(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{s()}catch(r){console.log(r)}}}),[]),u}},67425:e=>{var t="polkadot",o="kusama",a="statemine",n="statemint",s={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,r){var l=void 0;if(i===t||i===n)l=3;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),r((e=Number.isInteger(e/s[i].precision)?e/s[i].precision+" "+s[i].symbol:(e/s[i].precision).toFixed(l)+" "+s[i].symbol).toString())},Precise:function(e,t,o){o(e=(e=parseFloat(e))/s[t].precision+" "+s[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,s,i){var r=void 0;if(i===t||i===n)r=1;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}s((e/=r).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},44002:(e,t,o)=>{"use strict";o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var a=o(87462),n=o(63366),s=(o(67294),o(3905)),i=o(47940),r=["components"],l={id:"learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",sidebar_label:"Nomination Pool Guides",description:"Polkadot-JS Guides about Nomination Pools.",keyword:["stake","staking","pools","create","destroy","claim","rewards","polkadot-js"],slug:"../learn-guides-staking-pools"},p=void 0,d={unversionedId:"learn/learn-guides-staking-pools",id:"learn/learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",description:"Polkadot-JS Guides about Nomination Pools.",source:"@site/../docs/learn/learn-guides-staking-pools.md",sourceDirName:"learn",slug:"/learn-guides-staking-pools",permalink:"/docs/learn-guides-staking-pools",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-staking-pools.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-staking-pools",title:"Polkadot-JS Guides for Pool Creators",sidebar_label:"Nomination Pool Guides",description:"Polkadot-JS Guides about Nomination Pools.",keyword:["stake","staking","pools","create","destroy","claim","rewards","polkadot-js"],slug:"../learn-guides-staking-pools"},sidebar:"docs",previous:{title:"Nominator Guides",permalink:"/docs/learn-guides-nominator"},next:{title:"OpenGov Guides",permalink:"/docs/learn-guides-polkadot-opengov"}},c={},u=[{value:"Pool Creation with Polkadot-JS",id:"pool-creation-with-polkadot-js",level:2},{value:"Pool Upkeep with Polkadot-JS",id:"pool-upkeep-with-polkadot-js",level:2},{value:"Pool Destruction with Polkadot-JS",id:"pool-destruction-with-polkadot-js",level:2},{value:"Claim Rewards for Other Pool Members with Polkadot-JS",id:"claim-rewards-for-other-pool-members-with-polkadot-js",level:2}],k={toc:u},m="wrapper";function h(e){var t=e.components,l=(0,n.Z)(e,r);return(0,s.kt)(m,(0,a.Z)({},k,l,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("div",{className:"sticky",style:{zIndex:1}},(0,s.kt)("br",null),(0,s.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,s.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,s.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,s.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,s.kt)("p",null,"See ",(0,s.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"this page")," to learn about nomination pools."),(0,s.kt)("h2",{id:"pool-creation-with-polkadot-js"},"Pool Creation with Polkadot-JS"),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"You easily create a pool using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Polkadot Staking Dashboard"),". See\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182388-staking-dashboard-how-to-create-a-nomination-pool#How-to-create-a-pool"},"this support article"),"\nfor more information.")),(0,s.kt)("p",null,"The depositor calls the ",(0,s.kt)("inlineCode",{parentName:"p"},"create")," extrinsic, setting the administrative roles and transferring some\nfunds to the pool to add themselves as the first member. As stated above, the depositor must always\nbe a member as long as the pool exists; they will be the last member to leave, ensuring they always\nhave some skin in the game. A significant stake from the depositor is always a good indicator of the\npool's credibility."),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"The current minimum bond to create a pool on"),"\n",(0,s.kt)("strong",{parentName:"p"},"Polkadot"),"","\n",(0,s.kt)("strong",{parentName:"p"},"is ",(0,s.kt)(i.Z,{network:"polkadot",path:"query.nominationPools.minCreateBond",defaultValue:5e12,filter:"humanReadable",mdxType:"RPC"}),"."),"\n",""),(0,s.kt)("p",null,"The pool\u2019s \u2018nominator role\u2019 selects validators with the nominate extrinsic. On Polkadot JS Apps UI,\nnavigate to Network > Staking > Pools and click on Add Pool button."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Create Nomination Pools",src:o(85209).Z,width:"1412",height:"638"})),(0,s.kt)("p",null,"The UI automatically assigns an ID to the pool and allows for entering the name of the pools and the\ndeposit to be bonded."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Create Nomination Pools - deposit",src:o(58732).Z,width:"1164",height:"458"})),(0,s.kt)("p",null,"When creating a pool using Polkadot JS Apps UI, all the roles are mapped to the Depositor account by\ndefault. If any of these roles need to be assigned to a different account, create the pool using\n",(0,s.kt)("inlineCode",{parentName:"p"},"create")," extrinsic available in\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics > nominationPools")," on Polkadot JS\nApps UI."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Nomination Pool Roles",src:o(12920).Z,width:"1426",height:"558"})),(0,s.kt)("h2",{id:"pool-upkeep-with-polkadot-js"},"Pool Upkeep with Polkadot-JS"),(0,s.kt)("p",null,"The nominator can update the pool\u2019s validator selection. On Polkadot JS Apps UI, navigate to\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Network > Staking > Accounts page")," and click on\nPooled button. If you have any pooled accounts with the role of nominator, you will notice the\noption to set nominees. Select the validators to nominate like you would normally using a nominator\naccount."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Nominate validators",src:o(22455).Z,width:"1810",height:"786"})),(0,s.kt)("p",null,"The root and bouncer can update the pool\u2019s state to blocked through ",(0,s.kt)("inlineCode",{parentName:"p"},"setState")," extrinsic and kick\nmembers by calling ",(0,s.kt)("inlineCode",{parentName:"p"},"unbond")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"withdrawUnbonded"),". (The state can also be toggled back to open)."),(0,s.kt)("h2",{id:"pool-destruction-with-polkadot-js"},"Pool Destruction with Polkadot-JS"),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"As a pool admin, you can easily destroy a pool and permissionlessly remove all members using the\n",(0,s.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Polkadot Staking Dashboard"),". See\n",(0,s.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182388-staking-dashboard-how-to-create-a-nomination-pool#How-to-destroy-a-pool"},"this support article"),"\nfor more information.")),(0,s.kt)("p",null,"A pool can be pushed into the \u201cdestroying\u201d state via one of:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"The root and bouncer set the pool to \u201cdestroying\u201d. This can be done by submitting the\n",(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.setState(poolId, state)")," extrinsic using the\n",(0,s.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/extrinsics"},"Polkadot-JS UI extrinsic tab"),". Where ",(0,s.kt)("inlineCode",{parentName:"li"},"poolId")," is the\nspecific ID of the pool and ",(0,s.kt)("inlineCode",{parentName:"li"},"state"),' is the pool\'s state that must be set to "destroying". Other\npossible states are "open" and "blocked".'),(0,s.kt)("li",{parentName:"ul"},"Any account can set the pool to destroying if over 90% of the pool's active bonded balance has\nbeen slashed.")),(0,s.kt)("p",null,"When a pool is in \u2018destroying\u2019 state, ",(0,s.kt)("inlineCode",{parentName:"p"},"unbond")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"withdrawUnbonded")," become permissionless, so\nanyone can help all the members exit."),(0,s.kt)("p",null,"The pool is destroyed once the depositor withdraws, no members belong to the pool, and all the\npool\u2019s resources are wiped from the state."),(0,s.kt)("h2",{id:"claim-rewards-for-other-pool-members-with-polkadot-js"},"Claim Rewards for Other Pool Members with Polkadot-JS"),(0,s.kt)("p",null,"As a pool member you can claim rewards for any other members who set their\n",(0,s.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools#claim-permissions"},"claim permissions")," to one of the ",(0,s.kt)("em",{parentName:"p"},"permissionless"),"\noptions."),(0,s.kt)("p",null,"Let's take the example of ALICE setting the claim permissions to ",(0,s.kt)("inlineCode",{parentName:"p"},"PermissionlessAll"),". Another\naccount STASH can now claim ALICE's rewards (as a free balance or compound them to the existing\nbonded balance). To do so, STASH can go to the\n",(0,s.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Polkadot-JS UI Extrinsic Tab")," and issue the following\nextrisics:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.claimPayoutOthers")," extrinsic specifying ALICE's account. This will claim the\nrewards as a free balance on ALICE's account.")),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"pools-payoutOthers",src:o(51546).Z,width:"1499",height:"458"})),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"nominationPools.bondExtraOthers")," extrinsic specifying ALICE's account and the option to bond:",(0,s.kt)("ul",{parentName:"li"},(0,s.kt)("li",{parentName:"ul"},"the free balance currently available in ALICE's account (",(0,s.kt)("inlineCode",{parentName:"li"},"FreeBalance"),") or"),(0,s.kt)("li",{parentName:"ul"},"the pool rewards (",(0,s.kt)("inlineCode",{parentName:"li"},"Rewards"),") unclaimed by ALICE.")))),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"pools-bondExtraOthers",src:o(63547).Z,width:"1496",height:"643"})))}h.isMDXComponent=!0},63547:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nomination-pools-bondExtraOthers-d4492df464bbc1cd2c04be211a78eb46.png"},51546:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nomination-pools-payoutOthers-bfe1ad190e494f39c2c74d65e7edd12c.png"},85209:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-1-98ee6b5592f6851aa57c9d427d70598f.png"},58732:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-2-84da587a4d7591f2e2f79a4054214984.png"},22455:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-5-9b16b01bde4e095d3c8fa71aa9a9a6ca.png"},12920:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/Nomination-Pools-7-74928d7825f19208592498e7b12dee5c.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/694672cd.026cdae7.js b/assets/js/694672cd.6da92c0d.js similarity index 88% rename from assets/js/694672cd.026cdae7.js rename to assets/js/694672cd.6da92c0d.js index eb6ef06c053c..ff4a651367b0 100644 --- a/assets/js/694672cd.026cdae7.js +++ b/assets/js/694672cd.6da92c0d.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8138],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||i;return r?n.createElement(f,o(o({ref:t},d),{},{components:r})):n.createElement(f,o({ref:t},d))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{r.d(t,{Z:()=>k});var n=r(67294),a=r(86010),i=r(53438),o=r(39960),s=r(13919),l=r(95999);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){var t=e.href,r=e.children;return n.createElement(o.Z,{href:t,className:(0,a.Z)("card padding--lg",c.cardContainer)},r)}function u(e){var t=e.href,r=e.icon,i=e.title,o=e.description;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,a.Z)("text--truncate",c.cardTitle),title:i},r," ",i),o&&n.createElement("p",{className:(0,a.Z)("text--truncate",c.cardDescription),title:o},o))}function p(e){var t,r=e.item,a=(0,i.Wl)(r);return a?n.createElement(u,{href:a,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r,a=e.item,o=(0,s.Z)(a.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,i.xz)(null!=(t=a.docId)?t:void 0);return n.createElement(u,{href:a.href,icon:o,title:a.label,description:null!=(r=a.description)?r:null==l?void 0:l.description})}function f(e){var t=e.item;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function g(e){var t=e.className,r=(0,i.jA)();return n.createElement(k,{items:r.items,className:t})}function k(e){var t=e.items,r=e.className;if(!t)return n.createElement(g,e);var o=(0,i.MN)(t);return n.createElement("section",{className:(0,a.Z)("row",r)},o.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},29576:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=r(87462),a=r(63366),i=(r(67294),r(3905)),o=r(52991),s=["components"],l={id:"learn-guides-staking",title:"Polkadot-JS Guides about Staking",sidebar_label:"Staking Guides",description:"Polkadot-JS Guides about Staking.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js","pools"],slug:"../learn-guides-staking"},c=void 0,d={unversionedId:"learn/learn-guides-staking",id:"learn/learn-guides-staking",title:"Polkadot-JS Guides about Staking",description:"Polkadot-JS Guides about Staking.",source:"@site/../docs/learn/learn-guides-staking.md",sourceDirName:"learn",slug:"/learn-guides-staking",permalink:"/docs/learn-guides-staking",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-staking.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-staking",title:"Polkadot-JS Guides about Staking",sidebar_label:"Staking Guides",description:"Polkadot-JS Guides about Staking.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js","pools"],slug:"../learn-guides-staking"},sidebar:"docs",previous:{title:"Transfer Guides",permalink:"/docs/learn-guides-transfers"},next:{title:"Nominator Guides",permalink:"/docs/learn-guides-nominator"}},u={},p=[],m={toc:p},f="wrapper";function g(e){var t=e.components,r=(0,a.Z)(e,s);return(0,i.kt)(f,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,i.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,i.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,i.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,i.kt)(o.Z,{mdxType:"DocCardList"}))}g.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8138],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||i;return r?n.createElement(f,o(o({ref:t},d),{},{components:r})):n.createElement(f,o({ref:t},d))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{r.d(t,{Z:()=>k});var n=r(67294),a=r(86010),i=r(53438),o=r(39960),s=r(13919),l=r(95999);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){var t=e.href,r=e.children;return n.createElement(o.Z,{href:t,className:(0,a.Z)("card padding--lg",c.cardContainer)},r)}function u(e){var t=e.href,r=e.icon,i=e.title,o=e.description;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,a.Z)("text--truncate",c.cardTitle),title:i},r," ",i),o&&n.createElement("p",{className:(0,a.Z)("text--truncate",c.cardDescription),title:o},o))}function p(e){var t,r=e.item,a=(0,i.Wl)(r);return a?n.createElement(u,{href:a,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r,a=e.item,o=(0,s.Z)(a.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,i.xz)(null!=(t=a.docId)?t:void 0);return n.createElement(u,{href:a.href,icon:o,title:a.label,description:null!=(r=a.description)?r:null==l?void 0:l.description})}function f(e){var t=e.item;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function g(e){var t=e.className,r=(0,i.jA)();return n.createElement(k,{items:r.items,className:t})}function k(e){var t=e.items,r=e.className;if(!t)return n.createElement(g,e);var o=(0,i.MN)(t);return n.createElement("section",{className:(0,a.Z)("row",r)},o.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},29576:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=r(87462),a=r(63366),i=(r(67294),r(3905)),o=r(52991),s=["components"],l={id:"learn-guides-staking",title:"Polkadot-JS Guides about Staking",sidebar_label:"Staking Guides",description:"Polkadot-JS Guides about Staking.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js","pools"],slug:"../learn-guides-staking"},c=void 0,d={unversionedId:"learn/learn-guides-staking",id:"learn/learn-guides-staking",title:"Polkadot-JS Guides about Staking",description:"Polkadot-JS Guides about Staking.",source:"@site/../docs/learn/learn-guides-staking.md",sourceDirName:"learn",slug:"/learn-guides-staking",permalink:"/docs/learn-guides-staking",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-staking.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-staking",title:"Polkadot-JS Guides about Staking",sidebar_label:"Staking Guides",description:"Polkadot-JS Guides about Staking.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js","pools"],slug:"../learn-guides-staking"},sidebar:"docs",previous:{title:"Transfer Guides",permalink:"/docs/learn-guides-transfers"},next:{title:"Nominator Guides",permalink:"/docs/learn-guides-nominator"}},u={},p=[],m={toc:p},f="wrapper";function g(e){var t=e.components,r=(0,a.Z)(e,s);return(0,i.kt)(f,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,i.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,i.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,i.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,i.kt)(o.Z,{mdxType:"DocCardList"}))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7e9389ad.98b0975e.js b/assets/js/7e9389ad.469e67df.js similarity index 70% rename from assets/js/7e9389ad.98b0975e.js rename to assets/js/7e9389ad.469e67df.js index 70fede4f9321..c481ff250ea3 100644 --- a/assets/js/7e9389ad.98b0975e.js +++ b/assets/js/7e9389ad.469e67df.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5011],{69074:t=>{t.exports=JSON.parse('{"title":"Participants in the Polkadot Ecosystem","description":"Learn about collators, nominators and validators.","slug":"/learn-participants-index","permalink":"/docs/learn-participants-index","navigation":{"previous":{"title":"Architecture","permalink":"/docs/learn-architecture"},"next":{"title":"Collator","permalink":"/docs/learn-collator"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5011],{69074:t=>{t.exports=JSON.parse('{"title":"Participants in the Polkadot Ecosystem","description":"Learn about collators, nominators and validators.","slug":"/learn-participants-index","permalink":"/docs/learn-participants-index","navigation":{"previous":{"title":"Introduction to NFTs","permalink":"/docs/learn-nft"},"next":{"title":"Collator","permalink":"/docs/learn-collator"}}}')}}]); \ No newline at end of file diff --git a/assets/js/804b1e9f.0786ac2c.js b/assets/js/804b1e9f.0786ac2c.js new file mode 100644 index 000000000000..508b73fe28b9 --- /dev/null +++ b/assets/js/804b1e9f.0786ac2c.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[230],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>c});var o=a(74165),n=a(15861),i=a(67294),s=a(87152),r=a(14741),l=a(67425);function p(t,e,a){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,o.Z)().mark((function t(e,a,n){var i,l,p,d,u;return(0,o.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:i=void 0,l=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){t.next=18;break}return t.abrupt("return");case 18:return p=new s.U(i),t.next=21,r.G.create({provider:p});case 21:d=t.sent,(u=a.split(".")).forEach((function(t){t in d&&(d=d[t])})),t.t1=u[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=d.toString(),t.abrupt("break",35);case 29:return t.next=31,d();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+u[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function u(t,e,a,o){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,o);break;case"precise":(0,l.Precise)(t,a,o);break;case"blocksToDays":(0,l.BlocksToDays)(t,o);break;case"erasToDays":(0,l.ErasToDays)(t,o,a);break;case"percentage":(0,l.Percentage)(t,o);break;case"permillToPercent":(0,l.PermillToPercent)(t,o);break;case"arrayLength":(0,l.ArrayLength)(t,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(t){var e=t.network,a=t.path,s=t.defaultValue,r=t.filter,l=void 0===r?void 0:r,d=(0,i.useState)(""),c=d[0],k=d[1];return e=e.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?u(s.toString(),l,e,k):k(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var t=(0,n.Z)((0,o.Z)().mark((function t(){var n;return(0,o.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,p(e,a,k);case 2:if(void 0!==(n=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?u(n,l,e,k):k(n);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{i()}catch(r){console.log(r)}}}),[]),c}},67425:t=>{var e="polkadot",a="kusama",o="statemine",n="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var l=void 0;if(s===e||s===n)l=3;else{if(s!==a&&s!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),r((t=Number.isInteger(t/i[s].precision)?t/i[s].precision+" "+i[s].symbol:(t/i[s].precision).toFixed(l)+" "+i[s].symbol).toString())},Precise:function(t,e,a){a(t=(t=parseFloat(t))/i[e].precision+" "+i[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,i,s){var r=void 0;if(s===e||s===n)r=1;else{if(s!==a&&s!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}i((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},46494:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>p,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-guides-nominator",title:"Polkadot-JS Guides For Nominators",sidebar_label:"Nominator Guides",description:"Polkadot-JS Guides for Nominators.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js"],slug:"../learn-guides-nominator"},p=void 0,d={unversionedId:"learn/learn-guides-nominator",id:"learn/learn-guides-nominator",title:"Polkadot-JS Guides For Nominators",description:"Polkadot-JS Guides for Nominators.",source:"@site/../docs/learn/learn-guides-nominator.md",sourceDirName:"learn",slug:"/learn-guides-nominator",permalink:"/docs/learn-guides-nominator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-nominator.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-nominator",title:"Polkadot-JS Guides For Nominators",sidebar_label:"Nominator Guides",description:"Polkadot-JS Guides for Nominators.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js"],slug:"../learn-guides-nominator"},sidebar:"docs",previous:{title:"Staking Guides",permalink:"/docs/learn-guides-staking"},next:{title:"Nomination Pool Guides",permalink:"/docs/learn-guides-staking-pools"}},u={},c=[{value:"Nominate Using Polkadot-JS",id:"nominate-using-polkadot-js",level:2},{value:"Bond your tokens",id:"bond-your-tokens",level:3},{value:"Nominate a validator",id:"nominate-a-validator",level:3},{value:"Stop nominating",id:"stop-nominating",level:3},{value:"Claiming Rewards with Polkadot-JS",id:"claiming-rewards-with-polkadot-js",level:2},{value:"Using Command-Line Interface (CLI)",id:"using-command-line-interface-cli",level:2},{value:"Step 1: Install @polkadot/api-cli",id:"step-1-install-polkadotapi-cli",level:3},{value:"Step 2: Bond Tokens",id:"step-2-bond-tokens",level:3},{value:"Step 3: Nominate a validator",id:"step-3-nominate-a-validator",level:3}],k={toc:c},m="wrapper";function h(t){var e=t.components,l=(0,n.Z)(t,r);return(0,i.kt)(m,(0,o.Z)({},k,l,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,i.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,i.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,i.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"this page")," to learn about staking."),(0,i.kt)("h2",{id:"nominate-using-polkadot-js"},"Nominate Using Polkadot-JS"),(0,i.kt)("admonition",{title:"Video Tutorials",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/FCXC0CDhyS4?t=219"},"How to Nominate/Stake")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/7VlTncHCGPc"},"Staking with a Ledger device and Polkadot-JS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=jL-N_IWiYVA"},"Staking with a Ledger device and Ledger Live")))),(0,i.kt)("h3",{id:"bond-your-tokens"},"Bond your tokens"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-polkadot-js-ui-how-do-i-stake-nominate-on-polkadot-"},"How to Bond Tokens and Nominate"),".")),(0,i.kt)("p",null,"On the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot-JS UI"),' navigate to the "Staking" tab (within the\n"Network" menu).'),(0,i.kt)("p",null,'The "Staking Overview" subsection will show you all the active validators and their information -\ntheir identities, the amount of KSM that are staking for them, amount that is their own provided\nstake, how much they charge in commission, the era points they\'ve earned in the current era, and the\nlast block number that they produced. If you click on the chart button it will take you to the\n"Validator Stats" page for that validator that shows you more detailed and historical information\nabout the validator\'s stake, rewards and slashes.'),(0,i.kt)("p",null,'The "Account actions" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"link"),") allows you\nto stake and nominate."),(0,i.kt)("p",null,'The "Payouts" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/payouts"},"link"),") allows you to\nclaim rewards from staking."),(0,i.kt)("p",null,'The "Targets" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"link"),") will help you\nestimate your earnings and this is where it's good to start picking favorites."),(0,i.kt)("p",null,'The "Waiting" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/waiting"},"link"),") lists all pending\nvalidators that are awaiting more nominations to enter the active validator set. Validators will\nstay in the waiting queue until they have enough KSM backing them (as allocated through the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n election mechanism"),"). It is possible validator can remain in the\nqueue for a very long time if they never get enough backing."),(0,i.kt)("p",null,'The "Validator Stats" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/query"},"link"),") allows you\nto query a validator's stash address and see historical charts on era points, elected stake,\nrewards, and slashes."),(0,i.kt)("p",null,'Pick "Account actions" underneath "Network" > "Staking", then click the "+ Nominator" button.'),(0,i.kt)("p",null,"You will see a modal window that looks like the below:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"nominator-update-1",src:a(86367).Z,width:"2194",height:"1170"})),(0,i.kt)("p",null,'Select a "value bonded" that is ',(0,i.kt)("strong",{parentName:"p"},"less")," than the total amount of KSM you have, so you have some\nleft over to pay transaction fees. Transaction fees are currently at least 0.01 KSM, but they are\ndynamic based on a variety of factors including the load of recent blocks."),(0,i.kt)("p",null,"Also be mindful of the reaping threshold - the amount that must remain in an account lest it be\nburned. That amount is 0.01 in Kusama, so it's recommended to keep at least 0.1 KSM in your account\nto be on the safe side."),(0,i.kt)("p",null,"Choose whatever payment destination that makes sense to you. If you're unsure, you can choose \"Stash\naccount (increase amount at stake)\" to simply accrue the rewards into the amount you're staking and\nearn compound interest."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Payout account selection dropdown with the custom account option highlighted",src:a(42394).Z,width:"742",height:"245"})),(0,i.kt)("h3",{id:"nominate-a-validator"},"Nominate a validator"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000150130-how-do-i-know-which-validators-to-choose-"},"How to Select Validators"),".")),(0,i.kt)("p",null,"You are now bonded. Being bonded means your tokens are locked and could be\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#slashing"},"slashed")," if the validators you nominate misbehave. All bonded funds\ncan now be distributed to up to 16 validators. Be\ncareful about the validators you choose since you will be slashed if your validator commits an\noffence."),(0,i.kt)("p",null,'Click on "Nominate" on an account you\'ve bonded and you will be presented with another popup asking\nyou to select some validators.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominating validators",src:a(47043).Z,width:"2208",height:"982"})),(0,i.kt)("p",null,"Select them, confirm the transaction, and you're done - you are now nominating. Your nominations\nwill become active in the next era. Eras last six hours on Kusama - depending on when you do this,\nyour nominations may become active almost immediately, or you may have to wait almost the entire six\nhours before your nominations are active. You can check how far along Kusama is in the current era\non the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"Staking page"),"."),(0,i.kt)("p",null,"Assuming at least one of your nominations ends up in the active validator set, you will start to get\nrewards allocated to you. In order to claim them (i.e., add them to your account), you must manually\nclaim them. To initiate a claim, you can do it yourself or have the validator that you staked for\ninitiate a claim. This is to help optimize the effectiveness and storage of payouts on Kusama. See\nthe ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#claiming-rewards"},"Claiming Rewards")," section of the Staking wiki page for\nmore details."),(0,i.kt)("h3",{id:"stop-nominating"},"Stop nominating"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000167902-how-can-i-unstake-my-tokens-again-"},"How to Stop Nominating & Unbond Tokens"),".\nSee also the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170241-polkadot-js-ui-how-to-rebond-tokens-during-the-unbonding-period"},"How to Rebond Tokens"),".")),(0,i.kt)("p",null,"At some point, you might decide to stop nominating one or more validators. You can always change who\nyou're nominating, but you cannot withdraw your tokens unless you unbond them."),(0,i.kt)("h2",{id:"claiming-rewards-with-polkadot-js"},"Claiming Rewards with Polkadot-JS"),(0,i.kt)("p",null,"Anyone can trigger a payout for any validator, as long as they are willing to pay the transaction\nfee. Someone must submit a transaction with a validator ID and an era index.\nPolkadot will automatically calculate that\nvalidator's reward, find the top\n",(0,i.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominators for that era, and distribute the rewards pro rata."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The Staking system only applies the highest\n",(0,i.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominations to each validator to reduce the complexity of the staking set.")),(0,i.kt)("p",null,"These details are handled for you automatically if you use the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/payout"},"Polkadot-JS UI"),", which also allows you to submit\nbatches of eras at once."),(0,i.kt)("p",null,'To claim rewards on Polkadot-JS UI, you will need to be in the "Payouts" tab underneath "Staking",\nwhich will list all the pending payouts for your stashes.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"pending-payouts",src:a(26416).Z,width:"2876",height:"600"})),(0,i.kt)("p",null,'To then claim your reward, select the "Payout all" button. This will prompt you to select your stash\naccounts for payout.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"select-payouts",src:a(32348).Z,width:"2192",height:"624"})),(0,i.kt)("p",null,"Once you are done with payout, another screen will appear asking for you to sign and submit the\ntransaction."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"transaction-payouts",src:a(41083).Z,width:"2878",height:"818"})),(0,i.kt)("h2",{id:"using-command-line-interface-cli"},"Using Command-Line Interface (CLI)"),(0,i.kt)("p",null,"Apart from using the Polkadot-JS UI to participate in the staking, you can do all these things in\nCLI instead. The CLI approach allows you to interact with the\nPolkadot network without using Polkadot-JS."),(0,i.kt)("h3",{id:"step-1-install-polkadotapi-cli"},"Step 1: Install @polkadot/api-cli"),(0,i.kt)("p",null,"We assume you have installed ",(0,i.kt)("a",{parentName:"p",href:"https://nodejs.org"},"NodeJS with npm"),". Run the following command to\ninstall the ",(0,i.kt)("inlineCode",{parentName:"p"},"@polkadot/api-cli")," globally:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npm install -g @polkadot/api-cli\n")),(0,i.kt)("h3",{id:"step-2-bond-tokens"},"Step 2: Bond Tokens"),(0,i.kt)("admonition",{title:"Controller accounts are deprecated",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Controller accounts are deprecated. For more information, see\n",(0,i.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/staking-controller-deprecation-plan-staking-ui-leads-comms/2748"},"this discussion"),".")),(0,i.kt)("p",null,"Executing the following command:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.bond CONTROLLER_ADDRESS NUMBER_OF_TOKENS REWARD_DESTINATION --ws WEBSOCKET_ENDPOINT\n')),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"CONTROLLER_ADDRESS"),": An address you would like to bond to the stash account. (Controller accounts\nare now deprecated. Refer to\n",(0,i.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/staking-controller-deprecation-plan-staking-ui-leads-comms/2748"},"this discussion"),"\nfor additional context)"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"NUMBER_OF_TOKENS"),": The number of DOT you would\nlike to stake to the network.\nDOT has ten decimal places and is always represented as an integer with zeroes at the end. So 1 DOT = 10_000_000_000 Plancks. For more information, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-DOT"},"this page"),"."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"REWARD_DESTINATION"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Staked")," - Pay into the stash account, increasing the amount at stake accordingly."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Stash")," - Pay into the stash account, not increasing the amount at stake."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Account")," - Pay into a custom account, like so:\n",(0,i.kt)("inlineCode",{parentName:"li"},"Account 1n8msHozaNxHicWFnRnNXzvqkYPWczkzUUkHhKw6o2BLBdo"),"","."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Controller")," - Pay into the controller account.")),(0,i.kt)("p",null,"Example for Kusama:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.bond DMTHrNcmA8QbqRS4rBq8LXn8ipyczFoNMb1X4cY2WD9tdBX 1000000000000 Staked --ws wss://kusama-rpc.polkadot.io\n')),(0,i.kt)("p",null,"For wss endpoints see ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-endpoints"},"this page"),"."),(0,i.kt)("p",null,"Result:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'...\n...\n "status": {\n "InBlock": "0x0ed1ec0ba69564e8f98958d69f826adef895b5617366a32a3aa384290e98514e"\n }\n')),(0,i.kt)("p",null,"You can check the transaction status by using the value of the ",(0,i.kt)("inlineCode",{parentName:"p"},"InBlock")," in\n",(0,i.kt)("a",{parentName:"p",href:"https://www.subscan.io/"},"Subscan"),". Also, you can verify the bonding state under the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Staking")," page on the Polkadot-JS UI."),(0,i.kt)("h3",{id:"step-3-nominate-a-validator"},"Step 3: Nominate a validator"),(0,i.kt)("p",null,"To nominate a validator, you can execute the following command:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.nominate \'["VALIDATOR_ADDRESS"]\' --ws WS_ENDPOINT\n')),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.nominate \'["CmD9vaMYoiKe7HiFnfkftwvhKbxN9bhyjcDrfFRGbifJEG8","E457XaKbj2yTB2URy8N4UuzmyuFRkcdxYs67UvSgVr7HyFb"]\' --ws wss://kusama-rpc.polkadot.io\n')),(0,i.kt)("p",null,"After a few seconds, you should see the hash of the transaction, and if you would like to verify the\nnomination status, you can check that on the Polkadot-JS UI as well."))}h.isMDXComponent=!0},86367:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/kusama_nominator_popup-633f75e8b404699f33b7d78f5ad7fd34.png"},47043:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/kusama_nominator_selection-8e7c4058648339294ebce2e1ce0c58e8.png"},42394:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/01-cc60f0cb7494041501c0ed80e5dca352.png"},41083:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_complete-87ad124d5d70e50c16f1434074562d70.png"},26416:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_page-fc4f62399f71b542e9eaac01405ef528.png"},32348:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_popup-feb847cdfae64f3fa247cdb2beea4ba6.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/804b1e9f.fc9d38a4.js b/assets/js/804b1e9f.fc9d38a4.js deleted file mode 100644 index 9cec72484b06..000000000000 --- a/assets/js/804b1e9f.fc9d38a4.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[230],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>c});var o=a(74165),n=a(15861),i=a(67294),s=a(87152),r=a(14741),l=a(67425);function p(t,e,a){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,o.Z)().mark((function t(e,a,n){var i,l,p,d,u;return(0,o.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:i=void 0,l=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){t.next=18;break}return t.abrupt("return");case 18:return p=new s.U(i),t.next=21,r.G.create({provider:p});case 21:d=t.sent,(u=a.split(".")).forEach((function(t){t in d&&(d=d[t])})),t.t1=u[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=d.toString(),t.abrupt("break",35);case 29:return t.next=31,d();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+u[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function u(t,e,a,o){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,o);break;case"precise":(0,l.Precise)(t,a,o);break;case"blocksToDays":(0,l.BlocksToDays)(t,o);break;case"erasToDays":(0,l.ErasToDays)(t,o,a);break;case"percentage":(0,l.Percentage)(t,o);break;case"permillToPercent":(0,l.PermillToPercent)(t,o);break;case"arrayLength":(0,l.ArrayLength)(t,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(t){var e=t.network,a=t.path,s=t.defaultValue,r=t.filter,l=void 0===r?void 0:r,d=(0,i.useState)(""),c=d[0],k=d[1];return e=e.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?u(s.toString(),l,e,k):k(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var t=(0,n.Z)((0,o.Z)().mark((function t(){var n;return(0,o.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,p(e,a,k);case 2:if(void 0!==(n=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?u(n,l,e,k):k(n);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{i()}catch(r){console.log(r)}}}),[]),c}},67425:t=>{var e="polkadot",a="kusama",o="statemine",n="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var l=void 0;if(s===e||s===n)l=3;else{if(s!==a&&s!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),r((t=Number.isInteger(t/i[s].precision)?t/i[s].precision+" "+i[s].symbol:(t/i[s].precision).toFixed(l)+" "+i[s].symbol).toString())},Precise:function(t,e,a){a(t=(t=parseFloat(t))/i[e].precision+" "+i[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,i,s){var r=void 0;if(s===e||s===n)r=1;else{if(s!==a&&s!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}i((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},46494:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>p,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-guides-nominator",title:"Polkadot-JS Guides For Nominators",sidebar_label:"Nominator Guides",description:"Polkadot-JS Guides for Nominators.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js"],slug:"../learn-guides-nominator"},p=void 0,d={unversionedId:"learn/learn-guides-nominator",id:"learn/learn-guides-nominator",title:"Polkadot-JS Guides For Nominators",description:"Polkadot-JS Guides for Nominators.",source:"@site/../docs/learn/learn-guides-nominator.md",sourceDirName:"learn",slug:"/learn-guides-nominator",permalink:"/docs/learn-guides-nominator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-nominator.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-nominator",title:"Polkadot-JS Guides For Nominators",sidebar_label:"Nominator Guides",description:"Polkadot-JS Guides for Nominators.",keyword:["nominate","stake","staking","claim","rewards","polkadot-js"],slug:"../learn-guides-nominator"},sidebar:"docs",previous:{title:"Staking Guides",permalink:"/docs/learn-guides-staking"},next:{title:"Nomination Pool Guides",permalink:"/docs/learn-guides-staking-pools"}},u={},c=[{value:"Nominate Using Polkadot-JS",id:"nominate-using-polkadot-js",level:2},{value:"Bond your tokens",id:"bond-your-tokens",level:3},{value:"Nominate a validator",id:"nominate-a-validator",level:3},{value:"Stop nominating",id:"stop-nominating",level:3},{value:"Claiming Rewards with Polkadot-JS",id:"claiming-rewards-with-polkadot-js",level:2},{value:"Using Command-Line Interface (CLI)",id:"using-command-line-interface-cli",level:2},{value:"Step 1: Install @polkadot/api-cli",id:"step-1-install-polkadotapi-cli",level:3},{value:"Step 2: Bond Tokens",id:"step-2-bond-tokens",level:3},{value:"Step 3: Nominate a validator",id:"step-3-nominate-a-validator",level:3}],k={toc:c},m="wrapper";function h(t){var e=t.components,l=(0,n.Z)(t,r);return(0,i.kt)(m,(0,o.Z)({},k,l,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,i.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,i.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,i.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"this page")," to learn about staking."),(0,i.kt)("h2",{id:"nominate-using-polkadot-js"},"Nominate Using Polkadot-JS"),(0,i.kt)("admonition",{title:"Video Tutorials",type:"info"},(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/FCXC0CDhyS4?t=219"},"How to Nominate/Stake")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/7VlTncHCGPc"},"Staking with a Ledger device and Polkadot-JS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=jL-N_IWiYVA"},"Staking with a Ledger device and Ledger Live")))),(0,i.kt)("h3",{id:"bond-your-tokens"},"Bond your tokens"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-polkadot-js-ui-how-do-i-stake-nominate-on-polkadot-"},"How to Bond Tokens and Nominate"),".")),(0,i.kt)("p",null,"On the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps"},"Polkadot-JS UI"),' navigate to the "Staking" tab (within the\n"Network" menu).'),(0,i.kt)("p",null,'The "Staking Overview" subsection will show you all the active validators and their information -\ntheir identities, the amount of KSM that are staking for them, amount that is their own provided\nstake, how much they charge in commission, the era points they\'ve earned in the current era, and the\nlast block number that they produced. If you click on the chart button it will take you to the\n"Validator Stats" page for that validator that shows you more detailed and historical information\nabout the validator\'s stake, rewards and slashes.'),(0,i.kt)("p",null,'The "Account actions" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"link"),") allows you\nto stake and nominate."),(0,i.kt)("p",null,'The "Payouts" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/payouts"},"link"),") allows you to\nclaim rewards from staking."),(0,i.kt)("p",null,'The "Targets" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"link"),") will help you\nestimate your earnings and this is where it's good to start picking favorites."),(0,i.kt)("p",null,'The "Waiting" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/waiting"},"link"),") lists all pending\nvalidators that are awaiting more nominations to enter the active validator set. Validators will\nstay in the waiting queue until they have enough KSM backing them (as allocated through the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n election mechanism"),"). It is possible validator can remain in the\nqueue for a very long time if they never get enough backing."),(0,i.kt)("p",null,'The "Validator Stats" subsection (',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/query"},"link"),") allows you\nto query a validator's stash address and see historical charts on era points, elected stake,\nrewards, and slashes."),(0,i.kt)("p",null,'Pick "Account actions" underneath "Network" > "Staking", then click the "+ Nominator" button.'),(0,i.kt)("p",null,"You will see a modal window that looks like the below:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"nominator-update-1",src:a(86367).Z,width:"2194",height:"1170"})),(0,i.kt)("p",null,'Select a "value bonded" that is ',(0,i.kt)("strong",{parentName:"p"},"less")," than the total amount of KSM you have, so you have some\nleft over to pay transaction fees. Transaction fees are currently at least 0.01 KSM, but they are\ndynamic based on a variety of factors including the load of recent blocks."),(0,i.kt)("p",null,"Also be mindful of the reaping threshold - the amount that must remain in an account lest it be\nburned. That amount is 0.01 in Kusama, so it's recommended to keep at least 0.1 KSM in your account\nto be on the safe side."),(0,i.kt)("p",null,"Choose whatever payment destination that makes sense to you. If you're unsure, you can choose \"Stash\naccount (increase amount at stake)\" to simply accrue the rewards into the amount you're staking and\nearn compound interest."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Payout account selection dropdown with the custom account option highlighted",src:a(42394).Z,width:"742",height:"245"})),(0,i.kt)("h3",{id:"nominate-a-validator"},"Nominate a validator"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000150130-how-do-i-know-which-validators-to-choose-"},"How to Select Validators"),".")),(0,i.kt)("p",null,"You are now bonded. Being bonded means your tokens are locked and could be\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#slashing"},"slashed")," if the validators you nominate misbehave. All bonded funds\ncan now be distributed to up to 16 validators. Be\ncareful about the validators you choose since you will be slashed if your validator commits an\noffence."),(0,i.kt)("p",null,'Click on "Nominate" on an account you\'ve bonded and you will be presented with another popup asking\nyou to select some validators.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominating validators",src:a(47043).Z,width:"2208",height:"982"})),(0,i.kt)("p",null,"Select them, confirm the transaction, and you're done - you are now nominating. Your nominations\nwill become active in the next era. Eras last six hours on Kusama - depending on when you do this,\nyour nominations may become active almost immediately, or you may have to wait almost the entire six\nhours before your nominations are active. You can check how far along Kusama is in the current era\non the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"Staking page"),"."),(0,i.kt)("p",null,"Assuming at least one of your nominations ends up in the active validator set, you will start to get\nrewards allocated to you. In order to claim them (i.e., add them to your account), you must manually\nclaim them. To initiate a claim, you can do it yourself or have the validator that you staked for\ninitiate a claim. This is to help optimize the effectiveness and storage of payouts on Kusama. See\nthe ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking#claiming-rewards"},"Claiming Rewards")," section of the Staking wiki page for\nmore details."),(0,i.kt)("h3",{id:"stop-nominating"},"Stop nominating"),(0,i.kt)("admonition",{title:"Support Article",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Read the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000167902-how-can-i-unstake-my-tokens-again-"},"How to Stop Nominating & Unbond Tokens"),".\nSee also the support article about\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170241-polkadot-js-ui-how-to-rebond-tokens-during-the-unbonding-period"},"How to Rebond Tokens"),".")),(0,i.kt)("p",null,"At some point, you might decide to stop nominating one or more validators. You can always change who\nyou're nominating, but you cannot withdraw your tokens unless you unbond them."),(0,i.kt)("h2",{id:"claiming-rewards-with-polkadot-js"},"Claiming Rewards with Polkadot-JS"),(0,i.kt)("p",null,"Anyone can trigger a payout for any validator, as long as they are willing to pay the transaction\nfee. Someone must submit a transaction with a validator ID and an era index.\nPolkadot will automatically calculate that\nvalidator's reward, find the top\n",(0,i.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominators for that era, and distribute the rewards pro rata."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The Staking system only applies the highest\n",(0,i.kt)(s.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"\n","\nnominations to each validator to reduce the complexity of the staking set.")),(0,i.kt)("p",null,"These details are handled for you automatically if you use the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/payout"},"Polkadot-JS UI"),", which also allows you to submit\nbatches of eras at once."),(0,i.kt)("p",null,'To claim rewards on Polkadot-JS UI, you will need to be in the "Payouts" tab underneath "Staking",\nwhich will list all the pending payouts for your stashes.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"pending-payouts",src:a(26416).Z,width:"2876",height:"600"})),(0,i.kt)("p",null,'To then claim your reward, select the "Payout all" button. This will prompt you to select your stash\naccounts for payout.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"select-payouts",src:a(32348).Z,width:"2192",height:"624"})),(0,i.kt)("p",null,"Once you are done with payout, another screen will appear asking for you to sign and submit the\ntransaction."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"transaction-payouts",src:a(41083).Z,width:"2878",height:"818"})),(0,i.kt)("h2",{id:"using-command-line-interface-cli"},"Using Command-Line Interface (CLI)"),(0,i.kt)("p",null,"Apart from using the Polkadot-JS UI to participate in the staking, you can do all these things in\nCLI instead. The CLI approach allows you to interact with the\nPolkadot network without using Polkadot-JS."),(0,i.kt)("h3",{id:"step-1-install-polkadotapi-cli"},"Step 1: Install @polkadot/api-cli"),(0,i.kt)("p",null,"We assume you have installed ",(0,i.kt)("a",{parentName:"p",href:"https://nodejs.org"},"NodeJS with npm"),". Run the following command to\ninstall the ",(0,i.kt)("inlineCode",{parentName:"p"},"@polkadot/api-cli")," globally:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npm install -g @polkadot/api-cli\n")),(0,i.kt)("h3",{id:"step-2-bond-tokens"},"Step 2: Bond Tokens"),(0,i.kt)("admonition",{title:"Controller accounts are deprecated",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Controller accounts are deprecated. For more information, see\n",(0,i.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/staking-controller-deprecation-plan-staking-ui-leads-comms/2748"},"this discussion"),".")),(0,i.kt)("p",null,"Executing the following command:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.bond CONTROLLER_ADDRESS NUMBER_OF_TOKENS REWARD_DESTINATION --ws WEBSOCKET_ENDPOINT\n')),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"CONTROLLER_ADDRESS"),": An address you would like to bond to the stash account. (Controller accounts\nare now deprecated. Refer to\n",(0,i.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/staking-controller-deprecation-plan-staking-ui-leads-comms/2748"},"this discussion"),"\nfor additional context)"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"NUMBER_OF_TOKENS"),": The number of DOT you would\nlike to stake to the network.\nDOT has ten decimal places and is always represented as an integer with zeroes at the end. So 1 DOT = 10_000_000_000 Plancks. For more information, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-DOT"},"this page"),"."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"REWARD_DESTINATION"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Staked")," - Pay into the stash account, increasing the amount at stake accordingly."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Stash")," - Pay into the stash account, not increasing the amount at stake."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Account")," - Pay into a custom account, like so:\n",(0,i.kt)("inlineCode",{parentName:"li"},"Account 1n8msHozaNxHicWFnRnNXzvqkYPWczkzUUkHhKw6o2BLBdo"),"","."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Controller")," - Pay into the controller account.")),(0,i.kt)("p",null,"Example for Kusama:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.bond DMTHrNcmA8QbqRS4rBq8LXn8ipyczFoNMb1X4cY2WD9tdBX 1000000000000 Staked --ws wss://kusama-rpc.polkadot.io\n')),(0,i.kt)("p",null,"For wss endpoints see ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-endpoints"},"this page"),"."),(0,i.kt)("p",null,"Result:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'...\n...\n "status": {\n "InBlock": "0x0ed1ec0ba69564e8f98958d69f826adef895b5617366a32a3aa384290e98514e"\n }\n')),(0,i.kt)("p",null,"You can check the transaction status by using the value of the ",(0,i.kt)("inlineCode",{parentName:"p"},"InBlock")," in\n",(0,i.kt)("a",{parentName:"p",href:"https://www.subscan.io/"},"Subscan"),". Also, you can verify the bonding state under the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Staking")," page on the Polkadot-JS UI."),(0,i.kt)("h3",{id:"step-3-nominate-a-validator"},"Step 3: Nominate a validator"),(0,i.kt)("p",null,"To nominate a validator, you can execute the following command:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.nominate \'["VALIDATOR_ADDRESS"]\' --ws WS_ENDPOINT\n')),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.nominate \'["CmD9vaMYoiKe7HiFnfkftwvhKbxN9bhyjcDrfFRGbifJEG8","E457XaKbj2yTB2URy8N4UuzmyuFRkcdxYs67UvSgVr7HyFb"]\' --ws wss://kusama-rpc.polkadot.io\n')),(0,i.kt)("p",null,"After a few seconds, you should see the hash of the transaction, and if you would like to verify the\nnomination status, you can check that on the Polkadot-JS UI as well."))}h.isMDXComponent=!0},86367:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/kusama_nominator_popup-633f75e8b404699f33b7d78f5ad7fd34.png"},47043:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/kusama_nominator_selection-8e7c4058648339294ebce2e1ce0c58e8.png"},42394:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/01-cc60f0cb7494041501c0ed80e5dca352.png"},41083:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_complete-87ad124d5d70e50c16f1434074562d70.png"},26416:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_page-fc4f62399f71b542e9eaac01405ef528.png"},32348:(t,e,a)=>{"use strict";a.d(e,{Z:()=>o});const o=a.p+"assets/images/polkadotjs_payout_popup-feb847cdfae64f3fa247cdb2beea4ba6.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/84ede15a.4f745ebe.js b/assets/js/84ede15a.4f745ebe.js deleted file mode 100644 index b8dfdc164b0b..000000000000 --- a/assets/js/84ede15a.4f745ebe.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[4338],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),o=a(15861),r=a(67294),i=a(87152),s=a(14741),l=a(67425);function u(e,t,a){return c.apply(this,arguments)}function c(){return(c=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var r,l,u,c,d;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return u=new i.U(r),e.next=21,s.G.create({provider:u});case 21:c=e.sent,(d=a.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,a,n){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,n);break;case"precise":(0,l.Precise)(e,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(e,n);break;case"erasToDays":(0,l.ErasToDays)(e,n,a);break;case"percentage":(0,l.Percentage)(e,n);break;case"permillToPercent":(0,l.PermillToPercent)(e,n);break;case"arrayLength":(0,l.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,c=(0,r.useState)(""),p=c[0],h=c[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(i.toString(),l,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,n.Z)().mark((function e(){var o;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,a,h);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,h):h(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===o)l=3;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(l)+" "+r[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},52991:(e,t,a)=>{"use strict";a.d(t,{Z:()=>m});var n=a(67294),o=a(86010),r=a(53438),i=a(39960),s=a(13919),l=a(95999);const u={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function c(e){var t=e.href,a=e.children;return n.createElement(i.Z,{href:t,className:(0,o.Z)("card padding--lg",u.cardContainer)},a)}function d(e){var t=e.href,a=e.icon,r=e.title,i=e.description;return n.createElement(c,{href:t},n.createElement("h2",{className:(0,o.Z)("text--truncate",u.cardTitle),title:r},a," ",r),i&&n.createElement("p",{className:(0,o.Z)("text--truncate",u.cardDescription),title:i},i))}function p(e){var t,a=e.item,o=(0,r.Wl)(a);return o?n.createElement(d,{href:o,icon:"\ud83d\uddc3\ufe0f",title:a.label,description:null!=(t=a.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:a.items.length})}):null}function h(e){var t,a,o=e.item,i=(0,s.Z)(o.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,r.xz)(null!=(t=o.docId)?t:void 0);return n.createElement(d,{href:o.href,icon:i,title:o.label,description:null!=(a=o.description)?a:null==l?void 0:l.description})}function k(e){var t=e.item;switch(t.type){case"link":return n.createElement(h,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function f(e){var t=e.className,a=(0,r.jA)();return n.createElement(m,{items:a.items,className:t})}function m(e){var t=e.items,a=e.className;if(!t)return n.createElement(f,e);var i=(0,r.MN)(t);return n.createElement("section",{className:(0,o.Z)("row",a)},i.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(k,{item:e}))})))}},85162:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});var n=a(67294),o=a(86010);const r={tabItem:"tabItem_Ymn6"};function i(e){var t=e.children,a=e.hidden,i=e.className;return n.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:a},t)}},74866:(e,t,a)=>{"use strict";a.d(t,{Z:()=>y});var n=a(87462),o=a(67294),r=a(86010),i=a(12466),s=a(16550),l=a(91980),u=a(67392),c=a(50012);function d(e){return function(e){var t,a;return null!=(t=null==(a=o.Children.map(e,(function(e){if(!e||(0,o.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,a=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:d(a);return function(e){var t=(0,u.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function h(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function k(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId,r=(0,s.k6)(),i=function(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:a,groupId:n});return[(0,l._X)(i),(0,o.useCallback)((function(e){if(i){var t=new URLSearchParams(r.location.search);t.set(i,e),r.replace(Object.assign({},r.location,{search:t.toString()}))}}),[i,r])]}function f(e){var t,a,n,r,i=e.defaultValue,s=e.queryString,l=void 0!==s&&s,u=e.groupId,d=p(e),f=(0,o.useState)((function(){return function(e){var t,a=e.defaultValue,n=e.tabValues;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!h({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}var o=null!=(t=n.find((function(e){return e.default})))?t:n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:i,tabValues:d})})),m=f[0],g=f[1],v=k({queryString:l,groupId:u}),b=v[0],w=v[1],y=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),a=(0,c.Nk)(t),n=a[0],r=a[1],[n,(0,o.useCallback)((function(e){t&&r.set(e)}),[t,r])]),N=y[0],x=y[1],T=function(){var e=null!=b?b:N;return h({value:e,tabValues:d})?e:null}();return(0,o.useLayoutEffect)((function(){T&&g(T)}),[T]),{selectedValue:m,selectValue:(0,o.useCallback)((function(e){if(!h({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);g(e),w(e),x(e)}),[w,x,d]),tabValues:d}}var m=a(72389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function v(e){var t=e.className,a=e.block,s=e.selectedValue,l=e.selectValue,u=e.tabValues,c=[],d=(0,i.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==s&&(d(t),l(n))},h=function(e){var t,a=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var n,o=c.indexOf(e.currentTarget)+1;a=null!=(n=c[o])?n:c[0];break;case"ArrowLeft":var r,i=c.indexOf(e.currentTarget)-1;a=null!=(r=c[i])?r:c[c.length-1]}null==(t=a)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t)},u.map((function(e){var t=e.value,a=e.label,i=e.attributes;return o.createElement("li",(0,n.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:function(e){return c.push(e)},onKeyDown:h,onClick:p},i,{className:(0,r.Z)("tabs__item",g.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===t})}),null!=a?a:t)})))}function b(e){var t=e.lazy,a=e.children,n=e.selectedValue,r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){var i=r.find((function(e){return e.props.value===n}));return i?(0,o.cloneElement)(i,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})})))}function w(e){var t=f(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",g.tabList)},o.createElement(v,(0,n.Z)({},e,t)),o.createElement(b,(0,n.Z)({},e,t)))}function y(e){var t=(0,m.Z)();return o.createElement(w,(0,n.Z)({key:String(t)},e))}},6555:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),i=a(47940),s=(a(74866),a(85162),a(52991),["components"]),l={id:"learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",sidebar_label:"Transfer Guides",description:"Polkadot-JS Guides about Balances Transfers.",keywords:["gides","advanced","polkadot-js","transfers"],slug:"../learn-guides-transfers"},u=void 0,c={unversionedId:"learn/learn-guides-transfers",id:"learn/learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",description:"Polkadot-JS Guides about Balances Transfers.",source:"@site/../docs/learn/learn-guides-transfers.md",sourceDirName:"learn",slug:"/learn-guides-transfers",permalink:"/docs/learn-guides-transfers",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-transfers.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",sidebar_label:"Transfer Guides",description:"Polkadot-JS Guides about Balances Transfers.",keywords:["gides","advanced","polkadot-js","transfers"],slug:"../learn-guides-transfers"},sidebar:"docs",previous:{title:"Pure Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy-pure"},next:{title:"Staking Guides",permalink:"/docs/learn-guides-staking"}},d={},p=[{value:"Metadata Updates with the Polkadot-JS Browser Extension",id:"metadata-updates-with-the-polkadot-js-browser-extension",level:2},{value:"Transfers using the Polkadot-JS UI and Browser Extension",id:"transfers-using-the-polkadot-js-ui-and-browser-extension",level:2},{value:"Verify Extrinsics with the Polkadot-JS Browser Extension",id:"verify-extrinsics-with-the-polkadot-js-browser-extension",level:3},{value:"Verify Extrinsics with the Polkadot-JS UI",id:"verify-extrinsics-with-the-polkadot-js-ui",level:3},{value:"Keep-Alive Checks with the Polkadot-JS UI",id:"keep-alive-checks-with-the-polkadot-js-ui",level:3},{value:"Vested Transfers with the Polkadot-JS UI",id:"vested-transfers-with-the-polkadot-js-ui",level:3},{value:"Lazy Vesting",id:"lazy-vesting",level:4},{value:"Calculating When Vesting DOT Will Be Available",id:"calculating-when-vesting-dot-will-be-available",level:4},{value:"Batch Transfers with the Polkadot-JS UI",id:"batch-transfers-with-the-polkadot-js-ui",level:3},{value:"Teleporting Tokens using the Polkadot-JS UI",id:"teleporting-tokens-using-the-polkadot-js-ui",level:3},{value:"Calculating Fees with Polkadot-JS",id:"calculating-fees-with-polkadot-js",level:2},{value:"Existing Reference Error",id:"existing-reference-error",level:2},{value:"Bonded Tokens",id:"bonded-tokens",level:3},{value:"Checking for Locks",id:"checking-for-locks",level:3},{value:"Purging Session Keys",id:"purging-session-keys",level:3},{value:"Existing Recovery Info",id:"existing-recovery-info",level:3},{value:"Existing Non-Native Assets",id:"existing-non-native-assets",level:3}],h={toc:p},k="wrapper";function f(e){var t=e.components,l=(0,o.Z)(e,s);return(0,r.kt)(k,(0,n.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("h2",{id:"metadata-updates-with-the-polkadot-js-browser-extension"},"Metadata Updates with the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"Before signing extrinsics with the Polkadot-JS Browser Extension, always check for metadata updates.\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=84"},(0,r.kt)("strong",{parentName:"a"},"This video tutorial"))," will explain how to do it."),(0,r.kt)("admonition",{title:"Polkadot Vault vs Polkadot-JS Browser Extension",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot Vault app updates the full metadata through the QR fountain while the extension updates\nthe metadata index (the metadata is not loaded into it). As a consequence the process of updating\nmetadata is different in this two cases (you will notice that on the Vault app the update takes\nlonger for example). Having outdated metadata on the Vault app will prevent you from signing, while\non the extension you will be able to click the sign button but the extrinsic will likely fail\n(similarly of having an outdated Ledger app). In general, failing to update metadata will most\nlikely result in you not being able to sign extrinsics.")),(0,r.kt)("h2",{id:"transfers-using-the-polkadot-js-ui-and-browser-extension"},"Transfers using the Polkadot-JS UI and Browser Extension"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=gbvrHzr4EDY"},"this video tutorial")," to learn how to send funds\nusing the Polkadot-JS UI and Browser Extension. See also the Polkadot Support pages for detailed\ninformation about signing transactions using\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181993-how-to-sign-a-transaction-directly-on-polkadot-js-ui"},"the Polkadot-JS UI"),"\nand\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181989"},"the Polkadot-JS browser extension"),"."),(0,r.kt)("h3",{id:"verify-extrinsics-with-the-polkadot-js-browser-extension"},"Verify Extrinsics with the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"Visit the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-in-the-Polkadot-extension"},(0,r.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=261"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions."),(0,r.kt)("h3",{id:"verify-extrinsics-with-the-polkadot-js-ui"},"Verify Extrinsics with the Polkadot-JS UI"),(0,r.kt)("p",null,"Visit the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-in-the-Polkadot-JS-UI"},(0,r.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=163"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions."),(0,r.kt)("h3",{id:"keep-alive-checks-with-the-polkadot-js-ui"},"Keep-Alive Checks with the Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/mgPHVztHJWk"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn about keep-alive checks and existential deposit.")),(0,r.kt)("p",null,"In Polkadot there are two main ways to\ntransfer funds from one account to another:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"transfer keep-alive")," (default option) will not allow you to send an amount that would allow the\nsending account to be removed due to it going below the\n",(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-"},"existential deposit"),"\nof\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),".\n",""),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"transfer allow-death")," will allow you to send\nDOT regardless of the consequence. If the\nbalance drops below the existential deposit your account will be reaped. It may be that you do not\nwant to keep the account alive (for example, because you are moving all of your funds to a\ndifferent address). To switch the keep-alive check off visit\n",(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000169248"},"this support article"),".")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Attempting to send less than the existential deposit to an account with\n0 DOT will always fail, no matter if the\nkeep-alive check is on or not. For instance, attempting to transfer\n0.1 DOT to an account you just generated\n(and thus has no balance) will fail, since\n0.1 DOT is less than the existential\ndeposit of\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand the account cannot be initialized with such a low balance."),(0,r.kt)("p",{parentName:"admonition"},"Even if the transfer fails due to a keep-alive check, the transaction fee will be deducted from the\nsending account if you attempt to transfer.")),(0,r.kt)("h3",{id:"vested-transfers-with-the-polkadot-js-ui"},"Vested Transfers with the Polkadot-JS UI"),(0,r.kt)("p",null,"You can watch ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/JVlwTQBwNGc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to understand how to do vested\ntransfers using the Polkadot-JS UI, including linear and cliff vesting. Note the tutorial uses the\nWestend Testnet, but the same applies to\nPolkadot."),(0,r.kt)("p",null,"There are two ways that vesting schedules can be created."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"One way is through an extrinsic type available in the Vesting pallet, ",(0,r.kt)("inlineCode",{parentName:"li"},"vested_transfer"),". The\nvested transfer function allows anyone to create a vesting schedule with a transfer of funds, as\nlong as the account for which the vesting schedule will be created does not already have one and\nthe transfer moves at least ",(0,r.kt)("inlineCode",{parentName:"li"},"MinVestedTransfer")," funds, which is specified as a chain constant."),(0,r.kt)("li",{parentName:"ul"},"A second way is as part of the genesis configuration of the chain. In the case of\nPolkadot, the chain specification genesis\nscript reads the state of the Claims contract that exists on the Ethereum blockchain and creates\nvesting schedules in genesis for all the allocations registered as being vested.")),(0,r.kt)("p",null,"Vesting schedules have three parameters:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"locked"),", the amount of tokens to be transferred in\n",(0,r.kt)("a",{parentName:"li",href:"../learn/learn-DOT#the-planck-unit"},"Planck units"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"per block"),", the number of tokens that are released per block"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"starting block"),", the block number after which the vesting schedule starts")),(0,r.kt)("p",null,"The configuration of these three fields dictates the amount of funds that are originally locked, the\nslope of the unlock line and the block number for when the unlocking begins."),(0,r.kt)("h4",{id:"lazy-vesting"},"Lazy Vesting"),(0,r.kt)("p",null,"Like ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"simple payouts"),", vesting is ",(0,r.kt)("em",{parentName:"p"},"lazy"),", which means that someone must\nexplicitly call an extrinsic to update the lock that is placed on an account."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("inlineCode",{parentName:"li"},"vest")," extrinsic will update the lock that is placed on the caller."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("inlineCode",{parentName:"li"},"vest_other"),' will update the lock that is placed on another "target" account\'s funds.')),(0,r.kt)("p",null,"These extrinsics are exposed from the Vesting pallet."),(0,r.kt)("p",null,"If you are using the Polkadot-JS UI, when there are\nDOT available to vest for an account, then you\nwill have the ability to unlock DOT which has\nalready vested from the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Accounts")," page."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"unbond",src:a(27152).Z,width:"241",height:"301"})),(0,r.kt)("h4",{id:"calculating-when-vesting-dot-will-be-available"},"Calculating When Vesting DOT Will Be Available"),(0,r.kt)("p",null,"Generally, you should be able to see from the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Accounts"),' by\nlooking at your accounts and seeing when the vesting will finish. However, some DOT vest with\n"cliffs" - a single block where all the DOT are released, instead of vesting over time. In this\ncase, you will have to query the chain state directly to see when they will be available (since\ntechnically, the vesting has not yet started - all of the vesting will occur in a single block in\nthe future).'),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Navigate to the\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/chainstate"},"Chain State")," page on\nPolkadot-JS."),(0,r.kt)("li",{parentName:"ol"},"Query chain state for ",(0,r.kt)("inlineCode",{parentName:"li"},"vesting.vesting(ACCOUNT_ID)")),(0,r.kt)("li",{parentName:"ol"},"Note the ",(0,r.kt)("inlineCode",{parentName:"li"},"startingBlock")," where the unlock starts, and how much DOT is unlocked per block\n(",(0,r.kt)("inlineCode",{parentName:"li"},"perBlock"),")."),(0,r.kt)("li",{parentName:"ol"},'You will have to calculate the result into \u201chuman time". To do this, remember that there are\napproximately 14\u2019400 blocks per day, and you can see what the latest block is shown on the\n',(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/explorer"},"Explorer")," page.")),(0,r.kt)("h3",{id:"batch-transfers-with-the-polkadot-js-ui"},"Batch Transfers with the Polkadot-JS UI"),(0,r.kt)("p",null,"Batch transfers are balances transfers to multiple accounts executed by one account. In order to\nconstruct a batch transfer you need to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Create a ",(0,r.kt)("inlineCode",{parentName:"li"},"utility.batch(calls)")," extrinsic using the\n",(0,r.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_utility/index.html"},"utility pallet"),", and"),(0,r.kt)("li",{parentName:"ul"},"Within the batch call you can create multiple ",(0,r.kt)("inlineCode",{parentName:"li"},"balances.transferKeepAlive")," extrinsics using the\n",(0,r.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_balances/index.html"},"balances pallet"),". You\ncan specify as many receivers as you desire.")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can watch ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/uoUC2K8muvw"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to do batch\ntransfers. Note the tutorial uses the Westend Testnet, but the same applies to both Polkadot and\nKusama.")),(0,r.kt)("h3",{id:"teleporting-tokens-using-the-polkadot-js-ui"},"Teleporting Tokens using the Polkadot-JS UI"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/3tE9ouub5Tg"},"this video tutorial")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181119-how-to-teleport-dot-or-ksm-between-statemint-or-statemine"},"this additional support article"),"\nto learn more about how to teleport tokens."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},'If you do not see "Accounts > Teleport" in the Polkadot-JS UI, the source chain that you have\nselected does not support teleportation yet.')),(0,r.kt)("h2",{id:"calculating-fees-with-polkadot-js"},"Calculating Fees with Polkadot-JS"),(0,r.kt)("p",null,"One useful utility for estimating transaction fees programmatically is the via the\n",(0,r.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@polkadot/api"},"@polkadot/api"),". Check out the following script that\nlogs some relevant fee information:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},"// Estimate the fees as RuntimeDispatchInfo using the signer\nconst info = await api.tx.balances.transfer(recipient, 123).paymentInfo(sender);\n\n// Log relevant info, partialFee is Balance, estimated for current\nconsole.log(`\n class=${info.class.toString()},\n weight=${info.weight.toString()},\n partialFee=${info.partialFee.toHuman()}\n`);\n")),(0,r.kt)("p",null,"For additional information on interacting with the API, checkout\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs"},"Polkadot-JS"),"."),(0,r.kt)("h2",{id:"existing-reference-error"},"Existing Reference Error"),(0,r.kt)("p",null,"If you are trying to reap an account and you receive an error similar to\n",(0,r.kt)("inlineCode",{parentName:"p"},'"There is an existing reference count on the sender account. As such the account cannot be reaped from the state"'),",\nthen you have existing references to this account that must be first removed before it can be\nreaped. References may still exist from:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bonded tokens (most likely)"),(0,r.kt)("li",{parentName:"ul"},"Unpurged session keys (if you were previously a validator)"),(0,r.kt)("li",{parentName:"ul"},"Token locks"),(0,r.kt)("li",{parentName:"ul"},"Existing recovery info"),(0,r.kt)("li",{parentName:"ul"},"Existing assets")),(0,r.kt)("h3",{id:"bonded-tokens"},"Bonded Tokens"),(0,r.kt)("p",null,"If you have tokens that are bonded, you will need to unbond them before you can reap your account.\nFollow the instructions at ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#bond-your-tokens"},"Unbonding and Rebonding"),"\nto check if you have bonded tokens, stop nominating (if necessary) and unbond your tokens."),(0,r.kt)("h3",{id:"checking-for-locks"},"Checking for Locks"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/LHgY7ds_bZ0"},"this video tutorial")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169437-why-can-t-i-transfer-tokens-"},"this support page"),"\nto learn how to check for locks and remove them.")),(0,r.kt)("p",null,"You can also check for locks by querying ",(0,r.kt)("inlineCode",{parentName:"p"},"system.account(AccountId)")," in\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},(0,r.kt)("inlineCode",{parentName:"a"},"Chain state")," tab under the ",(0,r.kt)("inlineCode",{parentName:"a"},"Developer")," drop-down menu in the Polkadot-JS UI"),'.\nSelect your account, then click the "+" button next to the dropdowns, and check the relative ',(0,r.kt)("inlineCode",{parentName:"p"},"data"),"\nJSON object. If you see a non-zero value for anything other than ",(0,r.kt)("inlineCode",{parentName:"p"},"free"),", you have locks on your\naccount that need to get resolved."),(0,r.kt)("h3",{id:"purging-session-keys"},"Purging Session Keys"),(0,r.kt)("p",null,"If you used this account to set up a validator and you did not purge your keys before unbonding your\ntokens, you need to purge your keys. You can do this by seeing the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-stop-validating"},"How to Stop Validating")," page. This can also\nbe checked by checking ",(0,r.kt)("inlineCode",{parentName:"p"},"session.nextKeys")," in the chain state for an existing key."),(0,r.kt)("h3",{id:"existing-recovery-info"},"Existing Recovery Info"),(0,r.kt)("p",null,"Currently, Polkadot does not use the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/master/frame/recovery/"},"Recovery Pallet"),", so this is\nprobably not the reason for your tokens having existing references."),(0,r.kt)("p",null,"","","",""),(0,r.kt)("h3",{id:"existing-non-native-assets"},"Existing Non-Native Assets"),(0,r.kt)("p",null,"Currently, Polkadot does not use the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/tree/master/frame/assets"},"Assets Pallet"),", so this is\nprobably not the reason for your tokens having existing references."))}f.isMDXComponent=!0},27152:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/unlock-vesting-deefc0d6d9a08a91af1490a82e01069b.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/84ede15a.f1d7baef.js b/assets/js/84ede15a.f1d7baef.js new file mode 100644 index 000000000000..8cb5ac20cd5f --- /dev/null +++ b/assets/js/84ede15a.f1d7baef.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[4338],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),o=a(15861),r=a(67294),i=a(87152),s=a(14741),l=a(67425);function u(e,t,a){return c.apply(this,arguments)}function c(){return(c=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var r,l,u,c,d;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return u=new i.U(r),e.next=21,s.G.create({provider:u});case 21:c=e.sent,(d=a.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,a,n){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,n);break;case"precise":(0,l.Precise)(e,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(e,n);break;case"erasToDays":(0,l.ErasToDays)(e,n,a);break;case"percentage":(0,l.Percentage)(e,n);break;case"permillToPercent":(0,l.PermillToPercent)(e,n);break;case"arrayLength":(0,l.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,c=(0,r.useState)(""),p=c[0],h=c[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(i.toString(),l,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,n.Z)().mark((function e(){var o;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,a,h);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,h):h(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===o)l=3;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(l)+" "+r[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},52991:(e,t,a)=>{"use strict";a.d(t,{Z:()=>m});var n=a(67294),o=a(86010),r=a(53438),i=a(39960),s=a(13919),l=a(95999);const u={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function c(e){var t=e.href,a=e.children;return n.createElement(i.Z,{href:t,className:(0,o.Z)("card padding--lg",u.cardContainer)},a)}function d(e){var t=e.href,a=e.icon,r=e.title,i=e.description;return n.createElement(c,{href:t},n.createElement("h2",{className:(0,o.Z)("text--truncate",u.cardTitle),title:r},a," ",r),i&&n.createElement("p",{className:(0,o.Z)("text--truncate",u.cardDescription),title:i},i))}function p(e){var t,a=e.item,o=(0,r.Wl)(a);return o?n.createElement(d,{href:o,icon:"\ud83d\uddc3\ufe0f",title:a.label,description:null!=(t=a.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:a.items.length})}):null}function h(e){var t,a,o=e.item,i=(0,s.Z)(o.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,r.xz)(null!=(t=o.docId)?t:void 0);return n.createElement(d,{href:o.href,icon:i,title:o.label,description:null!=(a=o.description)?a:null==l?void 0:l.description})}function k(e){var t=e.item;switch(t.type){case"link":return n.createElement(h,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function f(e){var t=e.className,a=(0,r.jA)();return n.createElement(m,{items:a.items,className:t})}function m(e){var t=e.items,a=e.className;if(!t)return n.createElement(f,e);var i=(0,r.MN)(t);return n.createElement("section",{className:(0,o.Z)("row",a)},i.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(k,{item:e}))})))}},85162:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});var n=a(67294),o=a(86010);const r={tabItem:"tabItem_Ymn6"};function i(e){var t=e.children,a=e.hidden,i=e.className;return n.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:a},t)}},74866:(e,t,a)=>{"use strict";a.d(t,{Z:()=>y});var n=a(87462),o=a(67294),r=a(86010),i=a(12466),s=a(16550),l=a(91980),u=a(67392),c=a(50012);function d(e){return function(e){var t,a;return null!=(t=null==(a=o.Children.map(e,(function(e){if(!e||(0,o.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,a=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:d(a);return function(e){var t=(0,u.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function h(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function k(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId,r=(0,s.k6)(),i=function(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:a,groupId:n});return[(0,l._X)(i),(0,o.useCallback)((function(e){if(i){var t=new URLSearchParams(r.location.search);t.set(i,e),r.replace(Object.assign({},r.location,{search:t.toString()}))}}),[i,r])]}function f(e){var t,a,n,r,i=e.defaultValue,s=e.queryString,l=void 0!==s&&s,u=e.groupId,d=p(e),f=(0,o.useState)((function(){return function(e){var t,a=e.defaultValue,n=e.tabValues;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!h({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}var o=null!=(t=n.find((function(e){return e.default})))?t:n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:i,tabValues:d})})),m=f[0],g=f[1],v=k({queryString:l,groupId:u}),b=v[0],w=v[1],y=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),a=(0,c.Nk)(t),n=a[0],r=a[1],[n,(0,o.useCallback)((function(e){t&&r.set(e)}),[t,r])]),N=y[0],x=y[1],T=function(){var e=null!=b?b:N;return h({value:e,tabValues:d})?e:null}();return(0,o.useLayoutEffect)((function(){T&&g(T)}),[T]),{selectedValue:m,selectValue:(0,o.useCallback)((function(e){if(!h({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);g(e),w(e),x(e)}),[w,x,d]),tabValues:d}}var m=a(72389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function v(e){var t=e.className,a=e.block,s=e.selectedValue,l=e.selectValue,u=e.tabValues,c=[],d=(0,i.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==s&&(d(t),l(n))},h=function(e){var t,a=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var n,o=c.indexOf(e.currentTarget)+1;a=null!=(n=c[o])?n:c[0];break;case"ArrowLeft":var r,i=c.indexOf(e.currentTarget)-1;a=null!=(r=c[i])?r:c[c.length-1]}null==(t=a)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t)},u.map((function(e){var t=e.value,a=e.label,i=e.attributes;return o.createElement("li",(0,n.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:function(e){return c.push(e)},onKeyDown:h,onClick:p},i,{className:(0,r.Z)("tabs__item",g.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===t})}),null!=a?a:t)})))}function b(e){var t=e.lazy,a=e.children,n=e.selectedValue,r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){var i=r.find((function(e){return e.props.value===n}));return i?(0,o.cloneElement)(i,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})})))}function w(e){var t=f(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",g.tabList)},o.createElement(v,(0,n.Z)({},e,t)),o.createElement(b,(0,n.Z)({},e,t)))}function y(e){var t=(0,m.Z)();return o.createElement(w,(0,n.Z)({key:String(t)},e))}},6555:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),i=a(47940),s=(a(74866),a(85162),a(52991),["components"]),l={id:"learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",sidebar_label:"Transfer Guides",description:"Polkadot-JS Guides about Balances Transfers.",keywords:["gides","advanced","polkadot-js","transfers"],slug:"../learn-guides-transfers"},u=void 0,c={unversionedId:"learn/learn-guides-transfers",id:"learn/learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",description:"Polkadot-JS Guides about Balances Transfers.",source:"@site/../docs/learn/learn-guides-transfers.md",sourceDirName:"learn",slug:"/learn-guides-transfers",permalink:"/docs/learn-guides-transfers",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-transfers.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-transfers",title:"Polkadot-JS Guides about Transfers",sidebar_label:"Transfer Guides",description:"Polkadot-JS Guides about Balances Transfers.",keywords:["gides","advanced","polkadot-js","transfers"],slug:"../learn-guides-transfers"},sidebar:"docs",previous:{title:"Pure Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy-pure"},next:{title:"Staking Guides",permalink:"/docs/learn-guides-staking"}},d={},p=[{value:"Metadata Updates with the Polkadot-JS Browser Extension",id:"metadata-updates-with-the-polkadot-js-browser-extension",level:2},{value:"Transfers using the Polkadot-JS UI and Browser Extension",id:"transfers-using-the-polkadot-js-ui-and-browser-extension",level:2},{value:"Verify Extrinsics with the Polkadot-JS Browser Extension",id:"verify-extrinsics-with-the-polkadot-js-browser-extension",level:3},{value:"Verify Extrinsics with the Polkadot-JS UI",id:"verify-extrinsics-with-the-polkadot-js-ui",level:3},{value:"Keep-Alive Checks with the Polkadot-JS UI",id:"keep-alive-checks-with-the-polkadot-js-ui",level:3},{value:"Vested Transfers with the Polkadot-JS UI",id:"vested-transfers-with-the-polkadot-js-ui",level:3},{value:"Lazy Vesting",id:"lazy-vesting",level:4},{value:"Calculating When Vesting DOT Will Be Available",id:"calculating-when-vesting-dot-will-be-available",level:4},{value:"Batch Transfers with the Polkadot-JS UI",id:"batch-transfers-with-the-polkadot-js-ui",level:3},{value:"Teleporting Tokens using the Polkadot-JS UI",id:"teleporting-tokens-using-the-polkadot-js-ui",level:3},{value:"Calculating Fees with Polkadot-JS",id:"calculating-fees-with-polkadot-js",level:2},{value:"Existing Reference Error",id:"existing-reference-error",level:2},{value:"Bonded Tokens",id:"bonded-tokens",level:3},{value:"Checking for Locks",id:"checking-for-locks",level:3},{value:"Purging Session Keys",id:"purging-session-keys",level:3},{value:"Existing Recovery Info",id:"existing-recovery-info",level:3},{value:"Existing Non-Native Assets",id:"existing-non-native-assets",level:3}],h={toc:p},k="wrapper";function f(e){var t=e.components,l=(0,o.Z)(e,s);return(0,r.kt)(k,(0,n.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("h2",{id:"metadata-updates-with-the-polkadot-js-browser-extension"},"Metadata Updates with the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"Before signing extrinsics with the Polkadot-JS Browser Extension, always check for metadata updates.\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=84"},(0,r.kt)("strong",{parentName:"a"},"This video tutorial"))," will explain how to do it."),(0,r.kt)("admonition",{title:"Polkadot Vault vs Polkadot-JS Browser Extension",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot Vault app updates the full metadata through the QR fountain while the extension updates\nthe metadata index (the metadata is not loaded into it). As a consequence the process of updating\nmetadata is different in this two cases (you will notice that on the Vault app the update takes\nlonger for example). Having outdated metadata on the Vault app will prevent you from signing, while\non the extension you will be able to click the sign button but the extrinsic will likely fail\n(similarly of having an outdated Ledger app). In general, failing to update metadata will most\nlikely result in you not being able to sign extrinsics.")),(0,r.kt)("h2",{id:"transfers-using-the-polkadot-js-ui-and-browser-extension"},"Transfers using the Polkadot-JS UI and Browser Extension"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=gbvrHzr4EDY"},"this video tutorial")," to learn how to send funds\nusing the Polkadot-JS UI and Browser Extension. See also the Polkadot Support pages for detailed\ninformation about signing transactions using\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181993-how-to-sign-a-transaction-directly-on-polkadot-js-ui"},"the Polkadot-JS UI"),"\nand\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181989"},"the Polkadot-JS browser extension"),"."),(0,r.kt)("h3",{id:"verify-extrinsics-with-the-polkadot-js-browser-extension"},"Verify Extrinsics with the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"Visit the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-in-the-Polkadot-extension"},(0,r.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=261"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions."),(0,r.kt)("h3",{id:"verify-extrinsics-with-the-polkadot-js-ui"},"Verify Extrinsics with the Polkadot-JS UI"),(0,r.kt)("p",null,"Visit the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-in-the-Polkadot-JS-UI"},(0,r.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=163"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions."),(0,r.kt)("h3",{id:"keep-alive-checks-with-the-polkadot-js-ui"},"Keep-Alive Checks with the Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/mgPHVztHJWk"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn about keep-alive checks and existential deposit.")),(0,r.kt)("p",null,"In Polkadot there are two main ways to\ntransfer funds from one account to another:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"transfer keep-alive")," (default option) will not allow you to send an amount that would allow the\nsending account to be removed due to it going below the\n",(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-"},"existential deposit"),"\nof\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),".\n",""),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"transfer allow-death")," will allow you to send\nDOT regardless of the consequence. If the\nbalance drops below the existential deposit your account will be reaped. It may be that you do not\nwant to keep the account alive (for example, because you are moving all of your funds to a\ndifferent address). To switch the keep-alive check off visit\n",(0,r.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000169248"},"this support article"),".")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Attempting to send less than the existential deposit to an account with\n0 DOT will always fail, no matter if the\nkeep-alive check is on or not. For instance, attempting to transfer\n0.1 DOT to an account you just generated\n(and thus has no balance) will fail, since\n0.1 DOT is less than the existential\ndeposit of\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand the account cannot be initialized with such a low balance."),(0,r.kt)("p",{parentName:"admonition"},"Even if the transfer fails due to a keep-alive check, the transaction fee will be deducted from the\nsending account if you attempt to transfer.")),(0,r.kt)("h3",{id:"vested-transfers-with-the-polkadot-js-ui"},"Vested Transfers with the Polkadot-JS UI"),(0,r.kt)("p",null,"You can watch ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/JVlwTQBwNGc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to understand how to do vested\ntransfers using the Polkadot-JS UI, including linear and cliff vesting. Note the tutorial uses the\nWestend Testnet, but the same applies to\nPolkadot."),(0,r.kt)("p",null,"There are two ways that vesting schedules can be created."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"One way is through an extrinsic type available in the Vesting pallet, ",(0,r.kt)("inlineCode",{parentName:"li"},"vested_transfer"),". The\nvested transfer function allows anyone to create a vesting schedule with a transfer of funds, as\nlong as the account for which the vesting schedule will be created does not already have one and\nthe transfer moves at least ",(0,r.kt)("inlineCode",{parentName:"li"},"MinVestedTransfer")," funds, which is specified as a chain constant."),(0,r.kt)("li",{parentName:"ul"},"A second way is as part of the genesis configuration of the chain. In the case of\nPolkadot, the chain specification genesis\nscript reads the state of the Claims contract that exists on the Ethereum blockchain and creates\nvesting schedules in genesis for all the allocations registered as being vested.")),(0,r.kt)("p",null,"Vesting schedules have three parameters:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"locked"),", the amount of tokens to be transferred in\n",(0,r.kt)("a",{parentName:"li",href:"../learn/learn-DOT#the-planck-unit"},"Planck units"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"per block"),", the number of tokens that are released per block"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"starting block"),", the block number after which the vesting schedule starts")),(0,r.kt)("p",null,"The configuration of these three fields dictates the amount of funds that are originally locked, the\nslope of the unlock line and the block number for when the unlocking begins."),(0,r.kt)("h4",{id:"lazy-vesting"},"Lazy Vesting"),(0,r.kt)("p",null,"Like ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"simple payouts"),", vesting is ",(0,r.kt)("em",{parentName:"p"},"lazy"),", which means that someone must\nexplicitly call an extrinsic to update the lock that is placed on an account."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("inlineCode",{parentName:"li"},"vest")," extrinsic will update the lock that is placed on the caller."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("inlineCode",{parentName:"li"},"vest_other"),' will update the lock that is placed on another "target" account\'s funds.')),(0,r.kt)("p",null,"These extrinsics are exposed from the Vesting pallet."),(0,r.kt)("p",null,"If you are using the Polkadot-JS UI, when there are\nDOT available to vest for an account, then you\nwill have the ability to unlock DOT which has\nalready vested from the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Accounts")," page."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"unbond",src:a(27152).Z,width:"241",height:"301"})),(0,r.kt)("h4",{id:"calculating-when-vesting-dot-will-be-available"},"Calculating When Vesting DOT Will Be Available"),(0,r.kt)("p",null,"Generally, you should be able to see from the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Accounts"),' by\nlooking at your accounts and seeing when the vesting will finish. However, some DOT vest with\n"cliffs" - a single block where all the DOT are released, instead of vesting over time. In this\ncase, you will have to query the chain state directly to see when they will be available (since\ntechnically, the vesting has not yet started - all of the vesting will occur in a single block in\nthe future).'),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Navigate to the\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/chainstate"},"Chain State")," page on\nPolkadot-JS."),(0,r.kt)("li",{parentName:"ol"},"Query chain state for ",(0,r.kt)("inlineCode",{parentName:"li"},"vesting.vesting(ACCOUNT_ID)")),(0,r.kt)("li",{parentName:"ol"},"Note the ",(0,r.kt)("inlineCode",{parentName:"li"},"startingBlock")," where the unlock starts, and how much DOT is unlocked per block\n(",(0,r.kt)("inlineCode",{parentName:"li"},"perBlock"),")."),(0,r.kt)("li",{parentName:"ol"},'You will have to calculate the result into \u201chuman time". To do this, remember that there are\napproximately 14\u2019400 blocks per day, and you can see what the latest block is shown on the\n',(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/explorer"},"Explorer")," page.")),(0,r.kt)("h3",{id:"batch-transfers-with-the-polkadot-js-ui"},"Batch Transfers with the Polkadot-JS UI"),(0,r.kt)("p",null,"Batch transfers are balances transfers to multiple accounts executed by one account. In order to\nconstruct a batch transfer you need to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Create a ",(0,r.kt)("inlineCode",{parentName:"li"},"utility.batch(calls)")," extrinsic using the\n",(0,r.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_utility/index.html"},"utility pallet"),", and"),(0,r.kt)("li",{parentName:"ul"},"Within the batch call you can create multiple ",(0,r.kt)("inlineCode",{parentName:"li"},"balances.transferKeepAlive")," extrinsics using the\n",(0,r.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_balances/index.html"},"balances pallet"),". You\ncan specify as many receivers as you desire.")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can watch ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/uoUC2K8muvw"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to do batch\ntransfers. Note the tutorial uses the Westend Testnet, but the same applies to both Polkadot and\nKusama.")),(0,r.kt)("h3",{id:"teleporting-tokens-using-the-polkadot-js-ui"},"Teleporting Tokens using the Polkadot-JS UI"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/3tE9ouub5Tg"},"this video tutorial")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181119-how-to-teleport-dot-or-ksm-between-statemint-or-statemine"},"this additional support article"),"\nto learn more about how to teleport tokens."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},'If you do not see "Accounts > Teleport" in the Polkadot-JS UI, the source chain that you have\nselected does not support teleportation yet.')),(0,r.kt)("h2",{id:"calculating-fees-with-polkadot-js"},"Calculating Fees with Polkadot-JS"),(0,r.kt)("p",null,"One useful utility for estimating transaction fees programmatically is the via the\n",(0,r.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/@polkadot/api"},"@polkadot/api"),". Check out the following script that\nlogs some relevant fee information:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},"// Estimate the fees as RuntimeDispatchInfo using the signer\nconst info = await api.tx.balances.transfer(recipient, 123).paymentInfo(sender);\n\n// Log relevant info, partialFee is Balance, estimated for current\nconsole.log(`\n class=${info.class.toString()},\n weight=${info.weight.toString()},\n partialFee=${info.partialFee.toHuman()}\n`);\n")),(0,r.kt)("p",null,"For additional information on interacting with the API, checkout\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs"},"Polkadot-JS"),"."),(0,r.kt)("h2",{id:"existing-reference-error"},"Existing Reference Error"),(0,r.kt)("p",null,"If you are trying to reap an account and you receive an error similar to\n",(0,r.kt)("inlineCode",{parentName:"p"},'"There is an existing reference count on the sender account. As such the account cannot be reaped from the state"'),",\nthen you have existing references to this account that must be first removed before it can be\nreaped. References may still exist from:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bonded tokens (most likely)"),(0,r.kt)("li",{parentName:"ul"},"Unpurged session keys (if you were previously a validator)"),(0,r.kt)("li",{parentName:"ul"},"Token locks"),(0,r.kt)("li",{parentName:"ul"},"Existing recovery info"),(0,r.kt)("li",{parentName:"ul"},"Existing assets")),(0,r.kt)("h3",{id:"bonded-tokens"},"Bonded Tokens"),(0,r.kt)("p",null,"If you have tokens that are bonded, you will need to unbond them before you can reap your account.\nFollow the instructions at ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#bond-your-tokens"},"Unbonding and Rebonding"),"\nto check if you have bonded tokens, stop nominating (if necessary) and unbond your tokens."),(0,r.kt)("h3",{id:"checking-for-locks"},"Checking for Locks"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/LHgY7ds_bZ0"},"this video tutorial")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169437-why-can-t-i-transfer-tokens-"},"this support page"),"\nto learn how to check for locks and remove them.")),(0,r.kt)("p",null,"You can also check for locks by querying ",(0,r.kt)("inlineCode",{parentName:"p"},"system.account(AccountId)")," in\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},(0,r.kt)("inlineCode",{parentName:"a"},"Chain state")," tab under the ",(0,r.kt)("inlineCode",{parentName:"a"},"Developer")," drop-down menu in the Polkadot-JS UI"),'.\nSelect your account, then click the "+" button next to the dropdowns, and check the relative ',(0,r.kt)("inlineCode",{parentName:"p"},"data"),"\nJSON object. If you see a non-zero value for anything other than ",(0,r.kt)("inlineCode",{parentName:"p"},"free"),", you have locks on your\naccount that need to get resolved."),(0,r.kt)("h3",{id:"purging-session-keys"},"Purging Session Keys"),(0,r.kt)("p",null,"If you used this account to set up a validator and you did not purge your keys before unbonding your\ntokens, you need to purge your keys. You can do this by seeing the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-stop-validating"},"How to Stop Validating")," page. This can also\nbe checked by checking ",(0,r.kt)("inlineCode",{parentName:"p"},"session.nextKeys")," in the chain state for an existing key."),(0,r.kt)("h3",{id:"existing-recovery-info"},"Existing Recovery Info"),(0,r.kt)("p",null,"Currently, Polkadot does not use the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/master/frame/recovery/"},"Recovery Pallet"),", so this is\nprobably not the reason for your tokens having existing references."),(0,r.kt)("p",null,"","","",""),(0,r.kt)("h3",{id:"existing-non-native-assets"},"Existing Non-Native Assets"),(0,r.kt)("p",null,"Currently, Polkadot does not use the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/tree/master/frame/assets"},"Assets Pallet"),", so this is\nprobably not the reason for your tokens having existing references."))}f.isMDXComponent=!0},27152:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/unlock-vesting-deefc0d6d9a08a91af1490a82e01069b.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/918b38b6.283b8160.js b/assets/js/918b38b6.283b8160.js deleted file mode 100644 index 4da8d5e41cd8..000000000000 --- a/assets/js/918b38b6.283b8160.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2508],{47940:(e,a,n)=>{"use strict";n.d(a,{Z:()=>h});var t=n(74165),o=n(15861),r=n(67294),i=n(87152),s=n(14741),c=n(67425);function l(e,a,n){return d.apply(this,arguments)}function d(){return(d=(0,o.Z)((0,t.Z)().mark((function e(a,n,o){var r,c,l,d,p;return(0,t.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,c=void 0,e.t0=a,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return l=new i.U(r),e.next=21,s.G.create({provider:l});case 21:d=e.sent,(p=n.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=p[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return c=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return c=(c=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+n);case 35:return e.abrupt("return",c);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(e,a,n,t){switch(a){case"humanReadable":(0,c.HumanReadable)(e,n,t);break;case"precise":(0,c.Precise)(e,n,t);break;case"blocksToDays":(0,c.BlocksToDays)(e,t);break;case"erasToDays":(0,c.ErasToDays)(e,t,n);break;case"percentage":(0,c.Percentage)(e,t);break;case"permillToPercent":(0,c.PermillToPercent)(e,t);break;case"arrayLength":(0,c.ArrayLength)(e,t);break;default:return void console.log("Ignoring unknown filter type")}}const h=function(e){var a=e.network,n=e.path,i=e.defaultValue,s=e.filter,c=void 0===s?void 0:s,d=(0,r.useState)(""),h=d[0],k=d[1];return a=a.toLowerCase(),(0,r.useEffect)((function(){void 0!==c?p(i.toString(),c,a,k):k(i.toString());var e=void 0;switch(a){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+a)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,t.Z)().mark((function e(){var o;return(0,t.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l(a,n,k);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==c?p(o,c,a,k):k(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),h}},67425:e=>{var a="polkadot",n="kusama",t="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var c=void 0;if(i===a||i===o)c=3;else{if(i!==n&&i!==t)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");c=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(c)+" "+r[i].symbol).toString())},Precise:function(e,a,n){n(e=(e=parseFloat(e))/r[a].precision+" "+r[a].symbol)},BlocksToDays:function(e,a){a((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===a||i===o)s=1;else{if(i!==n&&i!==t)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,a){a((e/=1e7).toString())},PermillToPercent:function(e,a){a((e/=1e4).toString())},ArrayLength:function(e,a){a((e=e.split(",").length).toString())}}},90594:(e,a,n)=>{"use strict";n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var t=n(87462),o=n(63366),r=(n(67294),n(3905)),i=(n(47940),["components"]),s={id:"learn-async-backing",title:"Asynchronous Backing",sidebar_label:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",keywords:["parachains","backing","parablock","perspective parachains","unincluded segments"],slug:"../learn-async-backing"},c=void 0,l={unversionedId:"learn/learn-async-backing",id:"learn/learn-async-backing",title:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",source:"@site/../docs/learn/learn-async-backing.md",sourceDirName:"learn",slug:"/learn-async-backing",permalink:"/docs/learn-async-backing",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-async-backing.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1696596726,formattedLastUpdatedAt:"Oct 6, 2023",frontMatter:{id:"learn-async-backing",title:"Asynchronous Backing",sidebar_label:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",keywords:["parachains","backing","parablock","perspective parachains","unincluded segments"],slug:"../learn-async-backing"},sidebar:"docs",previous:{title:"Parathreads",permalink:"/docs/learn-parathreads"},next:{title:"SASSAFRAS",permalink:"/docs/learn-sassafras"}},d={},p=[{value:"Synchronous Backing",id:"synchronous-backing",level:2},{value:"Asynchronous Backing",id:"asynchronous-backing",level:2},{value:"Synchronous vs. Asynchronous Backing",id:"synchronous-vs-asynchronous-backing",level:3},{value:"Sync Backing as a special case of Async Backing",id:"sync-backing-as-a-special-case-of-async-backing",level:3},{value:"Async Backing Diagram",id:"async-backing-diagram",level:3},{value:"Terminology",id:"terminology",level:2},{value:"Candidate Receipt",id:"candidate-receipt",level:3},{value:"Pipelining",id:"pipelining",level:3},{value:"Unincluded Segments",id:"unincluded-segments",level:3},{value:"Prospective Parachains",id:"prospective-parachains",level:3},{value:"Learn More",id:"learn-more",level:2}],h={toc:p},k="wrapper";function u(e){var a=e.components,s=(0,o.Z)(e,i);return(0,r.kt)(k,(0,t.Z)({},h,s,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"Learn about Parachain Consensus",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"To fully follow the material on this page, it is recommended to be familiar with the primary stages\nof the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"Parachain Protocol"),".")),(0,r.kt)("p",null,"In Polkadot, parablocks are generated by ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"collators")," on the parachain side and\nsent to ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-validator"},"validators")," on the relay chain side for backing."),(0,r.kt)("admonition",{title:"What is backing?",type:"info"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"Backing")," refers to the process in which parablocks are verified by a subset of validators or\nbacking groups. It is an important step in the validation process for parablocks, as it is the first\nline of defense in ensuring censorship resistance. Parablocks only need to be backed by one\nvalidator, and as a consequence, backing does not ensure parablock validity.")),(0,r.kt)("p",null,"Backed parablocks are sent to other validators for inclusion into the relay chain. Parablocks are\nincluded when validators have attested to having received\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol#erasure-codes"},"erasure coded chunks")," of the parablock data. Note\n",(0,r.kt)("a",{parentName:"p",href:"#candidate-receipt"},"candidate receipts")," and not the parablocks themselves are included in relay\nblocks (but for simplicity, we refer to parablocks as being included). When generated, parablocks\nmust be anchored to a relay chain block called ",(0,r.kt)("strong",{parentName:"p"},"relay parent"),". The relay parent is an input to\nparablock candidate generation. It provides the necessary context to build the next parablock. Note\nthat the relay parent of a parablock and the relay block including that parablock are always\ndifferent."),(0,r.kt)("h2",{id:"synchronous-backing"},"Synchronous Backing"),(0,r.kt)("p",null,"Before diving into asynchronous backing, it is important to understand what synchronous backing is\nand its main limitations. In synchronous backing, parablock generation is tightly coupled to the\nrelay chain's progression:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"A new parablock can be produced after including the previous one (i.e., every 12 seconds)."),(0,r.kt)("li",{parentName:"ol"},"Context to build the next parablock is drawn from the latest included parablock ancestor"),(0,r.kt)("li",{parentName:"ol"},"The relay parent must be the latest relay chain block.")),(0,r.kt)("p",null,"Because of (1) parablocks can be generated every other relay chain block (i.e., every 12 seconds).\nBecause of (2) generation of parablock ",(0,r.kt)("inlineCode",{parentName:"p"},"P")," can only start when ",(0,r.kt)("inlineCode",{parentName:"p"},"P - 1")," is included (there is no\n",(0,r.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). Because of (3) execution time can take maximum 0.5 seconds as parablock\n",(0,r.kt)("inlineCode",{parentName:"p"},"P")," is rushing to be backed in the next 5.5 seconds (2 seconds needed for backing and the rest for\ngossiping). Every parablock is backed in 6 seconds (one relay chain block) and included in the next\n6 seconds (next relay chain block). The time from generation to inclusion is 12 seconds. This limits\nthe amount of data a collator can add to each parablock."),(0,r.kt)("p",null,"Parablock generation will choose the most recently received relay block as a relay parent, although\nwith an imperfect network that may differ from the true most recent relay block. So, in general, if\nrelay block ",(0,r.kt)("inlineCode",{parentName:"p"},"R")," is the relay parent of parablock ",(0,r.kt)("inlineCode",{parentName:"p"},"P"),", then ",(0,r.kt)("inlineCode",{parentName:"p"},"P")," could be backed in ",(0,r.kt)("inlineCode",{parentName:"p"},"R + 1")," and\nincluded in ",(0,r.kt)("inlineCode",{parentName:"p"},"R + 2"),"."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"sync-backing",src:n(54804).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"From left to right, parablock P1 is anchored to the relay parent R0 (showed with an ",(0,r.kt)("inlineCode",{parentName:"p"},"x"),"), backed\ninto the relay chain block R1, and included in R2. After including P1, collators can start\ngenerating P2 that must be anchored to the relay parent R2. Note that R2 will be the relay parent of\nP2 if R2 is included on the relay chain and gossiped to the collator producing P2."),(0,r.kt)("admonition",{title:"Every collator also runs an attached relay chain full node",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The attached relay node receives relay blocks via gossip. Then, the relay node talks to the\nparachain node through the ",(0,r.kt)("inlineCode",{parentName:"p"},"CollationGeneration")," subsystem. R2 is gossiped to the relay full node\nattached to the collator producing P2. Then, ",(0,r.kt)("inlineCode",{parentName:"p"},"CollationGeneration")," passes information about R2 to\nthe collator node. Finally, relay parent information from R2 informs the generation of candidate P2.")),(0,r.kt)("p",null,"Because P2 is rushing to be backed in 6 seconds into R3, collators have only 0.5 seconds to generate\nit and present it to backing groups on the relay chain that will take approximately 2 seconds to\nback it and some extra time for gossiping it (the whole process from collation to backing lasts 6\nseconds). P2 is included in R4, which could be used as a relay parent for P3 (not shown). After 24\nseconds P1 and P2 are included in the relay chain. Note how collators can start new parablocks every\n12 seconds but only have 0.5 seconds to generate them."),(0,r.kt)("h2",{id:"asynchronous-backing"},"Asynchronous Backing"),(0,r.kt)("admonition",{title:"Disclaimer: Performance Measurements",type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Due to asynchronous backing not being fully implemented in a running production network, each\nperformance metric is not thoroughly tested nor guaranteed until proper benchmarking has occurred.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"sync-vs-async-backing",src:n(4919).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"In asynchronous backing, parablocks (P) are included every 6 seconds, and backing (B) and inclusion\n(I) can happen within the same relay chain block (R)."),(0,r.kt)("h3",{id:"synchronous-vs-asynchronous-backing"},"Synchronous vs. Asynchronous Backing"),(0,r.kt)("p",null,"Below is a table showing the main differences between synchronous and asynchronous backing."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"}),(0,r.kt)("th",{parentName:"tr",align:"center"},"Sync Backing"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Async Backing"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Async Backing Advantage"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Parablocks included every")),(0,r.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"6 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"2x more throughput or 2x less latency")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Parablock's maximum generation time")),(0,r.kt)("td",{parentName:"tr",align:"center"},"0.5 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"2 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"4x more data in a parablock")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Relay parent")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Is the latest relay chain block"),(0,r.kt)("td",{parentName:"tr",align:"center"},"Is not necessarily the latest relay chain block"),(0,r.kt)("td",{parentName:"tr",align:"center"},"Collators can submit parablocks to backing groups in advance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Collators can build on")),(0,r.kt)("td",{parentName:"tr",align:"center"},"The most recent ancestor included in the latest relay chain block"),(0,r.kt)("td",{parentName:"tr",align:"center"},"An ancestor included in a relay chain block (not necessarily the latest), with augmented information from the latest ancestor in the ",(0,r.kt)("a",{parentName:"td",href:"#unincluded-segments"},"unincluded segment")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Collators can start building parablocks in advance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Number of unincluded parablocks")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Only one"),(0,r.kt)("td",{parentName:"tr",align:"center"},"One, or more than one (depends on configuration parameters)"),(0,r.kt)("td",{parentName:"tr",align:"center"},"More efficiency and scalability")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Unincluded parablocks")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Cannot be re-proposed"),(0,r.kt)("td",{parentName:"tr",align:"center"},"Can be re-proposed if not successfully included in the first attempt"),(0,r.kt)("td",{parentName:"tr",align:"center"},"Decrease wastage of unused blockspace")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Parablock's Backing-to-inclusion time")),(0,r.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"No change")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("strong",{parentName:"td"},"Parablock's Inclusion-to-finality time")),(0,r.kt)("td",{parentName:"tr",align:"center"},"30 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"30 seconds"),(0,r.kt)("td",{parentName:"tr",align:"center"},"No change")))),(0,r.kt)("p",null,"In synchronous backing, collators generate parablocks using context entirely pulled from the relay\nchain. While in asynchronous backing, collators use additional context from the\n",(0,r.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),". Parablocks are included every 6 seconds because backing\nof parablock ",(0,r.kt)("inlineCode",{parentName:"p"},"N + 1")," and inclusion of parablock ",(0,r.kt)("inlineCode",{parentName:"p"},"N")," can happen on the same relay chain bock\n(",(0,r.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). However, as for synchronous backing, a parablock takes 12 seconds to\nget backed and included, and from inclusion to finality there is an additional 30-second time\nwindow."),(0,r.kt)("p",null,"Because the throughput is increased by 2x and parachains have 4x more time to generate blocks,\nasynchronous backing is expected to deliver 8x more blockspace to parachains."),(0,r.kt)("h3",{id:"sync-backing-as-a-special-case-of-async-backing"},"Sync Backing as a special case of Async Backing"),(0,r.kt)("p",null,"Two parameters of asynchronous backing can be controlled by\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Governance"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f204e3264f945c33b4cea18a49f7232c180b07c5/polkadot/primitives/src/vstaging/mod.rs#L49"},(0,r.kt)("inlineCode",{parentName:"a"},"max_candidate_depth")),":\nthe number of parachain blocks a collator can produce that are not yet included in the relay\nchain.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f204e3264f945c33b4cea18a49f7232c180b07c5/polkadot/primitives/src/vstaging/mod.rs#L54"},(0,r.kt)("inlineCode",{parentName:"a"},"allowed_ancestry_len")),":\nthe oldest relay chain parent a parachain block can be built on top of."))),(0,r.kt)("p",null,"Values of zero for both correspond to synchronous backing: ",(0,r.kt)("inlineCode",{parentName:"p"},"max_candidate_depth = 0")," means there can\nbe only one unincluded parablock at all times, and ",(0,r.kt)("inlineCode",{parentName:"p"},"allowed_ancestry_len = 0")," means a parablock can\nbe built only on the latest relay parent for that parachain. Initial values will be set to 3 (4\nunincluded parablocks at all times) and 2 (relay parent can be the third last)."),(0,r.kt)("h3",{id:"async-backing-diagram"},"Async Backing Diagram"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"async-backing",src:n(16588).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"The diagram assumes:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"max_candidate_depth = 2"),", meaning that there can be a maximum of three unincluded parablocks at\nall times"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"allowed_ancestry_len = 1"),", meaning parablocks can be anchored to the last or second-last relay\nparent (i.e., collators can start preparing parablocks 6 seconds in advance)")),(0,r.kt)("p",null,"From left to right, parablock P1 is backed into the relay chain block R1 and included in R2. While\nP1 undergoes backing, collators can already generate P2, which will have R0 as a relay parent\n(showed with an ",(0,r.kt)("inlineCode",{parentName:"p"},"x"),"). Note how R0 can also be relay parent for P1 as long as in the unincluded\nsegment there is a maximum of three unincluded parablocks. Parablock P2 can be backed in R2 (the\nsame relay block where P1 is included) and included in R3. Collators can now use up to two seconds\nto generate parablocks. And so on, P3 can be generated while backing groups check P2, and P4 can be\nbuilt while P3 undergoing backing. In 24 seconds, P1 to P3 are included in the relay chain."),(0,r.kt)("p",null,"Note how there are always three unincluded parablocks at all times, i.e. compared to synchronous\nbacking there can be multiple unincluded parablocks (i.e. ",(0,r.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). For example,\nwhen P1 is undergoing inclusion, P2 and P3 are undergoing backing. Collators were able to generate\nmultiple unincluded parablocks because on their end they have the\n",(0,r.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),", a local storage of not-included parablock ancestors that\nthey can use to fetch information to build new parablocks. On the relay chain side,\n",(0,r.kt)("a",{parentName:"p",href:"#prospective-parachains"},"perspective parachains")," repeats the work each unincluded segment does in\ntracking candidates (as validators cannot trust the record kept on parachains)."),(0,r.kt)("p",null,"The 6-second relay chain block delay includes a backing execution timeout (2 seconds) and some time\nfor network latency (the time it takes to gossip messages across the entire network). The limit\ncollators have to generate parablocks is how long it takes to back it (i.e., 2 seconds). Collation\ngeneration conservatively always gives itself the same time limits. If there is extra time for\ncollation generation and backing (i.e., more than 2s + 6s), then all that extra time is allocated to\nbacking (see figure). This could result in backable blocks waiting their turn at the end of the\nbacking step for a few extra seconds until a core frees up to back that block as of the next relay\nblock or some later relay block. Note a core is occupied after backing and before inclusion."),(0,r.kt)("p",null,"The 2-second block generation time is thus a limiter, not a system limitation. If block generation\ntakes >2 seconds, the unincluded segment will shrink (less unincluded parablocks), while if it takes\n<2 seconds, the segment will grow (more unincluded parablocks that will need to be backed and\nincluded). Such flexibility from the parachain side will be possible when, on the relay chain side,\nthere will be elastic scaling (i.e.,\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadot-direction#agile-core-usage"},"agile core usage")," and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadot-direction#agile-coretime-allocation"},"coretime allocation"),")."),(0,r.kt)("h2",{id:"terminology"},"Terminology"),(0,r.kt)("h3",{id:"candidate-receipt"},"Candidate Receipt"),(0,r.kt)("p",null,"Saying that a parablock has been included in a relay chain parent does not mean the entire parablock\nis in the relay chain block. Instead, ",(0,r.kt)("strong",{parentName:"p"},"candidate receipt")," consisting of the hash of the parablock,\nstate roots, and ID info is placed on the parent block on the relay chain. The relay chain does not\naccess the entire state of a parachain but only the values that changed during that block and the\nmerkelized hashes of the unchanged values."),(0,r.kt)("h3",{id:"pipelining"},"Pipelining"),(0,r.kt)("p",null,"Asynchronous backing is a feature that introduces\n",(0,r.kt)("a",{parentName:"p",href:"https://www.techtarget.com/whatis/definition/pipelining"},"pipelining")," to the parachain block\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"generation, backing and inclusion"),'. It is analogous to the logical\npipelining of processor instruction in "traditional" architectures, where some instructions may be\nexecuted before others are complete. Instructions may also be executed in parallel, enabling\nmultiple processor parts to work on potentially different instructions simultaneously.'),(0,r.kt)("p",null,"Bundles of state transitions represented as blocks may be processed similarly. In the context of\nPolkadot, pipelining aims to increase the\nthroughput of the entire network by completing the backing and inclusion steps for different blocks\nat the same time. Asynchronous backing does not just allow for pipelining within a single pipe (or\ncore). It lays the foundation for a large number of pipes (or cores) to run for the same parachain\nat the same time. In that way, we have two distinct new forms of parallel computation."),(0,r.kt)("h3",{id:"unincluded-segments"},"Unincluded Segments"),(0,r.kt)("p",null,"Unincluded segments are chains of candidate parablocks that have yet to be included in the relay\nchain, i.e. they can contain parablocks at any stage pre-inclusion. An unincluded segment may thus\ninclude candidates that are seconded, backable, or backed. Every parablock candidate recorded in the\nunincluded segment is immediately advertised to validators to begin the backing process."),(0,r.kt)("p",null,"The backing process occurs on the relay chain, whereas unincluded segments live in the runtimes of\nparachain collators. The core functionality that asynchronous backing brings is the ability to build\non these unincluded segments of block ancestors rather than building only on ancestors included in\nthe relay chain state."),(0,r.kt)("p",null,"The purpose of each unincluded segment is twofold:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Make each parachain aware of when and at what depth it can build blocks that won't be rejected by\nthe relay chain"),(0,r.kt)("li",{parentName:"ul"},"Provide critical context necessary to build parablocks with parent blocks that have yet to be\nincluded. The unincluded segment is all about building parablocks.")),(0,r.kt)("h3",{id:"prospective-parachains"},"Prospective Parachains"),(0,r.kt)("p",null,"The purpose of\n",(0,r.kt)("a",{parentName:"p",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html"},"prospective parachains"),"\nis twofold:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Keep track of parablocks that have been submitted to backers but have yet to be included. This\nincludes tracking the full unincluded ancestry of each parablock, without which it wouldn't be\npossible to verify their legitimacy.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Look up and provide candidates which are children of the most recently included parablock for each\nparachain. These are taken as inputs to the availability process. Prospective parachains is all\nabout tracking, storing, and providing candidates to the availability/inclusion step."))),(0,r.kt)("p",null,"Prospective parachains essentially repeats the work each ",(0,r.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),"\ndoes in tracking candidates. Validators cannot simply trust the availability or validity of records\nkept on parachains. Prospective parachains is the relay chain's record of all parablock candidates\nundergoing the backing and inclusion process. It is the authoritative gatekeeper for parablock\nvalidity. Whereas the unincluded segment is a local record that allows parachains to produce blocks\nthat comply with the rules prospective parachains later enforces."),(0,r.kt)("p",null,"The unincluded segment lives in the parachain runtime, so it doesn't know or care about forks/other\nparachains. Prospective parachains lives in the relay chain client. So it has to simultaneously keep\ntrack of candidates from all forks of all parachains. It is as if you folded the unincluded segments\nfrom every fork of every parachain into one giant data structure. When you fold unincluded segments\nrepresenting different chain forks together, they create a tree structure. Hence the term\n",(0,r.kt)("a",{parentName:"p",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html#fragment-trees"},(0,r.kt)("strong",{parentName:"a"},"fragment tree")),"."),(0,r.kt)("p",null,"A single unincluded segment tells a collator whether it can build on top of one fork of one\nparachain. Prospective parachains tells a validator whether it should accept blocks built on top of\nany fork from any parachain."),(0,r.kt)("p",null,"A parablock stops being a prospective parablock when it is included on chain. At that point\nprospective parachains does not have to care about it anymore. Alternatively, a parablock's relay\nparent can get too old before that parablock is included, in which case prospective parachains can\nthrow away the candidate."),(0,r.kt)("h2",{id:"learn-more"},"Learn More"),(0,r.kt)("p",null,"The information provided here is subject to change; keep up to date using the following resources:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/polkadot-roadmap-roundup"},"Polkadot Roadmap Roundup")," - Article by\nRob Habermeier, Polkadot founder, details the plans for Polkadot for 2023."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot/issues/3779"},"Asynchronous Backing Spec & Tracking Issue")," -\nThe implementation tracking issue for asynchronous backing"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html"},"Prospective Parachains Subsystem - The Polkadot Parachain Host Implementers' Guide")),(0,r.kt)("li",{parentName:"ul"},"Chapter 6.11. from Polkadot Blockchain Academy (PBA) lecture material:\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot-blockchain-academy.github.io/pba-book/polkadot/async-backing-shallow/page.html"},"Asynchronous Backing (Shallow)")),(0,r.kt)("li",{parentName:"ul"},"Chapter 6.15. from PBA lecture material:\n",(0,r.kt)("a",{parentName:"li",href:"https://polkadot-blockchain-academy.github.io/pba-book/polkadot/async-backing-deep/page.html"},"Asynchronous Backing (Deep)")),(0,r.kt)("li",{parentName:"ul"},"Polkadot Blog Post -\n",(0,r.kt)("a",{parentName:"li",href:"https://www.polkadot.network/blog/elevating-polkadots-performance-and-scale-with-asynchronous-backing"},"Asynchronous Backing: Elevating Polkadot's Performance and Scale"))))}u.isMDXComponent=!0},16588:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/async-backing-30d83e1ed114a3fb5e4ac44e58e2d6dc.png"},54804:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/sync-backing-e5c74751cd62df36651f23fab421f7cf.png"},4919:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/sync-vs-async-backing-3548388f98c44fc684a6176a6ccb8ed2.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/918b38b6.de40ab7a.js b/assets/js/918b38b6.de40ab7a.js new file mode 100644 index 000000000000..10412ad1316f --- /dev/null +++ b/assets/js/918b38b6.de40ab7a.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[2508],{47940:(e,a,n)=>{"use strict";n.d(a,{Z:()=>h});var t=n(74165),o=n(15861),i=n(67294),r=n(87152),s=n(14741),c=n(67425);function l(e,a,n){return d.apply(this,arguments)}function d(){return(d=(0,o.Z)((0,t.Z)().mark((function e(a,n,o){var i,c,l,d,p;return(0,t.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=void 0,c=void 0,e.t0=a,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){e.next=18;break}return e.abrupt("return");case 18:return l=new r.U(i),e.next=21,s.G.create({provider:l});case 21:d=e.sent,(p=n.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=p[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return c=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return c=(c=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+n);case 35:return e.abrupt("return",c);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(e,a,n,t){switch(a){case"humanReadable":(0,c.HumanReadable)(e,n,t);break;case"precise":(0,c.Precise)(e,n,t);break;case"blocksToDays":(0,c.BlocksToDays)(e,t);break;case"erasToDays":(0,c.ErasToDays)(e,t,n);break;case"percentage":(0,c.Percentage)(e,t);break;case"permillToPercent":(0,c.PermillToPercent)(e,t);break;case"arrayLength":(0,c.ArrayLength)(e,t);break;default:return void console.log("Ignoring unknown filter type")}}const h=function(e){var a=e.network,n=e.path,r=e.defaultValue,s=e.filter,c=void 0===s?void 0:s,d=(0,i.useState)(""),h=d[0],k=d[1];return a=a.toLowerCase(),(0,i.useEffect)((function(){void 0!==c?p(r.toString(),c,a,k):k(r.toString());var e=void 0;switch(a){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+a)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var e=(0,o.Z)((0,t.Z)().mark((function e(){var o;return(0,t.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l(a,n,k);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==c?p(o,c,a,k):k(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),h}},67425:e=>{var a="polkadot",n="kusama",t="statemine",o="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,s){var c=void 0;if(r===a||r===o)c=3;else{if(r!==n&&r!==t)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");c=6}e=parseFloat(e),s((e=Number.isInteger(e/i[r].precision)?e/i[r].precision+" "+i[r].symbol:(e/i[r].precision).toFixed(c)+" "+i[r].symbol).toString())},Precise:function(e,a,n){n(e=(e=parseFloat(e))/i[a].precision+" "+i[a].symbol)},BlocksToDays:function(e,a){a((e=6*e/86400).toString())},ErasToDays:function(e,i,r){var s=void 0;if(r===a||r===o)s=1;else{if(r!==n&&r!==t)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((e/=s).toString())},Percentage:function(e,a){a((e/=1e7).toString())},PermillToPercent:function(e,a){a((e/=1e4).toString())},ArrayLength:function(e,a){a((e=e.split(",").length).toString())}}},90594:(e,a,n)=>{"use strict";n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var t=n(87462),o=n(63366),i=(n(67294),n(3905)),r=(n(47940),["components"]),s={id:"learn-async-backing",title:"Asynchronous Backing",sidebar_label:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",keywords:["parachains","backing","parablock","perspective parachains","unincluded segments"],slug:"../learn-async-backing"},c=void 0,l={unversionedId:"learn/learn-async-backing",id:"learn/learn-async-backing",title:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",source:"@site/../docs/learn/learn-async-backing.md",sourceDirName:"learn",slug:"/learn-async-backing",permalink:"/docs/learn-async-backing",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-async-backing.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711563646,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-async-backing",title:"Asynchronous Backing",sidebar_label:"Asynchronous Backing",description:"A brief overview of asynchronous backing, and how it affects Polkadot's scalability.",keywords:["parachains","backing","parablock","perspective parachains","unincluded segments"],slug:"../learn-async-backing"},sidebar:"docs",previous:{title:"Parathreads",permalink:"/docs/learn-parathreads"},next:{title:"SASSAFRAS",permalink:"/docs/learn-sassafras"}},d={},p=[{value:"Synchronous Backing",id:"synchronous-backing",level:2},{value:"Asynchronous Backing",id:"asynchronous-backing",level:2},{value:"Synchronous vs. Asynchronous Backing",id:"synchronous-vs-asynchronous-backing",level:3},{value:"Sync Backing as a special case of Async Backing",id:"sync-backing-as-a-special-case-of-async-backing",level:3},{value:"Async Backing Diagram",id:"async-backing-diagram",level:3},{value:"Terminology",id:"terminology",level:2},{value:"Candidate Receipt",id:"candidate-receipt",level:3},{value:"Pipelining",id:"pipelining",level:3},{value:"Unincluded Segments",id:"unincluded-segments",level:3},{value:"Prospective Parachains",id:"prospective-parachains",level:3},{value:"Learn More",id:"learn-more",level:2}],h={toc:p},k="wrapper";function u(e){var a=e.components,s=(0,o.Z)(e,r);return(0,i.kt)(k,(0,t.Z)({},h,s,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"Learn about Parachain Consensus",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"To fully follow the material on this page, it is recommended to be familiar with the primary stages\nof the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"Parachain Protocol"),".")),(0,i.kt)("p",null,"In Polkadot, parablocks are generated by ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"collators")," on the parachain side and\nsent to ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-validator"},"validators")," on the relay chain side for backing."),(0,i.kt)("admonition",{title:"What is backing?",type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"Backing")," refers to the process in which parablocks are verified by a subset of validators or\nbacking groups. It is an important step in the validation process for parablocks, as it is the first\nline of defense in ensuring censorship resistance. Parablocks only need to be backed by one\nvalidator, and as a consequence, backing does not ensure parablock validity.")),(0,i.kt)("p",null,"Backed parablocks are sent to other validators for inclusion into the relay chain. Parablocks are\nincluded when validators have attested to having received\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol#erasure-codes"},"erasure coded chunks")," of the parablock data. Note\n",(0,i.kt)("a",{parentName:"p",href:"#candidate-receipt"},"candidate receipts")," and not the parablocks themselves are included in relay\nblocks (but for simplicity, we refer to parablocks as being included). When generated, parablocks\nmust be anchored to a relay chain block called ",(0,i.kt)("strong",{parentName:"p"},"relay parent"),". The relay parent is an input to\nparablock candidate generation. It provides the necessary context to build the next parablock. Note\nthat the relay parent of a parablock and the relay block including that parablock are always\ndifferent."),(0,i.kt)("h2",{id:"synchronous-backing"},"Synchronous Backing"),(0,i.kt)("p",null,"Before diving into asynchronous backing, it is important to understand what synchronous backing is\nand its main limitations. In synchronous backing, parablock generation is tightly coupled to the\nrelay chain's progression:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"A new parablock can be produced after including the previous one (i.e., every 12 seconds)."),(0,i.kt)("li",{parentName:"ol"},"Context to build the next parablock is drawn from the latest included parablock ancestor"),(0,i.kt)("li",{parentName:"ol"},"The relay parent must be the latest relay chain block.")),(0,i.kt)("p",null,"Because of (1) parablocks can be generated every other relay chain block (i.e., every 12 seconds).\nBecause of (2) generation of parablock ",(0,i.kt)("inlineCode",{parentName:"p"},"P")," can only start when ",(0,i.kt)("inlineCode",{parentName:"p"},"P - 1")," is included (there is no\n",(0,i.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). Because of (3) execution time can take maximum 0.5 seconds as parablock\n",(0,i.kt)("inlineCode",{parentName:"p"},"P")," is rushing to be backed in the next 5.5 seconds (2 seconds needed for backing and the rest for\ngossiping). Every parablock is backed in 6 seconds (one relay chain block) and included in the next\n6 seconds (next relay chain block). The time from generation to inclusion is 12 seconds. This limits\nthe amount of data a collator can add to each parablock."),(0,i.kt)("p",null,"Parablock generation will choose the most recently received relay block as a relay parent, although\nwith an imperfect network that may differ from the true most recent relay block. So, in general, if\nrelay block ",(0,i.kt)("inlineCode",{parentName:"p"},"R")," is the relay parent of parablock ",(0,i.kt)("inlineCode",{parentName:"p"},"P"),", then ",(0,i.kt)("inlineCode",{parentName:"p"},"P")," could be backed in ",(0,i.kt)("inlineCode",{parentName:"p"},"R + 1")," and\nincluded in ",(0,i.kt)("inlineCode",{parentName:"p"},"R + 2"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"sync-backing",src:n(54804).Z,width:"1211",height:"503"})),(0,i.kt)("p",null,"From left to right, parablock P1 is anchored to the relay parent R0 (showed with an ",(0,i.kt)("inlineCode",{parentName:"p"},"x"),"), backed\ninto the relay chain block R1, and included in R2. After including P1, collators can start\ngenerating P2 that must be anchored to the relay parent R2. Note that R2 will be the relay parent of\nP2 if R2 is included on the relay chain and gossiped to the collator producing P2."),(0,i.kt)("admonition",{title:"Every collator also runs an attached relay chain full node",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The attached relay node receives relay blocks via gossip. Then, the relay node talks to the\nparachain node through the ",(0,i.kt)("inlineCode",{parentName:"p"},"CollationGeneration")," subsystem. R2 is gossiped to the relay full node\nattached to the collator producing P2. Then, ",(0,i.kt)("inlineCode",{parentName:"p"},"CollationGeneration")," passes information about R2 to\nthe collator node. Finally, relay parent information from R2 informs the generation of candidate P2.")),(0,i.kt)("p",null,"Because P2 is rushing to be backed in 6 seconds into R3, validators have only 0.5 seconds for\nexecution. Backing groups will take approximately 2 seconds to back it and some extra time for\ngossiping it (the whole process from collation to backing lasts 6 seconds). P2 is included in R4,\nwhich could be used as a relay parent for P3 (not shown). After 24 seconds P1 and P2 are included in\nthe relay chain. Note how collators can start new parablocks every 12 seconds but only have 0.5\nseconds for execution."),(0,i.kt)("h2",{id:"asynchronous-backing"},"Asynchronous Backing"),(0,i.kt)("admonition",{title:"Disclaimer: Performance Measurements",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Due to asynchronous backing not being fully implemented in a running production network, each\nperformance metric is not thoroughly tested nor guaranteed until proper benchmarking has occurred.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"sync-vs-async-backing",src:n(4919).Z,width:"1920",height:"800"})),(0,i.kt)("p",null,"In asynchronous backing, parablocks (P) are included every 6 seconds, and backing (B) and inclusion\n(I) can happen within the same relay chain block (R)."),(0,i.kt)("h3",{id:"synchronous-vs-asynchronous-backing"},"Synchronous vs. Asynchronous Backing"),(0,i.kt)("p",null,"Below is a table showing the main differences between synchronous and asynchronous backing."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"left"}),(0,i.kt)("th",{parentName:"tr",align:"center"},"Sync Backing"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Async Backing"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Async Backing Advantage"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Parablocks included every")),(0,i.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"6 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"2x more throughput or 2x less latency")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Parablock's maximum execution time")),(0,i.kt)("td",{parentName:"tr",align:"center"},"0.5 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"2 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"4x more data in a parablock")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Relay parent")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Is the latest relay chain block"),(0,i.kt)("td",{parentName:"tr",align:"center"},"Is not necessarily the latest relay chain block"),(0,i.kt)("td",{parentName:"tr",align:"center"},"Collators can submit parablocks to backing groups in advance")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Collators can build on")),(0,i.kt)("td",{parentName:"tr",align:"center"},"The most recent ancestor included in the latest relay chain block"),(0,i.kt)("td",{parentName:"tr",align:"center"},"An ancestor included in a relay chain block (not necessarily the latest), with augmented information from the latest ancestor in the ",(0,i.kt)("a",{parentName:"td",href:"#unincluded-segments"},"unincluded segment")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Collators can start building parablocks in advance")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Number of unincluded parablocks")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Only one"),(0,i.kt)("td",{parentName:"tr",align:"center"},"One, or more than one (depends on configuration parameters)"),(0,i.kt)("td",{parentName:"tr",align:"center"},"More efficiency and scalability")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Unincluded parablocks")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Cannot be re-proposed"),(0,i.kt)("td",{parentName:"tr",align:"center"},"Can be re-proposed if not successfully included in the first attempt"),(0,i.kt)("td",{parentName:"tr",align:"center"},"Decrease wastage of unused blockspace")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Parablock's Backing-to-inclusion time")),(0,i.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"12 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"No change")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"left"},(0,i.kt)("strong",{parentName:"td"},"Parablock's Inclusion-to-finality time")),(0,i.kt)("td",{parentName:"tr",align:"center"},"30 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"30 seconds"),(0,i.kt)("td",{parentName:"tr",align:"center"},"No change")))),(0,i.kt)("p",null,"In synchronous backing, collators generate parablocks using context entirely pulled from the relay\nchain. While in asynchronous backing, collators use additional context from the\n",(0,i.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),". Parablocks are included every 6 seconds because backing\nof parablock ",(0,i.kt)("inlineCode",{parentName:"p"},"N + 1")," and inclusion of parablock ",(0,i.kt)("inlineCode",{parentName:"p"},"N")," can happen on the same relay chain bock\n(",(0,i.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). However, as for synchronous backing, a parablock takes 12 seconds to\nget backed and included, and from inclusion to finality there is an additional 30-second time\nwindow."),(0,i.kt)("p",null,"Because the throughput is increased by 2x and parachains have 4x more execution time, asynchronous\nbacking is expected to deliver 8x more blockspace to parachains."),(0,i.kt)("h3",{id:"sync-backing-as-a-special-case-of-async-backing"},"Sync Backing as a special case of Async Backing"),(0,i.kt)("p",null,"Two parameters of asynchronous backing can be controlled by\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Governance"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f204e3264f945c33b4cea18a49f7232c180b07c5/polkadot/primitives/src/vstaging/mod.rs#L49"},(0,i.kt)("inlineCode",{parentName:"a"},"max_candidate_depth")),":\nthe number of parachain blocks a collator can produce that are not yet included in the relay\nchain.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f204e3264f945c33b4cea18a49f7232c180b07c5/polkadot/primitives/src/vstaging/mod.rs#L54"},(0,i.kt)("inlineCode",{parentName:"a"},"allowed_ancestry_len")),":\nthe oldest relay chain parent a parachain block can be built on top of."))),(0,i.kt)("p",null,"Values of zero for both correspond to synchronous backing: ",(0,i.kt)("inlineCode",{parentName:"p"},"max_candidate_depth = 0")," means there can\nbe only one unincluded parablock at all times, and ",(0,i.kt)("inlineCode",{parentName:"p"},"allowed_ancestry_len = 0")," means a parablock can\nbe built only on the latest relay parent for that parachain. Initial values will be set to 3 (4\nunincluded parablocks at all times) and 2 (relay parent can be the third last)."),(0,i.kt)("h3",{id:"async-backing-diagram"},"Async Backing Diagram"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"async-backing",src:n(16588).Z,width:"1209",height:"503"})),(0,i.kt)("p",null,"The diagram assumes:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"max_candidate_depth = 2"),", meaning that there can be a maximum of three unincluded parablocks at\nall times"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"allowed_ancestry_len = 1"),", meaning parablocks can be anchored to the last or second-last relay\nparent (i.e., collators can start preparing parablocks 6 seconds in advance)")),(0,i.kt)("p",null,"From left to right, parablock P1 is backed into the relay chain block R1 and included in R2. While\nP1 undergoes backing, collators can already generate P2, which will have R0 as a relay parent\n(showed with an ",(0,i.kt)("inlineCode",{parentName:"p"},"x"),"). Note how R0 can also be relay parent for P1 as long as in the unincluded\nsegment there is a maximum of three unincluded parablocks. Parablock P2 can be backed in R2 (the\nsame relay block where P1 is included) and included in R3. Collators can now use up to two seconds\nfor execution. And so on, P3 can be generated while backing groups check P2, and P4 can be built\nwhile P3 undergoing backing. In 24 seconds, P1 to P3 are included in the relay chain."),(0,i.kt)("p",null,"Note how there are always three unincluded parablocks at all times, i.e. compared to synchronous\nbacking there can be multiple unincluded parablocks (i.e. ",(0,i.kt)("a",{parentName:"p",href:"#pipelining"},"pipelining"),"). For example,\nwhen P1 is undergoing inclusion, P2 and P3 are undergoing backing. Collators were able to generate\nmultiple unincluded parablocks because on their end they have the\n",(0,i.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),", a local storage of not-included parablock ancestors that\nthey can use to fetch information to build new parablocks. On the relay chain side,\n",(0,i.kt)("a",{parentName:"p",href:"#prospective-parachains"},"perspective parachains")," repeats the work each unincluded segment does in\ntracking candidates (as validators cannot trust the record kept on parachains)."),(0,i.kt)("p",null,"The 6-second relay chain block delay includes a backing execution timeout (2 seconds) and some time\nfor network latency (the time it takes to gossip messages across the entire network). The limit\ncollators have to generate parablocks is how long it takes to back it (i.e., 2 seconds). Collation\ngeneration conservatively always gives itself the same time limits. If there is extra time for\ncollation generation and backing (i.e., more than 2s + 6s), then all that extra time is allocated to\nbacking (see figure). This could result in backable blocks waiting their turn at the end of the\nbacking step for a few extra seconds until a core frees up to back that block as of the next relay\nblock or some later relay block. Note a core is occupied after backing and before inclusion."),(0,i.kt)("p",null,"The 2-second execution time is thus a limiter, not a system limitation. If parablock generation\ntakes >2 seconds, the unincluded segment will shrink (less unincluded parablocks), while if it takes\n<2 seconds, the segment will grow (more unincluded parablocks that will need to be backed and\nincluded). Such flexibility from the parachain side will be possible when, on the relay chain side,\nthere will be elastic scaling (i.e.,\n",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadot-direction#agile-core-usage"},"agile core usage")," and\n",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadot-direction#agile-coretime-allocation"},"coretime allocation"),")."),(0,i.kt)("h2",{id:"terminology"},"Terminology"),(0,i.kt)("h3",{id:"candidate-receipt"},"Candidate Receipt"),(0,i.kt)("p",null,"Saying that a parablock has been included in a relay chain parent does not mean the entire parablock\nis in the relay chain block. Instead, ",(0,i.kt)("strong",{parentName:"p"},"candidate receipt")," consisting of the hash of the parablock,\nstate roots, and ID info is placed on the parent block on the relay chain. The relay chain does not\naccess the entire state of a parachain but only the values that changed during that block and the\nmerkelized hashes of the unchanged values."),(0,i.kt)("h3",{id:"pipelining"},"Pipelining"),(0,i.kt)("p",null,"Asynchronous backing is a feature that introduces\n",(0,i.kt)("a",{parentName:"p",href:"https://www.techtarget.com/whatis/definition/pipelining"},"pipelining")," to the parachain block\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"generation, backing and inclusion"),'. It is analogous to the logical\npipelining of processor instruction in "traditional" architectures, where some instructions may be\nexecuted before others are complete. Instructions may also be executed in parallel, enabling\nmultiple processor parts to work on potentially different instructions simultaneously.'),(0,i.kt)("p",null,"Bundles of state transitions represented as blocks may be processed similarly. In the context of\nPolkadot, pipelining aims to increase the\nthroughput of the entire network by completing the backing and inclusion steps for different blocks\nat the same time. Asynchronous backing does not just allow for pipelining within a single pipe (or\ncore). It lays the foundation for a large number of pipes (or cores) to run for the same parachain\nat the same time. In that way, we have two distinct new forms of parallel computation."),(0,i.kt)("h3",{id:"unincluded-segments"},"Unincluded Segments"),(0,i.kt)("p",null,"Unincluded segments are chains of candidate parablocks that have yet to be included in the relay\nchain, i.e. they can contain parablocks at any stage pre-inclusion. An unincluded segment may thus\ninclude candidates that are seconded, backable, or backed. Every parablock candidate recorded in the\nunincluded segment is immediately advertised to validators to begin the backing process."),(0,i.kt)("p",null,"The backing process occurs on the relay chain, whereas unincluded segments live in the runtimes of\nparachain collators. The core functionality that asynchronous backing brings is the ability to build\non these unincluded segments of block ancestors rather than building only on ancestors included in\nthe relay chain state."),(0,i.kt)("p",null,"The purpose of each unincluded segment is twofold:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Make each parachain aware of when and at what depth it can build blocks that won't be rejected by\nthe relay chain"),(0,i.kt)("li",{parentName:"ul"},"Provide critical context necessary to build parablocks with parent blocks that have yet to be\nincluded. The unincluded segment is all about building parablocks.")),(0,i.kt)("h3",{id:"prospective-parachains"},"Prospective Parachains"),(0,i.kt)("p",null,"The purpose of\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html"},"prospective parachains"),"\nis twofold:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Keep track of parablocks that have been submitted to backers but have yet to be included. This\nincludes tracking the full unincluded ancestry of each parablock, without which it wouldn't be\npossible to verify their legitimacy.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Look up and provide candidates which are children of the most recently included parablock for each\nparachain. These are taken as inputs to the availability process. Prospective parachains is all\nabout tracking, storing, and providing candidates to the availability/inclusion step."))),(0,i.kt)("p",null,"Prospective parachains essentially repeats the work each ",(0,i.kt)("a",{parentName:"p",href:"#unincluded-segments"},"unincluded segment"),"\ndoes in tracking candidates. Validators cannot simply trust the availability or validity of records\nkept on parachains. Prospective parachains is the relay chain's record of all parablock candidates\nundergoing the backing and inclusion process. It is the authoritative gatekeeper for parablock\nvalidity. Whereas the unincluded segment is a local record that allows parachains to produce blocks\nthat comply with the rules prospective parachains later enforces."),(0,i.kt)("p",null,"The unincluded segment lives in the parachain runtime, so it doesn't know or care about forks/other\nparachains. Prospective parachains lives in the relay chain client. So it has to simultaneously keep\ntrack of candidates from all forks of all parachains. It is as if you folded the unincluded segments\nfrom every fork of every parachain into one giant data structure. When you fold unincluded segments\nrepresenting different chain forks together, they create a tree structure. Hence the term\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html#fragment-trees"},(0,i.kt)("strong",{parentName:"a"},"fragment tree")),"."),(0,i.kt)("p",null,"A single unincluded segment tells a collator whether it can build on top of one fork of one\nparachain. Prospective parachains tells a validator whether it should accept blocks built on top of\nany fork from any parachain."),(0,i.kt)("p",null,"A parablock stops being a prospective parablock when it is included on chain. At that point\nprospective parachains does not have to care about it anymore. Alternatively, a parablock's relay\nparent can get too old before that parablock is included, in which case prospective parachains can\nthrow away the candidate."),(0,i.kt)("h2",{id:"learn-more"},"Learn More"),(0,i.kt)("p",null,"The information provided here is subject to change; keep up to date using the following resources:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.network/blog/polkadot-roadmap-roundup"},"Polkadot Roadmap Roundup")," - Article by\nRob Habermeier, Polkadot founder, details the plans for Polkadot for 2023."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot/issues/3779"},"Asynchronous Backing Spec & Tracking Issue")," -\nThe implementation tracking issue for asynchronous backing"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/polkadot/book/node/backing/prospective-parachains.html"},"Prospective Parachains Subsystem - The Polkadot Parachain Host Implementers' Guide")),(0,i.kt)("li",{parentName:"ul"},"Chapter 6.11. from Polkadot Blockchain Academy (PBA) lecture material:\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot-blockchain-academy.github.io/pba-book/polkadot/async-backing-shallow/page.html"},"Asynchronous Backing (Shallow)")),(0,i.kt)("li",{parentName:"ul"},"Chapter 6.15. from PBA lecture material:\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot-blockchain-academy.github.io/pba-book/polkadot/async-backing-deep/page.html"},"Asynchronous Backing (Deep)")),(0,i.kt)("li",{parentName:"ul"},"Polkadot Blog Post -\n",(0,i.kt)("a",{parentName:"li",href:"https://www.polkadot.network/blog/elevating-polkadots-performance-and-scale-with-asynchronous-backing"},"Asynchronous Backing: Elevating Polkadot's Performance and Scale"))))}u.isMDXComponent=!0},16588:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/async-backing-97a966a8148c023012205ad71a146bcc.png"},54804:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/sync-backing-39f23741e043faaf52bb5ddc880ea409.png"},4919:(e,a,n)=>{"use strict";n.d(a,{Z:()=>t});const t=n.p+"assets/images/sync-vs-async-backing-3548388f98c44fc684a6176a6ccb8ed2.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.bbb025cb.js b/assets/js/935f2afb.bbb025cb.js new file mode 100644 index 000000000000..c343771ae001 --- /dev/null +++ b/assets/js/935f2afb.bbb025cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[53],{22624:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"Explore","description":"Wallets and Apps in the Polkadot Ecosystem.","items":[{"type":"link","label":"Getting Started","href":"/docs/getting-started","docId":"general/getting-started"},{"type":"category","label":"Wallets","description":"Beginner friendly wallets with advanced features.","items":[{"type":"link","label":"Wallets and Extensions","href":"/docs/wallets-and-extensions","docId":"general/wallets-and-extensions"},{"type":"link","label":"Ledger","href":"/docs/ledger","docId":"general/ledger"},{"type":"link","label":"Polkadot Vault","href":"/docs/polkadot-vault","docId":"general/polkadot-vault"}],"collapsed":true,"collapsible":true,"href":"/docs/wallets-index"},{"type":"category","label":"Apps","description":"Apps for Staking, Governance, Multisigs, NFTs and many more use cases.","items":[{"type":"link","label":"Polkadot Ecosystem Apps","description":"Apps listed on official Polkadot website.","href":"https://polkadot.network/ecosystem/dapps/"},{"type":"link","label":"DotAppStore","description":"Apps upvoted by the community.","href":"https://dotappstore.com/"},{"type":"link","label":"Staking Apps","href":"/docs/staking-apps","docId":"general/staking-apps"},{"type":"link","label":"Governance Apps","href":"/docs/governance-apps","docId":"general/governance-apps"},{"type":"link","label":"Multisig Apps","href":"/docs/multisig-apps","docId":"general/multisig-apps"},{"type":"link","label":"NFT Projects","href":"/docs/learn-nft-projects","docId":"learn/learn-nft-projects"},{"type":"link","label":"Parachain Apps","href":"/docs/parachains-apps","docId":"general/parachains-apps"}],"collapsed":true,"collapsible":true,"href":"/docs/apps-index"},{"type":"category","label":"Dashboards","description":"Dashboards in the Polkadot Ecosystem.","items":[{"type":"link","label":"Staking Dashboard","href":"/docs/staking-dashboard","docId":"general/staking-dashboard"}],"collapsed":true,"collapsible":true,"href":"/docs/dashboards-index"},{"type":"category","label":"Community & Contributors","description":"Polkadot Community and Wiki Contributors.","items":[{"type":"link","label":"Community","href":"/docs/community","docId":"general/community"},{"type":"link","label":"Contributing to the Wiki","href":"/docs/contributing","docId":"general/contributing"},{"type":"link","label":"Contributors","href":"/docs/contributors","docId":"general/contributors"}],"collapsed":true,"collapsible":true,"href":"/docs/community-index"},{"type":"category","label":"Programs","description":"Programs for Grants, Bounties, Ambassadors and many more inititatives.","items":[{"type":"link","label":"Decentralized Futures","href":"/docs/decentralized-futures","docId":"general/decentralized-futures"},{"type":"link","label":"Decentralized Voices","href":"/docs/decentralized-voices","docId":"general/decentralized-voices"},{"type":"link","label":"Grants","href":"/docs/grants","docId":"general/grants"},{"type":"link","label":"Bug Bounty","href":"/docs/bug-bounty","docId":"general/bug-bounty"},{"type":"link","label":"Polkadot Ambassadors","href":"/docs/ambassadors","docId":"general/ambassadors"},{"type":"link","label":"Alpha Program","href":"/docs/alpha-program","docId":"general/alpha-program"},{"type":"link","label":"Thousand Validators","href":"/docs/thousand-validators","docId":"general/doc-thousand-validators"},{"type":"link","label":"Thousand Contributors","href":"/docs/thousand-contributors","docId":"general/doc-thousand-contributors"},{"type":"link","label":"Developer Heroes","href":"/docs/dev-heroes","docId":"general/dev-heroes"}],"collapsed":true,"collapsible":true,"href":"/docs/programs-index"},{"type":"link","label":"Metadata Explorer","href":"/docs/metadata","docId":"general/metadata"}],"collapsed":true,"collapsible":true,"href":"/docs/explore-index"},{"type":"category","label":"Learn","items":[{"type":"category","label":"General","description":"General Information to get started with Polkadot and Web3.","items":[{"type":"link","label":"Web3 and Polkadot","href":"/docs/web3-and-polkadot","docId":"general/web3-and-polkadot"},{"type":"category","label":"Polkadot Vision","description":"Polkadot\'s Vision revealed by Gavin Wood at Decoded 2023.","items":[{"type":"link","label":"Polkadot 1.0","href":"/docs/polkadot-v1","docId":"general/polkadot-v1"},{"type":"link","label":"Polkadot Direction","href":"/docs/polkadot-direction","docId":"general/polkadot-direction"}],"collapsed":true,"collapsible":true,"href":"/docs/polkadot-vision-index"},{"type":"category","label":"Stay Safe","description":"Good-practices to Stay Safe while Surfing in Web3.","items":[{"type":"link","label":"Do Your Own Research","href":"/docs/how-to-dyor","docId":"general/how-to-dyor"},{"type":"link","label":"Scam Protection","href":"/docs/learn-scams","docId":"general/scams"},{"type":"link","label":"Transaction Verification","href":"/docs/transaction-attacks","docId":"general/transaction-attacks"}],"collapsed":true,"collapsible":true,"href":"/docs/stay-safe-index"},{"type":"link","label":"Build on Polkadot","href":"/docs/start-building","docId":"general/start-building"},{"type":"link","label":"Research Pages","href":"/docs/research","docId":"general/research"},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"general/faq"},{"type":"link","label":"Glossary","href":"/docs/glossary","docId":"general/glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/general-index"},{"type":"category","label":"Basics","description":"Staking, Accounts, Transactions, Tokens and NFTs, and Governance.","items":[{"type":"category","label":"Accounts","description":"Basic Accounts, Identity, Multi-signature, and Proxies.","items":[{"type":"link","label":"Account Abstraction","href":"/docs/learn-account-abstraction","docId":"learn/learn-account-abstraction"},{"type":"link","label":"Account Identity","href":"/docs/learn-identity","docId":"learn/learn-identity"},{"type":"link","label":"Multi-Signature Accounts","href":"/docs/learn-account-multisig","docId":"learn/learn-account-multisig"},{"type":"link","label":"Proxy Accounts","href":"/docs/learn-proxies","docId":"learn/learn-proxies"},{"type":"link","label":"Pure Proxy Accounts","href":"/docs/learn-proxies-pure","docId":"learn/learn-proxies-pure"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-accounts"},{"type":"category","label":"Transactions","description":"Extrinsics, Balance Transfers, and Fees.","items":[{"type":"link","label":"Transaction Fees","href":"/docs/learn-transaction-fees","docId":"learn/learn-transaction-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-transactions"},{"type":"category","label":"Staking","description":"Mechanics of Staking.","items":[{"type":"link","label":"Introduction to Staking","href":"/docs/learn-staking","docId":"learn/learn-staking"},{"type":"link","label":"Nomination Pools","href":"/docs/learn-nomination-pools","docId":"learn/learn-nomination-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-staking-index"},{"type":"category","label":"Polkadot OpenGov","description":"Everything about Polkadot OpenGov.","items":[{"type":"link","label":"Polkadot OpenGov","href":"/docs/learn-polkadot-opengov","docId":"learn/learn-polkadot-opengov"},{"type":"link","label":"OpenGov Origins","href":"/docs/learn-polkadot-opengov-origins","docId":"learn/learn-polkadot-opengov-origins"},{"type":"link","label":"Technical Fellowship","href":"/docs/learn-polkadot-technical-fellowship","docId":"learn/learn-polkadot-technical-fellowship"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadot-opengov-index"},{"type":"link","label":"Treasury","href":"/docs/learn-polkadot-opengov-treasury","docId":"learn/learn-polkadot-opengov-treasury"},{"type":"category","label":"Tokens and Assets","description":"DOT Token, Asset Hub, and Teleports.","items":[{"type":"link","label":"Asset Hub","href":"/docs/learn-assets","docId":"learn/learn-assets"},{"type":"link","label":"DOT","href":"/docs/learn-DOT","docId":"learn/learn-DOT"},{"type":"link","label":"Token Inflation","href":"/docs/learn-inflation","docId":"learn/learn-inflation"},{"type":"link","label":"Teleporting Assets","href":"/docs/learn-teleport","docId":"learn/learn-teleport"},{"type":"link","label":"Introduction to NFTs","href":"/docs/learn-nft","docId":"learn/learn-nft"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-assets-index"},{"type":"category","label":"Network Participants","description":"Participants in the Polkadot Ecosystem.","items":[{"type":"link","label":"Collator","href":"/docs/learn-collator","docId":"learn/learn-collator"},{"type":"link","label":"Nominator","href":"/docs/learn-nominator","docId":"learn/learn-nominator"},{"type":"link","label":"Validator","href":"/docs/learn-validator","docId":"learn/learn-validator"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-participants-index"},{"type":"category","label":"Components","description":"OpenGov, Treasury, WASM, Runtime Upgrades, and more.","items":[{"type":"link","label":"Polkadot Host","href":"/docs/learn-polkadot-host","docId":"learn/learn-polkadot-host"},{"type":"link","label":"WebAssembly (Wasm)","href":"/docs/learn-wasm","docId":"learn/learn-wasm"},{"type":"link","label":"Runtime Upgrades","href":"/docs/learn-runtime-upgrades","docId":"learn/learn-runtime-upgrades"},{"type":"link","label":"Consensus","href":"/docs/learn-consensus","docId":"learn/learn-consensus"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-components-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-basics-index"},{"type":"category","label":"Advanced","description":"Advanced Concepts & Guides about Accounts, Staking, and NFTs.","items":[{"type":"category","label":"Polkadot-JS","description":"Overview of Polkadot-JS.","items":[{"type":"link","label":"Polkadot-JS Tooling","href":"/docs/polkadotjs","docId":"general/polkadotjs"},{"type":"link","label":"Polkadot-JS UI","href":"/docs/polkadotjs-ui","docId":"general/polkadotjs-ui"},{"type":"category","label":"Polkadot-JS Guides","description":"Polkadot-JS Guides about Staking, Asset Hub, Vault App, and more.","items":[{"type":"category","label":"Account Guides","description":"Polkadot-JS Guides about Accounts.","items":[{"type":"link","label":"Multisig Guides","href":"/docs/learn-guides-accounts-multisig","docId":"learn/learn-guides-accounts-multisig"},{"type":"link","label":"Proxy Guides","href":"/docs/learn-guides-accounts-proxy","docId":"learn/learn-guides-accounts-proxy"},{"type":"link","label":"Pure Proxy Guides","href":"/docs/learn-guides-accounts-proxy-pure","docId":"learn/learn-guides-accounts-proxy-pure"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-accounts"},{"type":"link","label":"Transfer Guides","href":"/docs/learn-guides-transfers","docId":"learn/learn-guides-transfers"},{"type":"category","label":"Staking Guides","description":"Polkadot-JS Guides about Staking.","items":[{"type":"link","label":"Nominator Guides","href":"/docs/learn-guides-nominator","docId":"learn/learn-guides-nominator"},{"type":"link","label":"Nomination Pool Guides","href":"/docs/learn-guides-staking-pools","docId":"learn/learn-guides-staking-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-staking"},{"type":"link","label":"OpenGov Guides","href":"/docs/learn-guides-polkadot-opengov","docId":"learn/learn-guides-polkadot-opengov"},{"type":"link","label":"Treasury Guides","href":"/docs/learn-guides-treasury","docId":"learn/learn-guides-treasury"},{"type":"link","label":"Bounty Guides","href":"/docs/learn-guides-bounties","docId":"learn/learn-guides-bounties"},{"type":"link","label":"Identity Guides","href":"/docs/learn-guides-identity","docId":"learn/learn-guides-identity"},{"type":"link","label":"Ledger Guides","href":"/docs/learn-guides-ledger","docId":"learn/learn-guides-ledger"},{"type":"link","label":"Polkadot Vault Guides","href":"/docs/learn-guides-vault","docId":"learn/learn-guides-vault"},{"type":"category","label":"Asset Hub Guides","description":"Polkadot-JS Guides about Asset Hub.","items":[{"type":"link","label":"Create Asset Guides","href":"/docs/learn-guides-assets-create","docId":"learn/learn-guides-assets-create"},{"type":"link","label":"Asset Hub Ledger Guides","href":"/docs/learn-guides-assets-ledger","docId":"learn/learn-guides-assets-ledger"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-assets"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadot-js-guides"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadotjs"},{"type":"category","label":"Architecture","description":"Nominators, Validators, Collators, Parachains, and more.","items":[{"type":"link","label":"Architecture","href":"/docs/learn-architecture","docId":"learn/learn-architecture"},{"type":"category","label":"Parachains","description":"Parachains\' Protocol, Auctions, Crowdloans, and more.","items":[{"type":"link","label":"Introduction to Parachains","href":"/docs/learn-parachains","docId":"learn/learn-parachains"},{"type":"link","label":"Protocol Overview","href":"/docs/learn-parachains-protocol","docId":"learn/learn-parachains-protocol"},{"type":"link","label":"System Parachains","href":"/docs/learn-system-chains","docId":"learn/learn-system-chains"},{"type":"link","label":"Parachain Slot Auctions","href":"/docs/learn-auction","docId":"learn/learn-auction"},{"type":"link","label":"Parachain Crowdloans","href":"/docs/learn-crowdloans","docId":"learn/learn-crowdloans"},{"type":"link","label":"Parachains FAQ","href":"/docs/learn-parachains-faq","docId":"learn/learn-parachains-faq"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-parachains-index"},{"type":"category","label":"Agile Coretime","description":"Concepts, Implementation and Tutorials on Agile Coretime.","items":[{"type":"link","label":"Agile Coretime","href":"/docs/learn-agile-coretime","docId":"learn/learn-agile-coretime"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-agile-coretime-index"},{"type":"link","label":"Bridges","href":"/docs/learn-bridges","docId":"learn/learn-bridges"},{"type":"category","label":"Cross Consensus Messaging (XCM)","description":"Polkadot\'s Cross-Consensus Messaging Format (XCM).","items":[{"type":"link","label":"Cross-Consensus Message Format (XCM)","href":"/docs/learn-xcm","docId":"learn/learn-xcm"},{"type":"link","label":"XCM Pallet","href":"/docs/learn-xcm-pallet","docId":"learn/learn-xcm-pallet"},{"type":"link","label":"XCM Use-cases","href":"/docs/learn-xcm-usecases","docId":"learn/learn-xcm-usecases"},{"type":"link","label":"XCM Transport","href":"/docs/learn-xcm-transport","docId":"learn/learn-xcm-transport"},{"type":"link","label":"XCM Virtual Machine (XCVM)","href":"/docs/learn-xcvm","docId":"learn/learn-xcvm"},{"type":"link","label":"XCM Instructions","href":"/docs/learn-xcm-instructions","docId":"learn/learn-xcm-instructions"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-xcm-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-architecture-index"},{"type":"link","label":"Accounts","href":"/docs/learn-account-advanced","docId":"learn/learn-account-advanced"},{"type":"link","label":"Advanced Staking Concepts","href":"/docs/learn-staking-advanced","docId":"learn/learn-staking-advanced"},{"type":"link","label":"NFT Pallets","href":"/docs/learn-nft-pallets","docId":"learn/learn-nft-pallets"},{"type":"link","label":"Cryptography","href":"/docs/learn-cryptography","docId":"learn/learn-cryptography"},{"type":"link","label":"NPoS Election Algorithms","href":"/docs/learn-phragmen","docId":"learn/learn-phragmen"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-advanced-index"},{"type":"category","label":"XCM Docs","description":"In-depth documentation about the Polkadot\'s Cross-Chain Messaging (XCM).","items":[{"type":"link","label":"XCM: Cross-Consensus Messaging","href":"/docs/learn/xcm/introduction","docId":"learn/xcm/learn-xcm-docs-intro"},{"type":"category","label":"Overview","description":"Overview of the XCM Documentation.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/overview-summary","docId":"learn/xcm/overview/learn-xcm-docs-overview-summary"},{"type":"link","label":"Introduction","href":"/docs/learn/xcm/overview-intro","docId":"learn/xcm/overview/learn-xcm-docs-overview-intro"},{"type":"link","label":"A Format, not a Protocol","href":"/docs/learn/xcm/overview-format","docId":"learn/xcm/overview/learn-xcm-docs-overview-format"},{"type":"link","label":"The XCVM","href":"/docs/learn/xcm/overview-xcvm","docId":"learn/xcm/overview/learn-xcm-docs-overview-xcvm"},{"type":"link","label":"Architecture","href":"/docs/learn/xcm/overview-architecture","docId":"learn/xcm/overview/learn-xcm-docs-overview-architecture"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/overview"},{"type":"category","label":"Quickstart","description":"Start Diving into XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/quickstart-summary","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary"},{"type":"link","label":"XCM Simulator","href":"/docs/learn/xcm/quickstart-simulator","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator"},{"type":"link","label":"First Look at an XCM","href":"/docs/learn/xcm/quickstart-first-look","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/quickstart"},{"type":"category","label":"Fundamentals","description":"Fundamental Concepts about XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals-summary","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary"},{"type":"category","label":"MultiLocation","description":"The MultiLocation Type.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals/multilocation-summary","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary"},{"type":"link","label":"Junction(s)","href":"/docs/learn/xcm/fundamentals/multilocation-junctions","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions"},{"type":"link","label":"Example","href":"/docs/learn/xcm/fundamentals/multilocation-example","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals/multilocation"},{"type":"link","label":"MultiAsset","href":"/docs/learn/xcm/fundamentals-multiasset","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset"},{"type":"link","label":"XCVM","href":"/docs/learn/xcm/fundamentals-xcvm","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm"},{"type":"link","label":"Weight and Fees","href":"/docs/learn/xcm/fundamentals-fees","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals"},{"type":"category","label":"A Journey through XCM","description":"A Practical Introduction to the XCM Features","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey-summary","docId":"learn/xcm/journey/learn-xcm-docs-journey-summary"},{"type":"category","label":"Transfers","description":"Transferring Assets between Consensus Systems with XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey/transfers-summary","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary"},{"type":"link","label":"Asset Teleportation","href":"/docs/learn/xcm/journey/transfers-teleport","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport"},{"type":"link","label":"Reserve-backed Transfers","href":"/docs/learn/xcm/journey/transfers-reserve","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey/transfers"},{"type":"link","label":"Fee Handling","href":"/docs/learn/xcm/journey-fees","docId":"learn/xcm/journey/learn-xcm-docs-journey-fees"},{"type":"link","label":"Transact: A General Solution","href":"/docs/learn/xcm/journey-transact","docId":"learn/xcm/journey/learn-xcm-docs-journey-transact"},{"type":"link","label":"Origin Manipulation","href":"/docs/learn/xcm/journey-origin","docId":"learn/xcm/journey/learn-xcm-docs-journey-origin"},{"type":"link","label":"More Register Modifiers","href":"/docs/learn/xcm/journey-register","docId":"learn/xcm/journey/learn-xcm-docs-journey-register"},{"type":"link","label":"More Holding Modifiers","href":"/docs/learn/xcm/journey-holding","docId":"learn/xcm/journey/learn-xcm-docs-journey-holding"},{"type":"link","label":"Trap and Claim Assets","href":"/docs/learn/xcm/journey-assets","docId":"learn/xcm/journey/learn-xcm-docs-journey-assets"},{"type":"link","label":"Expectations","href":"/docs/learn/xcm/journey-expectations","docId":"learn/xcm/journey/learn-xcm-docs-journey-expectations"},{"type":"link","label":"Queries","href":"/docs/learn/xcm/journey-queries","docId":"learn/xcm/journey/learn-xcm-docs-journey-queries"},{"type":"link","label":"Version Subscription","href":"/docs/learn/xcm/journey-version","docId":"learn/xcm/journey/learn-xcm-docs-journey-version"},{"type":"link","label":"Locks","href":"/docs/learn/xcm/journey-locks","docId":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks"},{"type":"link","label":"Channels and Bridges","href":"/docs/learn/xcm/journey-channels","docId":"learn/xcm/journey/learn-xcm-docs-journey-channels"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey"},{"type":"link","label":"Executor Configuration","href":"/docs/learn/xcm/config-deep-dive","docId":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive"},{"type":"link","label":"Testing","href":"/docs/learn/xcm/testing","docId":"learn/xcm/learn-xcm-docs-testing"},{"type":"category","label":"References","description":"XCVM Registers and Glossary","items":[{"type":"link","label":"All XCVM Registers","href":"/docs/learn/xcm/reference-xcvm-registers","docId":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers"},{"type":"link","label":"Glossary","href":"/docs/learn/xcm/reference-glossary","docId":"learn/xcm/reference/learn-xcm-docs-reference-glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/references"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm"},{"type":"category","label":"Polkadot Comparisons","description":"Comparison between Polkadot and other Networks. ","items":[{"type":"link","label":"Kusama","href":"/docs/learn-comparisons-kusama","docId":"learn/learn-comparisons-kusama"},{"type":"link","label":"Ethereum","href":"/docs/learn-comparisons-ethereum-2","docId":"learn/learn-comparisons-ethereum-2"},{"type":"link","label":"Cosmos","href":"/docs/learn-comparisons-cosmos","docId":"learn/learn-comparisons-cosmos"},{"type":"link","label":"Avalanche","href":"/docs/learn-comparisons-avalanche","docId":"learn/learn-comparisons-avalanche"},{"type":"link","label":"Other Comparisons","href":"/docs/learn-comparisons","docId":"learn/learn-comparisons"},{"type":"link","label":"Layer Two and Rollups","href":"/docs/learn-comparisons-rollups","docId":"learn/learn-comparisons-rollups"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-comparisons-index"},{"type":"link","label":"Videos","href":"/docs/learn-video-tutorials","docId":"learn/learn-video-tutorials"},{"type":"category","label":"Future Implementations","description":"Implementations that will be deployed on Polkadot.","items":[{"type":"link","label":"SPREE","href":"/docs/learn-spree","docId":"learn/learn-spree"},{"type":"link","label":"Parathreads","href":"/docs/learn-parathreads","docId":"learn/learn-parathreads"},{"type":"link","label":"Asynchronous Backing","href":"/docs/learn-async-backing","docId":"learn/learn-async-backing"},{"type":"link","label":"SASSAFRAS","href":"/docs/learn-sassafras","docId":"learn/learn-sassafras"},{"type":"link","label":"Hyperbridge","href":"/docs/learn-hyperbridge","docId":"learn/learn-hyperbridge"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-future-implementations-index"},{"type":"category","label":"Archive","description":"Implementations no longer live on Polkadot.","items":[{"type":"link","label":"Governance V1","href":"/docs/learn/learn-governance","docId":"learn/archive/learn-governance"},{"type":"link","label":"Gov1 Treasury","href":"/docs/learn/learn-treasury","docId":"learn/archive/learn-treasury"},{"type":"link","label":"Polkadot Launch Phases","href":"/docs/learn/learn-launch","docId":"learn/archive/learn-launch"},{"type":"link","label":"Redenomination of DOT","href":"/docs/learn/learn-redenomination","docId":"learn/archive/learn-redenomination"},{"type":"link","label":"Controller Accounts","href":"/docs/learn/learn-controller","docId":"learn/archive/learn-controller"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-archive"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-index"},{"type":"category","label":"Build","items":[{"type":"category","label":"Client-side Development","items":[{"type":"link","label":"Building dApps","href":"/docs/build-dapp","docId":"build/build-dapp"},{"type":"link","label":"Oracles","href":"/docs/build-oracle","docId":"build/build-oracle"},{"type":"link","label":"Using Light Clients","href":"/docs/build-light-clients","docId":"build/build-light-clients"},{"type":"link","label":"Decentralized Storage","href":"/docs/build-storage","docId":"build/build-storage"},{"type":"link","label":"Transaction Construction","href":"/docs/build-transaction-construction","docId":"build/build-transaction-construction"},{"type":"link","label":"Node Interaction","href":"/docs/build-node-interaction","docId":"build/build-node-interaction"}],"collapsed":true,"collapsible":true,"href":"/docs/build-client-index"},{"type":"link","label":"Smart Contracts","href":"/docs/build-smart-contracts","docId":"build/build-smart-contracts"},{"type":"category","label":"Protocol Development","items":[{"type":"link","label":"Polkadot Protocol","href":"/docs/build-protocol-info","docId":"build/build-protocol-info"},{"type":"link","label":"Parachain Development","href":"/docs/build-pdk","docId":"build/build-parachains"},{"type":"link","label":"Integrating Assets","href":"/docs/build-integrate-assets","docId":"build/build-integrate-assets"},{"type":"link","label":"Opening HRMP Channels","href":"/docs/build-hrmp-channels","docId":"build/build-hrmp-channels"}],"collapsed":true,"collapsible":true,"href":"/docs/build-protocol-index"},{"type":"category","label":"Development Networks & Node Management","items":[{"type":"link","label":"Networks Overview","href":"/docs/build-network-overview","docId":"build/build-network-overview"},{"type":"link","label":"Integration Initiation","href":"/docs/build-integration","docId":"build/build-integration"},{"type":"link","label":"Node Management","href":"/docs/build-node-management","docId":"build/build-node-management"}],"collapsed":true,"collapsible":true,"href":"/docs/build-network-index"},{"type":"category","label":"Tooling","items":[{"type":"link","label":"Explorer, Data, & Indexing Tools","href":"/docs/build-data","docId":"build/build-data"},{"type":"link","label":"Open Source Stack","href":"/docs/build-open-source","docId":"build/build-open-source"}],"collapsed":true,"collapsible":true,"href":"/docs/build-tools-index"},{"type":"link","label":"Hackathons","href":"/docs/build-hackathon","docId":"build/build-hackathon"}],"collapsed":true,"collapsible":true,"href":"/docs/build-guide"},{"type":"category","label":"Maintain","items":[{"type":"link","label":"Parameters","href":"/docs/maintain-polkadot-parameters","docId":"maintain/maintain-polkadot-parameters"},{"type":"category","label":"Nodes and Dapps","description":"Learn how to set up a node.","items":[{"type":"link","label":"Node Endpoints","href":"/docs/maintain-endpoints","docId":"maintain/maintain-endpoints"},{"type":"link","label":"Set up a Full Node","href":"/docs/maintain-sync","docId":"maintain/maintain-sync"},{"type":"link","label":"Set up a Boot Node","href":"/docs/maintain-bootnode","docId":"maintain/maintain-bootnode"},{"type":"link","label":"Set up a RPC node","href":"/docs/maintain-rpc","docId":"maintain/maintain-rpc"},{"type":"link","label":"Secure the WebSocket","href":"/docs/maintain-wss","docId":"maintain/maintain-wss"},{"type":"link","label":"Networks","href":"/docs/maintain-networks","docId":"maintain/maintain-networks"},{"type":"link","label":"Resolving Errors","href":"/docs/maintain-errors","docId":"maintain/maintain-errors"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-node-index"},{"type":"category","label":"Collator Guides","description":"Guides for Collator Nodes.","items":[{"type":"link","label":"Async Backing Upgrade","href":"/docs/maintain-guides-async-backing","docId":"maintain/maintain-guides-async-backing"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-collator-index"},{"type":"category","label":"Validator Guides","description":"Guides for Validator Nodes.","items":[{"type":"link","label":"How to run a Validator on Polkadot","href":"/docs/maintain-guides-how-to-validate-polkadot","docId":"maintain/maintain-guides-how-to-validate-polkadot"},{"type":"link","label":"Validator Payout Overview","href":"/docs/maintain-guides-validator-payout","docId":"maintain/maintain-guides-validator-payout"},{"type":"link","label":"Using systemd for a Validator Node","href":"/docs/maintain-guides-how-to-systemd","docId":"maintain/maintain-guides-how-to-systemd"},{"type":"link","label":"Secure Validator","href":"/docs/maintain-guides-secure-validator","docId":"maintain/maintain-guides-secure-validator"},{"type":"link","label":"How to Upgrade Your Validator","href":"/docs/maintain-guides-how-to-upgrade","docId":"maintain/maintain-guides-how-to-upgrade"},{"type":"link","label":"Monitor your node","href":"/docs/maintain-guides-how-to-monitor-your-node","docId":"maintain/maintain-guides-how-to-monitor-your-node"},{"type":"link","label":"How to Chill","href":"/docs/maintain-guides-how-to-chill","docId":"maintain/maintain-guides-how-to-chill"},{"type":"link","label":"How to Stop Validating","href":"/docs/maintain-guides-how-to-stop-validating","docId":"maintain/maintain-guides-how-to-stop-validating"},{"type":"link","label":"Validator Community Overview","href":"/docs/maintain-guides-validator-community","docId":"maintain/doc-maintain-guides-validator-community"},{"type":"link","label":"Validator Best Practices","href":"/docs/maintain-guides-avoid-slashing","docId":"maintain/maintain-guides-avoid-slashing"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-validator-index"},{"type":"category","label":"Archive","description":"Basic Accounts, Identity, Multi-signature, and Proxies.","items":[{"type":"link","label":"Participate in Democracy","href":"/docs/maintain/maintain-guides-democracy","docId":"maintain/archive/maintain-guides-democracy"},{"type":"link","label":"Join the Council","href":"/docs/maintain/maintain-guides-how-to-join-council","docId":"maintain/archive/maintain-guides-how-to-join-council"},{"type":"link","label":"Voting for Councillors","href":"/docs/maintain/maintain-guides-how-to-vote-councillor","docId":"maintain/archive/maintain-guides-how-to-vote-councillor"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-archive"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-index"}]},"docs":{"build/build-dapp":{"id":"build/build-dapp","title":"Building dApps","description":"An overview about building dApps on Polkadot","sidebar":"docs"},"build/build-data":{"id":"build/build-data","title":"Explorer, Data, & Indexing Tools","description":"An overview about building with data analytics","sidebar":"docs"},"build/build-guide":{"id":"build/build-guide","title":"Polkadot Developer Portal","description":"Start building with Polkadot/Kusama.","sidebar":"docs"},"build/build-hackathon":{"id":"build/build-hackathon","title":"Hackathons","description":"Join or host a Hackathon.","sidebar":"docs"},"build/build-hrmp-channels":{"id":"build/build-hrmp-channels","title":"Opening HRMP Channels","description":"Steps on how to open HRMP channels between parachains.","sidebar":"docs"},"build/build-index":{"id":"build/build-index","title":"Builder\'s Guides","description":"Reference point for the Polkadot builder guides."},"build/build-integrate-assets":{"id":"build/build-integrate-assets","title":"Assets on Polkadot","description":"Tools that you can use to integrating assets.","sidebar":"docs"},"build/build-integration":{"id":"build/build-integration","title":"Polkadot Integration Guide","description":"Reference point for the Polkadot integration guides.","sidebar":"docs"},"build/build-light-clients":{"id":"build/build-light-clients","title":"Using Light Clients","description":"Information about light client options.","sidebar":"docs"},"build/build-network-overview":{"id":"build/build-network-overview","title":"Networks Overview","description":"An overview of the different networks on Polkadot","sidebar":"docs"},"build/build-node-interaction":{"id":"build/build-node-interaction","title":"Node Interaction","description":"Tools for node interaction.","sidebar":"docs"},"build/build-node-management":{"id":"build/build-node-management","title":"Node Management","description":"Steps on how to manage your Polkadot node.","sidebar":"docs"},"build/build-open-source":{"id":"build/build-open-source","title":"Open Source Stack","description":"Overview of the open source Polkadot/Kusama Tech Stack","sidebar":"docs"},"build/build-oracle":{"id":"build/build-oracle","title":"Oracles","description":"Information about building with oracles.","sidebar":"docs"},"build/build-parachains":{"id":"build/build-parachains","title":"Parachain Development","description":"A guide on what it means to become a Parachain and the steps to do so.","sidebar":"docs"},"build/build-protocol-info":{"id":"build/build-protocol-info","title":"Polkadot Protocol Information","description":"Characteristics about the Polkadot protocol, and what you need to consider when building.","sidebar":"docs"},"build/build-smart-contracts":{"id":"build/build-smart-contracts","title":"Smart Contracts","description":"How smart contracts play their role in the Polkadot ecosystem.","sidebar":"docs"},"build/build-storage":{"id":"build/build-storage","title":"Decentralized Storage","description":"Information about building with decentralized storage.","sidebar":"docs"},"build/build-tools-index":{"id":"build/build-tools-index","title":"Tool Index","description":"Reference point for a list of tools to support your development.","sidebar":"docs"},"build/build-transaction-construction":{"id":"build/build-transaction-construction","title":"Transaction Construction and Signing","description":"Information about how transactions are constructed on Polkadot.","sidebar":"docs"},"general/alpha-program":{"id":"general/alpha-program","title":"Polkadot Alpha Program","description":"The Polkadot Alpha Program and How it can Support your Development.","sidebar":"docs"},"general/ambassadors":{"id":"general/ambassadors","title":"Polkadot Ambassador Program","description":"The Polkadot\'s Ambassador Program and How you can Participate in It.","sidebar":"docs"},"general/bug-bounty":{"id":"general/bug-bounty","title":"Bug Bounty Program","description":"An Overview of How you can Help Catch Bugs.","sidebar":"docs"},"general/community":{"id":"general/community","title":"Community","description":"Connect and stay updated with the Polkadot Community.","sidebar":"docs"},"general/contributing":{"id":"general/contributing","title":"Contributing to the Polkadot Wiki","description":"Contribute to the Polkadot Wiki.","sidebar":"docs"},"general/contributors":{"id":"general/contributors","title":"Contributors","description":"Get to know your Wiki-slayers.","sidebar":"docs"},"general/decentralized-futures":{"id":"general/decentralized-futures","title":"Decentralized Futures Program","description":"Learn about the Decentralized Futures Program.","sidebar":"docs"},"general/decentralized-voices":{"id":"general/decentralized-voices","title":"Decentralized Voices Program","description":"Learn about the Decentralized Voices Program.","sidebar":"docs"},"general/dev-heroes":{"id":"general/dev-heroes","title":"Developer Heroes Program","description":"More Power to Polkadot\'s Developers.","sidebar":"docs"},"general/doc-thousand-contributors":{"id":"general/doc-thousand-contributors","title":"Thousand Contributors Program","description":"The Thousand Contributors Program and How it can Support your Contributions.","sidebar":"docs"},"general/doc-thousand-validators":{"id":"general/doc-thousand-validators","title":"Thousand Validators Programme","description":"The Thousand Validators Program and How it can Support your Validator Endeavors.","sidebar":"docs"},"general/faq":{"id":"general/faq","title":"Frequently Asked Questions (FAQs)","description":"FAQs to Help you Navigate on Polkadot.","sidebar":"docs"},"general/getting-started":{"id":"general/getting-started","title":"Getting Started","description":"Get started with Polkadot and Web3.","sidebar":"docs"},"general/glossary":{"id":"general/glossary","title":"Glossary","description":"Common Terms and Concepts in the Polkadot Ecosystem.","sidebar":"docs"},"general/governance-apps":{"id":"general/governance-apps","title":"Polkadot Governance Apps","description":"Governance Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/grants":{"id":"general/grants","title":"Grants Program","description":"The Grant Programs in the Polkadot Ecosystem.","sidebar":"docs"},"general/how-to-dyor":{"id":"general/how-to-dyor","title":"How to Do Your Own Research (DYOR)","description":"Importance of Doing Your Own Research (DYOR).","sidebar":"docs"},"general/kusama/kusama-adversarial-cheatsheet":{"id":"general/kusama/kusama-adversarial-cheatsheet","title":"Adversarial Cheatsheet","description":"A cheatsheet to help you create chaos."},"general/kusama/kusama-bug-bounty":{"id":"general/kusama/kusama-bug-bounty","title":"Bug Bounty","description":"An overview of how you can help catch bugs."},"general/kusama/kusama-claims":{"id":"general/kusama/kusama-claims","title":"Kusama Claims","description":"Step-by-step guide on how to claim your KSM tokens."},"general/kusama/kusama-coc":{"id":"general/kusama/kusama-coc","title":"Kusama Code of Conduct","description":"Kusama\'s Code of Conduct to sustain chaos."},"general/kusama/kusama-community":{"id":"general/kusama/kusama-community","title":"Kusama Community","description":"Stay in-touch and keep up-to-date by interacting and engaging in the Kusama community."},"general/kusama/kusama-getting-started":{"id":"general/kusama/kusama-getting-started","title":"Interact with Kusama","description":"Reference point for Kusama content."},"general/kusama/kusama-index":{"id":"general/kusama/kusama-index","title":"Kusama","description":"Legacy link to Kusama Wiki document"},"general/kusama/kusama-parameters":{"id":"general/kusama/kusama-parameters","title":"Kusama Parameters","description":"Learn about common Kusama parameters"},"general/kusama/kusama-social-recovery":{"id":"general/kusama/kusama-social-recovery","title":"Social Recovery","description":"Steps on how to perform account recovery on Kusama."},"general/kusama/kusama-timeline":{"id":"general/kusama/kusama-timeline","title":"Kusama Timeline","description":"Stay up-to-date with the latest action on Kusama."},"general/ledger":{"id":"general/ledger","title":"Using the Polkadot & Kusama Ledger Applications","description":"Use the Polkadot Ledger Application.","sidebar":"docs"},"general/metadata":{"id":"general/metadata","title":"Metadata Explorer","description":"Visualize Metadata and related Documentation.","sidebar":"docs"},"general/multisig-apps":{"id":"general/multisig-apps","title":"Polkadot Multisig Apps","description":"Multisig Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/parachains-apps":{"id":"general/parachains-apps","title":"Polkadot Parachain Apps","description":"Polkadot\'s Parachain Apps.","sidebar":"docs"},"general/polkadot-direction":{"id":"general/polkadot-direction","title":"Polkadot Direction","description":"Polkadot as a Decentralized and Secure Ubiquitous Computer.","sidebar":"docs"},"general/polkadot-v1":{"id":"general/polkadot-v1","title":"Polkadot 1.0","description":"Polkadot\'s 1.0, Blockspace, Decentralization and Resilience.","sidebar":"docs"},"general/polkadot-vault":{"id":"general/polkadot-vault","title":"Polkadot Vault (formerly Parity Signer)","description":"Your old Smartphone as an Air-gapped Wallet.","sidebar":"docs"},"general/polkadotjs":{"id":"general/polkadotjs","title":"Polkadot-JS Tooling","description":"The Polkadot-JS Tool Collection.","sidebar":"docs"},"general/polkadotjs-ui":{"id":"general/polkadotjs-ui","title":"Polkadot-JS UI (Wallet)","description":"A Wallet for Power-users and Developers.","sidebar":"docs"},"general/research":{"id":"general/research","title":"Research Pages","description":"Latest Research Developments on Polkadot.","sidebar":"docs"},"general/scams":{"id":"general/scams","title":"How to Protect Yourself from Scams","description":"How to Protect yourself against Scams.","sidebar":"docs"},"general/staking-apps":{"id":"general/staking-apps","title":"Polkadot Staking Apps","description":"Staking Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/staking-dashboard":{"id":"general/staking-dashboard","title":"Polkadot Staking Dashboard","description":"Everything about the Polkadot Staking Dashboard.","sidebar":"docs"},"general/start-building":{"id":"general/start-building","title":"Build on Polkadot","description":"Start Building with the Polkadot SDK.","sidebar":"docs"},"general/transaction-attacks":{"id":"general/transaction-attacks","title":"Why Verify Transactions?","description":"How to Prevent from being a Victim of an Attack","sidebar":"docs"},"general/wallets-and-extensions":{"id":"general/wallets-and-extensions","title":"Wallets and Extensions","description":"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.","sidebar":"docs"},"general/web3-and-polkadot":{"id":"general/web3-and-polkadot","title":"Web3 and Polkadot","description":"Introduction to Web3 and Polkadot\'s Role in shaping the Web3 Vision.","sidebar":"docs"},"learn/archive/learn-controller":{"id":"learn/archive/learn-controller","title":"Controller Accounts","description":"Controller Accounts used in Staking.","sidebar":"docs"},"learn/archive/learn-governance":{"id":"learn/archive/learn-governance","title":"Governance V1","description":"Polkadot\'s First Governance Model.","sidebar":"docs"},"learn/archive/learn-launch":{"id":"learn/archive/learn-launch","title":"Polkadot Launch Phases","description":"Polkadot\'s Launch Process and its Individual Phases.","sidebar":"docs"},"learn/archive/learn-redenomination":{"id":"learn/archive/learn-redenomination","title":"Redenomination of DOT","description":"Everything about the DOT Token Redenomination.","sidebar":"docs"},"learn/archive/learn-treasury":{"id":"learn/archive/learn-treasury","title":"Governance v1 Treasury","description":"The Polkadot\'s On-chain Treasury during Gov1.","sidebar":"docs"},"learn/learn-account-abstraction":{"id":"learn/learn-account-abstraction","title":"Polkadot\'s Account Abstraction","description":"Polkadot\'s Native Account Abstraction.","sidebar":"docs"},"learn/learn-account-advanced":{"id":"learn/learn-account-advanced","title":"Polkadot Accounts In-Depth","description":"Advanced Concepts about Polkadot\'s Accounts.","sidebar":"docs"},"learn/learn-account-multisig":{"id":"learn/learn-account-multisig","title":"Multi-Signature Accounts","description":"Multi-signature Accounts on Polkadot.","sidebar":"docs"},"learn/learn-accounts":{"id":"learn/learn-accounts","title":"Polkadot Accounts","description":"Polkadot Accounts, Account Identity, and Account Reaping.","sidebar":"docs"},"learn/learn-agile-coretime":{"id":"learn/learn-agile-coretime","title":"Introduction to Agile Coretime","description":"Introduction to Agile Coretime and its terminology","sidebar":"docs"},"learn/learn-architecture":{"id":"learn/learn-architecture","title":"Architecture","description":"Key Components to Polkadot\'s Architecture.","sidebar":"docs"},"learn/learn-archive":{"id":"learn/learn-archive","title":"Learn Archive","description":"Archive for the Learn Section.","sidebar":"docs"},"learn/learn-assets":{"id":"learn/learn-assets","title":"Asset Hub","description":"Fungible Tokens and NFTs on Polkadot.","sidebar":"docs"},"learn/learn-async-backing":{"id":"learn/learn-async-backing","title":"Asynchronous Backing","description":"A brief overview of asynchronous backing, and how it affects Polkadot\'s scalability.","sidebar":"docs"},"learn/learn-auction":{"id":"learn/learn-auction","title":"Parachain Slot Auctions","description":"Polkadot\'s Parachain Slot Auction Mechanism.","sidebar":"docs"},"learn/learn-bridges":{"id":"learn/learn-bridges","title":"Bridges","description":"Bridges and Examples of Common Bridges.","sidebar":"docs"},"learn/learn-collator":{"id":"learn/learn-collator","title":"Collator","description":"Role of Collators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-comparisons":{"id":"learn/learn-comparisons","title":"Polkadot Comparisons","description":"Comparison between Polkadot and ETH 1.0 and BSC.","sidebar":"docs"},"learn/learn-comparisons-avalanche":{"id":"learn/learn-comparisons-avalanche","title":"Polkadot vs. Avalanche","description":"Comparison between Polkadot and Avalanche.","sidebar":"docs"},"learn/learn-comparisons-cosmos":{"id":"learn/learn-comparisons-cosmos","title":"Polkadot vs. Cosmos","description":"Comparison between Polkadot and Cosmos.","sidebar":"docs"},"learn/learn-comparisons-ethereum-2":{"id":"learn/learn-comparisons-ethereum-2","title":"Polkadot vs. Ethereum","description":"Comparison between Polkadot and Ethereum.","sidebar":"docs"},"learn/learn-comparisons-kusama":{"id":"learn/learn-comparisons-kusama","title":"Polkadot vs. Kusama","description":"Comparing the cousins.","sidebar":"docs"},"learn/learn-comparisons-rollups":{"id":"learn/learn-comparisons-rollups","title":"Layer Two and Rollups","description":"Comparison between various Rollup and L2 Protocols.","sidebar":"docs"},"learn/learn-consensus":{"id":"learn/learn-consensus","title":"Polkadot Consensus","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-crowdloans":{"id":"learn/learn-crowdloans","title":"Parachain Crowdloans","description":"Polkadot\'s Crowdloans and How to Participate.","sidebar":"docs"},"learn/learn-cryptography":{"id":"learn/learn-cryptography","title":"Cryptography on Polkadot","description":"Cryptographic Functions used in Polkadot.","sidebar":"docs"},"learn/learn-DOT":{"id":"learn/learn-DOT","title":"DOT","description":"Tokenomics of Polkadot\'s Native Token DOT.","sidebar":"docs"},"learn/learn-guides-accounts":{"id":"learn/learn-guides-accounts","title":"Polkadot-JS Guides about Accounts","description":"Polkadot-JS Guides about Accounts","sidebar":"docs"},"learn/learn-guides-accounts-multisig":{"id":"learn/learn-guides-accounts-multisig","title":"Polkadot-JS Guides about Multi-signature Accounts","description":"Polkadot-JS Guides about Multi-signature Accounts","sidebar":"docs"},"learn/learn-guides-accounts-proxy":{"id":"learn/learn-guides-accounts-proxy","title":"Polkadot-JS Guides about Proxy Accounts","description":"Polkadot-JS Guides about Proxy Accounts","sidebar":"docs"},"learn/learn-guides-accounts-proxy-pure":{"id":"learn/learn-guides-accounts-proxy-pure","title":"Polkadot-JS Guides about Pure Proxy Accounts","description":"Polkadot-JS Guides about Pure Proxy Accounts","sidebar":"docs"},"learn/learn-guides-assets":{"id":"learn/learn-guides-assets","title":"Polkadot-JS Guides about Asset Hub","description":"Polkadot-JS Guides about Asset Hub.","sidebar":"docs"},"learn/learn-guides-assets-create":{"id":"learn/learn-guides-assets-create","title":"Polkadot-JS Guides about Creating Assets","description":"Polkadot-JS Guides about Creating Assets.","sidebar":"docs"},"learn/learn-guides-assets-ledger":{"id":"learn/learn-guides-assets-ledger","title":"Polkadot-JS Guides about Asset Hub Ledger App","description":"Polkadot-JS Guides about Ledger and the Asset Hub.","sidebar":"docs"},"learn/learn-guides-bounties":{"id":"learn/learn-guides-bounties","title":"Polkadot-JS Guides about Bounties","description":"Polkadot-JS Guides for Bounties","sidebar":"docs"},"learn/learn-guides-identity":{"id":"learn/learn-guides-identity","title":"Polkadot-JS Guides about Identity","description":"Polkadot-JS Guides about Identity.","sidebar":"docs"},"learn/learn-guides-ledger":{"id":"learn/learn-guides-ledger","title":"Polkadot-JS Guides for Ledger Devices","description":"Polkadot-JS Guides for Ledger Devices.","sidebar":"docs"},"learn/learn-guides-nominator":{"id":"learn/learn-guides-nominator","title":"Polkadot-JS Guides For Nominators","description":"Polkadot-JS Guides for Nominators.","sidebar":"docs"},"learn/learn-guides-polkadot-opengov":{"id":"learn/learn-guides-polkadot-opengov","title":"Polkadot-JS Guides about OpenGov","description":"Polkadot-JS Guides about Polkadot OpenGov.","sidebar":"docs"},"learn/learn-guides-staking":{"id":"learn/learn-guides-staking","title":"Polkadot-JS Guides about Staking","description":"Polkadot-JS Guides about Staking.","sidebar":"docs"},"learn/learn-guides-staking-pools":{"id":"learn/learn-guides-staking-pools","title":"Polkadot-JS Guides for Pool Creators","description":"Polkadot-JS Guides about Nomination Pools.","sidebar":"docs"},"learn/learn-guides-transfers":{"id":"learn/learn-guides-transfers","title":"Polkadot-JS Guides about Transfers","description":"Polkadot-JS Guides about Balances Transfers.","sidebar":"docs"},"learn/learn-guides-treasury":{"id":"learn/learn-guides-treasury","title":"Polkadot-JS Guides about the Treasury","description":"Polkadot-JS Guides about the Polkadot Treasury.","sidebar":"docs"},"learn/learn-guides-vault":{"id":"learn/learn-guides-vault","title":"Polkadot-JS Guides about the Vault App","description":"Polkadot-JS Guides about Polkadot Vault.","sidebar":"docs"},"learn/learn-hyperbridge":{"id":"learn/learn-hyperbridge","title":"Hyperbridge","description":"Polkadot\'s Bridge to Ethereum.","sidebar":"docs"},"learn/learn-identity":{"id":"learn/learn-identity","title":"Account Identity","description":"On-chain Identity, Judgements and Registrars.","sidebar":"docs"},"learn/learn-implementations":{"id":"learn/learn-implementations","title":"Polkadot Implementations","description":"Learn about the different Polkadot implementations."},"learn/learn-inflation":{"id":"learn/learn-inflation","title":"Token Inflation","description":"Explanation of Token\'s Inflation in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft":{"id":"learn/learn-nft","title":"NFTs","description":"The NFT Landscape of the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-pallets":{"id":"learn/learn-nft-pallets","title":"NFT Pallets","description":"Functionalities of the NFT Pallets in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-projects":{"id":"learn/learn-nft-projects","title":"NFT projects on Polkadot and Kusama","description":"NFT Projects in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nomination-pools":{"id":"learn/learn-nomination-pools","title":"Nomination Pools","description":"Staking through Polkadot\'s Nomination Pools.","sidebar":"docs"},"learn/learn-nominator":{"id":"learn/learn-nominator","title":"Nominator","description":"Role of Nominators in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-parachains":{"id":"learn/learn-parachains","title":"Parachains","description":"An Introduction to Polkadot\'s Parachains.","sidebar":"docs"},"learn/learn-parachains-faq":{"id":"learn/learn-parachains-faq","title":"Parachains FAQ","description":"Parachains FAQ.","sidebar":"docs"},"learn/learn-parachains-protocol":{"id":"learn/learn-parachains-protocol","title":"Parachains\' Protocol Overview","description":"Actors and Protocols involved in Polkadot and its Parachains\' Block Finality.","sidebar":"docs"},"learn/learn-parathreads":{"id":"learn/learn-parathreads","title":"Parathreads","description":"An Introductory Guide to Parathreads.","sidebar":"docs"},"learn/learn-phragmen":{"id":"learn/learn-phragmen","title":"NPoS Election Algorithms","description":"The Election Methods used in Polkadot\'s NPoS Mechanism.","sidebar":"docs"},"learn/learn-polkadot-host":{"id":"learn/learn-polkadot-host","title":"Polkadot Host (PH)","description":"The Polkadot Host and its Components.","sidebar":"docs"},"learn/learn-polkadot-js-guides":{"id":"learn/learn-polkadot-js-guides","title":"Polkadot-JS Guides","description":"Guides about Polkadot-JS.","sidebar":"docs"},"learn/learn-polkadot-opengov":{"id":"learn/learn-polkadot-opengov","title":"Introduction to Polkadot OpenGov","description":"Polkadot\u2019s Latest Model for Decentralized Governance.","sidebar":"docs"},"learn/learn-polkadot-opengov-origins":{"id":"learn/learn-polkadot-opengov-origins","title":"Polkadot OpenGov Origins","description":"All Origins for Polkadot\'s OpenGov.","sidebar":"docs"},"learn/learn-polkadot-opengov-treasury":{"id":"learn/learn-polkadot-opengov-treasury","title":"Treasury","description":"Polkadot\'s On-chain Treasury.","sidebar":"docs"},"learn/learn-polkadot-technical-fellowship":{"id":"learn/learn-polkadot-technical-fellowship","title":"Polkadot Technical Fellowship","description":"Self-governing body of experts and developers of the Polkadot protocol.","sidebar":"docs"},"learn/learn-polkadotjs":{"id":"learn/learn-polkadotjs","title":"Polkadot-JS","description":"Overview of Polkadot-JS.","sidebar":"docs"},"learn/learn-proxies":{"id":"learn/learn-proxies","title":"Proxy Accounts","description":"Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-proxies-pure":{"id":"learn/learn-proxies-pure","title":"Pure Proxy Accounts","description":"Pure Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-runtime-upgrades":{"id":"learn/learn-runtime-upgrades","title":"Runtime Upgrades","description":"Forkless Runtime Upgrades on Polkadot.","sidebar":"docs"},"learn/learn-sassafras":{"id":"learn/learn-sassafras","title":"Polkadot Block Production: SASSAFRAS","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-spree":{"id":"learn/learn-spree","title":"SPREE","description":"Fundamentals of SPREE.","sidebar":"docs"},"learn/learn-staking":{"id":"learn/learn-staking","title":"Introduction to Staking","description":"Overview of Staking and NPoS on Polkadot.","sidebar":"docs"},"learn/learn-staking-advanced":{"id":"learn/learn-staking-advanced","title":"Advanced Staking Concepts","description":"Advanced Concepts about Staking on Polkadot.","sidebar":"docs"},"learn/learn-system-chains":{"id":"learn/learn-system-chains","title":"System Parachains","description":"System Parachains currently deployed on Polkadot.","sidebar":"docs"},"learn/learn-teleport":{"id":"learn/learn-teleport","title":"Teleporting Assets","description":"Teleport Assets between Parachains and Relay Chain.","sidebar":"docs"},"learn/learn-transaction-fees":{"id":"learn/learn-transaction-fees","title":"Transaction Fees","description":"How Transaction Fees are Calculated and Handled.","sidebar":"docs"},"learn/learn-transactions":{"id":"learn/learn-transactions","title":"Types of Transactions (a.k.a. Extrinsics)","description":"Types of Transactions on Polkadot.","sidebar":"docs"},"learn/learn-validator":{"id":"learn/learn-validator","title":"Validator","description":"Role of Validators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-video-tutorials":{"id":"learn/learn-video-tutorials","title":"Videos about Polkadot","description":"Videos about Polkadot and Related Topics.","sidebar":"docs"},"learn/learn-wasm":{"id":"learn/learn-wasm","title":"WebAssembly (Wasm)","description":"WASM and its Role in Polkadot\'s Runtime.","sidebar":"docs"},"learn/learn-xcm":{"id":"learn/learn-xcm","title":"Introduction to Cross-Consensus Message Format (XCM)","description":"XCM, The Messaging Format at the Forefront of Interoperability.","sidebar":"docs"},"learn/learn-xcm-instructions":{"id":"learn/learn-xcm-instructions","title":"XCM Instructions & Register Specification","description":"Specification for Instructions and Registers for the XCM Format.","sidebar":"docs"},"learn/learn-xcm-pallet":{"id":"learn/learn-xcm-pallet","title":"XCM FRAME Pallet Overview","description":"Mechanics of the XCM Pallet and its role in Polkadot\'s Ecosystem.","sidebar":"docs"},"learn/learn-xcm-transport":{"id":"learn/learn-xcm-transport","title":"XCM Transport Methods (XCMP, HRMP, VMP)","description":"Methods to send XCM Messages across Networks.","sidebar":"docs"},"learn/learn-xcm-usecases":{"id":"learn/learn-xcm-usecases","title":"XCM Use-cases & Examples","description":"Cross-consensus Interactions and the XCM Format.","sidebar":"docs"},"learn/learn-xcvm":{"id":"learn/learn-xcvm","title":"XCM Virtual Machine (XCVM) & XCM Executor","description":"Design of the XCM Executor and Mechanics of the XCM Virtual Machine.","sidebar":"docs"},"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive":{"id":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive","title":"Executor Configuration","description":"Deep Dive into the Configuration of the XCM-Executor.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees","title":"Weight and Fees","description":"Weight and Fees in XCM.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset","title":"MultiAsset","description":"The MultiAsset Datatype.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary","title":"Fundamentals","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm","title":"XCVM","description":"Deep Dive into XCVM.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example","title":"Example","description":"A MultiLocation Example.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions","title":"Junction(s)","description":"The Junction Type in a MultiLocation Struct.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary","title":"MultiLocation","description":"Learn about XCM fundamentals.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-assets":{"id":"learn/xcm/journey/learn-xcm-docs-journey-assets","title":"Trap and Claim Assets","description":"Instructions to Trap and Claim Assets.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-channels":{"id":"learn/xcm/journey/learn-xcm-docs-journey-channels","title":"Channels and Bridges","description":"Establishment of HRMP Channels between Parachains.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-expectations":{"id":"learn/xcm/journey/learn-xcm-docs-journey-expectations","title":"Expectations","description":"Expect Instructions to Check if a Condition is Valid.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-fees":{"id":"learn/xcm/journey/learn-xcm-docs-journey-fees","title":"Fee Handling","description":"How Fees for XCM Transfers are Handled.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-holding":{"id":"learn/xcm/journey/learn-xcm-docs-journey-holding","title":"More Holding Modifiers","description":"More Instructions to Alter the Holding Register.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-origin":{"id":"learn/xcm/journey/learn-xcm-docs-journey-origin","title":"Origin Manipulation","description":"Manipulating the Origin of XCM.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-queries":{"id":"learn/xcm/journey/learn-xcm-docs-journey-queries","title":"Queries","description":"Query Information from another Consensus System.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-register":{"id":"learn/xcm/journey/learn-xcm-docs-journey-register","title":"Register Modifiers","description":"More Instructions to Change the XCVM Registers.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-summary":{"id":"learn/xcm/journey/learn-xcm-docs-journey-summary","title":"A Journey through XCM","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-transact":{"id":"learn/xcm/journey/learn-xcm-docs-journey-transact","title":"Transact","description":"The Transact Instruction to Execute XCM Calls.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-version":{"id":"learn/xcm/journey/learn-xcm-docs-journey-version","title":"Version Subscription","description":"Get Notified about XCM Version Updates.","sidebar":"docs"},"learn/xcm/journey/locks/learn-xcm-docs-journey-locks":{"id":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks","title":"Locks","description":"Restrict Transfer or Withdrawal of Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve","title":"Reserve-backed Transfers","description":"Reserve-backed Transfers: Third-party Reserve to store Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary","title":"Transfers","description":"Summary about XCM Transfers.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport","title":"Asset Teleportation","description":"Teleportation: Sending Assets Across Chains.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-intro":{"id":"learn/xcm/learn-xcm-docs-intro","title":"XCM: Cross-Consensus Messaging","description":"Introduction to the XCM Documentation.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-testing":{"id":"learn/xcm/learn-xcm-docs-testing","title":"Testing","description":"Testing XCM-powered Solutions.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-architecture":{"id":"learn/xcm/overview/learn-xcm-docs-overview-architecture","title":"The XCM Architecture","description":"The XCM Architecture.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-format":{"id":"learn/xcm/overview/learn-xcm-docs-overview-format","title":"XCM is a Format, not a Protocol","description":"XCM is a Format, not a Protocol.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-intro":{"id":"learn/xcm/overview/learn-xcm-docs-overview-intro","title":"Introduction","description":"An Introduction to XCM.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-summary":{"id":"learn/xcm/overview/learn-xcm-docs-overview-summary","title":"XCM: Cross-Consensus Messaging","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-xcvm":{"id":"learn/xcm/overview/learn-xcm-docs-overview-xcvm","title":"The XCVM","description":"The Cross-Consensus Virtual Machine.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look","title":"First Look at an XCM","description":"First Look at an XCM.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator","title":"XCM Simulator","description":"Test XCM using a Simulated Environment.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary","title":"Quickstart","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-glossary":{"id":"learn/xcm/reference/learn-xcm-docs-reference-glossary","title":"Glossary","description":"Glossary.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers":{"id":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers","title":"All XCVM Registers","description":"All XCVM Registers.","sidebar":"docs"},"maintain/archive/maintain-guides-democracy":{"id":"maintain/archive/maintain-guides-democracy","title":"Participate in Democracy","description":"Steps on how to participate in democracy.","sidebar":"docs"},"maintain/archive/maintain-guides-how-to-join-council":{"id":"maintain/archive/maintain-guides-how-to-join-council","title":"Join the Council","description":"Steps on how to join the official on-chain council.","sidebar":"docs"},"maintain/archive/maintain-guides-how-to-vote-councillor":{"id":"maintain/archive/maintain-guides-how-to-vote-councillor","title":"Voting for Councillors","description":"Steps on how to vote for councillors.","sidebar":"docs"},"maintain/doc-maintain-guides-validator-community":{"id":"maintain/doc-maintain-guides-validator-community","title":"Validator Community Overview","description":"An extensive guide to help you start and build a validator community.","sidebar":"docs"},"maintain/kusama/maintain-guides-how-to-validate-kusama":{"id":"maintain/kusama/maintain-guides-how-to-validate-kusama","title":"Run a Validator (Kusama)","description":"The fundamentals for running a Kusama validator."},"maintain/kusama/maintain-guides-society-kusama":{"id":"maintain/kusama/maintain-guides-society-kusama","title":"Kappa Sigma Mu","description":"Learn about the Kappa Sigma Mu society and join as a member."},"maintain/maintain-archive":{"id":"maintain/maintain-archive","title":"Maintain Archive","description":"Archive for the Maintain Section.","sidebar":"docs"},"maintain/maintain-bootnode":{"id":"maintain/maintain-bootnode","title":"Set up a Boot Node","description":"Steps on setting up a boot node.","sidebar":"docs"},"maintain/maintain-endpoints":{"id":"maintain/maintain-endpoints","title":"Node Endpoints","description":"List of node endpoints and examples of use.","sidebar":"docs"},"maintain/maintain-errors":{"id":"maintain/maintain-errors","title":"Errors and How to Resolve Them","description":"Common errors you might encounter and how they can be resolved.","sidebar":"docs"},"maintain/maintain-guides-async-backing":{"id":"maintain/maintain-guides-async-backing","title":"Upgrade Parachain for Asynchronous Backing Compatibility","description":"Steps on how to upgrade a parachain to be compatible with the relay chain\'s async backing feature.","sidebar":"docs"},"maintain/maintain-guides-avoid-slashing":{"id":"maintain/maintain-guides-avoid-slashing","title":"Validator Best Practices","description":"Best practices to avoid slashing.","sidebar":"docs"},"maintain/maintain-guides-how-to-chill":{"id":"maintain/maintain-guides-how-to-chill","title":"How to Chill","description":"Steps on chilling as a network participant.","sidebar":"docs"},"maintain/maintain-guides-how-to-monitor-your-node":{"id":"maintain/maintain-guides-how-to-monitor-your-node","title":"Monitor your node","description":"This guide will walk you through how to set up Prometheus with","sidebar":"docs"},"maintain/maintain-guides-how-to-stop-validating":{"id":"maintain/maintain-guides-how-to-stop-validating","title":"How to Stop Validating","description":"Steps on how to stop validating.","sidebar":"docs"},"maintain/maintain-guides-how-to-systemd":{"id":"maintain/maintain-guides-how-to-systemd","title":"Using systemd for a Validator Node","description":"Using a service manager for your validator node.","sidebar":"docs"},"maintain/maintain-guides-how-to-upgrade":{"id":"maintain/maintain-guides-how-to-upgrade","title":"How to Upgrade Your Validator","description":"Validators perform critical functions for the network, and as such, have strict uptime requirements.","sidebar":"docs"},"maintain/maintain-guides-how-to-validate-polkadot":{"id":"maintain/maintain-guides-how-to-validate-polkadot","title":"Run a Validator (Polkadot)","description":"The fundamentals for running a Polkadot validator.","sidebar":"docs"},"maintain/maintain-guides-secure-validator":{"id":"maintain/maintain-guides-secure-validator","title":"Secure Validator","description":"Tips for running a secure validator.","sidebar":"docs"},"maintain/maintain-guides-validator-payout":{"id":"maintain/maintain-guides-validator-payout","title":"Validator Payout Overview","description":"How validator payout works on the network and what you should expect.","sidebar":"docs"},"maintain/maintain-index":{"id":"maintain/maintain-index","title":"Network Maintainers","description":"Reference point for network maintenance guides.","sidebar":"docs"},"maintain/maintain-networks":{"id":"maintain/maintain-networks","title":"Networks","description":"Information about the different networks of the Polkadot ecosystem.","sidebar":"docs"},"maintain/maintain-polkadot-parameters":{"id":"maintain/maintain-polkadot-parameters","title":"Polkadot Parameters","description":"A description about fundamental Polkadot parameters.","sidebar":"docs"},"maintain/maintain-rpc":{"id":"maintain/maintain-rpc","title":"Set up a RPC node","description":"Steps on setting up a RPC node.","sidebar":"docs"},"maintain/maintain-sync":{"id":"maintain/maintain-sync","title":"Set up a Full Node","description":"Steps on how to set up a full node.","sidebar":"docs"},"maintain/maintain-wss":{"id":"maintain/maintain-wss","title":"Secure the WebSocket","description":"Steps on setting up a secure socket for remote connections.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.bf2e94d0.js b/assets/js/935f2afb.bf2e94d0.js deleted file mode 100644 index 3d0ce9f2cfa6..000000000000 --- a/assets/js/935f2afb.bf2e94d0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[53],{22624:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"Explore","description":"Wallets and Apps in the Polkadot Ecosystem.","items":[{"type":"link","label":"Getting Started","href":"/docs/getting-started","docId":"general/getting-started"},{"type":"category","label":"Wallets","description":"Beginner friendly wallets with advanced features.","items":[{"type":"link","label":"Wallets and Extensions","href":"/docs/wallets-and-extensions","docId":"general/wallets-and-extensions"},{"type":"link","label":"Ledger","href":"/docs/ledger","docId":"general/ledger"},{"type":"link","label":"Polkadot Vault","href":"/docs/polkadot-vault","docId":"general/polkadot-vault"}],"collapsed":true,"collapsible":true,"href":"/docs/wallets-index"},{"type":"category","label":"Apps","description":"Apps for Staking, Governance, Multisigs, NFTs and many more use cases.","items":[{"type":"link","label":"Polkadot Ecosystem Apps","description":"Apps listed on official Polkadot website.","href":"https://polkadot.network/ecosystem/dapps/"},{"type":"link","label":"DotAppStore","description":"Apps upvoted by the community.","href":"https://dotappstore.com/"},{"type":"link","label":"Staking Apps","href":"/docs/staking-apps","docId":"general/staking-apps"},{"type":"link","label":"Governance Apps","href":"/docs/governance-apps","docId":"general/governance-apps"},{"type":"link","label":"Multisig Apps","href":"/docs/multisig-apps","docId":"general/multisig-apps"},{"type":"link","label":"NFT Projects","href":"/docs/learn-nft-projects","docId":"learn/learn-nft-projects"},{"type":"link","label":"Parachain Apps","href":"/docs/parachains-apps","docId":"general/parachains-apps"}],"collapsed":true,"collapsible":true,"href":"/docs/apps-index"},{"type":"category","label":"Dashboards","description":"Dashboards in the Polkadot Ecosystem.","items":[{"type":"link","label":"Staking Dashboard","href":"/docs/staking-dashboard","docId":"general/staking-dashboard"}],"collapsed":true,"collapsible":true,"href":"/docs/dashboards-index"},{"type":"category","label":"Community & Contributors","description":"Polkadot Community and Wiki Contributors.","items":[{"type":"link","label":"Community","href":"/docs/community","docId":"general/community"},{"type":"link","label":"Contributing to the Wiki","href":"/docs/contributing","docId":"general/contributing"},{"type":"link","label":"Contributors","href":"/docs/contributors","docId":"general/contributors"}],"collapsed":true,"collapsible":true,"href":"/docs/community-index"},{"type":"category","label":"Programs","description":"Programs for Grants, Bounties, Ambassadors and many more inititatives.","items":[{"type":"link","label":"Decentralized Futures","href":"/docs/decentralized-futures","docId":"general/decentralized-futures"},{"type":"link","label":"Decentralized Voices","href":"/docs/decentralized-voices","docId":"general/decentralized-voices"},{"type":"link","label":"Grants","href":"/docs/grants","docId":"general/grants"},{"type":"link","label":"Bug Bounty","href":"/docs/bug-bounty","docId":"general/bug-bounty"},{"type":"link","label":"Polkadot Ambassadors","href":"/docs/ambassadors","docId":"general/ambassadors"},{"type":"link","label":"Alpha Program","href":"/docs/alpha-program","docId":"general/alpha-program"},{"type":"link","label":"Thousand Validators","href":"/docs/thousand-validators","docId":"general/doc-thousand-validators"},{"type":"link","label":"Thousand Contributors","href":"/docs/thousand-contributors","docId":"general/doc-thousand-contributors"},{"type":"link","label":"Developer Heroes","href":"/docs/dev-heroes","docId":"general/dev-heroes"}],"collapsed":true,"collapsible":true,"href":"/docs/programs-index"},{"type":"link","label":"Metadata Explorer","href":"/docs/metadata","docId":"general/metadata"}],"collapsed":true,"collapsible":true,"href":"/docs/explore-index"},{"type":"category","label":"Learn","items":[{"type":"category","label":"General","description":"General Information to get started with Polkadot and Web3.","items":[{"type":"link","label":"Web3 and Polkadot","href":"/docs/web3-and-polkadot","docId":"general/web3-and-polkadot"},{"type":"category","label":"Polkadot Vision","description":"Polkadot\'s Vision revealed by Gavin Wood at Decoded 2023.","items":[{"type":"link","label":"Polkadot 1.0","href":"/docs/polkadot-v1","docId":"general/polkadot-v1"},{"type":"link","label":"Polkadot Direction","href":"/docs/polkadot-direction","docId":"general/polkadot-direction"}],"collapsed":true,"collapsible":true,"href":"/docs/polkadot-vision-index"},{"type":"category","label":"Stay Safe","description":"Good-practices to Stay Safe while Surfing in Web3.","items":[{"type":"link","label":"Do Your Own Research","href":"/docs/how-to-dyor","docId":"general/how-to-dyor"},{"type":"link","label":"Scam Protection","href":"/docs/learn-scams","docId":"general/scams"},{"type":"link","label":"Transaction Verification","href":"/docs/transaction-attacks","docId":"general/transaction-attacks"}],"collapsed":true,"collapsible":true,"href":"/docs/stay-safe-index"},{"type":"link","label":"Build on Polkadot","href":"/docs/start-building","docId":"general/start-building"},{"type":"link","label":"Research Pages","href":"/docs/research","docId":"general/research"},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"general/faq"},{"type":"link","label":"Glossary","href":"/docs/glossary","docId":"general/glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/general-index"},{"type":"category","label":"Basics","description":"Staking, Accounts, Transactions, Tokens and NFTs, and Governance.","items":[{"type":"category","label":"Accounts","description":"Basic Accounts, Identity, Multi-signature, and Proxies.","items":[{"type":"link","label":"Account Abstraction","href":"/docs/learn-account-abstraction","docId":"learn/learn-account-abstraction"},{"type":"link","label":"Account Identity","href":"/docs/learn-identity","docId":"learn/learn-identity"},{"type":"link","label":"Multi-Signature Accounts","href":"/docs/learn-account-multisig","docId":"learn/learn-account-multisig"},{"type":"link","label":"Proxy Accounts","href":"/docs/learn-proxies","docId":"learn/learn-proxies"},{"type":"link","label":"Pure Proxy Accounts","href":"/docs/learn-proxies-pure","docId":"learn/learn-proxies-pure"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-accounts"},{"type":"category","label":"Transactions","description":"Extrinsics, Balance Transfers, and Fees.","items":[{"type":"link","label":"Transaction Fees","href":"/docs/learn-transaction-fees","docId":"learn/learn-transaction-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-transactions"},{"type":"category","label":"Staking","description":"Mechanics of Staking.","items":[{"type":"link","label":"Introduction to Staking","href":"/docs/learn-staking","docId":"learn/learn-staking"},{"type":"link","label":"Nomination Pools","href":"/docs/learn-nomination-pools","docId":"learn/learn-nomination-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-staking-index"},{"type":"category","label":"Polkadot OpenGov","description":"Everything about Polkadot OpenGov.","items":[{"type":"link","label":"Polkadot OpenGov","href":"/docs/learn-polkadot-opengov","docId":"learn/learn-polkadot-opengov"},{"type":"link","label":"OpenGov Origins","href":"/docs/learn-polkadot-opengov-origins","docId":"learn/learn-polkadot-opengov-origins"},{"type":"link","label":"Technical Fellowship","href":"/docs/learn-polkadot-technical-fellowship","docId":"learn/learn-polkadot-technical-fellowship"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadot-opengov-index"},{"type":"link","label":"Treasury","href":"/docs/learn-polkadot-opengov-treasury","docId":"learn/learn-polkadot-opengov-treasury"},{"type":"category","label":"Tokens and Assets","description":"DOT Token, Asset Hub, and Teleports.","items":[{"type":"link","label":"Asset Hub","href":"/docs/learn-assets","docId":"learn/learn-assets"},{"type":"link","label":"DOT","href":"/docs/learn-DOT","docId":"learn/learn-DOT"},{"type":"link","label":"Token Inflation","href":"/docs/learn-inflation","docId":"learn/learn-inflation"},{"type":"link","label":"Teleporting Assets","href":"/docs/learn-teleport","docId":"learn/learn-teleport"},{"type":"link","label":"Introduction to NFTs","href":"/docs/learn-nft","docId":"learn/learn-nft"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-assets-index"},{"type":"category","label":"Components","description":"OpenGov, Treasury, WASM, Runtime Upgrades, and more.","items":[{"type":"link","label":"Polkadot Host","href":"/docs/learn-polkadot-host","docId":"learn/learn-polkadot-host"},{"type":"link","label":"WebAssembly (Wasm)","href":"/docs/learn-wasm","docId":"learn/learn-wasm"},{"type":"link","label":"Runtime Upgrades","href":"/docs/learn-runtime-upgrades","docId":"learn/learn-runtime-upgrades"},{"type":"link","label":"Consensus","href":"/docs/learn-consensus","docId":"learn/learn-consensus"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-components-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-basics-index"},{"type":"category","label":"Advanced","description":"Advanced Concepts & Guides about Accounts, Staking, and NFTs.","items":[{"type":"category","label":"Polkadot-JS","description":"Overview of Polkadot-JS.","items":[{"type":"link","label":"Polkadot-JS Tooling","href":"/docs/polkadotjs","docId":"general/polkadotjs"},{"type":"link","label":"Polkadot-JS UI","href":"/docs/polkadotjs-ui","docId":"general/polkadotjs-ui"},{"type":"category","label":"Polkadot-JS Guides","description":"Polkadot-JS Guides about Staking, Asset Hub, Vault App, and more.","items":[{"type":"category","label":"Account Guides","description":"Polkadot-JS Guides about Accounts.","items":[{"type":"link","label":"Multisig Guides","href":"/docs/learn-guides-accounts-multisig","docId":"learn/learn-guides-accounts-multisig"},{"type":"link","label":"Proxy Guides","href":"/docs/learn-guides-accounts-proxy","docId":"learn/learn-guides-accounts-proxy"},{"type":"link","label":"Pure Proxy Guides","href":"/docs/learn-guides-accounts-proxy-pure","docId":"learn/learn-guides-accounts-proxy-pure"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-accounts"},{"type":"link","label":"Transfer Guides","href":"/docs/learn-guides-transfers","docId":"learn/learn-guides-transfers"},{"type":"category","label":"Staking Guides","description":"Polkadot-JS Guides about Staking.","items":[{"type":"link","label":"Nominator Guides","href":"/docs/learn-guides-nominator","docId":"learn/learn-guides-nominator"},{"type":"link","label":"Nomination Pool Guides","href":"/docs/learn-guides-staking-pools","docId":"learn/learn-guides-staking-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-staking"},{"type":"link","label":"OpenGov Guides","href":"/docs/learn-guides-polkadot-opengov","docId":"learn/learn-guides-polkadot-opengov"},{"type":"link","label":"Treasury Guides","href":"/docs/learn-guides-treasury","docId":"learn/learn-guides-treasury"},{"type":"link","label":"Bounty Guides","href":"/docs/learn-guides-bounties","docId":"learn/learn-guides-bounties"},{"type":"link","label":"Identity Guides","href":"/docs/learn-guides-identity","docId":"learn/learn-guides-identity"},{"type":"link","label":"Ledger Guides","href":"/docs/learn-guides-ledger","docId":"learn/learn-guides-ledger"},{"type":"link","label":"Polkadot Vault Guides","href":"/docs/learn-guides-vault","docId":"learn/learn-guides-vault"},{"type":"category","label":"Asset Hub Guides","description":"Polkadot-JS Guides about Asset Hub.","items":[{"type":"link","label":"Create Asset Guides","href":"/docs/learn-guides-assets-create","docId":"learn/learn-guides-assets-create"},{"type":"link","label":"Asset Hub Ledger Guides","href":"/docs/learn-guides-assets-ledger","docId":"learn/learn-guides-assets-ledger"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-assets"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadot-js-guides"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-polkadotjs-index"},{"type":"category","label":"Architecture","description":"Nominators, Validators, Collators, Parachains, and more.","items":[{"type":"link","label":"Architecture","href":"/docs/learn-architecture","docId":"learn/learn-architecture"},{"type":"category","label":"Network Participants","description":"Participants in the Polkadot Ecosystem.","items":[{"type":"link","label":"Collator","href":"/docs/learn-collator","docId":"learn/learn-collator"},{"type":"link","label":"Nominator","href":"/docs/learn-nominator","docId":"learn/learn-nominator"},{"type":"link","label":"Validator","href":"/docs/learn-validator","docId":"learn/learn-validator"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-participants-index"},{"type":"category","label":"Parachains","description":"Parachains\' Protocol, Auctions, Crowdloans, and more.","items":[{"type":"link","label":"Introduction to Parachains","href":"/docs/learn-parachains","docId":"learn/learn-parachains"},{"type":"link","label":"Protocol Overview","href":"/docs/learn-parachains-protocol","docId":"learn/learn-parachains-protocol"},{"type":"link","label":"System Parachains","href":"/docs/learn-system-chains","docId":"learn/learn-system-chains"},{"type":"link","label":"Parachain Slot Auctions","href":"/docs/learn-auction","docId":"learn/learn-auction"},{"type":"link","label":"Parachain Crowdloans","href":"/docs/learn-crowdloans","docId":"learn/learn-crowdloans"},{"type":"link","label":"Parachains FAQ","href":"/docs/learn-parachains-faq","docId":"learn/learn-parachains-faq"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-parachains-index"},{"type":"category","label":"Agile Coretime","description":"Concepts, Implementation and Tutorials on Agile Coretime.","items":[{"type":"link","label":"Agile Coretime","href":"/docs/learn-agile-coretime","docId":"learn/learn-agile-coretime"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-agile-coretime-index"},{"type":"link","label":"Bridges","href":"/docs/learn-bridges","docId":"learn/learn-bridges"},{"type":"category","label":"Cross Consensus Messaging (XCM)","description":"Polkadot\'s Cross-Consensus Messaging Format (XCM).","items":[{"type":"link","label":"Cross-Consensus Message Format (XCM)","href":"/docs/learn-xcm","docId":"learn/learn-xcm"},{"type":"link","label":"XCM Pallet","href":"/docs/learn-xcm-pallet","docId":"learn/learn-xcm-pallet"},{"type":"link","label":"XCM Use-cases","href":"/docs/learn-xcm-usecases","docId":"learn/learn-xcm-usecases"},{"type":"link","label":"XCM Transport","href":"/docs/learn-xcm-transport","docId":"learn/learn-xcm-transport"},{"type":"link","label":"XCM Virtual Machine (XCVM)","href":"/docs/learn-xcvm","docId":"learn/learn-xcvm"},{"type":"link","label":"XCM Instructions","href":"/docs/learn-xcm-instructions","docId":"learn/learn-xcm-instructions"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-xcm-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-architecture-index"},{"type":"link","label":"Accounts","href":"/docs/learn-account-advanced","docId":"learn/learn-account-advanced"},{"type":"link","label":"Advanced Staking Concepts","href":"/docs/learn-staking-advanced","docId":"learn/learn-staking-advanced"},{"type":"link","label":"NFT Pallets","href":"/docs/learn-nft-pallets","docId":"learn/learn-nft-pallets"},{"type":"link","label":"Cryptography","href":"/docs/learn-cryptography","docId":"learn/learn-cryptography"},{"type":"link","label":"NPoS Election Algorithms","href":"/docs/learn-phragmen","docId":"learn/learn-phragmen"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-advanced-index"},{"type":"category","label":"XCM Docs","description":"In-depth documentation about the Polkadot\'s Cross-Chain Messaging (XCM).","items":[{"type":"link","label":"XCM: Cross-Consensus Messaging","href":"/docs/learn/xcm/introduction","docId":"learn/xcm/learn-xcm-docs-intro"},{"type":"category","label":"Overview","description":"Overview of the XCM Documentation.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/overview-summary","docId":"learn/xcm/overview/learn-xcm-docs-overview-summary"},{"type":"link","label":"Introduction","href":"/docs/learn/xcm/overview-intro","docId":"learn/xcm/overview/learn-xcm-docs-overview-intro"},{"type":"link","label":"A Format, not a Protocol","href":"/docs/learn/xcm/overview-format","docId":"learn/xcm/overview/learn-xcm-docs-overview-format"},{"type":"link","label":"The XCVM","href":"/docs/learn/xcm/overview-xcvm","docId":"learn/xcm/overview/learn-xcm-docs-overview-xcvm"},{"type":"link","label":"Architecture","href":"/docs/learn/xcm/overview-architecture","docId":"learn/xcm/overview/learn-xcm-docs-overview-architecture"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/overview"},{"type":"category","label":"Quickstart","description":"Start Diving into XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/quickstart-summary","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary"},{"type":"link","label":"XCM Simulator","href":"/docs/learn/xcm/quickstart-simulator","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator"},{"type":"link","label":"First Look at an XCM","href":"/docs/learn/xcm/quickstart-first-look","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/quickstart"},{"type":"category","label":"Fundamentals","description":"Fundamental Concepts about XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals-summary","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary"},{"type":"category","label":"MultiLocation","description":"The MultiLocation Type.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals/multilocation-summary","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary"},{"type":"link","label":"Junction(s)","href":"/docs/learn/xcm/fundamentals/multilocation-junctions","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions"},{"type":"link","label":"Example","href":"/docs/learn/xcm/fundamentals/multilocation-example","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals/multilocation"},{"type":"link","label":"MultiAsset","href":"/docs/learn/xcm/fundamentals-multiasset","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset"},{"type":"link","label":"XCVM","href":"/docs/learn/xcm/fundamentals-xcvm","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm"},{"type":"link","label":"Weight and Fees","href":"/docs/learn/xcm/fundamentals-fees","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals"},{"type":"category","label":"A Journey through XCM","description":"A Practical Introduction to the XCM Features","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey-summary","docId":"learn/xcm/journey/learn-xcm-docs-journey-summary"},{"type":"category","label":"Transfers","description":"Transferring Assets between Consensus Systems with XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey/transfers-summary","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary"},{"type":"link","label":"Asset Teleportation","href":"/docs/learn/xcm/journey/transfers-teleport","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport"},{"type":"link","label":"Reserve-backed Transfers","href":"/docs/learn/xcm/journey/transfers-reserve","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey/transfers"},{"type":"link","label":"Fee Handling","href":"/docs/learn/xcm/journey-fees","docId":"learn/xcm/journey/learn-xcm-docs-journey-fees"},{"type":"link","label":"Transact: A General Solution","href":"/docs/learn/xcm/journey-transact","docId":"learn/xcm/journey/learn-xcm-docs-journey-transact"},{"type":"link","label":"Origin Manipulation","href":"/docs/learn/xcm/journey-origin","docId":"learn/xcm/journey/learn-xcm-docs-journey-origin"},{"type":"link","label":"More Register Modifiers","href":"/docs/learn/xcm/journey-register","docId":"learn/xcm/journey/learn-xcm-docs-journey-register"},{"type":"link","label":"More Holding Modifiers","href":"/docs/learn/xcm/journey-holding","docId":"learn/xcm/journey/learn-xcm-docs-journey-holding"},{"type":"link","label":"Trap and Claim Assets","href":"/docs/learn/xcm/journey-assets","docId":"learn/xcm/journey/learn-xcm-docs-journey-assets"},{"type":"link","label":"Expectations","href":"/docs/learn/xcm/journey-expectations","docId":"learn/xcm/journey/learn-xcm-docs-journey-expectations"},{"type":"link","label":"Queries","href":"/docs/learn/xcm/journey-queries","docId":"learn/xcm/journey/learn-xcm-docs-journey-queries"},{"type":"link","label":"Version Subscription","href":"/docs/learn/xcm/journey-version","docId":"learn/xcm/journey/learn-xcm-docs-journey-version"},{"type":"link","label":"Locks","href":"/docs/learn/xcm/journey-locks","docId":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks"},{"type":"link","label":"Channels and Bridges","href":"/docs/learn/xcm/journey-channels","docId":"learn/xcm/journey/learn-xcm-docs-journey-channels"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey"},{"type":"link","label":"Executor Configuration","href":"/docs/learn/xcm/config-deep-dive","docId":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive"},{"type":"link","label":"Testing","href":"/docs/learn/xcm/testing","docId":"learn/xcm/learn-xcm-docs-testing"},{"type":"category","label":"References","description":"XCVM Registers and Glossary","items":[{"type":"link","label":"All XCVM Registers","href":"/docs/learn/xcm/reference-xcvm-registers","docId":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers"},{"type":"link","label":"Glossary","href":"/docs/learn/xcm/reference-glossary","docId":"learn/xcm/reference/learn-xcm-docs-reference-glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/references"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm"},{"type":"category","label":"Polkadot Comparisons","description":"Comparison between Polkadot and other Networks. ","items":[{"type":"link","label":"Kusama","href":"/docs/learn-comparisons-kusama","docId":"learn/learn-comparisons-kusama"},{"type":"link","label":"Ethereum","href":"/docs/learn-comparisons-ethereum-2","docId":"learn/learn-comparisons-ethereum-2"},{"type":"link","label":"Cosmos","href":"/docs/learn-comparisons-cosmos","docId":"learn/learn-comparisons-cosmos"},{"type":"link","label":"Avalanche","href":"/docs/learn-comparisons-avalanche","docId":"learn/learn-comparisons-avalanche"},{"type":"link","label":"Other Comparisons","href":"/docs/learn-comparisons","docId":"learn/learn-comparisons"},{"type":"link","label":"Layer Two and Rollups","href":"/docs/learn-comparisons-rollups","docId":"learn/learn-comparisons-rollups"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-comparisons-index"},{"type":"link","label":"Videos","href":"/docs/learn-video-tutorials","docId":"learn/learn-video-tutorials"},{"type":"category","label":"Future Implementations","description":"Implementations that will be deployed on Polkadot.","items":[{"type":"link","label":"SPREE","href":"/docs/learn-spree","docId":"learn/learn-spree"},{"type":"link","label":"Parathreads","href":"/docs/learn-parathreads","docId":"learn/learn-parathreads"},{"type":"link","label":"Asynchronous Backing","href":"/docs/learn-async-backing","docId":"learn/learn-async-backing"},{"type":"link","label":"SASSAFRAS","href":"/docs/learn-sassafras","docId":"learn/learn-sassafras"},{"type":"link","label":"Hyperbridge","href":"/docs/learn-hyperbridge","docId":"learn/learn-hyperbridge"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-future-implementations-index"},{"type":"category","label":"Archive","description":"Implementations no longer live on Polkadot.","items":[{"type":"link","label":"Governance V1","href":"/docs/learn/learn-governance","docId":"learn/archive/learn-governance"},{"type":"link","label":"Gov1 Treasury","href":"/docs/learn/learn-treasury","docId":"learn/archive/learn-treasury"},{"type":"link","label":"Polkadot Launch Phases","href":"/docs/learn/learn-launch","docId":"learn/archive/learn-launch"},{"type":"link","label":"Redenomination of DOT","href":"/docs/learn/learn-redenomination","docId":"learn/archive/learn-redenomination"},{"type":"link","label":"Controller Accounts","href":"/docs/learn/learn-controller","docId":"learn/archive/learn-controller"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-archive"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-index"},{"type":"category","label":"Build","items":[{"type":"category","label":"Client-side Development","items":[{"type":"link","label":"Building dApps","href":"/docs/build-dapp","docId":"build/build-dapp"},{"type":"link","label":"Oracles","href":"/docs/build-oracle","docId":"build/build-oracle"},{"type":"link","label":"Using Light Clients","href":"/docs/build-light-clients","docId":"build/build-light-clients"},{"type":"link","label":"Decentralized Storage","href":"/docs/build-storage","docId":"build/build-storage"},{"type":"link","label":"Transaction Construction","href":"/docs/build-transaction-construction","docId":"build/build-transaction-construction"},{"type":"link","label":"Node Interaction","href":"/docs/build-node-interaction","docId":"build/build-node-interaction"}],"collapsed":true,"collapsible":true,"href":"/docs/build-client-index"},{"type":"link","label":"Smart Contracts","href":"/docs/build-smart-contracts","docId":"build/build-smart-contracts"},{"type":"category","label":"Protocol Development","items":[{"type":"link","label":"Polkadot Protocol","href":"/docs/build-protocol-info","docId":"build/build-protocol-info"},{"type":"link","label":"Parachain Development","href":"/docs/build-pdk","docId":"build/build-parachains"},{"type":"link","label":"Integrating Assets","href":"/docs/build-integrate-assets","docId":"build/build-integrate-assets"},{"type":"link","label":"Opening HRMP Channels","href":"/docs/build-hrmp-channels","docId":"build/build-hrmp-channels"}],"collapsed":true,"collapsible":true,"href":"/docs/build-protocol-index"},{"type":"category","label":"Development Networks & Node Management","items":[{"type":"link","label":"Networks Overview","href":"/docs/build-network-overview","docId":"build/build-network-overview"},{"type":"link","label":"Integration Initiation","href":"/docs/build-integration","docId":"build/build-integration"},{"type":"link","label":"Node Management","href":"/docs/build-node-management","docId":"build/build-node-management"}],"collapsed":true,"collapsible":true,"href":"/docs/build-network-index"},{"type":"category","label":"Tooling","items":[{"type":"link","label":"Explorer, Data, & Indexing Tools","href":"/docs/build-data","docId":"build/build-data"},{"type":"link","label":"Open Source Stack","href":"/docs/build-open-source","docId":"build/build-open-source"}],"collapsed":true,"collapsible":true,"href":"/docs/build-tools-index"},{"type":"link","label":"Hackathons","href":"/docs/build-hackathon","docId":"build/build-hackathon"}],"collapsed":true,"collapsible":true,"href":"/docs/build-guide"},{"type":"category","label":"Maintain","items":[{"type":"link","label":"Parameters","href":"/docs/maintain-polkadot-parameters","docId":"maintain/maintain-polkadot-parameters"},{"type":"category","label":"Nodes and Dapps","description":"Learn how to set up a node.","items":[{"type":"link","label":"Node Endpoints","href":"/docs/maintain-endpoints","docId":"maintain/maintain-endpoints"},{"type":"link","label":"Set up a Full Node","href":"/docs/maintain-sync","docId":"maintain/maintain-sync"},{"type":"link","label":"Set up a Boot Node","href":"/docs/maintain-bootnode","docId":"maintain/maintain-bootnode"},{"type":"link","label":"Set up a RPC node","href":"/docs/maintain-rpc","docId":"maintain/maintain-rpc"},{"type":"link","label":"Secure the WebSocket","href":"/docs/maintain-wss","docId":"maintain/maintain-wss"},{"type":"link","label":"Networks","href":"/docs/maintain-networks","docId":"maintain/maintain-networks"},{"type":"link","label":"Resolving Errors","href":"/docs/maintain-errors","docId":"maintain/maintain-errors"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-node-index"},{"type":"category","label":"Collator Guides","description":"Guides for Collator Nodes.","items":[{"type":"link","label":"Async Backing Upgrade","href":"/docs/maintain-guides-async-backing","docId":"maintain/maintain-guides-async-backing"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-collator-index"},{"type":"category","label":"Validator Guides","description":"Guides for Validator Nodes.","items":[{"type":"link","label":"How to run a Validator on Polkadot","href":"/docs/maintain-guides-how-to-validate-polkadot","docId":"maintain/maintain-guides-how-to-validate-polkadot"},{"type":"link","label":"Validator Payout Overview","href":"/docs/maintain-guides-validator-payout","docId":"maintain/maintain-guides-validator-payout"},{"type":"link","label":"Using systemd for a Validator Node","href":"/docs/maintain-guides-how-to-systemd","docId":"maintain/maintain-guides-how-to-systemd"},{"type":"link","label":"Secure Validator","href":"/docs/maintain-guides-secure-validator","docId":"maintain/maintain-guides-secure-validator"},{"type":"link","label":"How to Upgrade Your Validator","href":"/docs/maintain-guides-how-to-upgrade","docId":"maintain/maintain-guides-how-to-upgrade"},{"type":"link","label":"Monitor your node","href":"/docs/maintain-guides-how-to-monitor-your-node","docId":"maintain/maintain-guides-how-to-monitor-your-node"},{"type":"link","label":"How to Chill","href":"/docs/maintain-guides-how-to-chill","docId":"maintain/maintain-guides-how-to-chill"},{"type":"link","label":"How to Stop Validating","href":"/docs/maintain-guides-how-to-stop-validating","docId":"maintain/maintain-guides-how-to-stop-validating"},{"type":"link","label":"Validator Community Overview","href":"/docs/maintain-guides-validator-community","docId":"maintain/doc-maintain-guides-validator-community"},{"type":"link","label":"Validator Best Practices","href":"/docs/maintain-guides-avoid-slashing","docId":"maintain/maintain-guides-avoid-slashing"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-validator-index"},{"type":"category","label":"Archive","description":"Basic Accounts, Identity, Multi-signature, and Proxies.","items":[{"type":"link","label":"Participate in Democracy","href":"/docs/maintain/maintain-guides-democracy","docId":"maintain/archive/maintain-guides-democracy"},{"type":"link","label":"Join the Council","href":"/docs/maintain/maintain-guides-how-to-join-council","docId":"maintain/archive/maintain-guides-how-to-join-council"},{"type":"link","label":"Voting for Councillors","href":"/docs/maintain/maintain-guides-how-to-vote-councillor","docId":"maintain/archive/maintain-guides-how-to-vote-councillor"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-archive"}],"collapsed":true,"collapsible":true,"href":"/docs/maintain-index"}]},"docs":{"build/build-dapp":{"id":"build/build-dapp","title":"Building dApps","description":"An overview about building dApps on Polkadot","sidebar":"docs"},"build/build-data":{"id":"build/build-data","title":"Explorer, Data, & Indexing Tools","description":"An overview about building with data analytics","sidebar":"docs"},"build/build-guide":{"id":"build/build-guide","title":"Polkadot Developer Portal","description":"Start building with Polkadot/Kusama.","sidebar":"docs"},"build/build-hackathon":{"id":"build/build-hackathon","title":"Hackathons","description":"Join or host a Hackathon.","sidebar":"docs"},"build/build-hrmp-channels":{"id":"build/build-hrmp-channels","title":"Opening HRMP Channels","description":"Steps on how to open HRMP channels between parachains.","sidebar":"docs"},"build/build-index":{"id":"build/build-index","title":"Builder\'s Guides","description":"Reference point for the Polkadot builder guides."},"build/build-integrate-assets":{"id":"build/build-integrate-assets","title":"Assets on Polkadot","description":"Tools that you can use to integrating assets.","sidebar":"docs"},"build/build-integration":{"id":"build/build-integration","title":"Polkadot Integration Guide","description":"Reference point for the Polkadot integration guides.","sidebar":"docs"},"build/build-light-clients":{"id":"build/build-light-clients","title":"Using Light Clients","description":"Information about light client options.","sidebar":"docs"},"build/build-network-overview":{"id":"build/build-network-overview","title":"Networks Overview","description":"An overview of the different networks on Polkadot","sidebar":"docs"},"build/build-node-interaction":{"id":"build/build-node-interaction","title":"Node Interaction","description":"Tools for node interaction.","sidebar":"docs"},"build/build-node-management":{"id":"build/build-node-management","title":"Node Management","description":"Steps on how to manage your Polkadot node.","sidebar":"docs"},"build/build-open-source":{"id":"build/build-open-source","title":"Open Source Stack","description":"Overview of the open source Polkadot/Kusama Tech Stack","sidebar":"docs"},"build/build-oracle":{"id":"build/build-oracle","title":"Oracles","description":"Information about building with oracles.","sidebar":"docs"},"build/build-parachains":{"id":"build/build-parachains","title":"Parachain Development","description":"A guide on what it means to become a Parachain and the steps to do so.","sidebar":"docs"},"build/build-protocol-info":{"id":"build/build-protocol-info","title":"Polkadot Protocol Information","description":"Characteristics about the Polkadot protocol, and what you need to consider when building.","sidebar":"docs"},"build/build-smart-contracts":{"id":"build/build-smart-contracts","title":"Smart Contracts","description":"How smart contracts play their role in the Polkadot ecosystem.","sidebar":"docs"},"build/build-storage":{"id":"build/build-storage","title":"Decentralized Storage","description":"Information about building with decentralized storage.","sidebar":"docs"},"build/build-tools-index":{"id":"build/build-tools-index","title":"Tool Index","description":"Reference point for a list of tools to support your development.","sidebar":"docs"},"build/build-transaction-construction":{"id":"build/build-transaction-construction","title":"Transaction Construction and Signing","description":"Information about how transactions are constructed on Polkadot.","sidebar":"docs"},"general/alpha-program":{"id":"general/alpha-program","title":"Polkadot Alpha Program","description":"The Polkadot Alpha Program and How it can Support your Development.","sidebar":"docs"},"general/ambassadors":{"id":"general/ambassadors","title":"Polkadot Ambassador Program","description":"The Polkadot\'s Ambassador Program and How you can Participate in It.","sidebar":"docs"},"general/bug-bounty":{"id":"general/bug-bounty","title":"Bug Bounty Program","description":"An Overview of How you can Help Catch Bugs.","sidebar":"docs"},"general/community":{"id":"general/community","title":"Community","description":"Connect and stay updated with the Polkadot Community.","sidebar":"docs"},"general/contributing":{"id":"general/contributing","title":"Contributing to the Polkadot Wiki","description":"Contribute to the Polkadot Wiki.","sidebar":"docs"},"general/contributors":{"id":"general/contributors","title":"Contributors","description":"Get to know your Wiki-slayers.","sidebar":"docs"},"general/decentralized-futures":{"id":"general/decentralized-futures","title":"Decentralized Futures Program","description":"Learn about the Decentralized Futures Program.","sidebar":"docs"},"general/decentralized-voices":{"id":"general/decentralized-voices","title":"Decentralized Voices Program","description":"Learn about the Decentralized Voices Program.","sidebar":"docs"},"general/dev-heroes":{"id":"general/dev-heroes","title":"Developer Heroes Program","description":"More Power to Polkadot\'s Developers.","sidebar":"docs"},"general/doc-thousand-contributors":{"id":"general/doc-thousand-contributors","title":"Thousand Contributors Program","description":"The Thousand Contributors Program and How it can Support your Contributions.","sidebar":"docs"},"general/doc-thousand-validators":{"id":"general/doc-thousand-validators","title":"Thousand Validators Programme","description":"The Thousand Validators Program and How it can Support your Validator Endeavors.","sidebar":"docs"},"general/faq":{"id":"general/faq","title":"Frequently Asked Questions (FAQs)","description":"FAQs to Help you Navigate on Polkadot.","sidebar":"docs"},"general/getting-started":{"id":"general/getting-started","title":"Getting Started","description":"Get started with Polkadot and Web3.","sidebar":"docs"},"general/glossary":{"id":"general/glossary","title":"Glossary","description":"Common Terms and Concepts in the Polkadot Ecosystem.","sidebar":"docs"},"general/governance-apps":{"id":"general/governance-apps","title":"Polkadot Governance Apps","description":"Governance Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/grants":{"id":"general/grants","title":"Grants Program","description":"The Grant Programs in the Polkadot Ecosystem.","sidebar":"docs"},"general/how-to-dyor":{"id":"general/how-to-dyor","title":"How to Do Your Own Research (DYOR)","description":"Importance of Doing Your Own Research (DYOR).","sidebar":"docs"},"general/kusama/kusama-adversarial-cheatsheet":{"id":"general/kusama/kusama-adversarial-cheatsheet","title":"Adversarial Cheatsheet","description":"A cheatsheet to help you create chaos."},"general/kusama/kusama-bug-bounty":{"id":"general/kusama/kusama-bug-bounty","title":"Bug Bounty","description":"An overview of how you can help catch bugs."},"general/kusama/kusama-claims":{"id":"general/kusama/kusama-claims","title":"Kusama Claims","description":"Step-by-step guide on how to claim your KSM tokens."},"general/kusama/kusama-coc":{"id":"general/kusama/kusama-coc","title":"Kusama Code of Conduct","description":"Kusama\'s Code of Conduct to sustain chaos."},"general/kusama/kusama-community":{"id":"general/kusama/kusama-community","title":"Kusama Community","description":"Stay in-touch and keep up-to-date by interacting and engaging in the Kusama community."},"general/kusama/kusama-getting-started":{"id":"general/kusama/kusama-getting-started","title":"Interact with Kusama","description":"Reference point for Kusama content."},"general/kusama/kusama-index":{"id":"general/kusama/kusama-index","title":"Kusama","description":"Legacy link to Kusama Wiki document"},"general/kusama/kusama-parameters":{"id":"general/kusama/kusama-parameters","title":"Kusama Parameters","description":"Learn about common Kusama parameters"},"general/kusama/kusama-social-recovery":{"id":"general/kusama/kusama-social-recovery","title":"Social Recovery","description":"Steps on how to perform account recovery on Kusama."},"general/kusama/kusama-timeline":{"id":"general/kusama/kusama-timeline","title":"Kusama Timeline","description":"Stay up-to-date with the latest action on Kusama."},"general/ledger":{"id":"general/ledger","title":"Using the Polkadot & Kusama Ledger Applications","description":"Use the Polkadot Ledger Application.","sidebar":"docs"},"general/metadata":{"id":"general/metadata","title":"Metadata Explorer","description":"Visualize Metadata and related Documentation.","sidebar":"docs"},"general/multisig-apps":{"id":"general/multisig-apps","title":"Polkadot Multisig Apps","description":"Multisig Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/parachains-apps":{"id":"general/parachains-apps","title":"Polkadot Parachain Apps","description":"Polkadot\'s Parachain Apps.","sidebar":"docs"},"general/polkadot-direction":{"id":"general/polkadot-direction","title":"Polkadot Direction","description":"Polkadot as a Decentralized and Secure Ubiquitous Computer.","sidebar":"docs"},"general/polkadot-v1":{"id":"general/polkadot-v1","title":"Polkadot 1.0","description":"Polkadot\'s 1.0, Blockspace, Decentralization and Resilience.","sidebar":"docs"},"general/polkadot-vault":{"id":"general/polkadot-vault","title":"Polkadot Vault (formerly Parity Signer)","description":"Your old Smartphone as an Air-gapped Wallet.","sidebar":"docs"},"general/polkadotjs":{"id":"general/polkadotjs","title":"Polkadot-JS Tooling","description":"The Polkadot-JS Tool Collection.","sidebar":"docs"},"general/polkadotjs-ui":{"id":"general/polkadotjs-ui","title":"Polkadot-JS UI (Wallet)","description":"A Wallet for Power-users and Developers.","sidebar":"docs"},"general/research":{"id":"general/research","title":"Research Pages","description":"Latest Research Developments on Polkadot.","sidebar":"docs"},"general/scams":{"id":"general/scams","title":"How to Protect Yourself from Scams","description":"How to Protect yourself against Scams.","sidebar":"docs"},"general/staking-apps":{"id":"general/staking-apps","title":"Polkadot Staking Apps","description":"Staking Apps in the Polkadot Ecosystem.","sidebar":"docs"},"general/staking-dashboard":{"id":"general/staking-dashboard","title":"Polkadot Staking Dashboard","description":"Everything about the Polkadot Staking Dashboard.","sidebar":"docs"},"general/start-building":{"id":"general/start-building","title":"Build on Polkadot","description":"Start Building with the Polkadot SDK.","sidebar":"docs"},"general/transaction-attacks":{"id":"general/transaction-attacks","title":"Why Verify Transactions?","description":"How to Prevent from being a Victim of an Attack","sidebar":"docs"},"general/wallets-and-extensions":{"id":"general/wallets-and-extensions","title":"Wallets and Extensions","description":"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.","sidebar":"docs"},"general/web3-and-polkadot":{"id":"general/web3-and-polkadot","title":"Web3 and Polkadot","description":"Introduction to Web3 and Polkadot\'s Role in shaping the Web3 Vision.","sidebar":"docs"},"learn/archive/learn-controller":{"id":"learn/archive/learn-controller","title":"Controller Accounts","description":"Controller Accounts used in Staking.","sidebar":"docs"},"learn/archive/learn-governance":{"id":"learn/archive/learn-governance","title":"Governance V1","description":"Polkadot\'s First Governance Model.","sidebar":"docs"},"learn/archive/learn-launch":{"id":"learn/archive/learn-launch","title":"Polkadot Launch Phases","description":"Polkadot\'s Launch Process and its Individual Phases.","sidebar":"docs"},"learn/archive/learn-redenomination":{"id":"learn/archive/learn-redenomination","title":"Redenomination of DOT","description":"Everything about the DOT Token Redenomination.","sidebar":"docs"},"learn/archive/learn-treasury":{"id":"learn/archive/learn-treasury","title":"Governance v1 Treasury","description":"The Polkadot\'s On-chain Treasury during Gov1.","sidebar":"docs"},"learn/learn-account-abstraction":{"id":"learn/learn-account-abstraction","title":"Polkadot\'s Account Abstraction","description":"Polkadot\'s Native Account Abstraction.","sidebar":"docs"},"learn/learn-account-advanced":{"id":"learn/learn-account-advanced","title":"Polkadot Accounts In-Depth","description":"Advanced Concepts about Polkadot\'s Accounts.","sidebar":"docs"},"learn/learn-account-multisig":{"id":"learn/learn-account-multisig","title":"Multi-Signature Accounts","description":"Multi-signature Accounts on Polkadot.","sidebar":"docs"},"learn/learn-accounts":{"id":"learn/learn-accounts","title":"Polkadot Accounts","description":"Polkadot Accounts, Account Identity, and Account Reaping.","sidebar":"docs"},"learn/learn-agile-coretime":{"id":"learn/learn-agile-coretime","title":"Introduction to Agile Coretime","description":"Introduction to Agile Coretime and its terminology","sidebar":"docs"},"learn/learn-architecture":{"id":"learn/learn-architecture","title":"Architecture","description":"Key Components to Polkadot\'s Architecture.","sidebar":"docs"},"learn/learn-archive":{"id":"learn/learn-archive","title":"Learn Archive","description":"Archive for the Learn Section.","sidebar":"docs"},"learn/learn-assets":{"id":"learn/learn-assets","title":"Asset Hub","description":"Fungible Tokens and NFTs on Polkadot.","sidebar":"docs"},"learn/learn-async-backing":{"id":"learn/learn-async-backing","title":"Asynchronous Backing","description":"A brief overview of asynchronous backing, and how it affects Polkadot\'s scalability.","sidebar":"docs"},"learn/learn-auction":{"id":"learn/learn-auction","title":"Parachain Slot Auctions","description":"Polkadot\'s Parachain Slot Auction Mechanism.","sidebar":"docs"},"learn/learn-bridges":{"id":"learn/learn-bridges","title":"Bridges","description":"Bridges and Examples of Common Bridges.","sidebar":"docs"},"learn/learn-collator":{"id":"learn/learn-collator","title":"Collator","description":"Role of Collators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-comparisons":{"id":"learn/learn-comparisons","title":"Polkadot Comparisons","description":"Comparison between Polkadot and ETH 1.0 and BSC.","sidebar":"docs"},"learn/learn-comparisons-avalanche":{"id":"learn/learn-comparisons-avalanche","title":"Polkadot vs. Avalanche","description":"Comparison between Polkadot and Avalanche.","sidebar":"docs"},"learn/learn-comparisons-cosmos":{"id":"learn/learn-comparisons-cosmos","title":"Polkadot vs. Cosmos","description":"Comparison between Polkadot and Cosmos.","sidebar":"docs"},"learn/learn-comparisons-ethereum-2":{"id":"learn/learn-comparisons-ethereum-2","title":"Polkadot vs. Ethereum","description":"Comparison between Polkadot and Ethereum.","sidebar":"docs"},"learn/learn-comparisons-kusama":{"id":"learn/learn-comparisons-kusama","title":"Polkadot vs. Kusama","description":"Comparing the cousins.","sidebar":"docs"},"learn/learn-comparisons-rollups":{"id":"learn/learn-comparisons-rollups","title":"Layer Two and Rollups","description":"Comparison between various Rollup and L2 Protocols.","sidebar":"docs"},"learn/learn-consensus":{"id":"learn/learn-consensus","title":"Polkadot Consensus","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-crowdloans":{"id":"learn/learn-crowdloans","title":"Parachain Crowdloans","description":"Polkadot\'s Crowdloans and How to Participate.","sidebar":"docs"},"learn/learn-cryptography":{"id":"learn/learn-cryptography","title":"Cryptography on Polkadot","description":"Cryptographic Functions used in Polkadot.","sidebar":"docs"},"learn/learn-DOT":{"id":"learn/learn-DOT","title":"DOT","description":"Tokenomics of Polkadot\'s Native Token DOT.","sidebar":"docs"},"learn/learn-guides-accounts":{"id":"learn/learn-guides-accounts","title":"Polkadot-JS Guides about Accounts","description":"Polkadot-JS Guides about Accounts","sidebar":"docs"},"learn/learn-guides-accounts-multisig":{"id":"learn/learn-guides-accounts-multisig","title":"Polkadot-JS Guides about Multi-signature Accounts","description":"Polkadot-JS Guides about Multi-signature Accounts","sidebar":"docs"},"learn/learn-guides-accounts-proxy":{"id":"learn/learn-guides-accounts-proxy","title":"Polkadot-JS Guides about Proxy Accounts","description":"Polkadot-JS Guides about Proxy Accounts","sidebar":"docs"},"learn/learn-guides-accounts-proxy-pure":{"id":"learn/learn-guides-accounts-proxy-pure","title":"Polkadot-JS Guides about Pure Proxy Accounts","description":"Polkadot-JS Guides about Pure Proxy Accounts","sidebar":"docs"},"learn/learn-guides-assets":{"id":"learn/learn-guides-assets","title":"Polkadot-JS Guides about Asset Hub","description":"Polkadot-JS Guides about Asset Hub.","sidebar":"docs"},"learn/learn-guides-assets-create":{"id":"learn/learn-guides-assets-create","title":"Polkadot-JS Guides about Creating Assets","description":"Polkadot-JS Guides about Creating Assets.","sidebar":"docs"},"learn/learn-guides-assets-ledger":{"id":"learn/learn-guides-assets-ledger","title":"Polkadot-JS Guides about Asset Hub Ledger App","description":"Polkadot-JS Guides about Ledger and the Asset Hub.","sidebar":"docs"},"learn/learn-guides-bounties":{"id":"learn/learn-guides-bounties","title":"Polkadot-JS Guides about Bounties","description":"Polkadot-JS Guides for Bounties","sidebar":"docs"},"learn/learn-guides-identity":{"id":"learn/learn-guides-identity","title":"Polkadot-JS Guides about Identity","description":"Polkadot-JS Guides about Identity.","sidebar":"docs"},"learn/learn-guides-ledger":{"id":"learn/learn-guides-ledger","title":"Polkadot-JS Guides for Ledger Devices","description":"Polkadot-JS Guides for Ledger Devices.","sidebar":"docs"},"learn/learn-guides-nominator":{"id":"learn/learn-guides-nominator","title":"Polkadot-JS Guides For Nominators","description":"Polkadot-JS Guides for Nominators.","sidebar":"docs"},"learn/learn-guides-polkadot-opengov":{"id":"learn/learn-guides-polkadot-opengov","title":"Polkadot-JS Guides about OpenGov","description":"Polkadot-JS Guides about Polkadot OpenGov.","sidebar":"docs"},"learn/learn-guides-staking":{"id":"learn/learn-guides-staking","title":"Polkadot-JS Guides about Staking","description":"Polkadot-JS Guides about Staking.","sidebar":"docs"},"learn/learn-guides-staking-pools":{"id":"learn/learn-guides-staking-pools","title":"Polkadot-JS Guides for Pool Creators","description":"Polkadot-JS Guides about Nomination Pools.","sidebar":"docs"},"learn/learn-guides-transfers":{"id":"learn/learn-guides-transfers","title":"Polkadot-JS Guides about Transfers","description":"Polkadot-JS Guides about Balances Transfers.","sidebar":"docs"},"learn/learn-guides-treasury":{"id":"learn/learn-guides-treasury","title":"Polkadot-JS Guides about the Treasury","description":"Polkadot-JS Guides about the Polkadot Treasury.","sidebar":"docs"},"learn/learn-guides-vault":{"id":"learn/learn-guides-vault","title":"Polkadot-JS Guides about the Vault App","description":"Polkadot-JS Guides about Polkadot Vault.","sidebar":"docs"},"learn/learn-hyperbridge":{"id":"learn/learn-hyperbridge","title":"Hyperbridge","description":"Polkadot\'s Bridge to Ethereum.","sidebar":"docs"},"learn/learn-identity":{"id":"learn/learn-identity","title":"Account Identity","description":"On-chain Identity, Judgements and Registrars.","sidebar":"docs"},"learn/learn-implementations":{"id":"learn/learn-implementations","title":"Polkadot Implementations","description":"Learn about the different Polkadot implementations."},"learn/learn-inflation":{"id":"learn/learn-inflation","title":"Token Inflation","description":"Explanation of Token\'s Inflation in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft":{"id":"learn/learn-nft","title":"NFTs","description":"The NFT Landscape of the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-pallets":{"id":"learn/learn-nft-pallets","title":"NFT Pallets","description":"Functionalities of the NFT Pallets in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-projects":{"id":"learn/learn-nft-projects","title":"NFT projects on Polkadot and Kusama","description":"NFT Projects in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nomination-pools":{"id":"learn/learn-nomination-pools","title":"Nomination Pools","description":"Staking through Polkadot\'s Nomination Pools.","sidebar":"docs"},"learn/learn-nominator":{"id":"learn/learn-nominator","title":"Nominator","description":"Role of Nominators in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-parachains":{"id":"learn/learn-parachains","title":"Parachains","description":"An Introduction to Polkadot\'s Parachains.","sidebar":"docs"},"learn/learn-parachains-faq":{"id":"learn/learn-parachains-faq","title":"Parachains FAQ","description":"Parachains FAQ.","sidebar":"docs"},"learn/learn-parachains-protocol":{"id":"learn/learn-parachains-protocol","title":"Parachains\' Protocol Overview","description":"Actors and Protocols involved in Polkadot and its Parachains\' Block Finality.","sidebar":"docs"},"learn/learn-parathreads":{"id":"learn/learn-parathreads","title":"Parathreads","description":"An Introductory Guide to Parathreads.","sidebar":"docs"},"learn/learn-phragmen":{"id":"learn/learn-phragmen","title":"NPoS Election Algorithms","description":"The Election Methods used in Polkadot\'s NPoS Mechanism.","sidebar":"docs"},"learn/learn-polkadot-host":{"id":"learn/learn-polkadot-host","title":"Polkadot Host (PH)","description":"The Polkadot Host and its Components.","sidebar":"docs"},"learn/learn-polkadot-js-guides":{"id":"learn/learn-polkadot-js-guides","title":"Polkadot-JS Guides","description":"Guides about Polkadot-JS.","sidebar":"docs"},"learn/learn-polkadot-opengov":{"id":"learn/learn-polkadot-opengov","title":"Introduction to Polkadot OpenGov","description":"Polkadot\u2019s Latest Model for Decentralized Governance.","sidebar":"docs"},"learn/learn-polkadot-opengov-origins":{"id":"learn/learn-polkadot-opengov-origins","title":"Polkadot OpenGov Origins","description":"All Origins for Polkadot\'s OpenGov.","sidebar":"docs"},"learn/learn-polkadot-opengov-treasury":{"id":"learn/learn-polkadot-opengov-treasury","title":"Treasury","description":"Polkadot\'s On-chain Treasury.","sidebar":"docs"},"learn/learn-polkadot-technical-fellowship":{"id":"learn/learn-polkadot-technical-fellowship","title":"Polkadot Technical Fellowship","description":"Self-governing body of experts and developers of the Polkadot protocol.","sidebar":"docs"},"learn/learn-proxies":{"id":"learn/learn-proxies","title":"Proxy Accounts","description":"Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-proxies-pure":{"id":"learn/learn-proxies-pure","title":"Pure Proxy Accounts","description":"Pure Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-runtime-upgrades":{"id":"learn/learn-runtime-upgrades","title":"Runtime Upgrades","description":"Forkless Runtime Upgrades on Polkadot.","sidebar":"docs"},"learn/learn-sassafras":{"id":"learn/learn-sassafras","title":"Polkadot Block Production: SASSAFRAS","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-spree":{"id":"learn/learn-spree","title":"SPREE","description":"Fundamentals of SPREE.","sidebar":"docs"},"learn/learn-staking":{"id":"learn/learn-staking","title":"Introduction to Staking","description":"Overview of Staking and NPoS on Polkadot.","sidebar":"docs"},"learn/learn-staking-advanced":{"id":"learn/learn-staking-advanced","title":"Advanced Staking Concepts","description":"Advanced Concepts about Staking on Polkadot.","sidebar":"docs"},"learn/learn-system-chains":{"id":"learn/learn-system-chains","title":"System Parachains","description":"System Parachains currently deployed on Polkadot.","sidebar":"docs"},"learn/learn-teleport":{"id":"learn/learn-teleport","title":"Teleporting Assets","description":"Teleport Assets between Parachains and Relay Chain.","sidebar":"docs"},"learn/learn-transaction-fees":{"id":"learn/learn-transaction-fees","title":"Transaction Fees","description":"How Transaction Fees are Calculated and Handled.","sidebar":"docs"},"learn/learn-transactions":{"id":"learn/learn-transactions","title":"Types of Transactions (a.k.a. Extrinsics)","description":"Types of Transactions on Polkadot.","sidebar":"docs"},"learn/learn-validator":{"id":"learn/learn-validator","title":"Validator","description":"Role of Validators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-video-tutorials":{"id":"learn/learn-video-tutorials","title":"Videos about Polkadot","description":"Videos about Polkadot and Related Topics.","sidebar":"docs"},"learn/learn-wasm":{"id":"learn/learn-wasm","title":"WebAssembly (Wasm)","description":"WASM and its Role in Polkadot\'s Runtime.","sidebar":"docs"},"learn/learn-xcm":{"id":"learn/learn-xcm","title":"Introduction to Cross-Consensus Message Format (XCM)","description":"XCM, The Messaging Format at the Forefront of Interoperability.","sidebar":"docs"},"learn/learn-xcm-instructions":{"id":"learn/learn-xcm-instructions","title":"XCM Instructions & Register Specification","description":"Specification for Instructions and Registers for the XCM Format.","sidebar":"docs"},"learn/learn-xcm-pallet":{"id":"learn/learn-xcm-pallet","title":"XCM FRAME Pallet Overview","description":"Mechanics of the XCM Pallet and its role in Polkadot\'s Ecosystem.","sidebar":"docs"},"learn/learn-xcm-transport":{"id":"learn/learn-xcm-transport","title":"XCM Transport Methods (XCMP, HRMP, VMP)","description":"Methods to send XCM Messages across Networks.","sidebar":"docs"},"learn/learn-xcm-usecases":{"id":"learn/learn-xcm-usecases","title":"XCM Use-cases & Examples","description":"Cross-consensus Interactions and the XCM Format.","sidebar":"docs"},"learn/learn-xcvm":{"id":"learn/learn-xcvm","title":"XCM Virtual Machine (XCVM) & XCM Executor","description":"Design of the XCM Executor and Mechanics of the XCM Virtual Machine.","sidebar":"docs"},"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive":{"id":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive","title":"Executor Configuration","description":"Deep Dive into the Configuration of the XCM-Executor.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees","title":"Weight and Fees","description":"Weight and Fees in XCM.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset","title":"MultiAsset","description":"The MultiAsset Datatype.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary","title":"Fundamentals","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm","title":"XCVM","description":"Deep Dive into XCVM.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example","title":"Example","description":"A MultiLocation Example.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions","title":"Junction(s)","description":"The Junction Type in a MultiLocation Struct.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary","title":"MultiLocation","description":"Learn about XCM fundamentals.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-assets":{"id":"learn/xcm/journey/learn-xcm-docs-journey-assets","title":"Trap and Claim Assets","description":"Instructions to Trap and Claim Assets.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-channels":{"id":"learn/xcm/journey/learn-xcm-docs-journey-channels","title":"Channels and Bridges","description":"Establishment of HRMP Channels between Parachains.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-expectations":{"id":"learn/xcm/journey/learn-xcm-docs-journey-expectations","title":"Expectations","description":"Expect Instructions to Check if a Condition is Valid.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-fees":{"id":"learn/xcm/journey/learn-xcm-docs-journey-fees","title":"Fee Handling","description":"How Fees for XCM Transfers are Handled.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-holding":{"id":"learn/xcm/journey/learn-xcm-docs-journey-holding","title":"More Holding Modifiers","description":"More Instructions to Alter the Holding Register.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-origin":{"id":"learn/xcm/journey/learn-xcm-docs-journey-origin","title":"Origin Manipulation","description":"Manipulating the Origin of XCM.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-queries":{"id":"learn/xcm/journey/learn-xcm-docs-journey-queries","title":"Queries","description":"Query Information from another Consensus System.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-register":{"id":"learn/xcm/journey/learn-xcm-docs-journey-register","title":"Register Modifiers","description":"More Instructions to Change the XCVM Registers.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-summary":{"id":"learn/xcm/journey/learn-xcm-docs-journey-summary","title":"A Journey through XCM","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-transact":{"id":"learn/xcm/journey/learn-xcm-docs-journey-transact","title":"Transact","description":"The Transact Instruction to Execute XCM Calls.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-version":{"id":"learn/xcm/journey/learn-xcm-docs-journey-version","title":"Version Subscription","description":"Get Notified about XCM Version Updates.","sidebar":"docs"},"learn/xcm/journey/locks/learn-xcm-docs-journey-locks":{"id":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks","title":"Locks","description":"Restrict Transfer or Withdrawal of Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve","title":"Reserve-backed Transfers","description":"Reserve-backed Transfers: Third-party Reserve to store Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary","title":"Transfers","description":"Summary about XCM Transfers.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport","title":"Asset Teleportation","description":"Teleportation: Sending Assets Across Chains.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-intro":{"id":"learn/xcm/learn-xcm-docs-intro","title":"XCM: Cross-Consensus Messaging","description":"Introduction to the XCM Documentation.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-testing":{"id":"learn/xcm/learn-xcm-docs-testing","title":"Testing","description":"Testing XCM-powered Solutions.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-architecture":{"id":"learn/xcm/overview/learn-xcm-docs-overview-architecture","title":"The XCM Architecture","description":"The XCM Architecture.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-format":{"id":"learn/xcm/overview/learn-xcm-docs-overview-format","title":"XCM is a Format, not a Protocol","description":"XCM is a Format, not a Protocol.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-intro":{"id":"learn/xcm/overview/learn-xcm-docs-overview-intro","title":"Introduction","description":"An Introduction to XCM.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-summary":{"id":"learn/xcm/overview/learn-xcm-docs-overview-summary","title":"XCM: Cross-Consensus Messaging","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-xcvm":{"id":"learn/xcm/overview/learn-xcm-docs-overview-xcvm","title":"The XCVM","description":"The Cross-Consensus Virtual Machine.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look","title":"First Look at an XCM","description":"First Look at an XCM.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator","title":"XCM Simulator","description":"Test XCM using a Simulated Environment.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary","title":"Quickstart","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-glossary":{"id":"learn/xcm/reference/learn-xcm-docs-reference-glossary","title":"Glossary","description":"Glossary.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers":{"id":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers","title":"All XCVM Registers","description":"All XCVM Registers.","sidebar":"docs"},"maintain/archive/maintain-guides-democracy":{"id":"maintain/archive/maintain-guides-democracy","title":"Participate in Democracy","description":"Steps on how to participate in democracy.","sidebar":"docs"},"maintain/archive/maintain-guides-how-to-join-council":{"id":"maintain/archive/maintain-guides-how-to-join-council","title":"Join the Council","description":"Steps on how to join the official on-chain council.","sidebar":"docs"},"maintain/archive/maintain-guides-how-to-vote-councillor":{"id":"maintain/archive/maintain-guides-how-to-vote-councillor","title":"Voting for Councillors","description":"Steps on how to vote for councillors.","sidebar":"docs"},"maintain/doc-maintain-guides-validator-community":{"id":"maintain/doc-maintain-guides-validator-community","title":"Validator Community Overview","description":"An extensive guide to help you start and build a validator community.","sidebar":"docs"},"maintain/kusama/maintain-guides-how-to-validate-kusama":{"id":"maintain/kusama/maintain-guides-how-to-validate-kusama","title":"Run a Validator (Kusama)","description":"The fundamentals for running a Kusama validator."},"maintain/kusama/maintain-guides-society-kusama":{"id":"maintain/kusama/maintain-guides-society-kusama","title":"Kappa Sigma Mu","description":"Learn about the Kappa Sigma Mu society and join as a member."},"maintain/maintain-archive":{"id":"maintain/maintain-archive","title":"Maintain Archive","description":"Archive for the Maintain Section.","sidebar":"docs"},"maintain/maintain-bootnode":{"id":"maintain/maintain-bootnode","title":"Set up a Boot Node","description":"Steps on setting up a boot node.","sidebar":"docs"},"maintain/maintain-endpoints":{"id":"maintain/maintain-endpoints","title":"Node Endpoints","description":"List of node endpoints and examples of use.","sidebar":"docs"},"maintain/maintain-errors":{"id":"maintain/maintain-errors","title":"Errors and How to Resolve Them","description":"Common errors you might encounter and how they can be resolved.","sidebar":"docs"},"maintain/maintain-guides-async-backing":{"id":"maintain/maintain-guides-async-backing","title":"Upgrade Parachain for Asynchronous Backing Compatibility","description":"Steps on how to upgrade a parachain to be compatible with the relay chain\'s async backing feature.","sidebar":"docs"},"maintain/maintain-guides-avoid-slashing":{"id":"maintain/maintain-guides-avoid-slashing","title":"Validator Best Practices","description":"Best practices to avoid slashing.","sidebar":"docs"},"maintain/maintain-guides-how-to-chill":{"id":"maintain/maintain-guides-how-to-chill","title":"How to Chill","description":"Steps on chilling as a network participant.","sidebar":"docs"},"maintain/maintain-guides-how-to-monitor-your-node":{"id":"maintain/maintain-guides-how-to-monitor-your-node","title":"Monitor your node","description":"This guide will walk you through how to set up Prometheus with","sidebar":"docs"},"maintain/maintain-guides-how-to-stop-validating":{"id":"maintain/maintain-guides-how-to-stop-validating","title":"How to Stop Validating","description":"Steps on how to stop validating.","sidebar":"docs"},"maintain/maintain-guides-how-to-systemd":{"id":"maintain/maintain-guides-how-to-systemd","title":"Using systemd for a Validator Node","description":"Using a service manager for your validator node.","sidebar":"docs"},"maintain/maintain-guides-how-to-upgrade":{"id":"maintain/maintain-guides-how-to-upgrade","title":"How to Upgrade Your Validator","description":"Validators perform critical functions for the network, and as such, have strict uptime requirements.","sidebar":"docs"},"maintain/maintain-guides-how-to-validate-polkadot":{"id":"maintain/maintain-guides-how-to-validate-polkadot","title":"Run a Validator (Polkadot)","description":"The fundamentals for running a Polkadot validator.","sidebar":"docs"},"maintain/maintain-guides-secure-validator":{"id":"maintain/maintain-guides-secure-validator","title":"Secure Validator","description":"Tips for running a secure validator.","sidebar":"docs"},"maintain/maintain-guides-validator-payout":{"id":"maintain/maintain-guides-validator-payout","title":"Validator Payout Overview","description":"How validator payout works on the network and what you should expect.","sidebar":"docs"},"maintain/maintain-index":{"id":"maintain/maintain-index","title":"Network Maintainers","description":"Reference point for network maintenance guides.","sidebar":"docs"},"maintain/maintain-networks":{"id":"maintain/maintain-networks","title":"Networks","description":"Information about the different networks of the Polkadot ecosystem.","sidebar":"docs"},"maintain/maintain-polkadot-parameters":{"id":"maintain/maintain-polkadot-parameters","title":"Polkadot Parameters","description":"A description about fundamental Polkadot parameters.","sidebar":"docs"},"maintain/maintain-rpc":{"id":"maintain/maintain-rpc","title":"Set up a RPC node","description":"Steps on setting up a RPC node.","sidebar":"docs"},"maintain/maintain-sync":{"id":"maintain/maintain-sync","title":"Set up a Full Node","description":"Steps on how to set up a full node.","sidebar":"docs"},"maintain/maintain-wss":{"id":"maintain/maintain-wss","title":"Secure the WebSocket","description":"Steps on setting up a secure socket for remote connections.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/967fa6d4.9fd74d74.js b/assets/js/967fa6d4.9fd74d74.js deleted file mode 100644 index 83f1bf2f7df4..000000000000 --- a/assets/js/967fa6d4.9fd74d74.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2581],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>d});var i=a(74165),n=a(15861),o=a(67294),s=a(87152),r=a(14741),l=a(67425);function c(t,e,a){return u.apply(this,arguments)}function u(){return(u=(0,n.Z)((0,i.Z)().mark((function t(e,a,n){var o,l,c,u,p;return(0,i.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=void 0,l=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){t.next=18;break}return t.abrupt("return");case 18:return c=new s.U(o),t.next=21,r.G.create({provider:c});case 21:u=t.sent,(p=a.split(".")).forEach((function(t){t in u&&(u=u[t])})),t.t1=p[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=u.toString(),t.abrupt("break",35);case 29:return t.next=31,u();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function p(t,e,a,i){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,i);break;case"precise":(0,l.Precise)(t,a,i);break;case"blocksToDays":(0,l.BlocksToDays)(t,i);break;case"erasToDays":(0,l.ErasToDays)(t,i,a);break;case"percentage":(0,l.Percentage)(t,i);break;case"permillToPercent":(0,l.PermillToPercent)(t,i);break;case"arrayLength":(0,l.ArrayLength)(t,i);break;default:return void console.log("Ignoring unknown filter type")}}const d=function(t){var e=t.network,a=t.path,s=t.defaultValue,r=t.filter,l=void 0===r?void 0:r,u=(0,o.useState)(""),d=u[0],h=u[1];return e=e.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?p(s.toString(),l,e,h):h(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var t=(0,n.Z)((0,i.Z)().mark((function t(){var n;return(0,i.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,c(e,a,h);case 2:if(void 0!==(n=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?p(n,l,e,h):h(n);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),d}},67425:t=>{var e="polkadot",a="kusama",i="statemine",n="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var l=void 0;if(s===e||s===n)l=3;else{if(s!==a&&s!==i)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),r((t=Number.isInteger(t/o[s].precision)?t/o[s].precision+" "+o[s].symbol:(t/o[s].precision).toFixed(l)+" "+o[s].symbol).toString())},Precise:function(t,e,a){a(t=(t=parseFloat(t))/o[e].precision+" "+o[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,o,s){var r=void 0;if(s===e||s===n)r=1;else{if(s!==a&&s!==i)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},91430:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>u,toc:()=>d});var i=a(87462),n=a(63366),o=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",sidebar_label:"Multisig Guides",description:"Polkadot-JS Guides about Multi-signature Accounts",keyword:["guides","polkadot-js","accounts","multisig","multi-signature"],slug:"../learn-guides-accounts-multisig"},c=void 0,u={unversionedId:"learn/learn-guides-accounts-multisig",id:"learn/learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",description:"Polkadot-JS Guides about Multi-signature Accounts",source:"@site/../docs/learn/learn-guides-accounts-multisig.md",sourceDirName:"learn",slug:"/learn-guides-accounts-multisig",permalink:"/docs/learn-guides-accounts-multisig",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-multisig.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",sidebar_label:"Multisig Guides",description:"Polkadot-JS Guides about Multi-signature Accounts",keyword:["guides","polkadot-js","accounts","multisig","multi-signature"],slug:"../learn-guides-accounts-multisig"},sidebar:"docs",previous:{title:"Account Guides",permalink:"/docs/learn-guides-accounts"},next:{title:"Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy"}},p={},d=[{value:"Creating a Multisig Account",id:"creating-a-multisig-account",level:2},{value:"Multisig Transactions with Accounts Tab",id:"multisig-transactions-with-accounts-tab",level:2},{value:"Multisig Transactions with Extrinsic Tab",id:"multisig-transactions-with-extrinsic-tab",level:2},{value:"Multisig Call Deposit",id:"multisig-call-deposit",level:3},{value:"Example using Multisig Accounts",id:"example-using-multisig-accounts",level:3},{value:"Decoding Multisig Call Data",id:"decoding-multisig-call-data",level:2}],h={toc:d},m="wrapper";function g(t){var e=t.components,l=(0,n.Z)(t,r);return(0,o.kt)(m,(0,i.Z)({},h,l,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("h2",{id:"creating-a-multisig-account"},"Creating a Multisig Account"),(0,o.kt)("p",null,'Check the "How to create a multisig account" section on\n',(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},"this support page"),".\nWe recommend trying out the tutorial on\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain-networks#westend-test-network"},"Westend network")," - Polkadot's testnet."),(0,o.kt)("h2",{id:"multisig-transactions-with-accounts-tab"},"Multisig Transactions with Accounts Tab"),(0,o.kt)("admonition",{title:"Walkthrough Video Tutorial",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"See ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=-cPiKMslZqI"},"this video tutorial")," to learn how to transact with\na multisig account using the Accounts Tab in the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI"),".")),(0,o.kt)("p",null,"You can create a multisig account directly on the Accounts Tab of the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI"),", and use this account to send funds. See\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},"this support article"),"\nfor more information."),(0,o.kt)("h2",{id:"multisig-transactions-with-extrinsic-tab"},"Multisig Transactions with Extrinsic Tab"),(0,o.kt)("p",null,"There are three types of actions you can take with a multisig account:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Executing a call ",(0,o.kt)("inlineCode",{parentName:"li"},"asMulti"),". This is used to begin or end a multisig transaction."),(0,o.kt)("li",{parentName:"ul"},"Approving a call ",(0,o.kt)("inlineCode",{parentName:"li"},"approveAsMulti"),". This is used to approve an extrinsic and pass-on to the next\nsignatory (see ",(0,o.kt)("a",{parentName:"li",href:"#example-using-multi-signature-accounts"},"example below")," for more information)."),(0,o.kt)("li",{parentName:"ul"},"Cancelling a call ",(0,o.kt)("inlineCode",{parentName:"li"},"cancelAsMulti"),".")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Check out ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/substrate/extrinsics#multisig"},"this page")," for more\ninformation about the actions you can take with a multi-signature account.")),(0,o.kt)("p",null,"In scenarios where only a single approval is needed, a convenience method ",(0,o.kt)("inlineCode",{parentName:"p"},"as_multi_threshold_1"),"\nshould be used. This function takes only the other signatories and the raw call as arguments. Note\nthat the Polkadot-JS UI does not have integration for this call because it is not possible to create\nmultisig accounts with ",(0,o.kt)("inlineCode",{parentName:"p"},"threshold=1"),". If you want to create a multisig with threshold 1, you can use\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/txwrapper-core"},"txwrapper-core"),", which is developed and supported by\nParity Technologies. There is a detailed\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/txwrapper-core/tree/main/packages/txwrapper-examples/multisig"},"multisig example"),"\nthat you can try out and change to see how it works."),(0,o.kt)("p",null,"However, in anything but the simple one approval case, you will likely need more than one of the\nsignatories to approve the call before finally executing it."),(0,o.kt)("h3",{id:"multisig-call-deposit"},"Multisig Call Deposit"),(0,o.kt)("p",null,"When you create a new multi-sig call, you will need to place a\nDOT deposit. The deposit stays locked until the\ncall is executed. This deposit is to establish an economic cost on the storage space that the\nmultisig call takes up in the chain state and discourage users from creating multisig calls that\nnever get executed. The deposit will be reserved in the call initiator's account."),(0,o.kt)("p",null,"The deposit is dependent on the ",(0,o.kt)("inlineCode",{parentName:"p"},"threshold")," parameter and is calculated as follows:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Deposit = depositBase + threshold * depositFactor\n")),(0,o.kt)("p",null,"Where ",(0,o.kt)("inlineCode",{parentName:"p"},"depositBase")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"depositFactor")," are chain constants (in\nDOT units) set in the runtime code. Currently,\nthe deposit base equals\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.multisig.depositBase",defaultValue:20088e7,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand the deposit factor equals\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.multisig.depositFactor",defaultValue:32e7,filter:"humanReadable",mdxType:"RPC"}),".\n",""),(0,o.kt)("p",null,"The other signatory accounts should have enough funds to pay for the transaction fees associated\nwith approving the multisig call. The deposit is for the call; that is, other signatories will not\nneed to place additional deposits. Once the multisig call is executed or rejected, the deposit is\nreleased on the account that initiated the call."),(0,o.kt)("h3",{id:"example-using-multisig-accounts"},"Example using Multisig Accounts"),(0,o.kt)("admonition",{title:"Walk-through video tutorial",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"See ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T0vIuJcTJeQ"},"this video tutorial")," to learn how to transact with\na multisig account using the Extrinsic Tab in the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),".")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"multisig diagram",src:a(706).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"Let's consider an example of a multisig on Polkadot with a threshold of 2 and 3 signers: Charlie,\nDan, and Eleanor. First, Charlie will create the call on-chain by calling the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti"),"\nextrinsic with the raw call, in this case, a balance transfer (",(0,o.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive"),"\nextrinsic) from multisig CDE to Frank's account. When doing this, Charlie will have to deposit\n",(0,o.kt)("inlineCode",{parentName:"p"},"DepositBase + (2 * DepositFactor) = 20.152 DOT")," while he waits for either Dan or Eleanor also to\napprove the balance transfer call using the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," or the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti"),"\nextrinsics."),(0,o.kt)("p",null,"If Dan submits the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," extrinsic, he approves Charlie's call but he passes on\nthe final approval to Eleanor. So, although the multisig has threshold 2, in this case all 3/3\nsignatories need to participate in the transaction approval. Eleanor will need to submit a\n",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," extrinsic to transfer funds from CDE to Frank."),(0,o.kt)("p",null,"Alternatively, Dan or Eleanor can just submit a ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic after Charlie to\ntransfer the funds. In this case, 2/3 signatories will participate in the transaction approval. The\naccounts approving Charlie's call will not need to place the deposit, and Charlie will receive his\ndeposit back once the transfer is successful or canceled. To cancel the transaction, Dan or Eleanor\ncan use the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.cancelAsMulti")," extrinsic."),(0,o.kt)("p",null,"Note that multisigs are ",(0,o.kt)("strong",{parentName:"p"},"deterministic"),", which means that multisig addresses are generated from\nthe addresses of signers and the threshold of the multisig wallet. No matter the order of the\nsignatories' accounts, the multisig will always have the same address because accounts' addresses\nare sorted in ascending order."),(0,o.kt)("admonition",{title:"Addresses that are provided to the multisig wallet are sorted",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Public keys of signers' wallets are compared byte-for-byte and sorted ascending before being used to\ngenerate the multisig address. For example, consider the scenario with three addresses, A, B, and C,\nstarting with ",(0,o.kt)("inlineCode",{parentName:"p"},"5FUGT"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"5HMfS"),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"5GhKJ"),". If we build the ABC multisig with the accounts in that\nspecific order (i.e. first A, then B, and C), the real order of the accounts in the multisig will be\nACB. If, in the Extrinsic tab, we initiate a multisig call with C, the order of the other\nsignatories will be first A, then B. If we put first B, then A, the transaction will fail.")),(0,o.kt)("p",null,"This has some implications when using the Extrinsics tab on the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI")," to perform multisig transactions. If the\norder of the ",(0,o.kt)("em",{parentName:"p"},"other signatories")," is wrong, the transaction will fail. This does not happen if the\nmultisig is executed directly from the Accounts tab (recommended). The Polkadot-JS UI supports\nmultisig accounts, as documented on the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-account-multisig"},"Account Generation page"),". You\ncan see our video tutorials for more information about creating multisig accounts and transacting\nwith them using both the ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=-cPiKMslZqI"},"Accounts Tab")," and the\n",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T0vIuJcTJeQ"},"Extrinsic Tab")," in the Polkadot-JS UI."),(0,o.kt)("h2",{id:"decoding-multisig-call-data"},"Decoding Multisig Call Data"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Before signing a transaction, it is important to know the exact specifics of what is being signed.\nCheck the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},'"How to use a multisig account"'),"\nin the support docs on how to decode the multisig call data.")))}g.isMDXComponent=!0},706:(t,e,a)=>{"use strict";a.d(e,{Z:()=>i});const i=a.p+"assets/images/multisig-diagram-90327330a3e865703a0ab1a1cc1eee47.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/967fa6d4.e1ab3ff0.js b/assets/js/967fa6d4.e1ab3ff0.js new file mode 100644 index 000000000000..c7946da22bbf --- /dev/null +++ b/assets/js/967fa6d4.e1ab3ff0.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[2581],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>d});var i=a(74165),n=a(15861),o=a(67294),s=a(87152),r=a(14741),l=a(67425);function c(t,e,a){return u.apply(this,arguments)}function u(){return(u=(0,n.Z)((0,i.Z)().mark((function t(e,a,n){var o,l,c,u,p;return(0,i.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=void 0,l=void 0,t.t0=e,t.next="polkadot"===t.t0?5:"kusama"===t.t0?7:"statemine"===t.t0?9:"statemint"===t.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",t.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",t.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",t.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",t.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){t.next=18;break}return t.abrupt("return");case 18:return c=new s.U(o),t.next=21,r.G.create({provider:c});case 21:u=t.sent,(p=a.split(".")).forEach((function(t){t in u&&(u=u[t])})),t.t1=p[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=u.toString(),t.abrupt("break",35);case 29:return t.next=31,u();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function p(t,e,a,i){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,i);break;case"precise":(0,l.Precise)(t,a,i);break;case"blocksToDays":(0,l.BlocksToDays)(t,i);break;case"erasToDays":(0,l.ErasToDays)(t,i,a);break;case"percentage":(0,l.Percentage)(t,i);break;case"permillToPercent":(0,l.PermillToPercent)(t,i);break;case"arrayLength":(0,l.ArrayLength)(t,i);break;default:return void console.log("Ignoring unknown filter type")}}const d=function(t){var e=t.network,a=t.path,s=t.defaultValue,r=t.filter,l=void 0===r?void 0:r,u=(0,o.useState)(""),d=u[0],h=u[1];return e=e.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?p(s.toString(),l,e,h):h(s.toString());var t=void 0;switch(e){case"polkadot":t="wss://rpc.polkadot.io";break;case"kusama":t="wss://kusama-rpc.polkadot.io/";break;case"statemine":t="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":t="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===t)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var t=(0,n.Z)((0,i.Z)().mark((function t(){var n;return(0,i.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,c(e,a,h);case 2:if(void 0!==(n=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?p(n,l,e,h):h(n);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),d}},67425:t=>{var e="polkadot",a="kusama",i="statemine",n="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};t.exports={HumanReadable:function(t,s,r){var l=void 0;if(s===e||s===n)l=3;else{if(s!==a&&s!==i)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),r((t=Number.isInteger(t/o[s].precision)?t/o[s].precision+" "+o[s].symbol:(t/o[s].precision).toFixed(l)+" "+o[s].symbol).toString())},Precise:function(t,e,a){a(t=(t=parseFloat(t))/o[e].precision+" "+o[e].symbol)},BlocksToDays:function(t,e){e((t=6*t/86400).toString())},ErasToDays:function(t,o,s){var r=void 0;if(s===e||s===n)r=1;else{if(s!==a&&s!==i)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((t/=r).toString())},Percentage:function(t,e){e((t/=1e7).toString())},PermillToPercent:function(t,e){e((t/=1e4).toString())},ArrayLength:function(t,e){e((t=t.split(",").length).toString())}}},91430:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>u,toc:()=>d});var i=a(87462),n=a(63366),o=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",sidebar_label:"Multisig Guides",description:"Polkadot-JS Guides about Multi-signature Accounts",keyword:["guides","polkadot-js","accounts","multisig","multi-signature"],slug:"../learn-guides-accounts-multisig"},c=void 0,u={unversionedId:"learn/learn-guides-accounts-multisig",id:"learn/learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",description:"Polkadot-JS Guides about Multi-signature Accounts",source:"@site/../docs/learn/learn-guides-accounts-multisig.md",sourceDirName:"learn",slug:"/learn-guides-accounts-multisig",permalink:"/docs/learn-guides-accounts-multisig",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-multisig.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-accounts-multisig",title:"Polkadot-JS Guides about Multi-signature Accounts",sidebar_label:"Multisig Guides",description:"Polkadot-JS Guides about Multi-signature Accounts",keyword:["guides","polkadot-js","accounts","multisig","multi-signature"],slug:"../learn-guides-accounts-multisig"},sidebar:"docs",previous:{title:"Account Guides",permalink:"/docs/learn-guides-accounts"},next:{title:"Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy"}},p={},d=[{value:"Creating a Multisig Account",id:"creating-a-multisig-account",level:2},{value:"Multisig Transactions with Accounts Tab",id:"multisig-transactions-with-accounts-tab",level:2},{value:"Multisig Transactions with Extrinsic Tab",id:"multisig-transactions-with-extrinsic-tab",level:2},{value:"Multisig Call Deposit",id:"multisig-call-deposit",level:3},{value:"Example using Multisig Accounts",id:"example-using-multisig-accounts",level:3},{value:"Decoding Multisig Call Data",id:"decoding-multisig-call-data",level:2}],h={toc:d},m="wrapper";function g(t){var e=t.components,l=(0,n.Z)(t,r);return(0,o.kt)(m,(0,i.Z)({},h,l,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("h2",{id:"creating-a-multisig-account"},"Creating a Multisig Account"),(0,o.kt)("p",null,'Check the "How to create a multisig account" section on\n',(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},"this support page"),".\nWe recommend trying out the tutorial on\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain-networks#westend-test-network"},"Westend network")," - Polkadot's testnet."),(0,o.kt)("h2",{id:"multisig-transactions-with-accounts-tab"},"Multisig Transactions with Accounts Tab"),(0,o.kt)("admonition",{title:"Walkthrough Video Tutorial",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"See ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=-cPiKMslZqI"},"this video tutorial")," to learn how to transact with\na multisig account using the Accounts Tab in the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI"),".")),(0,o.kt)("p",null,"You can create a multisig account directly on the Accounts Tab of the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI"),", and use this account to send funds. See\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},"this support article"),"\nfor more information."),(0,o.kt)("h2",{id:"multisig-transactions-with-extrinsic-tab"},"Multisig Transactions with Extrinsic Tab"),(0,o.kt)("p",null,"There are three types of actions you can take with a multisig account:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Executing a call ",(0,o.kt)("inlineCode",{parentName:"li"},"asMulti"),". This is used to begin or end a multisig transaction."),(0,o.kt)("li",{parentName:"ul"},"Approving a call ",(0,o.kt)("inlineCode",{parentName:"li"},"approveAsMulti"),". This is used to approve an extrinsic and pass-on to the next\nsignatory (see ",(0,o.kt)("a",{parentName:"li",href:"#example-using-multi-signature-accounts"},"example below")," for more information)."),(0,o.kt)("li",{parentName:"ul"},"Cancelling a call ",(0,o.kt)("inlineCode",{parentName:"li"},"cancelAsMulti"),".")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Check out ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/substrate/extrinsics#multisig"},"this page")," for more\ninformation about the actions you can take with a multi-signature account.")),(0,o.kt)("p",null,"In scenarios where only a single approval is needed, a convenience method ",(0,o.kt)("inlineCode",{parentName:"p"},"as_multi_threshold_1"),"\nshould be used. This function takes only the other signatories and the raw call as arguments. Note\nthat the Polkadot-JS UI does not have integration for this call because it is not possible to create\nmultisig accounts with ",(0,o.kt)("inlineCode",{parentName:"p"},"threshold=1"),". If you want to create a multisig with threshold 1, you can use\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/txwrapper-core"},"txwrapper-core"),", which is developed and supported by\nParity Technologies. There is a detailed\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/txwrapper-core/tree/main/packages/txwrapper-examples/multisig"},"multisig example"),"\nthat you can try out and change to see how it works."),(0,o.kt)("p",null,"However, in anything but the simple one approval case, you will likely need more than one of the\nsignatories to approve the call before finally executing it."),(0,o.kt)("h3",{id:"multisig-call-deposit"},"Multisig Call Deposit"),(0,o.kt)("p",null,"When you create a new multi-sig call, you will need to place a\nDOT deposit. The deposit stays locked until the\ncall is executed. This deposit is to establish an economic cost on the storage space that the\nmultisig call takes up in the chain state and discourage users from creating multisig calls that\nnever get executed. The deposit will be reserved in the call initiator's account."),(0,o.kt)("p",null,"The deposit is dependent on the ",(0,o.kt)("inlineCode",{parentName:"p"},"threshold")," parameter and is calculated as follows:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Deposit = depositBase + threshold * depositFactor\n")),(0,o.kt)("p",null,"Where ",(0,o.kt)("inlineCode",{parentName:"p"},"depositBase")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"depositFactor")," are chain constants (in\nDOT units) set in the runtime code. Currently,\nthe deposit base equals\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.multisig.depositBase",defaultValue:20088e7,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand the deposit factor equals\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.multisig.depositFactor",defaultValue:32e7,filter:"humanReadable",mdxType:"RPC"}),".\n",""),(0,o.kt)("p",null,"The other signatory accounts should have enough funds to pay for the transaction fees associated\nwith approving the multisig call. The deposit is for the call; that is, other signatories will not\nneed to place additional deposits. Once the multisig call is executed or rejected, the deposit is\nreleased on the account that initiated the call."),(0,o.kt)("h3",{id:"example-using-multisig-accounts"},"Example using Multisig Accounts"),(0,o.kt)("admonition",{title:"Walk-through video tutorial",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"See ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T0vIuJcTJeQ"},"this video tutorial")," to learn how to transact with\na multisig account using the Extrinsic Tab in the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),".")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"multisig diagram",src:a(706).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"Let's consider an example of a multisig on Polkadot with a threshold of 2 and 3 signers: Charlie,\nDan, and Eleanor. First, Charlie will create the call on-chain by calling the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti"),"\nextrinsic with the raw call, in this case, a balance transfer (",(0,o.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive"),"\nextrinsic) from multisig CDE to Frank's account. When doing this, Charlie will have to deposit\n",(0,o.kt)("inlineCode",{parentName:"p"},"DepositBase + (2 * DepositFactor) = 20.152 DOT")," while he waits for either Dan or Eleanor also to\napprove the balance transfer call using the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," or the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti"),"\nextrinsics."),(0,o.kt)("p",null,"If Dan submits the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," extrinsic, he approves Charlie's call but he passes on\nthe final approval to Eleanor. So, although the multisig has threshold 2, in this case all 3/3\nsignatories need to participate in the transaction approval. Eleanor will need to submit a\n",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.approveAsMulti")," extrinsic to transfer funds from CDE to Frank."),(0,o.kt)("p",null,"Alternatively, Dan or Eleanor can just submit a ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic after Charlie to\ntransfer the funds. In this case, 2/3 signatories will participate in the transaction approval. The\naccounts approving Charlie's call will not need to place the deposit, and Charlie will receive his\ndeposit back once the transfer is successful or canceled. To cancel the transaction, Dan or Eleanor\ncan use the ",(0,o.kt)("inlineCode",{parentName:"p"},"multisig.cancelAsMulti")," extrinsic."),(0,o.kt)("p",null,"Note that multisigs are ",(0,o.kt)("strong",{parentName:"p"},"deterministic"),", which means that multisig addresses are generated from\nthe addresses of signers and the threshold of the multisig wallet. No matter the order of the\nsignatories' accounts, the multisig will always have the same address because accounts' addresses\nare sorted in ascending order."),(0,o.kt)("admonition",{title:"Addresses that are provided to the multisig wallet are sorted",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Public keys of signers' wallets are compared byte-for-byte and sorted ascending before being used to\ngenerate the multisig address. For example, consider the scenario with three addresses, A, B, and C,\nstarting with ",(0,o.kt)("inlineCode",{parentName:"p"},"5FUGT"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"5HMfS"),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"5GhKJ"),". If we build the ABC multisig with the accounts in that\nspecific order (i.e. first A, then B, and C), the real order of the accounts in the multisig will be\nACB. If, in the Extrinsic tab, we initiate a multisig call with C, the order of the other\nsignatories will be first A, then B. If we put first B, then A, the transaction will fail.")),(0,o.kt)("p",null,"This has some implications when using the Extrinsics tab on the\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts"},"Polkadot-JS UI")," to perform multisig transactions. If the\norder of the ",(0,o.kt)("em",{parentName:"p"},"other signatories")," is wrong, the transaction will fail. This does not happen if the\nmultisig is executed directly from the Accounts tab (recommended). The Polkadot-JS UI supports\nmultisig accounts, as documented on the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-account-multisig"},"Account Generation page"),". You\ncan see our video tutorials for more information about creating multisig accounts and transacting\nwith them using both the ",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=-cPiKMslZqI"},"Accounts Tab")," and the\n",(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T0vIuJcTJeQ"},"Extrinsic Tab")," in the Polkadot-JS UI."),(0,o.kt)("h2",{id:"decoding-multisig-call-data"},"Decoding Multisig Call Data"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Before signing a transaction, it is important to know the exact specifics of what is being signed.\nCheck the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181826-how-to-create-and-use-a-multisig-account"},'"How to use a multisig account"'),"\nin the support docs on how to decode the multisig call data.")))}g.isMDXComponent=!0},706:(t,e,a)=>{"use strict";a.d(e,{Z:()=>i});const i=a.p+"assets/images/multisig-diagram-90327330a3e865703a0ab1a1cc1eee47.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/9e2042f5.15b12687.js b/assets/js/9e2042f5.15b12687.js new file mode 100644 index 000000000000..5e91c9668c6a --- /dev/null +++ b/assets/js/9e2042f5.15b12687.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5651],{3905:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>m});var o=t(67294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var s=o.createContext({}),c=function(e){var a=o.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},d=function(e){var a=c(e.components);return o.createElement(s.Provider,{value:a},e.children)},h="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},u=o.forwardRef((function(e,a){var t=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),h=c(t),u=n,m=h["".concat(s,".").concat(u)]||h[u]||p[u]||r;return t?o.createElement(m,l(l({ref:a},d),{},{components:t})):o.createElement(m,l({ref:a},d))}));function m(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var r=t.length,l=new Array(r);l[0]=u;var i={};for(var s in a)hasOwnProperty.call(a,s)&&(i[s]=a[s]);i.originalType=e,i[h]="string"==typeof e?e:n,l[1]=i;for(var c=2;c{t.r(a),t.d(a,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var o=t(87462),n=t(63366),r=(t(67294),t(3905)),l=["components"],i={id:"learn-collator",title:"Collator",sidebar_label:"Collator",description:"Role of Collators within the Polkadot Ecosystem.",keywords:["collator","maintain","full node","block candidate"],slug:"../learn-collator"},s=void 0,c={unversionedId:"learn/learn-collator",id:"learn/learn-collator",title:"Collator",description:"Role of Collators within the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-collator.md",sourceDirName:"learn",slug:"/learn-collator",permalink:"/docs/learn-collator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-collator.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551514,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-collator",title:"Collator",sidebar_label:"Collator",description:"Role of Collators within the Polkadot Ecosystem.",keywords:["collator","maintain","full node","block candidate"],slug:"../learn-collator"},sidebar:"docs",previous:{title:"Network Participants",permalink:"/docs/learn-participants-index"},next:{title:"Nominator",permalink:"/docs/learn-nominator"}},d={},h=[{value:"Collators' Role",id:"collators-role",level:2},{value:"XCM",id:"xcm",level:2},{value:"Taking the Case for One Parachain",id:"taking-the-case-for-one-parachain",level:2},{value:"Collators in the Wild",id:"collators-in-the-wild",level:2},{value:"Guides and Tools",id:"guides-and-tools",level:2}],p={toc:h},u="wrapper";function m(e){var a=e.components,i=(0,n.Z)(e,l);return(0,r.kt)(u,(0,o.Z)({},p,i,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This page provides a general overview of the role of collators' in\nPolkadot. For more detailed information you\ncan read the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"Parachain Protocol Overview"),".")),(0,r.kt)("h2",{id:"collators-role"},"Collators' Role"),(0,r.kt)("p",null,"Collators maintain parachains by collecting parachain transactions from users and producing state\ntransition proofs for Relay Chain validators. In other words, collators maintain parachains by\naggregating parachain transactions into parachain block candidates and producing state transition\nproofs (Proof-of-Validity, PoV) for validators."),(0,r.kt)("p",null,"Collators maintain a full node for the Relay Chain and a full node for their particular parachain;\nmeaning they retain all necessary information to be able to author new blocks and execute\ntransactions in much the same way as miners do on PoW blockchains. Under normal circumstances, they\nwill collate and execute transactions to create an unsealed block and provide it, together with a\nPoV, to one or more validators responsible for proposing a parachain block."),(0,r.kt)("p",null,"Collators are similar to validators on any other blockchain but they do not need to provide security\nguarantees because Polkadot provides those. If\na parachain block is invalid, it will get rejected by validators. The validators are required to\ncheck the validity of submitted candidates, followed by issuing and collecting statements about the\nvalidity of candidates to other validators. This process is known as ",(0,r.kt)("strong",{parentName:"p"},"candidate backing"),".\nValidators receive an arbitrary number of parachain candidates with associated PoV from untrusted\ncollators. A candidate is considered ",(0,r.kt)("em",{parentName:"p"},"backable")," when at least 2/3 of all assigned validators have\nissued a valid statement about that candidate."),(0,r.kt)("p",null,"The validator must successfully verify the following conditions in the following order:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"The candidate does not exceed any parameters in the persisted validation data.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"The signature of the collator is valid.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Validate the candidate by executing the parachain Runtime."))),(0,r.kt)("p",null,"Once a candidate meets a specified criteria for inclusion, the selected relay chain block author\nthen chooses any of the backable candidates for each parachain and includes those into the relay\nchain block. We say the candidate blocks are ",(0,r.kt)("em",{parentName:"p"},"backed"),"."),(0,r.kt)("p",null,"The assumption that having more collators is better or more secure is not correct. On the contrary,\ntoo many collators may slow down the network. The only nefarious power collators have is transaction\ncensorship. To prevent censorship, a parachain only needs to ensure that there are some neutral\ncollators - but not necessarily a majority. Theoretically, the censorship problem is solved by\nhaving just one honest collator."),(0,r.kt)("h2",{id:"xcm"},"XCM"),(0,r.kt)("p",null,"Collators are a key element of the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCM (Cross-Consensus Message Passing Format)"),". By\nbeing full nodes of the Relay Chain, they are all aware of each other as peers. This makes it\npossible for them to send messages from parachain A to parachain B."),(0,r.kt)("h2",{id:"taking-the-case-for-one-parachain"},"Taking the Case for One Parachain"),(0,r.kt)("p",null,"A start of a new block candidate is initiated with a block creation time. The collator aggregates\nall new transactions at the end of the process. When doing so, the collator signs the ",(0,r.kt)("em",{parentName:"p"},"parachain\nblock candidate")," and produces state transition proofs (Proof-of-Validity, PoV), which are a summary\nof the final account balances caused by the transactions in the candidate block. The collator sends\nthe candidate block and PoV to the parachain validators, so-called para-validators. The\npara-validators verify the transactions within the parachain block candidate. Upon verification, and\nif all is well, the candidate becomes ",(0,r.kt)("em",{parentName:"p"},"backable")," and a para-validator shares the candidate block\nwith the relay chain."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"parachain candidate block diagram",src:t(17529).Z,width:"413",height:"298"})),(0,r.kt)("p",null,"The validators on the relay chain will try to reach a consensus on the block candidate. Upon\nreaching consensus, the now validated block candidate is shared with the validators and collators,\nand the process repeats for new transactions. A collator cannot continue building blocks on a\nparachain until the block candidate they proposed to the Relay Chain validators have been validated.\nA block is produced every 6 seconds."),(0,r.kt)("h2",{id:"collators-in-the-wild"},"Collators in the Wild"),(0,r.kt)("p",null,"Blockchains that are built using Substrate are unable to hook onto the Relay Chain on their own. The\nParity team built the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus/"},"Cumulus library")," to address this.\nCollators are being used on the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/build-pdk##testing-a-parachains:-rococo-testnet"},"Rococo")," testnet, and you can\nlearn more about how they are used with Cumulus via the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus/"},"Cumulus")," repository. More information can be found under\nthe ",(0,r.kt)("a",{parentName:"p",href:"/docs/build-pdk###cumulus"},"Cumulus section")," on the build parachain page."),(0,r.kt)("h2",{id:"guides-and-tools"},"Guides and Tools"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.substrate.io/reference/how-to-guides/parachains/connect-to-a-relay-chain/"},"Tutorial covering Cumulus and Collators")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/docs/build-pdk##testing-a-parachains:-rococo-testnet"},"Rococo testnet guide")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/shawntabrizi/polkadot-launch"},"polkadot-launch")," - a tool to quickly spin up a\nlocal Polkadot testnet based on some parameters like number of parachains, collator setup, etc.")))}m.isMDXComponent=!0},17529:(e,a,t)=>{t.d(a,{Z:()=>o});const o=t.p+"assets/images/polkadot-consensus-example-1-b4a05f2e5a4b991594612da57e1d6dfd.png"}}]); \ No newline at end of file diff --git a/assets/js/9e2042f5.701df6e6.js b/assets/js/9e2042f5.701df6e6.js deleted file mode 100644 index 076fbc736b8a..000000000000 --- a/assets/js/9e2042f5.701df6e6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5651],{3905:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>m});var o=t(67294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var s=o.createContext({}),c=function(e){var a=o.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},d=function(e){var a=c(e.components);return o.createElement(s.Provider,{value:a},e.children)},h="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},u=o.forwardRef((function(e,a){var t=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),h=c(t),u=n,m=h["".concat(s,".").concat(u)]||h[u]||p[u]||r;return t?o.createElement(m,l(l({ref:a},d),{},{components:t})):o.createElement(m,l({ref:a},d))}));function m(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var r=t.length,l=new Array(r);l[0]=u;var i={};for(var s in a)hasOwnProperty.call(a,s)&&(i[s]=a[s]);i.originalType=e,i[h]="string"==typeof e?e:n,l[1]=i;for(var c=2;c{t.r(a),t.d(a,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var o=t(87462),n=t(63366),r=(t(67294),t(3905)),l=["components"],i={id:"learn-collator",title:"Collator",sidebar_label:"Collator",description:"Role of Collators within the Polkadot Ecosystem.",keywords:["collator","maintain","full node","block candidate"],slug:"../learn-collator"},s=void 0,c={unversionedId:"learn/learn-collator",id:"learn/learn-collator",title:"Collator",description:"Role of Collators within the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-collator.md",sourceDirName:"learn",slug:"/learn-collator",permalink:"/docs/learn-collator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-collator.md",tags:[],version:"current",lastUpdatedBy:"omahs",lastUpdatedAt:1695203423,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{id:"learn-collator",title:"Collator",sidebar_label:"Collator",description:"Role of Collators within the Polkadot Ecosystem.",keywords:["collator","maintain","full node","block candidate"],slug:"../learn-collator"},sidebar:"docs",previous:{title:"Network Participants",permalink:"/docs/learn-participants-index"},next:{title:"Nominator",permalink:"/docs/learn-nominator"}},d={},h=[{value:"Collators' Role",id:"collators-role",level:2},{value:"XCM",id:"xcm",level:2},{value:"Taking the Case for One Parachain",id:"taking-the-case-for-one-parachain",level:2},{value:"Collators in the Wild",id:"collators-in-the-wild",level:2},{value:"Guides and Tools",id:"guides-and-tools",level:2}],p={toc:h},u="wrapper";function m(e){var a=e.components,i=(0,n.Z)(e,l);return(0,r.kt)(u,(0,o.Z)({},p,i,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"collators-role"},"Collators' Role"),(0,r.kt)("p",null,"Collators maintain parachains by collecting parachain transactions from users and producing state\ntransition proofs for Relay Chain validators. In other words, collators maintain parachains by\naggregating parachain transactions into parachain block candidates and producing state transition\nproofs (Proof-of-Validity, PoV) for validators."),(0,r.kt)("p",null,"Collators maintain a full node for the Relay Chain and a full node for their particular parachain;\nmeaning they retain all necessary information to be able to author new blocks and execute\ntransactions in much the same way as miners do on PoW blockchains. Under normal circumstances, they\nwill collate and execute transactions to create an unsealed block and provide it, together with a\nPoV, to one or more validators responsible for proposing a parachain block."),(0,r.kt)("p",null,"Collators are similar to validators on any other blockchain but they do not need to provide security\nguarantees because Polkadot provides those. If\na parachain block is invalid, it will get rejected by validators. The validators are required to\ncheck the validity of submitted candidates, followed by issuing and collecting statements about the\nvalidity of candidates to other validators. This process is known as ",(0,r.kt)("strong",{parentName:"p"},"candidate backing"),".\nValidators receive an arbitrary number of parachain candidates with associated PoV from untrusted\ncollators. A candidate is considered ",(0,r.kt)("em",{parentName:"p"},"backable")," when at least 2/3 of all assigned validators have\nissued a valid statement about that candidate."),(0,r.kt)("p",null,"The validator must successfully verify the following conditions in the following order:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"The candidate does not exceed any parameters in the persisted validation data.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"The signature of the collator is valid.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Validate the candidate by executing the parachain Runtime."))),(0,r.kt)("p",null,"Once a candidate meets a specified criteria for inclusion, the selected relay chain block author\nthen chooses any of the backable candidates for each parachain and includes those into the relay\nchain block. We say the candidate blocks are ",(0,r.kt)("em",{parentName:"p"},"backed"),"."),(0,r.kt)("p",null,"The assumption that having more collators is better or more secure is not correct. On the contrary,\ntoo many collators may slow down the network. The only nefarious power collators have is transaction\ncensorship. To prevent censorship, a parachain only needs to ensure that there are some neutral\ncollators - but not necessarily a majority. Theoretically, the censorship problem is solved by\nhaving just one honest collator."),(0,r.kt)("h2",{id:"xcm"},"XCM"),(0,r.kt)("p",null,"Collators are a key element of the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCM (Cross-Consensus Message Passing Format)"),". By\nbeing full nodes of the Relay Chain, they are all aware of each other as peers. This makes it\npossible for them to send messages from parachain A to parachain B."),(0,r.kt)("h2",{id:"taking-the-case-for-one-parachain"},"Taking the Case for One Parachain"),(0,r.kt)("p",null,"A start of a new block candidate is initiated with a block creation time. The collator aggregates\nall new transactions at the end of the process. When doing so, the collator signs the ",(0,r.kt)("em",{parentName:"p"},"parachain\nblock candidate")," and produces state transition proofs (Proof-of-Validity, PoV), which are a summary\nof the final account balances caused by the transactions in the candidate block. The collator sends\nthe candidate block and PoV to the parachain validators, so-called para-validators. The\npara-validators verify the transactions within the parachain block candidate. Upon verification, and\nif all is well, the candidate becomes ",(0,r.kt)("em",{parentName:"p"},"backable")," and a para-validator shares the candidate block\nwith the relay chain."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"parachain candidate block diagram",src:t(17529).Z,width:"413",height:"298"})),(0,r.kt)("p",null,"The validators on the relay chain will try to reach a consensus on the block candidate. Upon\nreaching consensus, the now validated block candidate is shared with the validators and collators,\nand the process repeats for new transactions. A collator cannot continue building blocks on a\nparachain until the block candidate they proposed to the Relay Chain validators have been validated.\nA block is produced every 6 seconds."),(0,r.kt)("h2",{id:"collators-in-the-wild"},"Collators in the Wild"),(0,r.kt)("p",null,"Blockchains that are built using Substrate are unable to hook onto the Relay Chain on their own. The\nParity team built the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus/"},"Cumulus library")," to address this.\nCollators are being used on the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/build-pdk##testing-a-parachains:-rococo-testnet"},"Rococo")," testnet, and you can\nlearn more about how they are used with Cumulus via the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/cumulus/"},"Cumulus")," repository. More information can be found under\nthe ",(0,r.kt)("a",{parentName:"p",href:"/docs/build-pdk###cumulus"},"Cumulus section")," on the build parachain page."),(0,r.kt)("h2",{id:"guides-and-tools"},"Guides and Tools"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.substrate.io/reference/how-to-guides/parachains/connect-to-a-relay-chain/"},"Tutorial covering Cumulus and Collators")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/docs/build-pdk##testing-a-parachains:-rococo-testnet"},"Rococo testnet guide")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/shawntabrizi/polkadot-launch"},"polkadot-launch")," - a tool to quickly spin up a\nlocal Polkadot testnet based on some parameters like number of parachains, collator setup, etc.")))}m.isMDXComponent=!0},17529:(e,a,t)=>{t.d(a,{Z:()=>o});const o=t.p+"assets/images/polkadot-consensus-example-1-b4a05f2e5a4b991594612da57e1d6dfd.png"}}]); \ No newline at end of file diff --git a/assets/js/9f804621.3dffb346.js b/assets/js/9f804621.3dffb346.js new file mode 100644 index 000000000000..badfd0988192 --- /dev/null +++ b/assets/js/9f804621.3dffb346.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[4143],{47940:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var a=n(74165),o=n(15861),r=n(67294),s=n(87152),i=n(14741),l=n(67425);function c(e,t,n){return u.apply(this,arguments)}function u(){return(u=(0,o.Z)((0,a.Z)().mark((function e(t,n,o){var r,l,c,u,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return c=new s.U(r),e.next=21,i.G.create({provider:c});case 21:u=e.sent,(d=n.split(".")).forEach((function(e){e in u&&(u=u[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=u.toString(),e.abrupt("break",35);case 29:return e.next=31,u();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+n);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,n,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,n,a);break;case"precise":(0,l.Precise)(e,n,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,n);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,n=e.path,s=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,u=(0,r.useState)(""),p=u[0],h=u[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(s.toString(),l,t,h):h(s.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,a.Z)().mark((function e(){var o;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c(t,n,h);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,h):h(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t="polkadot",n="kusama",a="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,s,i){var l=void 0;if(s===t||s===o)l=3;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),i((e=Number.isInteger(e/r[s].precision)?e/r[s].precision+" "+r[s].symbol:(e/r[s].precision).toFixed(l)+" "+r[s].symbol).toString())},Precise:function(e,t,n){n(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,s){var i=void 0;if(s===t||s===o)i=1;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");i=4}r((e/=i).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},52991:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(67294),o=n(86010),r=n(53438),s=n(39960),i=n(13919),l=n(95999);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function u(e){var t=e.href,n=e.children;return a.createElement(s.Z,{href:t,className:(0,o.Z)("card padding--lg",c.cardContainer)},n)}function d(e){var t=e.href,n=e.icon,r=e.title,s=e.description;return a.createElement(u,{href:t},a.createElement("h2",{className:(0,o.Z)("text--truncate",c.cardTitle),title:r},n," ",r),s&&a.createElement("p",{className:(0,o.Z)("text--truncate",c.cardDescription),title:s},s))}function p(e){var t,n=e.item,o=(0,r.Wl)(n);return o?a.createElement(d,{href:o,icon:"\ud83d\uddc3\ufe0f",title:n.label,description:null!=(t=n.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:n.items.length})}):null}function h(e){var t,n,o=e.item,s=(0,i.Z)(o.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,r.xz)(null!=(t=o.docId)?t:void 0);return a.createElement(d,{href:o.href,icon:s,title:o.label,description:null!=(n=o.description)?n:null==l?void 0:l.description})}function k(e){var t=e.item;switch(t.type){case"link":return a.createElement(h,{item:t});case"category":return a.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function m(e){var t=e.className,n=(0,r.jA)();return a.createElement(f,{items:n.items,className:t})}function f(e){var t=e.items,n=e.className;if(!t)return a.createElement(m,e);var s=(0,r.MN)(t);return a.createElement("section",{className:(0,o.Z)("row",n)},s.map((function(e,t){return a.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},a.createElement(k,{item:e}))})))}},85162:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var a=n(67294),o=n(86010);const r={tabItem:"tabItem_Ymn6"};function s(e){var t=e.children,n=e.hidden,s=e.className;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,s),hidden:n},t)}},74866:(e,t,n)=>{"use strict";n.d(t,{Z:()=>v});var a=n(87462),o=n(67294),r=n(86010),s=n(12466),i=n(16550),l=n(91980),c=n(67392),u=n(50012);function d(e){return function(e){var t,n;return null!=(t=null==(n=o.Children.map(e,(function(e){if(!e||(0,o.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:n.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,n=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:d(n);return function(e){var t=(0,c.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,n])}function h(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function k(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId,r=(0,i.k6)(),s=function(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:n,groupId:a});return[(0,l._X)(s),(0,o.useCallback)((function(e){if(s){var t=new URLSearchParams(r.location.search);t.set(s,e),r.replace(Object.assign({},r.location,{search:t.toString()}))}}),[s,r])]}function m(e){var t,n,a,r,s=e.defaultValue,i=e.queryString,l=void 0!==i&&i,c=e.groupId,d=p(e),m=(0,o.useState)((function(){return function(e){var t,n=e.defaultValue,a=e.tabValues;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!h({value:n,tabValues:a}))throw new Error('Docusaurus error: The has a defaultValue "'+n+'" but none of its children has the corresponding value. Available values are: '+a.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return n}var o=null!=(t=a.find((function(e){return e.default})))?t:a[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:s,tabValues:d})})),f=m[0],b=m[1],g=k({queryString:l,groupId:c}),w=g[0],y=g[1],v=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:c}.groupId),n=(0,u.Nk)(t),a=n[0],r=n[1],[a,(0,o.useCallback)((function(e){t&&r.set(e)}),[t,r])]),N=v[0],S=v[1],x=function(){var e=null!=w?w:N;return h({value:e,tabValues:d})?e:null}();return(0,o.useLayoutEffect)((function(){x&&b(x)}),[x]),{selectedValue:f,selectValue:(0,o.useCallback)((function(e){if(!h({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);b(e),y(e),S(e)}),[y,S,d]),tabValues:d}}var f=n(72389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){var t=e.className,n=e.block,i=e.selectedValue,l=e.selectValue,c=e.tabValues,u=[],d=(0,s.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,n=u.indexOf(t),a=c[n].value;a!==i&&(d(t),l(a))},h=function(e){var t,n=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var a,o=u.indexOf(e.currentTarget)+1;n=null!=(a=u[o])?a:u[0];break;case"ArrowLeft":var r,s=u.indexOf(e.currentTarget)-1;n=null!=(r=u[s])?r:u[u.length-1]}null==(t=n)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},c.map((function(e){var t=e.value,n=e.label,s=e.attributes;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:function(e){return u.push(e)},onKeyDown:h,onClick:p},s,{className:(0,r.Z)("tabs__item",b.tabItem,null==s?void 0:s.className,{"tabs__item--active":i===t})}),null!=n?n:t)})))}function w(e){var t=e.lazy,n=e.children,a=e.selectedValue,r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){var s=r.find((function(e){return e.props.value===a}));return s?(0,o.cloneElement)(s,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a})})))}function y(e){var t=m(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",b.tabList)},o.createElement(g,(0,a.Z)({},e,t)),o.createElement(w,(0,a.Z)({},e,t)))}function v(e){var t=(0,f.Z)();return o.createElement(y,(0,a.Z)({key:String(t)},e))}},35426:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>u,toc:()=>p});var a=n(87462),o=n(63366),r=(n(67294),n(3905)),s=(n(47940),n(74866),n(85162),n(52991)),i=["components"],l={id:"learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",sidebar_label:"Account Guides",description:"Polkadot-JS Guides about Accounts",keyword:["guides","polkadot-js","accounts"],slug:"../learn-guides-accounts"},c=void 0,u={unversionedId:"learn/learn-guides-accounts",id:"learn/learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",description:"Polkadot-JS Guides about Accounts",source:"@site/../docs/learn/learn-guides-accounts.md",sourceDirName:"learn",slug:"/learn-guides-accounts",permalink:"/docs/learn-guides-accounts",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",sidebar_label:"Account Guides",description:"Polkadot-JS Guides about Accounts",keyword:["guides","polkadot-js","accounts"],slug:"../learn-guides-accounts"},sidebar:"docs",previous:{title:"Polkadot-JS Guides",permalink:"/docs/learn-polkadot-js-guides"},next:{title:"Multisig Guides",permalink:"/docs/learn-guides-accounts-multisig"}},d={},p=[{value:"Account Address Format",id:"account-address-format",level:2},{value:"Polkadot-JS Browser Extension",id:"polkadot-js-browser-extension",level:2},{value:"Account Backup using the Polkadot-JS Browser Extension",id:"account-backup-using-the-polkadot-js-browser-extension",level:3},{value:"Reset Password using the Polkadot-JS Browser Extension",id:"reset-password-using-the-polkadot-js-browser-extension",level:3},{value:"Restore Account on the Polkadot-JS Browser Extension",id:"restore-account-on-the-polkadot-js-browser-extension",level:3},{value:"Polkadot-JS UI",id:"polkadot-js-ui",level:2},{value:"Account Backup using the Polkadot-JS UI",id:"account-backup-using-the-polkadot-js-ui",level:3},{value:"Reset password using the Polkadot-JS UI",id:"reset-password-using-the-polkadot-js-ui",level:3},{value:"Restore Account on the Polkadot-JS UI",id:"restore-account-on-the-polkadot-js-ui",level:3},{value:"Unlocking Locks",id:"unlocking-locks",level:3},{value:"Query Account Data in Polkadot-JS",id:"query-account-data-in-polkadot-js",level:2},{value:"Vanity Generator",id:"vanity-generator",level:2},{value:"Encryption Enhancement",id:"encryption-enhancement",level:2}],h={toc:p},k="wrapper";function m(e){var t=e.components,l=(0,o.Z)(e,i);return(0,r.kt)(k,(0,a.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)(s.Z,{mdxType:"DocCardList"}),(0,r.kt)("h2",{id:"account-address-format"},"Account Address Format"),(0,r.kt)("p",null,"An account created for Polkadot can also be\nused on multiple chains in the Polkadot\necosystem. More specifically, the account of a chain that uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"*25519")," account address format\n(the latest list can be accessed on the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/ss58-registry/blob/main/ss58-registry.json"},"ss58 registry repository"),"\nis cross-compatible with all the chains that use the similar format. To switch between the accounts\non different chains, you can follow the guidelines in\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000103707-can-i-use-the-same-account-on-polkadot-kusama-and-parachains-"},"this support article"),".\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subscan.io/tools/format_transform"},"Subscan has a tool")," you can use to convert your\naddress between the different chain formats."),(0,r.kt)("admonition",{title:"Using the same account on multiple chains - Pros and Cons",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The address format differs from chain to chain, but that difference is only visual. The same private\nkey can be used to sign transactions on behalf of the respective accounts on multiple chains. Using\na single account on multiple chains is convenient, as you do not have to deal with multiple mnemonic\nphrases or private keys. But, if your account gets compromised on one chain, the attacker can gain\nfull access to the accounts on all other chains. This also has implications for the account holder's\nprivacy, as knowing the identity of an account on one chain can expose the account holder's identity\non all the chains. In the Accounts tab, the Polkadot-JS UI displays a warning message next to each\nAccount you are using on multiple chains and recommends using different Accounts on different chains\n(see below)."),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("img",{alt:"warning multiple chains",src:n(2245).Z,width:"1103",height:"343"}))),(0,r.kt)("p",null,'On Polkadot-JS Extension, you can copy your address by clicking the account\'s icon while the desired\nchain format is active. E.g. selecting "Substrate" as the format will change your address, and\nclicking the colorful icon of your account will copy it in that format. While in\nPolkadot mode, that address format will be\ncopied, and so on.'),(0,r.kt)("h2",{id:"polkadot-js-browser-extension"},"Polkadot-JS Browser Extension"),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/DNU0p5G0Gqc/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc"},"Polkadot-JS Browser Extension Tutorial")))),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For guidelines about how to create an account using the Polkadot Extension, see\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000098878-how-to-create-a-dot-account"},(0,r.kt)("strong",{parentName:"a"},"this support article")),".")),(0,r.kt)("p",null,"The Polkadot-JS Browser Extension (the Polkadot Extension) provides a reasonable balance of security\nand usability. It provides a separate local mechanism to generate your address and interact with\nPolkadot."),(0,r.kt)("p",null,'This method involves installing the Polkadot Extension and using it as a \u201cvirtual vault," separate\nfrom your browser, to store your private keys. It also allows the signing of transactions and\nsimilar functionality.'),(0,r.kt)("p",null,"It is still running on the same computer you use to connect to the internet and thus is less secure\nthan using Parity Signer or other air-gapped approaches."),(0,r.kt)("h3",{id:"account-backup-using-the-polkadot-js-browser-extension"},"Account Backup using the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000177677-how-to-export-your-json-backup-file"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto know how to back up your account."),(0,r.kt)("h3",{id:"reset-password-using-the-polkadot-js-browser-extension"},"Reset Password using the Polkadot-JS Browser Extension"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc&t=280s"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to\nchange the password for an account that has been created on the Polkadot-JS browser extension (i.e.\nan injected account).")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Before following the instructions below, make sure you have your mnemonic phrase stored in a safe\nplace accessible to you.")),(0,r.kt)("p",null,"Let's say you created ",(0,r.kt)("inlineCode",{parentName:"p"},"ACCOUNT 1")," protected by password ",(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1"),". To reset the password of your\n",(0,r.kt)("inlineCode",{parentName:"p"},"ACCOUNT 1")," using the browser extension, you must follow the following steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Go to ",(0,r.kt)("inlineCode",{parentName:"li"},"ACCOUNT 1"),' on the browser extension and click "Forget account". This action will delete the\naccess to your account. Note that your tokens are still in your account on the\nPolkadot blockchain network.'),(0,r.kt)("li",{parentName:"ul"},'On the browser extension click the "+" button in the top right corner and select the option\n"Import account from pre-existing seed". After entering the mnemonic phrase, you can choose a new\npassword, ',(0,r.kt)("inlineCode",{parentName:"li"},"PSW 2"),".")),(0,r.kt)("admonition",{title:"JSON files do not allow changing account passwords",type:"info"},(0,r.kt)("p",{parentName:"admonition"},'If you add the account to the extension using the option "Restore account from backup JSON file",\nthis will allow you to restore access to your account using a JSON file protected by the password\n',(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1"),", but does not let you set a new password. Thus, ",(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1")," will become the account password by\ndefault.")),(0,r.kt)("admonition",{title:"Accounts on Cold wallets do not need passwords",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For hardware wallets such as ",(0,r.kt)("a",{parentName:"p",href:"https://www.ledger.com/"},"Ledger"),", you may have to set a PIN for\naccessing the accounts on the device, but you do not need to set a password for every individual\naccount. When you need to make transactions with your account, you are required to sign using your\nLedger device. Also, Ledger wallets let you generate multiple accounts for multiple blockchain\nnetworks without setting different passwords to access such accounts.")),(0,r.kt)("h3",{id:"restore-account-on-the-polkadot-js-browser-extension"},"Restore Account on the Polkadot-JS Browser Extension"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/9ohp8k4Hz8c"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169952-how-to-restore-your-account-in-the-polkadot-extension"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn how to restore your account on the Polkadot-JS UI.")),(0,r.kt)("h2",{id:"polkadot-js-ui"},"Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For guidelines about how to create an account using Polkadot-JS UI, see\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000180529"},(0,r.kt)("strong",{parentName:"a"},"this support article")),".")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"If you use this method to create your account and clear your cookies in your browser, your account\nwill be lost forever if you do not ",(0,r.kt)("a",{parentName:"p",href:"#restore-account-on-the-polkadot-js-ui"},"back it up"),". Make sure\nyou store your seed phrase in a safe place or download the account's JSON file if using the\nPolkadot{.js} browser extension. Learn more about account backup and restoration\n",(0,r.kt)("a",{parentName:"p",href:"#restore-account-on-the-polkadot-js-ui"},"here"),".")),(0,r.kt)("p",null,"Local in-browser account storage is disabled by default on the Polkadot-JS UI. To create an account\nusing the Polkadot-JS UI, navigate to settings > account options and click on allow local in-browser\naccount storage in the drop-down menu. Using the Polkadot-JS user interface without a browser\nextension is ",(0,r.kt)("strong",{parentName:"p"},"not recommended"),". It is the least secure way of generating an account. It should\nonly be used if all other methods are not feasible."),(0,r.kt)("h3",{id:"account-backup-using-the-polkadot-js-ui"},"Account Backup using the Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000177677-how-to-export-your-json-backup-file"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto know how to back up your account.")),(0,r.kt)("h3",{id:"reset-password-using-the-polkadot-js-ui"},"Reset password using the Polkadot-JS UI"),(0,r.kt)("p",null,'To reset the password of an account created with Polkadot-JS Apps UI, you need to go to the\n"Accounts" tab, click the icon with three vertical dots on your account and select "Change this\naccount\'s password".'),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc?t=261"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to change the\npassword for an account created on the Polkadot-JS UI (i.e. a non-injected account)."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you create an account first using Polkadot-JS Apps UI and then add it to the browser extension,\nyou need to follow the\n",(0,r.kt)("a",{parentName:"p",href:"#reset-password-using-the-browser-extension"},"guidelines for the browser extension")," to change the\npassword of such an account.")),(0,r.kt)("h3",{id:"restore-account-on-the-polkadot-js-ui"},"Restore Account on the Polkadot-JS UI"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/cBsZqFpBANY"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000180110-how-to-restore-your-account-in-polkadot-js-ui"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn how to restore your account on the Polkadot-JS UI."),(0,r.kt)("h3",{id:"unlocking-locks"},"Unlocking Locks"),(0,r.kt)("admonition",{title:"Locks do not stack!",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The biggest lock decides the total amount of locked funds. See\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/LHgY7ds_bZ0"},(0,r.kt)("strong",{parentName:"a"},"this walk-through video tutorial"))," that will guide you in the\nprocess of unlocking funds in the example above.")),(0,r.kt)("p",null,"In the example, the locked balance is 0.55 KSM because the biggest lock is on democracy and is 0.55\nKSM. As soon as the democracy lock is removed the next biggest lock is on staking 0.5 KSM (bonded\n0.4 KSM + redeemable 0.1 KSM). This means that the locked balance will be 0.5 KSM, and 0.05 KSM will\nbe added to the transferrable balance. After redeeming the unbonded 0.1 KSM, the locked balance will\nbe 0.4 KSM, and an additional 0.1 KSM will be added to the transferrable balance. Now the biggest\nlock is still the bonded one. This means that even if we remove the vested lock, the locked balance\nwill still be 0.4 KSM and no tokens will be added to the transferrable balance. To free those bonded\ntokens we will need to unbond them and wait for the unbonding period to make them redeemable. If we\nremove the proxy the reserved funds will be automatically added to the transferrable balance."),(0,r.kt)("h2",{id:"query-account-data-in-polkadot-js"},"Query Account Data in Polkadot-JS"),(0,r.kt)("p",null,"In the Polkadot-JS UI, you can also query account data under\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Developer > Chain state"),". Under ",(0,r.kt)("inlineCode",{parentName:"p"},"selected state query"),"\nchoose the system pallet followed by ",(0,r.kt)("inlineCode",{parentName:"p"},"account(AccountId32): FrameSystemAccountInfo"),", under ",(0,r.kt)("inlineCode",{parentName:"p"},"Option"),'\nchoose an account, and then click on the "+" button on the right.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"account_balance_types",src:n(9853).Z,width:"1636",height:"343"})),(0,r.kt)("p",null,"Account information include:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"nonce"),", the number of transactions the account sent."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"consumers"),", the number of other modules that currently depend on this account's existence. The\naccount cannot be reaped until this is zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"providers"),", the number of other modules that allow this account to exist. The account may not be\nreaped until this and ",(0,r.kt)("inlineCode",{parentName:"li"},"sufficients")," are both zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"sufficients"),", the number of modules that allow this account to exist for their own purposes. The\naccount may not be reaped until this and ",(0,r.kt)("inlineCode",{parentName:"li"},"providers")," are both zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"data"),", the additional data that belongs to this account. Used to store the balance(s) in a lot of\nchains.")),(0,r.kt)("p",null,"More in-depth information about the above data can be found in the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/2e7fde832b77b242269b136f1c3b6fffef86f9b6/frame/system/src/lib.rs#LL767C1-L781C24"},"substrate code base"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"AccountData")," structure defines the balance types in Substrate. The three types of balances\ninclude:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"free"),", is the balance that is free but not necessarily transferrable."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"reserved"),", is the balance that is not free, and it is put on hold for on-chain activity such as\ndeposits for multi-signature calls, setting up proxies and identities, and other actions that hold\nstate on the network."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"frozen"),", is the amount that is free to use for on-chain activity but is locked in staking,\ngovernance, or vesting.")),(0,r.kt)("p",null,"The ",(0,r.kt)("strong",{parentName:"p"},"usable")," or transferrable balance of the account is currently calculated using the formula\nbelow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"transferable = free - max(frozen - reserved, ED)\n")),(0,r.kt)("p",null,"Where ED is the existential deposit. The ",(0,r.kt)("strong",{parentName:"p"},"total")," balance of the account is the sum of ",(0,r.kt)("inlineCode",{parentName:"p"},"free")," and\n",(0,r.kt)("inlineCode",{parentName:"p"},"reserved")," funds. The ",(0,r.kt)("inlineCode",{parentName:"p"},"flags")," describe extra information about the account."),(0,r.kt)("p",null,"More in-depth information about the above data can be found in the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/2e7fde832b77b242269b136f1c3b6fffef86f9b6/frame/balances/src/types.rs#LL95-L114"},"balances pallet in the Substrate code base"),"."),(0,r.kt)("h2",{id:"vanity-generator"},"Vanity Generator"),(0,r.kt)("p",null,"The vanity generator is a tool on ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts/vanity"},"Polkadot-JS UI"),"\nthat lets you generate addresses that contain a specific substring. For the tutorial on how to\ncreate an account using Vanity Generator, visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000171416"},"this support article"),"."),(0,r.kt)("h2",{id:"encryption-enhancement"},"Encryption Enhancement"),(0,r.kt)("p",null,"Some newly generated ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," account files cannot be imported (restored) into older wallet software.\nThis is due to an enhanced encryption method, noticeable in a slight delay when\nencrypting/decrypting your wallet. If you cannot load a ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," file, please use the latest version\nof the wallet software. If you cannot load it, ensure that the wallet software uses the newest\nversion of the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/api/"},"Polkadot API"),"."))}m.isMDXComponent=!0},9853:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/AccountData-struct-118d0bf533806084460cba05bef62b9c.png"},2245:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/warning-multichain-account-0719ff59691f3ff48562d92ef2295e84.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/9f804621.7e9f7f10.js b/assets/js/9f804621.7e9f7f10.js deleted file mode 100644 index a45d030319a3..000000000000 --- a/assets/js/9f804621.7e9f7f10.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[4143],{47940:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var a=n(74165),o=n(15861),r=n(67294),s=n(87152),i=n(14741),l=n(67425);function c(e,t,n){return u.apply(this,arguments)}function u(){return(u=(0,o.Z)((0,a.Z)().mark((function e(t,n,o){var r,l,c,u,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return c=new s.U(r),e.next=21,i.G.create({provider:c});case 21:u=e.sent,(d=n.split(".")).forEach((function(e){e in u&&(u=u[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=u.toString(),e.abrupt("break",35);case 29:return e.next=31,u();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+n);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,n,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,n,a);break;case"precise":(0,l.Precise)(e,n,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,n);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,n=e.path,s=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,u=(0,r.useState)(""),p=u[0],h=u[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(s.toString(),l,t,h):h(s.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,a.Z)().mark((function e(){var o;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c(t,n,h);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,h):h(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t="polkadot",n="kusama",a="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,s,i){var l=void 0;if(s===t||s===o)l=3;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),i((e=Number.isInteger(e/r[s].precision)?e/r[s].precision+" "+r[s].symbol:(e/r[s].precision).toFixed(l)+" "+r[s].symbol).toString())},Precise:function(e,t,n){n(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,s){var i=void 0;if(s===t||s===o)i=1;else{if(s!==n&&s!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");i=4}r((e/=i).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},52991:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var a=n(67294),o=n(86010),r=n(53438),s=n(39960),i=n(13919),l=n(95999);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function u(e){var t=e.href,n=e.children;return a.createElement(s.Z,{href:t,className:(0,o.Z)("card padding--lg",c.cardContainer)},n)}function d(e){var t=e.href,n=e.icon,r=e.title,s=e.description;return a.createElement(u,{href:t},a.createElement("h2",{className:(0,o.Z)("text--truncate",c.cardTitle),title:r},n," ",r),s&&a.createElement("p",{className:(0,o.Z)("text--truncate",c.cardDescription),title:s},s))}function p(e){var t,n=e.item,o=(0,r.Wl)(n);return o?a.createElement(d,{href:o,icon:"\ud83d\uddc3\ufe0f",title:n.label,description:null!=(t=n.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:n.items.length})}):null}function h(e){var t,n,o=e.item,s=(0,i.Z)(o.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,r.xz)(null!=(t=o.docId)?t:void 0);return a.createElement(d,{href:o.href,icon:s,title:o.label,description:null!=(n=o.description)?n:null==l?void 0:l.description})}function k(e){var t=e.item;switch(t.type){case"link":return a.createElement(h,{item:t});case"category":return a.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function m(e){var t=e.className,n=(0,r.jA)();return a.createElement(f,{items:n.items,className:t})}function f(e){var t=e.items,n=e.className;if(!t)return a.createElement(m,e);var s=(0,r.MN)(t);return a.createElement("section",{className:(0,o.Z)("row",n)},s.map((function(e,t){return a.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},a.createElement(k,{item:e}))})))}},85162:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var a=n(67294),o=n(86010);const r={tabItem:"tabItem_Ymn6"};function s(e){var t=e.children,n=e.hidden,s=e.className;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,s),hidden:n},t)}},74866:(e,t,n)=>{"use strict";n.d(t,{Z:()=>v});var a=n(87462),o=n(67294),r=n(86010),s=n(12466),i=n(16550),l=n(91980),c=n(67392),u=n(50012);function d(e){return function(e){var t,n;return null!=(t=null==(n=o.Children.map(e,(function(e){if(!e||(0,o.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:n.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,n=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:d(n);return function(e){var t=(0,c.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,n])}function h(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function k(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId,r=(0,i.k6)(),s=function(e){var t=e.queryString,n=void 0!==t&&t,a=e.groupId;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:n,groupId:a});return[(0,l._X)(s),(0,o.useCallback)((function(e){if(s){var t=new URLSearchParams(r.location.search);t.set(s,e),r.replace(Object.assign({},r.location,{search:t.toString()}))}}),[s,r])]}function m(e){var t,n,a,r,s=e.defaultValue,i=e.queryString,l=void 0!==i&&i,c=e.groupId,d=p(e),m=(0,o.useState)((function(){return function(e){var t,n=e.defaultValue,a=e.tabValues;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!h({value:n,tabValues:a}))throw new Error('Docusaurus error: The has a defaultValue "'+n+'" but none of its children has the corresponding value. Available values are: '+a.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return n}var o=null!=(t=a.find((function(e){return e.default})))?t:a[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:s,tabValues:d})})),f=m[0],b=m[1],g=k({queryString:l,groupId:c}),w=g[0],y=g[1],v=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:c}.groupId),n=(0,u.Nk)(t),a=n[0],r=n[1],[a,(0,o.useCallback)((function(e){t&&r.set(e)}),[t,r])]),N=v[0],S=v[1],x=function(){var e=null!=w?w:N;return h({value:e,tabValues:d})?e:null}();return(0,o.useLayoutEffect)((function(){x&&b(x)}),[x]),{selectedValue:f,selectValue:(0,o.useCallback)((function(e){if(!h({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);b(e),y(e),S(e)}),[y,S,d]),tabValues:d}}var f=n(72389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){var t=e.className,n=e.block,i=e.selectedValue,l=e.selectValue,c=e.tabValues,u=[],d=(0,s.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,n=u.indexOf(t),a=c[n].value;a!==i&&(d(t),l(a))},h=function(e){var t,n=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var a,o=u.indexOf(e.currentTarget)+1;n=null!=(a=u[o])?a:u[0];break;case"ArrowLeft":var r,s=u.indexOf(e.currentTarget)-1;n=null!=(r=u[s])?r:u[u.length-1]}null==(t=n)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},c.map((function(e){var t=e.value,n=e.label,s=e.attributes;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:function(e){return u.push(e)},onKeyDown:h,onClick:p},s,{className:(0,r.Z)("tabs__item",b.tabItem,null==s?void 0:s.className,{"tabs__item--active":i===t})}),null!=n?n:t)})))}function w(e){var t=e.lazy,n=e.children,a=e.selectedValue,r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){var s=r.find((function(e){return e.props.value===a}));return s?(0,o.cloneElement)(s,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a})})))}function y(e){var t=m(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",b.tabList)},o.createElement(g,(0,a.Z)({},e,t)),o.createElement(w,(0,a.Z)({},e,t)))}function v(e){var t=(0,f.Z)();return o.createElement(y,(0,a.Z)({key:String(t)},e))}},35426:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>u,toc:()=>p});var a=n(87462),o=n(63366),r=(n(67294),n(3905)),s=(n(47940),n(74866),n(85162),n(52991)),i=["components"],l={id:"learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",sidebar_label:"Account Guides",description:"Polkadot-JS Guides about Accounts",keyword:["guides","polkadot-js","accounts"],slug:"../learn-guides-accounts"},c=void 0,u={unversionedId:"learn/learn-guides-accounts",id:"learn/learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",description:"Polkadot-JS Guides about Accounts",source:"@site/../docs/learn/learn-guides-accounts.md",sourceDirName:"learn",slug:"/learn-guides-accounts",permalink:"/docs/learn-guides-accounts",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-accounts",title:"Polkadot-JS Guides about Accounts",sidebar_label:"Account Guides",description:"Polkadot-JS Guides about Accounts",keyword:["guides","polkadot-js","accounts"],slug:"../learn-guides-accounts"},sidebar:"docs",previous:{title:"Polkadot-JS Guides",permalink:"/docs/learn-polkadot-js-guides"},next:{title:"Multisig Guides",permalink:"/docs/learn-guides-accounts-multisig"}},d={},p=[{value:"Account Address Format",id:"account-address-format",level:2},{value:"Polkadot-JS Browser Extension",id:"polkadot-js-browser-extension",level:2},{value:"Account Backup using the Polkadot-JS Browser Extension",id:"account-backup-using-the-polkadot-js-browser-extension",level:3},{value:"Reset Password using the Polkadot-JS Browser Extension",id:"reset-password-using-the-polkadot-js-browser-extension",level:3},{value:"Restore Account on the Polkadot-JS Browser Extension",id:"restore-account-on-the-polkadot-js-browser-extension",level:3},{value:"Polkadot-JS UI",id:"polkadot-js-ui",level:2},{value:"Account Backup using the Polkadot-JS UI",id:"account-backup-using-the-polkadot-js-ui",level:3},{value:"Reset password using the Polkadot-JS UI",id:"reset-password-using-the-polkadot-js-ui",level:3},{value:"Restore Account on the Polkadot-JS UI",id:"restore-account-on-the-polkadot-js-ui",level:3},{value:"Unlocking Locks",id:"unlocking-locks",level:3},{value:"Query Account Data in Polkadot-JS",id:"query-account-data-in-polkadot-js",level:2},{value:"Vanity Generator",id:"vanity-generator",level:2},{value:"Encryption Enhancement",id:"encryption-enhancement",level:2}],h={toc:p},k="wrapper";function m(e){var t=e.components,l=(0,o.Z)(e,i);return(0,r.kt)(k,(0,a.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)(s.Z,{mdxType:"DocCardList"}),(0,r.kt)("h2",{id:"account-address-format"},"Account Address Format"),(0,r.kt)("p",null,"An account created for Polkadot can also be\nused on multiple chains in the Polkadot\necosystem. More specifically, the account of a chain that uses the ",(0,r.kt)("inlineCode",{parentName:"p"},"*25519")," account address format\n(the latest list can be accessed on the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/ss58-registry/blob/main/ss58-registry.json"},"ss58 registry repository"),"\nis cross-compatible with all the chains that use the similar format. To switch between the accounts\non different chains, you can follow the guidelines in\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000103707-can-i-use-the-same-account-on-polkadot-kusama-and-parachains-"},"this support article"),".\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subscan.io/tools/format_transform"},"Subscan has a tool")," you can use to convert your\naddress between the different chain formats."),(0,r.kt)("admonition",{title:"Using the same account on multiple chains - Pros and Cons",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The address format differs from chain to chain, but that difference is only visual. The same private\nkey can be used to sign transactions on behalf of the respective accounts on multiple chains. Using\na single account on multiple chains is convenient, as you do not have to deal with multiple mnemonic\nphrases or private keys. But, if your account gets compromised on one chain, the attacker can gain\nfull access to the accounts on all other chains. This also has implications for the account holder's\nprivacy, as knowing the identity of an account on one chain can expose the account holder's identity\non all the chains. In the Accounts tab, the Polkadot-JS UI displays a warning message next to each\nAccount you are using on multiple chains and recommends using different Accounts on different chains\n(see below)."),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("img",{alt:"warning multiple chains",src:n(2245).Z,width:"1103",height:"343"}))),(0,r.kt)("p",null,'On Polkadot-JS Extension, you can copy your address by clicking the account\'s icon while the desired\nchain format is active. E.g. selecting "Substrate" as the format will change your address, and\nclicking the colorful icon of your account will copy it in that format. While in\nPolkadot mode, that address format will be\ncopied, and so on.'),(0,r.kt)("h2",{id:"polkadot-js-browser-extension"},"Polkadot-JS Browser Extension"),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/DNU0p5G0Gqc/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc"},"Polkadot-JS Browser Extension Tutorial")))),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For guidelines about how to create an account using the Polkadot Extension, see\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000098878-how-to-create-a-dot-account"},(0,r.kt)("strong",{parentName:"a"},"this support article")),".")),(0,r.kt)("p",null,"The Polkadot-JS Browser Extension (the Polkadot Extension) provides a reasonable balance of security\nand usability. It provides a separate local mechanism to generate your address and interact with\nPolkadot."),(0,r.kt)("p",null,'This method involves installing the Polkadot Extension and using it as a \u201cvirtual vault," separate\nfrom your browser, to store your private keys. It also allows the signing of transactions and\nsimilar functionality.'),(0,r.kt)("p",null,"It is still running on the same computer you use to connect to the internet and thus is less secure\nthan using Parity Signer or other air-gapped approaches."),(0,r.kt)("h3",{id:"account-backup-using-the-polkadot-js-browser-extension"},"Account Backup using the Polkadot-JS Browser Extension"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000177677-how-to-export-your-json-backup-file"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto know how to back up your account."),(0,r.kt)("h3",{id:"reset-password-using-the-polkadot-js-browser-extension"},"Reset Password using the Polkadot-JS Browser Extension"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=DNU0p5G0Gqc&t=280s"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to\nchange the password for an account that has been created on the Polkadot-JS browser extension (i.e.\nan injected account).")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Before following the instructions below, make sure you have your mnemonic phrase stored in a safe\nplace accessible to you.")),(0,r.kt)("p",null,"Let's say you created ",(0,r.kt)("inlineCode",{parentName:"p"},"ACCOUNT 1")," protected by password ",(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1"),". To reset the password of your\n",(0,r.kt)("inlineCode",{parentName:"p"},"ACCOUNT 1")," using the browser extension, you must follow the following steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Go to ",(0,r.kt)("inlineCode",{parentName:"li"},"ACCOUNT 1"),' on the browser extension and click "Forget account". This action will delete the\naccess to your account. Note that your tokens are still in your account on the\nPolkadot blockchain network.'),(0,r.kt)("li",{parentName:"ul"},'On the browser extension click the "+" button in the top right corner and select the option\n"Import account from pre-existing seed". After entering the mnemonic phrase, you can choose a new\npassword, ',(0,r.kt)("inlineCode",{parentName:"li"},"PSW 2"),".")),(0,r.kt)("admonition",{title:"JSON files do not allow changing account passwords",type:"info"},(0,r.kt)("p",{parentName:"admonition"},'If you add the account to the extension using the option "Restore account from backup JSON file",\nthis will allow you to restore access to your account using a JSON file protected by the password\n',(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1"),", but does not let you set a new password. Thus, ",(0,r.kt)("inlineCode",{parentName:"p"},"PSW 1")," will become the account password by\ndefault.")),(0,r.kt)("admonition",{title:"Accounts on Cold wallets do not need passwords",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For hardware wallets such as ",(0,r.kt)("a",{parentName:"p",href:"https://www.ledger.com/"},"Ledger"),", you may have to set a PIN for\naccessing the accounts on the device, but you do not need to set a password for every individual\naccount. When you need to make transactions with your account, you are required to sign using your\nLedger device. Also, Ledger wallets let you generate multiple accounts for multiple blockchain\nnetworks without setting different passwords to access such accounts.")),(0,r.kt)("h3",{id:"restore-account-on-the-polkadot-js-browser-extension"},"Restore Account on the Polkadot-JS Browser Extension"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/9ohp8k4Hz8c"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169952-how-to-restore-your-account-in-the-polkadot-extension"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn how to restore your account on the Polkadot-JS UI.")),(0,r.kt)("h2",{id:"polkadot-js-ui"},"Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For guidelines about how to create an account using Polkadot-JS UI, see\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000180529"},(0,r.kt)("strong",{parentName:"a"},"this support article")),".")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"If you use this method to create your account and clear your cookies in your browser, your account\nwill be lost forever if you do not ",(0,r.kt)("a",{parentName:"p",href:"#restore-account-on-the-polkadot-js-ui"},"back it up"),". Make sure\nyou store your seed phrase in a safe place or download the account's JSON file if using the\nPolkadot{.js} browser extension. Learn more about account backup and restoration\n",(0,r.kt)("a",{parentName:"p",href:"#restore-account-on-the-polkadot-js-ui"},"here"),".")),(0,r.kt)("p",null,"Local in-browser account storage is disabled by default on the Polkadot-JS UI. To create an account\nusing the Polkadot-JS UI, navigate to settings > account options and click on allow local in-browser\naccount storage in the drop-down menu. Using the Polkadot-JS user interface without a browser\nextension is ",(0,r.kt)("strong",{parentName:"p"},"not recommended"),". It is the least secure way of generating an account. It should\nonly be used if all other methods are not feasible."),(0,r.kt)("h3",{id:"account-backup-using-the-polkadot-js-ui"},"Account Backup using the Polkadot-JS UI"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000177677-how-to-export-your-json-backup-file"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto know how to back up your account.")),(0,r.kt)("h3",{id:"reset-password-using-the-polkadot-js-ui"},"Reset password using the Polkadot-JS UI"),(0,r.kt)("p",null,'To reset the password of an account created with Polkadot-JS Apps UI, you need to go to the\n"Accounts" tab, click the icon with three vertical dots on your account and select "Change this\naccount\'s password".'),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/DNU0p5G0Gqc?t=261"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," to learn how to change the\npassword for an account created on the Polkadot-JS UI (i.e. a non-injected account)."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you create an account first using Polkadot-JS Apps UI and then add it to the browser extension,\nyou need to follow the\n",(0,r.kt)("a",{parentName:"p",href:"#reset-password-using-the-browser-extension"},"guidelines for the browser extension")," to change the\npassword of such an account.")),(0,r.kt)("h3",{id:"restore-account-on-the-polkadot-js-ui"},"Restore Account on the Polkadot-JS UI"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/cBsZqFpBANY"},(0,r.kt)("strong",{parentName:"a"},"this video tutorial"))," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000180110-how-to-restore-your-account-in-polkadot-js-ui"},(0,r.kt)("strong",{parentName:"a"},"this support page")),"\nto learn how to restore your account on the Polkadot-JS UI."),(0,r.kt)("h3",{id:"unlocking-locks"},"Unlocking Locks"),(0,r.kt)("admonition",{title:"Locks do not stack!",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The biggest lock decides the total amount of locked funds. See\n",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/LHgY7ds_bZ0"},(0,r.kt)("strong",{parentName:"a"},"this walk-through video tutorial"))," that will guide you in the\nprocess of unlocking funds in the example above.")),(0,r.kt)("p",null,"In the example, the locked balance is 0.55 KSM because the biggest lock is on democracy and is 0.55\nKSM. As soon as the democracy lock is removed the next biggest lock is on staking 0.5 KSM (bonded\n0.4 KSM + redeemable 0.1 KSM). This means that the locked balance will be 0.5 KSM, and 0.05 KSM will\nbe added to the transferrable balance. After redeeming the unbonded 0.1 KSM, the locked balance will\nbe 0.4 KSM, and an additional 0.1 KSM will be added to the transferrable balance. Now the biggest\nlock is still the bonded one. This means that even if we remove the vested lock, the locked balance\nwill still be 0.4 KSM and no tokens will be added to the transferrable balance. To free those bonded\ntokens we will need to unbond them and wait for the unbonding period to make them redeemable. If we\nremove the proxy the reserved funds will be automatically added to the transferrable balance."),(0,r.kt)("h2",{id:"query-account-data-in-polkadot-js"},"Query Account Data in Polkadot-JS"),(0,r.kt)("p",null,"In the Polkadot-JS UI, you can also query account data under\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"Developer > Chain state"),". Under ",(0,r.kt)("inlineCode",{parentName:"p"},"selected state query"),"\nchoose the system pallet followed by ",(0,r.kt)("inlineCode",{parentName:"p"},"account(AccountId32): FrameSystemAccountInfo"),", under ",(0,r.kt)("inlineCode",{parentName:"p"},"Option"),'\nchoose an account, and then click on the "+" button on the right.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"account_balance_types",src:n(9853).Z,width:"1636",height:"343"})),(0,r.kt)("p",null,"Account information include:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"nonce"),", the number of transactions the account sent."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"consumers"),", the number of other modules that currently depend on this account's existence. The\naccount cannot be reaped until this is zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"providers"),", the number of other modules that allow this account to exist. The account may not be\nreaped until this and ",(0,r.kt)("inlineCode",{parentName:"li"},"sufficients")," are both zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"sufficients"),", the number of modules that allow this account to exist for their own purposes. The\naccount may not be reaped until this and ",(0,r.kt)("inlineCode",{parentName:"li"},"providers")," are both zero."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"data"),", the additional data that belongs to this account. Used to store the balance(s) in a lot of\nchains.")),(0,r.kt)("p",null,"More in-depth information about the above data can be found in the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/2e7fde832b77b242269b136f1c3b6fffef86f9b6/frame/system/src/lib.rs#LL767C1-L781C24"},"substrate code base"),"."),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"AccountData")," structure defines the balance types in Substrate. The three types of balances\ninclude:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"free"),", is the balance that is free but not necessarily transferrable."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"reserved"),", is the balance that is not free, and it is put on hold for on-chain activity such as\ndeposits for multi-signature calls, setting up proxies and identities, and other actions that hold\nstate on the network."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"frozen"),", is the amount that is free to use for on-chain activity but is locked in staking,\ngovernance, or vesting.")),(0,r.kt)("p",null,"The ",(0,r.kt)("strong",{parentName:"p"},"usable")," or transferrable balance of the account is currently calculated using the formula\nbelow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"transferable = free - max(frozen - reserved, ED)\n")),(0,r.kt)("p",null,"Where ED is the existential deposit. The ",(0,r.kt)("strong",{parentName:"p"},"total")," balance of the account is the sum of ",(0,r.kt)("inlineCode",{parentName:"p"},"free")," and\n",(0,r.kt)("inlineCode",{parentName:"p"},"reserved")," funds. The ",(0,r.kt)("inlineCode",{parentName:"p"},"flags")," describe extra information about the account."),(0,r.kt)("p",null,"More in-depth information about the above data can be found in the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/2e7fde832b77b242269b136f1c3b6fffef86f9b6/frame/balances/src/types.rs#LL95-L114"},"balances pallet in the Substrate code base"),"."),(0,r.kt)("h2",{id:"vanity-generator"},"Vanity Generator"),(0,r.kt)("p",null,"The vanity generator is a tool on ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/accounts/vanity"},"Polkadot-JS UI"),"\nthat lets you generate addresses that contain a specific substring. For the tutorial on how to\ncreate an account using Vanity Generator, visit\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000171416"},"this support article"),"."),(0,r.kt)("h2",{id:"encryption-enhancement"},"Encryption Enhancement"),(0,r.kt)("p",null,"Some newly generated ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," account files cannot be imported (restored) into older wallet software.\nThis is due to an enhanced encryption method, noticeable in a slight delay when\nencrypting/decrypting your wallet. If you cannot load a ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," file, please use the latest version\nof the wallet software. If you cannot load it, ensure that the wallet software uses the newest\nversion of the ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/api/"},"Polkadot API"),"."))}m.isMDXComponent=!0},9853:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/AccountData-struct-118d0bf533806084460cba05bef62b9c.png"},2245:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/warning-multichain-account-0719ff59691f3ff48562d92ef2295e84.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/b0a48d97.5a7adf6a.js b/assets/js/b0a48d97.5a7adf6a.js new file mode 100644 index 000000000000..6b2afe02ebf1 --- /dev/null +++ b/assets/js/b0a48d97.5a7adf6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3091],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>g});var n=o(67294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var d=n.createContext({}),l=function(e){var t=n.useContext(d),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},p=function(e){var t=l(e.components);return n.createElement(d.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,d=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=l(o),h=r,g=c["".concat(d,".").concat(h)]||c[h]||u[h]||a;return o?n.createElement(g,i(i({ref:t},p),{},{components:o})):n.createElement(g,i({ref:t},p))}));function g(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var d in t)hasOwnProperty.call(t,d)&&(s[d]=t[d]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var l=2;l{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>d,default:()=>g,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var n=o(87462),r=o(63366),a=(o(67294),o(3905)),i=["components"],s={id:"learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",sidebar_label:"Ledger Guides",description:"Polkadot-JS Guides for Ledger Devices.",keywords:["ledger","polkadot-js"],slug:"../learn-guides-ledger"},d=void 0,l={unversionedId:"learn/learn-guides-ledger",id:"learn/learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",description:"Polkadot-JS Guides for Ledger Devices.",source:"@site/../docs/learn/learn-guides-ledger.md",sourceDirName:"learn",slug:"/learn-guides-ledger",permalink:"/docs/learn-guides-ledger",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-ledger.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",sidebar_label:"Ledger Guides",description:"Polkadot-JS Guides for Ledger Devices.",keywords:["ledger","polkadot-js"],slug:"../learn-guides-ledger"},sidebar:"docs",previous:{title:"Identity Guides",permalink:"/docs/learn-guides-identity"},next:{title:"Polkadot Vault Guides",permalink:"/docs/learn-guides-vault"}},p={},c=[{value:"Loading Your Account",id:"loading-your-account",level:2},{value:"Derivation paths",id:"derivation-paths",level:3},{value:"Connecting your ledger device",id:"connecting-your-ledger-device",level:3},{value:"Confirming the Address on your Device",id:"confirming-the-address-on-your-device",level:2},{value:"Checking the Balance of Your Account",id:"checking-the-balance-of-your-account",level:2},{value:"Sending a Transfer with Ledger Devices",id:"sending-a-transfer-with-ledger-devices",level:2},{value:"Receiving a Transfer",id:"receiving-a-transfer",level:2},{value:"Staking",id:"staking",level:2},{value:"Removing Expired Democracy Locks",id:"removing-expired-democracy-locks",level:2}],u={toc:c},h="wrapper";function g(e){var t=e.components,s=(0,r.Z)(e,i);return(0,a.kt)(h,(0,n.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"sticky",style:{zIndex:1}},(0,a.kt)("br",null),(0,a.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,a.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,a.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,a.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,a.kt)("h2",{id:"loading-your-account"},"Loading Your Account"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Ledger Live should be off while using Ledger with Polkadot-JS UI as it can interfere with normal\noperation.")),(0,a.kt)("p",null,"You can import your Ledger account to ",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/extension/"},"Polkadot Extension")," or to\nthe ",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),". For instructions on how to import\nLedger accounts to the Polkadot Extension read through\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000175387-how-to-add-your-ledger-through-the-polkadot-extension"},"this support article"),",\nwhile if you want to import Ledger accounts to the Polkadot-JS UI you can consult\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170812-how-to-add-ledger-account-through-the-polkadot-js-ui"},"this other article"),"."),(0,a.kt)("h3",{id:"derivation-paths"},"Derivation paths"),(0,a.kt)("p",null,"When adding a Ledger account using the extension or the UI, you will be asked to select an\n",(0,a.kt)("inlineCode",{parentName:"p"},"account type")," and an ",(0,a.kt)("inlineCode",{parentName:"p"},"account index"),". The first lets you select an account, while the second lets\nyou pick a derivation path from that account - think of it like a formula from which child accounts\nare generated. When you are creating a\nPolkadot ledger account for the first time on\nLedger Live with name ",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 1"),"",", this\ncan be added to Polkadot-JS using the 0/0 derivation path (i.e. account type = 0 and account index =\n0). If you add a second account called\n",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 2"),"",", this will correspond to the\n1/0 derivation path, and so on. We thus have multiple parent accounts that can be viewed and used in\nboth Ledger Live and Polkadot-JS. Additionally, we can use Polkadot-JS UI to create multiple\nchildren accounts from each parent account. For example,\n",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 1"),""," with 0/0 derivation path can\nhave child 0/1, 0/2, etc. that can be used within the UI. However, such children accounts cannot be\nused in Ledger Live, as it only scans through the parent accounts. So, remember that the balances on\nthe children accounts cannot be viewed, and you will not be able to transact with those accounts on\nLedger Live."),(0,a.kt)("h3",{id:"connecting-your-ledger-device"},"Connecting your ledger device"),(0,a.kt)("p",null,"While using a ledger device to sign transactions, depending on your browser and its security\nsettings, you might need to confirm the USB connection through a popup like the one below:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Display the device connection popup",src:o(57302).Z,width:"468",height:"461"})),(0,a.kt)("p",null,'If you are adding your Ledger Nano for the first time, click on the "Unknown device" line and the\n"Connect" button will become available.'),(0,a.kt)("admonition",{title:"Signature error message",type:"info"},(0,a.kt)("p",{parentName:"admonition"},"If you have already connected your device, but an error message appears before signing a\ntransaction, make sure you have opened the\nPolkadot application on your Ledger Nano\ndevice. Visit\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181994"},"this support page")," for\nmore information about signing transactions using your ledger.")),(0,a.kt)("h2",{id:"confirming-the-address-on-your-device"},"Confirming the Address on your Device"),(0,a.kt)("p",null,"To display your Polkadot ledger account\naddress on your Ledger Nano, you can follow the guidelines on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181854-how-to-confirm-your-account-address-on-your-ledger-device"},"this support article"),".\nHere you can scroll through and make sure the address matches what is displayed on\n",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),"."),(0,a.kt)("h2",{id:"checking-the-balance-of-your-account"},"Checking the Balance of Your Account"),(0,a.kt)("p",null,"There are a few methods to check the balance of your account. Check out\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169332-where-can-i-see-the-balance-of-my-account-"},"this support article"),"\nfor information."),(0,a.kt)("h2",{id:"sending-a-transfer-with-ledger-devices"},"Sending a Transfer with Ledger Devices"),(0,a.kt)("admonition",{title:"Verifying Extrinsics",type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"Visit the\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-using-Ledger"},(0,a.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,a.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=360"},(0,a.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions.")),(0,a.kt)("p",null,"General instructions to send a transfer can be found on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170304-how-to-send-transfer-funds-out-of-your-dot-account-on-the-polkadot-js-ui"},"this support page"),".\nTo sign transactions with your Ledger nano check\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181994"},"this support article")," or\nsee ",(0,a.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=579"},"this video tutorial"),"."),(0,a.kt)("h2",{id:"receiving-a-transfer"},"Receiving a Transfer"),(0,a.kt)("p",null,"To receive a transfer on the accounts stored on your Ledger device, you must provide the sender\n(i.e. the payer) with your address. To do so, follow the instructions on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181866-how-to-receive-dot-to-my-account-on-polkadot-js-ui"},"this support page"),"."),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"Before giving anyone your address, ensure it matches what's on the Ledger by\n",(0,a.kt)("a",{parentName:"p",href:"#confirming-the-address-on-your-device"},"confirming the address on your device"),". Some malware will\nintercept clicks and clipboard requests and can change your copied value in-flight, so being extra\nvigilant around copy-paste operations makes sense.")),(0,a.kt)("h2",{id:"staking"},"Staking"),(0,a.kt)("p",null,'For staking using Ledger devices, check the section "How to stake using your Ledger" on\n',(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-how-do-i-stake-nominate-on-polkadot-"},"this support article"),"."),(0,a.kt)("h2",{id:"removing-expired-democracy-locks"},"Removing Expired Democracy Locks"),(0,a.kt)("p",null,"Check out\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181870-how-to-remove-expired-democracy-locks"},"this support page"),"\nthe learn how to remove democracy locks after the end of a Governance referendum."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Please be advised"),": Despite the Polkadot ledger application being compatible with both the Ledger\nNano S and the Ledger Nano X, some extrinsics are not supported by the light version. The following\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/Zondax/ledger-polkadot"},"repository by Zondax")," lists the currently supported\nextrinsics on the XL version of the Ledger app."))}g.isMDXComponent=!0},57302:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/query-device-d7d9e7e7d28a34a343c59094db864a1a.png"}}]); \ No newline at end of file diff --git a/assets/js/b0a48d97.a554336b.js b/assets/js/b0a48d97.a554336b.js deleted file mode 100644 index 160477227f21..000000000000 --- a/assets/js/b0a48d97.a554336b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3091],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>g});var n=o(67294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var d=n.createContext({}),l=function(e){var t=n.useContext(d),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},c=function(e){var t=l(e.components);return n.createElement(d.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(o),h=r,g=p["".concat(d,".").concat(h)]||p[h]||u[h]||a;return o?n.createElement(g,i(i({ref:t},c),{},{components:o})):n.createElement(g,i({ref:t},c))}));function g(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var d in t)hasOwnProperty.call(t,d)&&(s[d]=t[d]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var l=2;l{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>g,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var n=o(87462),r=o(63366),a=(o(67294),o(3905)),i=["components"],s={id:"learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",sidebar_label:"Ledger Guides",description:"Polkadot-JS Guides for Ledger Devices.",keywords:["ledger","polkadot-js"],slug:"../learn-guides-ledger"},d=void 0,l={unversionedId:"learn/learn-guides-ledger",id:"learn/learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",description:"Polkadot-JS Guides for Ledger Devices.",source:"@site/../docs/learn/learn-guides-ledger.md",sourceDirName:"learn",slug:"/learn-guides-ledger",permalink:"/docs/learn-guides-ledger",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-ledger.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-ledger",title:"Polkadot-JS Guides for Ledger Devices",sidebar_label:"Ledger Guides",description:"Polkadot-JS Guides for Ledger Devices.",keywords:["ledger","polkadot-js"],slug:"../learn-guides-ledger"},sidebar:"docs",previous:{title:"Identity Guides",permalink:"/docs/learn-guides-identity"},next:{title:"Polkadot Vault Guides",permalink:"/docs/learn-guides-vault"}},c={},p=[{value:"Loading Your Account",id:"loading-your-account",level:2},{value:"Derivation paths",id:"derivation-paths",level:3},{value:"Connecting your ledger device",id:"connecting-your-ledger-device",level:3},{value:"Confirming the Address on your Device",id:"confirming-the-address-on-your-device",level:2},{value:"Checking the Balance of Your Account",id:"checking-the-balance-of-your-account",level:2},{value:"Sending a Transfer with Ledger Devices",id:"sending-a-transfer-with-ledger-devices",level:2},{value:"Receiving a Transfer",id:"receiving-a-transfer",level:2},{value:"Staking",id:"staking",level:2},{value:"Removing Expired Democracy Locks",id:"removing-expired-democracy-locks",level:2}],u={toc:p},h="wrapper";function g(e){var t=e.components,s=(0,r.Z)(e,i);return(0,a.kt)(h,(0,n.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"sticky",style:{zIndex:1}},(0,a.kt)("br",null),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,a.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,a.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,a.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,a.kt)("h2",{id:"loading-your-account"},"Loading Your Account"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Ledger Live should be off while using Ledger with Polkadot-JS UI as it can interfere with normal\noperation.")),(0,a.kt)("p",null,"You can import your Ledger account to ",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/extension/"},"Polkadot Extension")," or to\nthe ",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),". For instructions on how to import\nLedger accounts to the Polkadot Extension read through\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000175387-how-to-add-your-ledger-through-the-polkadot-extension"},"this support article"),",\nwhile if you want to import Ledger accounts to the Polkadot-JS UI you can consult\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170812-how-to-add-ledger-account-through-the-polkadot-js-ui"},"this other article"),"."),(0,a.kt)("h3",{id:"derivation-paths"},"Derivation paths"),(0,a.kt)("p",null,"When adding a Ledger account using the extension or the UI, you will be asked to select an\n",(0,a.kt)("inlineCode",{parentName:"p"},"account type")," and an ",(0,a.kt)("inlineCode",{parentName:"p"},"account index"),". The first lets you select an account, while the second lets\nyou pick a derivation path from that account - think of it like a formula from which child accounts\nare generated. When you are creating a\nPolkadot ledger account for the first time on\nLedger Live with name ",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 1"),"",", this\ncan be added to Polkadot-JS using the 0/0 derivation path (i.e. account type = 0 and account index =\n0). If you add a second account called\n",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 2"),"",", this will correspond to the\n1/0 derivation path, and so on. We thus have multiple parent accounts that can be viewed and used in\nboth Ledger Live and Polkadot-JS. Additionally, we can use Polkadot-JS UI to create multiple\nchildren accounts from each parent account. For example,\n",(0,a.kt)("inlineCode",{parentName:"p"},"Polkadot 1"),""," with 0/0 derivation path can\nhave child 0/1, 0/2, etc. that can be used within the UI. However, such children accounts cannot be\nused in Ledger Live, as it only scans through the parent accounts. So, remember that the balances on\nthe children accounts cannot be viewed, and you will not be able to transact with those accounts on\nLedger Live."),(0,a.kt)("h3",{id:"connecting-your-ledger-device"},"Connecting your ledger device"),(0,a.kt)("p",null,"While using a ledger device to sign transactions, depending on your browser and its security\nsettings, you might need to confirm the USB connection through a popup like the one below:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Display the device connection popup",src:o(57302).Z,width:"468",height:"461"})),(0,a.kt)("p",null,'If you are adding your Ledger Nano for the first time, click on the "Unknown device" line and the\n"Connect" button will become available.'),(0,a.kt)("admonition",{title:"Signature error message",type:"info"},(0,a.kt)("p",{parentName:"admonition"},"If you have already connected your device, but an error message appears before signing a\ntransaction, make sure you have opened the\nPolkadot application on your Ledger Nano\ndevice. Visit\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181994"},"this support page")," for\nmore information about signing transactions using your ledger.")),(0,a.kt)("h2",{id:"confirming-the-address-on-your-device"},"Confirming the Address on your Device"),(0,a.kt)("p",null,"To display your Polkadot ledger account\naddress on your Ledger Nano, you can follow the guidelines on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181854-how-to-confirm-your-account-address-on-your-ledger-device"},"this support article"),".\nHere you can scroll through and make sure the address matches what is displayed on\n",(0,a.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),"."),(0,a.kt)("h2",{id:"checking-the-balance-of-your-account"},"Checking the Balance of Your Account"),(0,a.kt)("p",null,"There are a few methods to check the balance of your account. Check out\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169332-where-can-i-see-the-balance-of-my-account-"},"this support article"),"\nfor information."),(0,a.kt)("h2",{id:"sending-a-transfer-with-ledger-devices"},"Sending a Transfer with Ledger Devices"),(0,a.kt)("admonition",{title:"Verifying Extrinsics",type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"Visit the\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-using-Ledger"},(0,a.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,a.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=360"},(0,a.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions.")),(0,a.kt)("p",null,"General instructions to send a transfer can be found on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170304-how-to-send-transfer-funds-out-of-your-dot-account-on-the-polkadot-js-ui"},"this support page"),".\nTo sign transactions with your Ledger nano check\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181994"},"this support article")," or\nsee ",(0,a.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=579"},"this video tutorial"),"."),(0,a.kt)("h2",{id:"receiving-a-transfer"},"Receiving a Transfer"),(0,a.kt)("p",null,"To receive a transfer on the accounts stored on your Ledger device, you must provide the sender\n(i.e. the payer) with your address. To do so, follow the instructions on\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181866-how-to-receive-dot-to-my-account-on-polkadot-js-ui"},"this support page"),"."),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"Before giving anyone your address, ensure it matches what's on the Ledger by\n",(0,a.kt)("a",{parentName:"p",href:"#confirming-the-address-on-your-device"},"confirming the address on your device"),". Some malware will\nintercept clicks and clipboard requests and can change your copied value in-flight, so being extra\nvigilant around copy-paste operations makes sense.")),(0,a.kt)("h2",{id:"staking"},"Staking"),(0,a.kt)("p",null,'For staking using Ledger devices, check the section "How to stake using your Ledger" on\n',(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-how-do-i-stake-nominate-on-polkadot-"},"this support article"),"."),(0,a.kt)("h2",{id:"removing-expired-democracy-locks"},"Removing Expired Democracy Locks"),(0,a.kt)("p",null,"Check out\n",(0,a.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181870-how-to-remove-expired-democracy-locks"},"this support page"),"\nthe learn how to remove democracy locks after the end of a Governance referendum."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Please be advised"),": Despite the Polkadot ledger application being compatible with both the Ledger\nNano S and the Ledger Nano X, some extrinsics are not supported by the light version. The following\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/Zondax/ledger-polkadot"},"repository by Zondax")," lists the currently supported\nextrinsics on the XL version of the Ledger app."))}g.isMDXComponent=!0},57302:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/query-device-d7d9e7e7d28a34a343c59094db864a1a.png"}}]); \ No newline at end of file diff --git a/assets/js/b9c2850c.0933da80.js b/assets/js/b9c2850c.0933da80.js deleted file mode 100644 index a9a98574d5da..000000000000 --- a/assets/js/b9c2850c.0933da80.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6110],{52468:e=>{e.exports=JSON.parse('{"title":"Polkadot-JS","description":"Overview of Polkadot-JS.","slug":"/learn-polkadotjs-index","permalink":"/docs/learn-polkadotjs-index","navigation":{"previous":{"title":"Advanced","permalink":"/docs/learn-advanced-index"},"next":{"title":"Polkadot-JS Tooling","permalink":"/docs/polkadotjs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/bb8b1738.19788ab0.js b/assets/js/bb8b1738.19788ab0.js deleted file mode 100644 index 53cfbdfe513f..000000000000 --- a/assets/js/bb8b1738.19788ab0.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[7368],{47940:(a,e,t)=>{"use strict";t.d(e,{Z:()=>h});var o=t(74165),n=t(15861),i=t(67294),r=t(87152),l=t(14741),s=t(67425);function d(a,e,t){return c.apply(this,arguments)}function c(){return(c=(0,n.Z)((0,o.Z)().mark((function a(e,t,n){var i,s,d,c,p;return(0,o.Z)().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:i=void 0,s=void 0,a.t0=e,a.next="polkadot"===a.t0?5:"kusama"===a.t0?7:"statemine"===a.t0?9:"statemint"===a.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",a.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",a.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",a.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",a.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){a.next=18;break}return a.abrupt("return");case 18:return d=new r.U(i),a.next=21,l.G.create({provider:d});case 21:c=a.sent,(p=t.split(".")).forEach((function(a){a in c&&(c=c[a])})),a.t1=p[0],a.next="consts"===a.t1?27:"query"===a.t1?29:34;break;case 27:return s=c.toString(),a.abrupt("break",35);case 29:return a.next=31,c();case 31:return s=(s=a.sent).toString(),a.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+t);case 35:return a.abrupt("return",s);case 36:case"end":return a.stop()}}),a)})))).apply(this,arguments)}function p(a,e,t,o){switch(e){case"humanReadable":(0,s.HumanReadable)(a,t,o);break;case"precise":(0,s.Precise)(a,t,o);break;case"blocksToDays":(0,s.BlocksToDays)(a,o);break;case"erasToDays":(0,s.ErasToDays)(a,o,t);break;case"percentage":(0,s.Percentage)(a,o);break;case"permillToPercent":(0,s.PermillToPercent)(a,o);break;case"arrayLength":(0,s.ArrayLength)(a,o);break;default:return void console.log("Ignoring unknown filter type")}}const h=function(a){var e=a.network,t=a.path,r=a.defaultValue,l=a.filter,s=void 0===l?void 0:l,c=(0,i.useState)(""),h=c[0],u=c[1];return e=e.toLowerCase(),(0,i.useEffect)((function(){void 0!==s?p(r.toString(),s,e,u):u(r.toString());var a=void 0;switch(e){case"polkadot":a="wss://rpc.polkadot.io";break;case"kusama":a="wss://kusama-rpc.polkadot.io/";break;case"statemine":a="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":a="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===a)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var a=(0,n.Z)((0,o.Z)().mark((function a(){var n;return(0,o.Z)().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,d(e,t,u);case 2:if(void 0!==(n=a.sent)){a.next=7;break}return a.abrupt("return");case 7:void 0!==s?p(n,s,e,u):u(n);case 8:case"end":return a.stop()}}),a)})));return function(){return a.apply(this,arguments)}}();try{i()}catch(l){console.log(l)}}}),[]),h}},67425:a=>{var e="polkadot",t="kusama",o="statemine",n="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};a.exports={HumanReadable:function(a,r,l){var s=void 0;if(r===e||r===n)s=3;else{if(r!==t&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=6}a=parseFloat(a),l((a=Number.isInteger(a/i[r].precision)?a/i[r].precision+" "+i[r].symbol:(a/i[r].precision).toFixed(s)+" "+i[r].symbol).toString())},Precise:function(a,e,t){t(a=(a=parseFloat(a))/i[e].precision+" "+i[e].symbol)},BlocksToDays:function(a,e){e((a=6*a/86400).toString())},ErasToDays:function(a,i,r){var l=void 0;if(r===e||r===n)l=1;else{if(r!==t&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=4}i((a/=l).toString())},Percentage:function(a,e){e((a/=1e7).toString())},PermillToPercent:function(a,e){e((a/=1e4).toString())},ArrayLength:function(a,e){e((a=a.split(",").length).toString())}}},49175:(a,e,t)=>{"use strict";t.r(e),t.d(e,{assets:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>h});var o=t(87462),n=t(63366),i=(t(67294),t(3905)),r=t(47940),l=["components"],s={id:"learn-validator",title:"Validator",sidebar_label:"Validator",description:"Role of Validators within the Polkadot Ecosystem.",keywords:["validate","validator","maintain","NPoS","stake"],slug:"../learn-validator"},d=void 0,c={unversionedId:"learn/learn-validator",id:"learn/learn-validator",title:"Validator",description:"Role of Validators within the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-validator.md",sourceDirName:"learn",slug:"/learn-validator",permalink:"/docs/learn-validator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-validator.md",tags:[],version:"current",lastUpdatedBy:"Aryan Malik",lastUpdatedAt:1708596632,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{id:"learn-validator",title:"Validator",sidebar_label:"Validator",description:"Role of Validators within the Polkadot Ecosystem.",keywords:["validate","validator","maintain","NPoS","stake"],slug:"../learn-validator"},sidebar:"docs",previous:{title:"Nominator",permalink:"/docs/learn-nominator"},next:{title:"Parachains",permalink:"/docs/learn-parachains-index"}},p={},h=[{value:"Para-validators",id:"para-validators",level:2},{value:"Block Authors",id:"block-authors",level:2},{value:"Other Validators",id:"other-validators",level:2},{value:"Further Readings",id:"further-readings",level:2},{value:"Guides",id:"guides",level:3},{value:"Other References",id:"other-references",level:3},{value:"Security / Key Management",id:"security--key-management",level:3},{value:"Monitoring Tools",id:"monitoring-tools",level:3},{value:"Validator Stats",id:"validator-stats",level:3}],u={toc:h},k="wrapper";function m(a){var e=a.components,t=(0,n.Z)(a,l);return(0,i.kt)(k,(0,o.Z)({},u,t,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"This page provides a general overview of the role of validators in\nPolkadot. For more detailed information you\ncan read the Protocol Overview Section in\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/polkadot/book/"},"The Polkadot Parachain Host Implementers' Guide"),".")),(0,i.kt)("p",null,"Validators secure the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-architecture#relay-chain"},"relay chain")," by staking\nDOT, validating proofs from collators and\nparticipating in consensus with other validators."),(0,i.kt)("p",null,"Validators play a crucial role in adding new blocks to the relay chain and, by extension, to all\nparachains. This allows parties to complete cross-chain transactions via the relay chain. They\nguarantee that each parachain follows its unique rules and can pass messages between shards in a\ntrust-free environment."),(0,i.kt)("h2",{id:"para-validators"},"Para-validators"),(0,i.kt)("p",null,"Parachain validators (i.e. para-validators) participate to the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#parachain-phase"},"Parachain Phase of the AnV Protocol"),", and submit\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#candidate-receipts"},"candidate receipts")," to the Relay Chain\ntransaction queue so that a block author can include information on the parablock in a fork of of\nthe Relay Chain."),(0,i.kt)("p",null,"Para-validators work in groups and are selected by the runtime in every epoch to validate parachain\nblocks for all parachains connected to the relay chain. The selected para-validators are one of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.validatorCount",defaultValue:297,mdxType:"RPC"}),"\n","\nvalidators randomly selected (per epoch) to participate in the validation, creating a validator pool\nof 200 para-validators."),(0,i.kt)("p",null,"Para-validators verify that the information contained in an assigned set of parachain blocks is\nvalid. They receive parachain block candidates from the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"collators")," together\nwith a Proof-of-Validity (PoV). The para-validators perform the first round of validity checks on\nthe block candidates. Candidates that gather enough signed validity statements are considered\n",(0,i.kt)("em",{parentName:"p"},"backable"),"."),(0,i.kt)("h2",{id:"block-authors"},"Block Authors"),(0,i.kt)("p",null,"There are validators on the Relay Chain who participate in the consensus mechanism to produce the\nrelay chain blocks based on validity statements from other validators. These validators are called\nblock authors, they are selected by ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#block-production-babe"},"BABE")," and can note\nup to one backable candidate for each parachain to include in the relay chain. A backable candidate\nincluded in the relay chain is considered ",(0,i.kt)("em",{parentName:"p"},"backed")," in that fork of the chain."),(0,i.kt)("p",null,"In a Relay Chain block, block authors will only include\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#candidate-receipts"},"candidate receipts")," that have a parent\ncandidate receipt in an earlier Relay Chain block. This ensures the parachain follows a valid chain.\nAlso, the block authors will only include a receipt for which they have an erasure coding chunk,\nensuring that the system can perform the next round of availability and validity checks."),(0,i.kt)("h2",{id:"other-validators"},"Other Validators"),(0,i.kt)("p",null,"Validators also contribute to the so-called ",(0,i.kt)("strong",{parentName:"p"},"availability distribution"),". In fact, once the\ncandidate is backed in a fork of the relay chain, it is still ",(0,i.kt)("em",{parentName:"p"},"pending availability"),", i.e. it is not\nfully included (only tentative included) as part of the parachain until it is proven available\n(together with the PoV). Information regarding the availability of the candidate will be noted in\nthe following relay chain blocks. Only when there is enough information, the candidate is considered\na full parachain block or ",(0,i.kt)("em",{parentName:"p"},"parablock"),"."),(0,i.kt)("p",null,"Validators also participate in the so-called\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#approval-process"},(0,i.kt)("strong",{parentName:"a"},"approval process")),". Once the parablock is\nconsidered available and part of the parachain, it is still ",(0,i.kt)("em",{parentName:"p"},"pending approval"),". Because\npara-validators are a small subset of all validators, there is a risk that by chance the majority of\npara-validators assigned to a parachain might be dishonest. It is thus necessary to run a secondary\nverification of the parablock before it can be considered approved. Having a secondary verification\nstep avoids the allocation of more para-validators that will ultimately reduce the throughput of the\nsystem."),(0,i.kt)("p",null,"Any instances of non-compliance with the consensus algorithms result in\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#disputes"},(0,i.kt)("strong",{parentName:"a"},"disputes"))," with the punishment of the validators on\nthe wrong side by removing some or all their staked\nDOT, thereby discouraging bad actors. Good\nperformance, however, will be rewarded, with validators receiving block rewards (including\ntransaction fees) in the form of DOT in exchange\nfor their activities."),(0,i.kt)("p",null,"Finally, validators participate in the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#chain-selection"},"chain selection process within GRANDPA"),", ensuring\nthat only available and valid blocks end within the finalized Relay Chain."),(0,i.kt)("admonition",{title:"Within an era roles can change",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Within the same era, a Validator can be a para-validator, block author, and participate in the\navailability distribution or the approval process. Those roles can change between sessions.")),(0,i.kt)("h2",{id:"further-readings"},"Further Readings"),(0,i.kt)("h3",{id:"guides"},"Guides"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-how-to-validate-polkadot"},"How to Validate on Polkadot")," - Guide on\nhow to set up a validator on the Polkadot live network."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-validator-payout"},"Validator Payout Overview")," - A short overview on\nhow the validator payout mechanism works."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-how-to-systemd"},"How to run your validator as a systemd process")," -\nGuide on running your validator as a ",(0,i.kt)("inlineCode",{parentName:"li"},"systemd")," process so that it will run in the background and\nstart automatically on reboots."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-how-to-upgrade"},"How to Upgrade your Validator")," - Guide for\nsecurely upgrading your validator when you want to switch to a different machine or begin running\nthe latest version of client code."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-how-to-validate-polkadot"},"How to Use Validator Setup")," - Guide on\nhow to use Polkadot / Kusama validator setup.")),(0,i.kt)("h3",{id:"other-references"},"Other References"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://medium.com/@acvlls/setting-up-a-maintain-the-easy-way-3a885283091f"},"How to run a Polkadot node (Docker)")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://medium.com/hackernoon/a-serverless-failover-solution-for-web-3-0-validator-nodes-e26b9d24c71d"},"A Serverless Failover Solution for Web3.0 Validator Nodes")," -\nBlog that details how to create a robust failover solution for running validators."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-how-to-validate-kusama##vps-list"},"VPS list")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/!NZrbtteFeqYKCUGQtr:matrix.parity.io?via=matrix.parity.io&via=matrix.org&via=web3.foundation"},"Polkadot Validator Lounge")," -\nA place to chat about being a validator."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"learn-staking#slashing"},"Slashing Consequences")," - Learn more about slashing consequences for\nrunning a validator node."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=0EmP0s6JOW4&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=2"},"Why You Should be A Validator on Polkadot and Kusama")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=riVg_Up_fCg&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=15"},"Roles and Responsibilities of a Validator")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.crowdcast.io/e/validating-on-polkadot"},"Validating on Polkadot")," - An explanation of\nhow to validate on Polkadot, with Joe Petrowski and David Dorgan of Parity Technologies, along\nwith Tim Ogilvie from Staked.")),(0,i.kt)("h3",{id:"security--key-management"},"Security / Key Management"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/w3f/validator-security"},"Validator Security Overview"))),(0,i.kt)("h3",{id:"monitoring-tools"},"Monitoring Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/SimplyVC/panic_polkadot"},"PANIC for Polkadot")," - A monitoring and alerting\nsolution for Polkadot / Kusama node"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://telemetry.polkadot.io/#list/Kusama%20CC3"},"Polkadot Telemetry Service")," - Network\ninformation, including what nodes are running on a given chain, what software versions they are\nrunning, and sync status.")),(0,i.kt)("h3",{id:"validator-stats"},"Validator Stats"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkacube.hashquark.io/#/polkadot/strategy"},"HashQuark Staking Strategy")," - The HashQuark\nstaking strategy dashboard helps you choose the optimal set-up to maximize rewards, and provides\nother useful network monitoring tools."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkastats.io/"},"Polkastats")," - Polkastats is a cleanly designed dashboard for validator\nstatistics."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://yieldscan.app/"},"YieldScan")," - Staking yield maximization platform, designed to minimize\neffort."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://kusama.subscan.io/validator"},"Subscan Validators Page")," - Displays information on the\ncurrent validators - not as tailored for validators as the other sites.")))}m.isMDXComponent=!0},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/bb8b1738.c1eeadbf.js b/assets/js/bb8b1738.c1eeadbf.js new file mode 100644 index 000000000000..88847c933c29 --- /dev/null +++ b/assets/js/bb8b1738.c1eeadbf.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[7368],{47940:(a,e,t)=>{"use strict";t.d(e,{Z:()=>h});var o=t(74165),n=t(15861),i=t(67294),r=t(87152),l=t(14741),s=t(67425);function d(a,e,t){return c.apply(this,arguments)}function c(){return(c=(0,n.Z)((0,o.Z)().mark((function a(e,t,n){var i,s,d,c,p;return(0,o.Z)().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:i=void 0,s=void 0,a.t0=e,a.next="polkadot"===a.t0?5:"kusama"===a.t0?7:"statemine"===a.t0?9:"statemint"===a.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",a.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",a.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",a.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",a.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){a.next=18;break}return a.abrupt("return");case 18:return d=new r.U(i),a.next=21,l.G.create({provider:d});case 21:c=a.sent,(p=t.split(".")).forEach((function(a){a in c&&(c=c[a])})),a.t1=p[0],a.next="consts"===a.t1?27:"query"===a.t1?29:34;break;case 27:return s=c.toString(),a.abrupt("break",35);case 29:return a.next=31,c();case 31:return s=(s=a.sent).toString(),a.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+t);case 35:return a.abrupt("return",s);case 36:case"end":return a.stop()}}),a)})))).apply(this,arguments)}function p(a,e,t,o){switch(e){case"humanReadable":(0,s.HumanReadable)(a,t,o);break;case"precise":(0,s.Precise)(a,t,o);break;case"blocksToDays":(0,s.BlocksToDays)(a,o);break;case"erasToDays":(0,s.ErasToDays)(a,o,t);break;case"percentage":(0,s.Percentage)(a,o);break;case"permillToPercent":(0,s.PermillToPercent)(a,o);break;case"arrayLength":(0,s.ArrayLength)(a,o);break;default:return void console.log("Ignoring unknown filter type")}}const h=function(a){var e=a.network,t=a.path,r=a.defaultValue,l=a.filter,s=void 0===l?void 0:l,c=(0,i.useState)(""),h=c[0],u=c[1];return e=e.toLowerCase(),(0,i.useEffect)((function(){void 0!==s?p(r.toString(),s,e,u):u(r.toString());var a=void 0;switch(e){case"polkadot":a="wss://rpc.polkadot.io";break;case"kusama":a="wss://kusama-rpc.polkadot.io/";break;case"statemine":a="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":a="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+e)}if(void 0===a)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var a=(0,n.Z)((0,o.Z)().mark((function a(){var n;return(0,o.Z)().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,d(e,t,u);case 2:if(void 0!==(n=a.sent)){a.next=7;break}return a.abrupt("return");case 7:void 0!==s?p(n,s,e,u):u(n);case 8:case"end":return a.stop()}}),a)})));return function(){return a.apply(this,arguments)}}();try{i()}catch(l){console.log(l)}}}),[]),h}},67425:a=>{var e="polkadot",t="kusama",o="statemine",n="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};a.exports={HumanReadable:function(a,r,l){var s=void 0;if(r===e||r===n)s=3;else{if(r!==t&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=6}a=parseFloat(a),l((a=Number.isInteger(a/i[r].precision)?a/i[r].precision+" "+i[r].symbol:(a/i[r].precision).toFixed(s)+" "+i[r].symbol).toString())},Precise:function(a,e,t){t(a=(a=parseFloat(a))/i[e].precision+" "+i[e].symbol)},BlocksToDays:function(a,e){e((a=6*a/86400).toString())},ErasToDays:function(a,i,r){var l=void 0;if(r===e||r===n)l=1;else{if(r!==t&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=4}i((a/=l).toString())},Percentage:function(a,e){e((a/=1e7).toString())},PermillToPercent:function(a,e){e((a/=1e4).toString())},ArrayLength:function(a,e){e((a=a.split(",").length).toString())}}},49175:(a,e,t)=>{"use strict";t.r(e),t.d(e,{assets:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>h});var o=t(87462),n=t(63366),i=(t(67294),t(3905)),r=t(47940),l=["components"],s={id:"learn-validator",title:"Validator",sidebar_label:"Validator",description:"Role of Validators within the Polkadot Ecosystem.",keywords:["validate","validator","maintain","NPoS","stake"],slug:"../learn-validator"},d=void 0,c={unversionedId:"learn/learn-validator",id:"learn/learn-validator",title:"Validator",description:"Role of Validators within the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-validator.md",sourceDirName:"learn",slug:"/learn-validator",permalink:"/docs/learn-validator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-validator.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551514,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-validator",title:"Validator",sidebar_label:"Validator",description:"Role of Validators within the Polkadot Ecosystem.",keywords:["validate","validator","maintain","NPoS","stake"],slug:"../learn-validator"},sidebar:"docs",previous:{title:"Nominator",permalink:"/docs/learn-nominator"},next:{title:"Components",permalink:"/docs/learn-components-index"}},p={},h=[{value:"Para-validators",id:"para-validators",level:2},{value:"Block Authors",id:"block-authors",level:2},{value:"Other Validators",id:"other-validators",level:2},{value:"Further Readings",id:"further-readings",level:2},{value:"Guides",id:"guides",level:3},{value:"Other References",id:"other-references",level:3},{value:"Security / Key Management",id:"security--key-management",level:3},{value:"Monitoring Tools",id:"monitoring-tools",level:3},{value:"Validator Stats",id:"validator-stats",level:3}],u={toc:h},k="wrapper";function m(a){var e=a.components,t=(0,n.Z)(a,l);return(0,i.kt)(k,(0,o.Z)({},u,t,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"This page provides a general overview of the role of validators in\nPolkadot. For more detailed information you\ncan read the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"Parachain Protocol Overview"),".")),(0,i.kt)("p",null,"Validators secure the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-architecture#relay-chain"},"relay chain")," by staking\nDOT, validating proofs from collators and\nparticipating in consensus with other validators."),(0,i.kt)("p",null,"Validators play a crucial role in adding new blocks to the relay chain and, by extension, to all\nparachains. This allows parties to complete cross-chain transactions via the relay chain. They\nguarantee that each parachain follows its unique rules and can pass messages between shards in a\ntrust-free environment."),(0,i.kt)("h2",{id:"para-validators"},"Para-validators"),(0,i.kt)("p",null,"Parachain validators (i.e. para-validators) participate to the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#parachain-phase"},"Parachain Phase of the AnV Protocol"),", and submit\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#candidate-receipts"},"candidate receipts")," to the Relay Chain\ntransaction queue so that a block author can include information on the parablock in a fork of of\nthe Relay Chain."),(0,i.kt)("p",null,"Para-validators work in groups and are selected by the runtime in every epoch to validate parachain\nblocks for all parachains connected to the relay chain. The selected para-validators are one of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.validatorCount",defaultValue:297,mdxType:"RPC"}),"\n","\nvalidators randomly selected (per epoch) to participate in the validation, creating a validator pool\nof 200 para-validators."),(0,i.kt)("p",null,"Para-validators verify that the information contained in an assigned set of parachain blocks is\nvalid. They receive parachain block candidates from the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"collators")," together\nwith a Proof-of-Validity (PoV). The para-validators perform the first round of validity checks on\nthe block candidates. Candidates that gather enough signed validity statements are considered\n",(0,i.kt)("em",{parentName:"p"},"backable"),"."),(0,i.kt)("h2",{id:"block-authors"},"Block Authors"),(0,i.kt)("p",null,"There are validators on the Relay Chain who participate in the consensus mechanism to produce the\nrelay chain blocks based on validity statements from other validators. These validators are called\nblock authors, they are selected by ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#block-production-babe"},"BABE")," and can note\nup to one backable candidate for each parachain to include in the relay chain. A backable candidate\nincluded in the relay chain is considered ",(0,i.kt)("em",{parentName:"p"},"backed")," in that fork of the chain."),(0,i.kt)("p",null,"In a Relay Chain block, block authors will only include\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#candidate-receipts"},"candidate receipts")," that have a parent\ncandidate receipt in an earlier Relay Chain block. This ensures the parachain follows a valid chain.\nAlso, the block authors will only include a receipt for which they have an erasure coding chunk,\nensuring that the system can perform the next round of availability and validity checks."),(0,i.kt)("h2",{id:"other-validators"},"Other Validators"),(0,i.kt)("p",null,"Validators also contribute to the so-called ",(0,i.kt)("strong",{parentName:"p"},"availability distribution"),". In fact, once the\ncandidate is backed in a fork of the relay chain, it is still ",(0,i.kt)("em",{parentName:"p"},"pending availability"),", i.e. it is not\nfully included (only tentative included) as part of the parachain until it is proven available\n(together with the PoV). Information regarding the availability of the candidate will be noted in\nthe following relay chain blocks. Only when there is enough information, the candidate is considered\na full parachain block or ",(0,i.kt)("em",{parentName:"p"},"parablock"),"."),(0,i.kt)("p",null,"Validators also participate in the so-called\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#approval-process"},(0,i.kt)("strong",{parentName:"a"},"approval process")),". Once the parablock is\nconsidered available and part of the parachain, it is still ",(0,i.kt)("em",{parentName:"p"},"pending approval"),". Because\npara-validators are a small subset of all validators, there is a risk that by chance the majority of\npara-validators assigned to a parachain might be dishonest. It is thus necessary to run a secondary\nverification of the parablock before it can be considered approved. Having a secondary verification\nstep avoids the allocation of more para-validators that will ultimately reduce the throughput of the\nsystem."),(0,i.kt)("p",null,"Any instances of non-compliance with the consensus algorithms result in\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#disputes"},(0,i.kt)("strong",{parentName:"a"},"disputes"))," with the punishment of the validators on\nthe wrong side by removing some or all their staked\nDOT, thereby discouraging bad actors. Good\nperformance, however, will be rewarded, with validators receiving block rewards (including\ntransaction fees) in the form of DOT in exchange\nfor their activities."),(0,i.kt)("p",null,"Finally, validators participate in the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol/#chain-selection"},"chain selection process within GRANDPA"),", ensuring\nthat only available and valid blocks end within the finalized Relay Chain."),(0,i.kt)("admonition",{title:"Within an era roles can change",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Within the same era, a Validator can be a para-validator, block author, and participate in the\navailability distribution or the approval process. Those roles can change between sessions.")),(0,i.kt)("h2",{id:"further-readings"},"Further Readings"),(0,i.kt)("h3",{id:"guides"},"Guides"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-how-to-validate-polkadot"},"How to Validate on Polkadot")," - Guide on\nhow to set up a validator on the Polkadot live network."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-validator-payout"},"Validator Payout Overview")," - A short overview on\nhow the validator payout mechanism works."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-how-to-systemd"},"How to run your validator as a systemd process")," -\nGuide on running your validator as a ",(0,i.kt)("inlineCode",{parentName:"li"},"systemd")," process so that it will run in the background and\nstart automatically on reboots."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-how-to-upgrade"},"How to Upgrade your Validator")," - Guide for\nsecurely upgrading your validator when you want to switch to a different machine or begin running\nthe latest version of client code."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-how-to-validate-polkadot"},"How to Use Validator Setup")," - Guide on\nhow to use Polkadot / Kusama validator setup.")),(0,i.kt)("h3",{id:"other-references"},"Other References"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://medium.com/@acvlls/setting-up-a-maintain-the-easy-way-3a885283091f"},"How to run a Polkadot node (Docker)")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://medium.com/hackernoon/a-serverless-failover-solution-for-web-3-0-validator-nodes-e26b9d24c71d"},"A Serverless Failover Solution for Web3.0 Validator Nodes")," -\nBlog that details how to create a robust failover solution for running validators."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-how-to-validate-kusama##vps-list"},"VPS list")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/!NZrbtteFeqYKCUGQtr:matrix.parity.io?via=matrix.parity.io&via=matrix.org&via=web3.foundation"},"Polkadot Validator Lounge")," -\nA place to chat about being a validator."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"learn-staking#slashing"},"Slashing Consequences")," - Learn more about slashing consequences for\nrunning a validator node."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=0EmP0s6JOW4&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=2"},"Why You Should be A Validator on Polkadot and Kusama")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=riVg_Up_fCg&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=15"},"Roles and Responsibilities of a Validator")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.crowdcast.io/e/validating-on-polkadot"},"Validating on Polkadot")," - An explanation of\nhow to validate on Polkadot, with Joe Petrowski and David Dorgan of Parity Technologies, along\nwith Tim Ogilvie from Staked.")),(0,i.kt)("h3",{id:"security--key-management"},"Security / Key Management"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/w3f/validator-security"},"Validator Security Overview"))),(0,i.kt)("h3",{id:"monitoring-tools"},"Monitoring Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/SimplyVC/panic_polkadot"},"PANIC for Polkadot")," - A monitoring and alerting\nsolution for Polkadot / Kusama node"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://telemetry.polkadot.io/#list/Kusama%20CC3"},"Polkadot Telemetry Service")," - Network\ninformation, including what nodes are running on a given chain, what software versions they are\nrunning, and sync status.")),(0,i.kt)("h3",{id:"validator-stats"},"Validator Stats"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkacube.hashquark.io/#/polkadot/strategy"},"HashQuark Staking Strategy")," - The HashQuark\nstaking strategy dashboard helps you choose the optimal set-up to maximize rewards, and provides\nother useful network monitoring tools."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkastats.io/"},"Polkastats")," - Polkastats is a cleanly designed dashboard for validator\nstatistics."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://yieldscan.app/"},"YieldScan")," - Staking yield maximization platform, designed to minimize\neffort."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://kusama.subscan.io/validator"},"Subscan Validators Page")," - Displays information on the\ncurrent validators - not as tailored for validators as the other sites.")))}m.isMDXComponent=!0},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/c07c2447.762ee8d7.js b/assets/js/c07c2447.762ee8d7.js deleted file mode 100644 index 78b7fa22e32a..000000000000 --- a/assets/js/c07c2447.762ee8d7.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[7654],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var o=a(74165),n=a(15861),i=a(67294),r=a(87152),s=a(14741),l=a(67425);function p(e,t,a){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var i,l,p,d,u;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){e.next=18;break}return e.abrupt("return");case 18:return p=new r.U(i),e.next=21,s.G.create({provider:p});case 21:d=e.sent,(u=a.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=u[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+u[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function u(e,t,a,o){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,o);break;case"precise":(0,l.Precise)(e,a,o);break;case"blocksToDays":(0,l.BlocksToDays)(e,o);break;case"erasToDays":(0,l.ErasToDays)(e,o,a);break;case"percentage":(0,l.Percentage)(e,o);break;case"permillToPercent":(0,l.PermillToPercent)(e,o);break;case"arrayLength":(0,l.ArrayLength)(e,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,d=(0,i.useState)(""),c=d[0],h=d[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?u(r.toString(),l,t,h):h(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var e=(0,n.Z)((0,o.Z)().mark((function e(){var n;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,a,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?u(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",o="statemine",n="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,s){var l=void 0;if(r===t||r===n)l=3;else{if(r!==a&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/i[r].precision)?e/i[r].precision+" "+i[r].symbol:(e/i[r].precision).toFixed(l)+" "+i[r].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/i[t].precision+" "+i[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,i,r){var s=void 0;if(r===t||r===n)s=1;else{if(r!==a&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},40569:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>k,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",sidebar_label:"OpenGov Guides",description:"Polkadot-JS Guides about Polkadot OpenGov.",keywords:["opengov","polkadot opengov","referenda","cancel","polkadot-js"],slug:"../learn-guides-polkadot-opengov"},p=void 0,d={unversionedId:"learn/learn-guides-polkadot-opengov",id:"learn/learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",description:"Polkadot-JS Guides about Polkadot OpenGov.",source:"@site/../docs/learn/learn-guides-polkadot-opengov.md",sourceDirName:"learn",slug:"/learn-guides-polkadot-opengov",permalink:"/docs/learn-guides-polkadot-opengov",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-polkadot-opengov.md",tags:[],version:"current",lastUpdatedBy:"bader y",lastUpdatedAt:1711096215,formattedLastUpdatedAt:"Mar 22, 2024",frontMatter:{id:"learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",sidebar_label:"OpenGov Guides",description:"Polkadot-JS Guides about Polkadot OpenGov.",keywords:["opengov","polkadot opengov","referenda","cancel","polkadot-js"],slug:"../learn-guides-polkadot-opengov"},sidebar:"docs",previous:{title:"Nomination Pool Guides",permalink:"/docs/learn-guides-staking-pools"},next:{title:"Treasury Guides",permalink:"/docs/learn-guides-treasury"}},u={},c=[{value:"Create a Referenda Proposal",id:"create-a-referenda-proposal",level:2},{value:"Submitting a Preimage",id:"submitting-a-preimage",level:3},{value:"Submitting a Proposal",id:"submitting-a-proposal",level:3},{value:"Submitting a Referendum on the Whitelisted Caller Track",id:"submitting-a-referendum-on-the-whitelisted-caller-track",level:3},{value:"Voting on Referenda",id:"voting-on-referenda",level:2},{value:"Removing Votes",id:"removing-votes",level:3},{value:"Removing Expired Voting Locks",id:"removing-expired-voting-locks",level:3},{value:"Delegations",id:"delegations",level:2},{value:"Delegate Votes",id:"delegate-votes",level:3},{value:"Undelegate Votes",id:"undelegate-votes",level:3},{value:"Remove Expired Locks from Delegations",id:"remove-expired-locks-from-delegations",level:3},{value:"Modify your Delegations",id:"modify-your-delegations",level:3},{value:"Claiming OpenGov Deposits",id:"claiming-opengov-deposits",level:2},{value:"Claiming the Preimage and Decision Deposits",id:"claiming-the-preimage-and-decision-deposits",level:3},{value:"Claiming the Referendum Submission Deposit",id:"claiming-the-referendum-submission-deposit",level:3},{value:"Cancel or Kill a Referendum",id:"cancel-or-kill-a-referendum",level:2}],h={toc:c},m="wrapper";function k(e){var t=e.components,l=(0,n.Z)(e,s);return(0,i.kt)(m,(0,o.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,i.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,i.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,i.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"this page")," to learn about Polkadot OpenGov."),(0,i.kt)("p",null,"This guide will instruct token holders how to propose and vote on public referenda using the\nReferenda module (OpenGov). Below are a few links to stay informed and directly engage with the\ncommunity."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction")," - a place to discuss\ngovernance and the future of Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Kusama-Direction:parity.io"},"Kusama Direction")," - a place to discuss\ngovernance and the future of Kusama."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.polkassembly.io"},"Polkadot")," and ",(0,i.kt)("a",{parentName:"li",href:"https://kusama.polkassembly.io"},"Kusama"),"\nPolkassembly - for current referenda, latest proposals, motions, treasury proposals, tips,\nbounties, and more."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#dailydigest:web3.foundation"},"Polkadot Daily Digest")," - News about what is\nhappening in the Polkadot ecosystem, published every weekday except holidays.")),(0,i.kt)("h2",{id:"create-a-referenda-proposal"},"Create a Referenda Proposal"),(0,i.kt)("h3",{id:"submitting-a-preimage"},"Submitting a Preimage"),(0,i.kt)("p",null,"The act of creating a proposal is split from submitting the preimage for the proposal since the\nstorage cost of submitting a large preimage could be expensive. Allowing the preimage submission to\ncome as a separate transaction means that another account could submit the preimage for you and pay\nthe fee. The example below demonstrates the creation of a preimage to propose and approve a spend of\ntreasury funds."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit preimage",src:a(10579).Z,width:"1078",height:"606"})),(0,i.kt)("p",null,"Follow the steps below to submit a preimage as shown in the screenshot above."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Navigate to Governance -> Referenda."),(0,i.kt)("li",{parentName:"ol"},'Click on the "Add preimage" button.'),(0,i.kt)("li",{parentName:"ol"},"From the ",(0,i.kt)("em",{parentName:"li"},"propose")," drop-down field, select ",(0,i.kt)("inlineCode",{parentName:"li"},"treasury"),"."),(0,i.kt)("li",{parentName:"ol"},"From the unlabeled drop-down field to the right of the ",(0,i.kt)("em",{parentName:"li"},"propose")," drop-down field, select\n",(0,i.kt)("inlineCode",{parentName:"li"},"spendLocal(amount, beneficiary)"),"."),(0,i.kt)("li",{parentName:"ol"},"In the ",(0,i.kt)("inlineCode",{parentName:"li"},"amount: Compact (BalanceOf)")," text field, enter the spend amount."),(0,i.kt)("li",{parentName:"ol"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"beneficiary: MultiAddress (AccountIdLookupOf)")," drop-down field will have ",(0,i.kt)("inlineCode",{parentName:"li"},"Id")," selected by\ndefault. Select the beneficiary from the ",(0,i.kt)("inlineCode",{parentName:"li"},"Id: AccountId")," drop-down field.")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Copy the ",(0,i.kt)("inlineCode",{parentName:"p"},"preimage hash"),' value before clicking the "Submit preimage" button.')),(0,i.kt)("ol",{start:7},(0,i.kt)("li",{parentName:"ol"},'Click the "Submit preimage" button.')),(0,i.kt)("p",null,"After the preimage is submitted successfully on-chain, Polkadot-JS UI lists it under the tab of\nGovernance -> Preimages."),(0,i.kt)("h3",{id:"submitting-a-proposal"},"Submitting a Proposal"),(0,i.kt)("p",null,'Submitting a proposal requires you to bond some tokens. On Polkadot-JS UI, you can navigate to the\nGovernance -> Referenda to make a new proposal. In order to submit a proposal, you will need to\nsubmit what\'s called the preimage hash. The preimage hash is simply the hash of the proposal to be\nenacted. The easiest way to get the preimage hash is by clicking on the "Submit preimage" button as\nshown in the previous section.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit proposal",src:a(31993).Z,width:"1936",height:"1118"})),(0,i.kt)("p",null,"The proposal will be registered from the account selected and the balance lock will be applied to\nit. An appropriate origin must be chosen, as each origin has different privileges, and acceptance\ncriteria. After entering the hash of the preimage for the proposal, the preimage length field is\nautomatically populated. The enactment delay can be specified either as a block number, or as a\nspecific number of blocks after the referendum is approved. The deposit for this proposal will be\nlocked for the referendum duration."),(0,i.kt)("h3",{id:"submitting-a-referendum-on-the-whitelisted-caller-track"},"Submitting a Referendum on the Whitelisted Caller Track"),(0,i.kt)("p",null,"Let's consider increasing the number of validators participating in parachain consensus. You could\n",(0,i.kt)("a",{parentName:"p",href:"#submitting-a-preimage"},"submit a preimage")," with the call that sets the number of validators to\n1,000 and submit a referendum to the Root track directly. However, this requires a large decision\ndeposit and has very conservative passing parameters such that it will probably need the entire\n28-day voting period to pass."),(0,i.kt)("p",null,"Operations that are deemed safe or time critical by the Polkadot Technical Fellowship can use the\nWhitelisted Caller track. This track requires less turnout in the first half of the decision period\nso that it can pass more quickly. This track is typically used for more neutral, technical proposals\nlike runtime upgrades or changing the system's parachain validation configuration."),(0,i.kt)("p",null,"Using the Whitelisted Caller track requires some special calls. Submitting a referendum in the same\nform as other tracks will not work. Namely, rather than voting on a particular ",(0,i.kt)("inlineCode",{parentName:"p"},"proposal"),", the\nWhitelisted Caller track requires a vote to ",(0,i.kt)("inlineCode",{parentName:"p"},"dispatch")," the ",(0,i.kt)("inlineCode",{parentName:"p"},"proposal")," via the Whitelist pallet.\nBefore opening a referendum on this track, you should also attempt to get a positive signal from the\nFellowship that they will whitelist the proposal. If they do not, then even if the public referendum\npasses, it will not execute."),(0,i.kt)("p",null,"Below are the steps to follow when submitting a proposal to the Whitelist track."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#submitting-a-preimage"},"Submit a preimage")," with the call to ",(0,i.kt)("em",{parentName:"li"},"dispatch")," the proposal (",(0,i.kt)("inlineCode",{parentName:"li"},"call"),") you\nwant to submit -- ",(0,i.kt)("inlineCode",{parentName:"li"},"whitelist.dispatchWhitelistedCallWithPreimage(call)")," -- and obtain the preimage\nhash. This is the preimage for the ",(0,i.kt)("em",{parentName:"li"},"public referendum")," on the Whitelisted Caller track.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"preimage-whitelist",src:a(80474).Z,width:"2146",height:"1113"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Obtain the hash of ",(0,i.kt)("inlineCode",{parentName:"p"},"call"),". The Polkadot Fellowship needs to start a Fellowship referendum to\nwhitelist the call with ",(0,i.kt)("inlineCode",{parentName:"p"},"whitelist.whitelistCall(callHash)"),". The Fellowship referendum gets voted\non by the Polkadot Fellowship members only."),(0,i.kt)("p",{parentName:"li"},(0,i.kt)("img",{alt:"call-hash",src:a(78249).Z,width:"2257",height:"858"}))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"The public now votes on the referendum. Someone must place a decision deposit to go into the\ndeciding phase.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Once passed, it gets enacted successfully as long as the call has been whitelisted by the\nFellowship."))),(0,i.kt)("p",null,"Note that the public referendum and Fellowship referendum can happen simultaneously. However, if the\nFellowship does not whitelist the call, you must submit it directly to the Root origin."),(0,i.kt)("h2",{id:"voting-on-referenda"},"Voting on Referenda"),(0,i.kt)("p",null,"As Polkadot OpenGov takes both the approval and support into account, there are four options to\nchoose from when voting on a referendum:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Aye"),(0,i.kt)("li",{parentName:"ul"},"Nay"),(0,i.kt)("li",{parentName:"ul"},"Split"),(0,i.kt)("li",{parentName:"ul"},"Abstain")),(0,i.kt)("p",null,"Also, you have to specify the conviction multiplier for this vote. The longer you are willing to\nlock your tokens, the stronger your vote will be weighted. Unwillingness to lock your tokens means\nthat your vote only counts for 10% of the tokens that you hold."),(0,i.kt)("p",null,"For detailed instructions on how to vote on Polkadot OpenGov referenda, check\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184120-polkadot-opengov-how-to-vote"},"this support guide.")),(0,i.kt)("admonition",{title:"Polkadot OpenGov uses Conviction Voting Pallet (Not Democracy Pallet)",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Use ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting.vote")," for voting on Referenda in Polkadot OpenGov instead of ",(0,i.kt)("inlineCode",{parentName:"p"},"democracy.vote"),"\n(which only works for the old version of governance).")),(0,i.kt)("h3",{id:"removing-votes"},"Removing Votes"),(0,i.kt)("p",null,"To remove votes, you need to use the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab")," and\ncall the ",(0,i.kt)("inlineCode",{parentName:"p"},"removeVote")," function through the ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting")," pallet."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rm-vote",src:a(28422).Z,width:"2388",height:"594"})),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"class")," is the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins"},"OpenGov track")," of the referendum you voted\non and the ",(0,i.kt)("inlineCode",{parentName:"p"},"index")," is the referendum number."),(0,i.kt)("h3",{id:"removing-expired-voting-locks"},"Removing Expired Voting Locks"),(0,i.kt)("p",null,"To remove an expired lock, you need to use the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab")," and call the ",(0,i.kt)("inlineCode",{parentName:"p"},"unlock")," function through\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting")," pallet. Note that if you voted on referenda in multiple tracks, the tokens\nwill be unlocked after removing votes and unlocking on all the tracks. Similarly, if you you\n",(0,i.kt)("a",{parentName:"p",href:"#delegations"},"delegated")," on multiple tracks, the funds will be unlocked after\n",(0,i.kt)("a",{parentName:"p",href:"#undelegate-votes"},"undelegating")," and unlocking on all the tracks."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rm-voting-lock",src:a(43577).Z,width:"2382",height:"684"})),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"class")," is the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins"},"OpenGov track")," where you have the lock."),(0,i.kt)("p",null,"For additional instructions, check\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184129-polkadot-js-ui-how-to-remove-expired-referenda-locks"},"this support guide.")),(0,i.kt)("h2",{id:"delegations"},"Delegations"),(0,i.kt)("admonition",{title:"Video Tutorial about Delegations using the Polkadot-JS UI",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/PNGs11EvCB0"},"this video tutorial")," to learn about how to delegate, modify\ndelegations and remove delegations using the Polkadot-JS UI.")),(0,i.kt)("p",null,"For an overview of how delegation works in Polkadot OpenGov, check out the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#multirole-delegation"},"Multirole Delegation")," section on the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Learn Polkadot OpenGov")," page."),(0,i.kt)("p",null,"Instructions to do delegations with Polkadot-JS are also available on the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184776-polkadot-js-ui-how-to-delegate-your-voting-power-on-polkadot-opengov"},"Support Pages"),"."),(0,i.kt)("h3",{id:"delegate-votes"},"Delegate Votes"),(0,i.kt)("p",null,'You can start delegating your votes by clicking the "Delegate" button on\n',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-start",src:a(90691).Z,width:"1055",height:"497"})),(0,i.kt)("p",null,"If it is the first time you delegate or vote, there will be a banner message. You can delegate on a\nsingle track or all the tracks. You have an option to specify the number of votes (i.e., the number\nof tokens) and the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#voluntary-locking"},"conviction multiplier"),'. After\nclicking "Next", you will need to specify the account to delegate your votes to, and after clicking\n"Delegate" and "Sign and Submit" your delegations will appear for each track (see below).'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-allTracks",src:a(62428).Z,width:"2116",height:"1438"})),(0,i.kt)("p",null,"Note that if you want to delegate just a few tracks, you have two options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'Repeat the process using the "Delegate" button multiple times'),(0,i.kt)("li",{parentName:"ul"},"Issue a batch call with multiple ",(0,i.kt)("inlineCode",{parentName:"li"},"convictionVoting.delegate")," extrinsics under\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics"))),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-delegate",src:a(54853).Z,width:"2694",height:"1104"})),(0,i.kt)("p",null,'By clicking on "Add item" you can add new extrinsics for multiple tracks.'),(0,i.kt)("h3",{id:"undelegate-votes"},"Undelegate Votes"),(0,i.kt)("p",null,'The "Delegate" button on ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda")," is only\nfor delegating votes. You cannot undelegate or modify your delegations. If you wish to undelegate,\nyou will need to go to ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics")," and\nsubmit a ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting.undelegate")," extrinsic, specifying the track you wish to undelegate."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-undelegate",src:a(9459).Z,width:"2708",height:"632"})),(0,i.kt)("p",null,'Undelegated tracks will show up as "0 votes" on the Delegate tab.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-undelegate",src:a(93996).Z,width:"2128",height:"1432"})),(0,i.kt)("p",null,"After you undelegated, the conviction lock will start the countdown, and your funds will be\navailable for unlocking after the countdown ends."),(0,i.kt)("h3",{id:"remove-expired-locks-from-delegations"},"Remove Expired Locks from Delegations"),(0,i.kt)("p",null,"To remove expired locks from delegations, you can\n",(0,i.kt)("a",{parentName:"p",href:"#removing-expired-voting-locks"},"follow the same procedure as how to remove expired voting locks"),"."),(0,i.kt)("h3",{id:"modify-your-delegations"},"Modify your Delegations"),(0,i.kt)("p",null,'The "Delegate" button on ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda")," is only\nfor delegating votes. You cannot undelegate or modify your delegations. If you wish to update the\ndelegated account, the conviction, and the number of votes you will need to go to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics"),", ",(0,i.kt)("a",{parentName:"p",href:"#undelegate-votes"},"undelegate"),"\nthe track and ",(0,i.kt)("a",{parentName:"p",href:"#delegate-votes"},"delegate")," again with updated information."),(0,i.kt)("h2",{id:"claiming-opengov-deposits"},"Claiming OpenGov Deposits"),(0,i.kt)("admonition",{title:"Video Tutorial about OpenGov deposits using the Polkadot-JS UI",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/kkEq5cqW2Pk"},"this video tutorial")," to learn about how to claim OpenGov deposits\nusing the Polkadot-JS UI.")),(0,i.kt)("h3",{id:"claiming-the-preimage-and-decision-deposits"},"Claiming the Preimage and Decision Deposits"),(0,i.kt)("p",null,"After a referendum finishes its life cycle (and gets approved or rejected or timed out), the\npreimage and decision deposits can be claimed. For claiming the preimage deposit, navigate to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/preimages"},"Polkadot-JS UI > Governance > Preimages")," and click on\nunnote button shown on the preimage you submitted."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Claim Preimage Deposit",src:a(80560).Z,width:"2828",height:"362"})),(0,i.kt)("p",null,"Similarly, to claim the decision deposit, navigate to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda")," and scroll down\nto the end of the page to click on the referenda with the decision deposit and claim it."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Claim Referendum Deposits",src:a(62248).Z,width:"2830",height:"444"})),(0,i.kt)("h3",{id:"claiming-the-referendum-submission-deposit"},"Claiming the Referendum Submission Deposit"),(0,i.kt)("p",null,"The submission deposit for a referendum can be claimed\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/cfb29254f74412cea35e8048d8aea94bc789fcb1/substrate/frame/referenda/src/types.rs#L261"},"only if the referendum was ",(0,i.kt)("inlineCode",{parentName:"a"},"Approved")," or ",(0,i.kt)("inlineCode",{parentName:"a"},"Canceled")),".\nThe submission deposit can be claimed by issuing the ",(0,i.kt)("inlineCode",{parentName:"p"},"refundSubmissionDeposit")," extrinsic."),(0,i.kt)("p",null,"Users can not refund their submission deposit while the referendum is ",(0,i.kt)("inlineCode",{parentName:"p"},"Ongoing")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"Rejected"),".\nSimilarly, users cannot refund their submission deposit if the proposal has ",(0,i.kt)("inlineCode",{parentName:"p"},"TimedOut")," (failing to\nsubmit the decision deposit within a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"const.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\nperiod will lead to a referendum timeout). This behavior exists so that users can refrain from\nspamming the chain with proposals that have no interest from the community. If a proposal is in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"TimedOut")," state, any user can call ",(0,i.kt)("inlineCode",{parentName:"p"},"slash_proposal_deposit"),", which will move the funds from the\nuser to a runtime-configured account, like the treasury."),(0,i.kt)("p",null,"To refund your slashed deposit, you can start a new referendum and specifically request a refund\nfrom the treasury. You need to make sure you have enough balance for a new submission and decision\ndeposit, and you will need to select the right track to ask for a refund. For example, the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#small-tipper"},"Small Tipper Track")," would be fine for any kind of\ndeposit refund up to 250 DOT."),(0,i.kt)("h2",{id:"cancel-or-kill-a-referendum"},"Cancel or Kill a Referendum"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Anybody can cancel an ongoing referendum (i.e., a referendum within the Lead-in or\nvoting/confirmation period). For more information about the referenda timeline in Polkadot OpenGov,\nsee the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#referenda-timeline"},"dedicated page"),"."),(0,i.kt)("p",{parentName:"admonition"},"To successfully cancel a referendum through the track ",(0,i.kt)("inlineCode",{parentName:"p"},"20 / Referendum Canceller"),", you will need to\nattain\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#referendum-canceller"},"specific approval and support levels"),".")),(0,i.kt)("p",null,"To cancel a referendum, you need first to submit a preimage with the ",(0,i.kt)("inlineCode",{parentName:"p"},"referenda.cancel")," extrinsic.\nGo to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda"),' and\nclick on the "Add Preimage" button. You must specify the ',(0,i.kt)("inlineCode",{parentName:"p"},"referenda.cancel")," extrinsic with the index\nequal to the ongoing Referendum you wish to cancel. In the screenshot below, the Referendum to be\ncancelled is 249."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-preimage-creation",src:a(78996).Z,width:"2144",height:"944"})),(0,i.kt)("p",null,"This call will cancel the referendum and return the deposit. You can also kill a referendum using\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"referenda.kill")," extrinsic. This will cancel the referendum and slash the deposit."),(0,i.kt)("admonition",{title:"Preimage Submission Deposit",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"A deposit is required for the preimage to be stored on chain. The preimage deposit is proportional\nto the amount of information stored within the preimage. The deposit amount required for a preimage\nwith a treasury spend transaction is around\n41 DOT. Ensure you have enough account\nbalance to pay for this submission deposit as well as the transaction fees.")),(0,i.kt)("p",null,"Once a preimage is submitted, it can be checked under\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/preimages"},"Governance > Preimages"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-preimage-check",src:a(16212).Z,width:"2758",height:"190"})),(0,i.kt)("p",null,"You must copy the preimage to use it when you submit your proposal. To submit the proposal to cancel\nreferendum 249, for example, you need to go under\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda"),' and click the "Submit Proposal"\nbutton.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-proposal",src:a(81405).Z,width:"2130",height:"1226"})),(0,i.kt)("p",null,"You must specify the account to submit the proposal (this can differ from the account used to create\nthe preimage). Then you will need to specify the track ",(0,i.kt)("inlineCode",{parentName:"p"},"20 / Referendum Canceller")," and add the\npreimage hash containing the specific action that will be enacted if the referendum passes. Note\nthat a submission deposit of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.referenda.submissionDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"","\nwill be reserved for submitting the proposal."),(0,i.kt)("p",null,"Once the proposal has been submitted, it will stay in the Lead-in period until there is enough space\nwithin the track, and a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#polkadot-opengov-terminology-and-parameters"},"track-dependent preparation period and decision deposit"),"\nhave been met. Failing to submit the decision deposit within a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\nperiod will lead to a referendum timeout."))}k.isMDXComponent=!0},16212:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-preimage-check-45ef7f984450113a2b1a87e9e2751d69.png"},78996:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-preimage-creation-3923463db47aec298f74a426dba23166.png"},81405:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-proposal-b9c5e90784ec8216360053d8bda84980.png"},80560:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/claim-preimage-deposit-069843b91eba35d4829b237b59ab2d12.png"},62248:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/claim-referendum-decision-deposit-6352bbad189dac6fe7a651b5a3c8f5a5.png"},78249:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/encoded-call-hash-4e0347923993beea4d12d5a787649f8f.png"},80474:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-preimage-whitelist-67d383745b6e7b3ef31a37567e044e80.png"},10579:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-preimage-ddb9c9c348a6c169f24bf70b9439712e.png"},31993:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-proposal-0c82b35f3f7b1d9e66130a621b76c44b.png"},62428:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-allTracks-788efa580f296aa78b65b77691570181.png"},54853:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-delegate-3bcce735bcc35b831079cd44ad0eef15.png"},90691:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-start-c8186f8875fd402b993abfd5ab09f515.png"},9459:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-undelegate-a5018d2ecd2d5523f711199cd6fa1e63.png"},93996:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-undelegated-9b5efde53d2016c4e4b1f0f6b651ecf5.png"},28422:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/rm-vote-8572ff30a00c8d6fe903fae7a39147f4.png"},43577:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/rm-voting-lock-214119c2fcfe92488190b321cdfe823a.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/c07c2447.f6edae7b.js b/assets/js/c07c2447.f6edae7b.js new file mode 100644 index 000000000000..cdc1ca0b23a1 --- /dev/null +++ b/assets/js/c07c2447.f6edae7b.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[7654],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var o=a(74165),n=a(15861),i=a(67294),r=a(87152),s=a(14741),l=a(67425);function p(e,t,a){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var i,l,p,d,u;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){e.next=18;break}return e.abrupt("return");case 18:return p=new r.U(i),e.next=21,s.G.create({provider:p});case 21:d=e.sent,(u=a.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=u[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+u[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function u(e,t,a,o){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,o);break;case"precise":(0,l.Precise)(e,a,o);break;case"blocksToDays":(0,l.BlocksToDays)(e,o);break;case"erasToDays":(0,l.ErasToDays)(e,o,a);break;case"percentage":(0,l.Percentage)(e,o);break;case"permillToPercent":(0,l.PermillToPercent)(e,o);break;case"arrayLength":(0,l.ArrayLength)(e,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,d=(0,i.useState)(""),c=d[0],h=d[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?u(r.toString(),l,t,h):h(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var i=function(){var e=(0,n.Z)((0,o.Z)().mark((function e(){var n;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,a,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?u(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",o="statemine",n="statemint",i={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,s){var l=void 0;if(r===t||r===n)l=3;else{if(r!==a&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/i[r].precision)?e/i[r].precision+" "+i[r].symbol:(e/i[r].precision).toFixed(l)+" "+i[r].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/i[t].precision+" "+i[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,i,r){var s=void 0;if(r===t||r===n)s=1;else{if(r!==a&&r!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},40569:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>k,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",sidebar_label:"OpenGov Guides",description:"Polkadot-JS Guides about Polkadot OpenGov.",keywords:["opengov","polkadot opengov","referenda","cancel","polkadot-js"],slug:"../learn-guides-polkadot-opengov"},p=void 0,d={unversionedId:"learn/learn-guides-polkadot-opengov",id:"learn/learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",description:"Polkadot-JS Guides about Polkadot OpenGov.",source:"@site/../docs/learn/learn-guides-polkadot-opengov.md",sourceDirName:"learn",slug:"/learn-guides-polkadot-opengov",permalink:"/docs/learn-guides-polkadot-opengov",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-polkadot-opengov.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-polkadot-opengov",title:"Polkadot-JS Guides about OpenGov",sidebar_label:"OpenGov Guides",description:"Polkadot-JS Guides about Polkadot OpenGov.",keywords:["opengov","polkadot opengov","referenda","cancel","polkadot-js"],slug:"../learn-guides-polkadot-opengov"},sidebar:"docs",previous:{title:"Nomination Pool Guides",permalink:"/docs/learn-guides-staking-pools"},next:{title:"Treasury Guides",permalink:"/docs/learn-guides-treasury"}},u={},c=[{value:"Create a Referenda Proposal",id:"create-a-referenda-proposal",level:2},{value:"Submitting a Preimage",id:"submitting-a-preimage",level:3},{value:"Submitting a Proposal",id:"submitting-a-proposal",level:3},{value:"Submitting a Referendum on the Whitelisted Caller Track",id:"submitting-a-referendum-on-the-whitelisted-caller-track",level:3},{value:"Voting on Referenda",id:"voting-on-referenda",level:2},{value:"Removing Votes",id:"removing-votes",level:3},{value:"Removing Expired Voting Locks",id:"removing-expired-voting-locks",level:3},{value:"Delegations",id:"delegations",level:2},{value:"Delegate Votes",id:"delegate-votes",level:3},{value:"Undelegate Votes",id:"undelegate-votes",level:3},{value:"Remove Expired Locks from Delegations",id:"remove-expired-locks-from-delegations",level:3},{value:"Modify your Delegations",id:"modify-your-delegations",level:3},{value:"Claiming OpenGov Deposits",id:"claiming-opengov-deposits",level:2},{value:"Claiming the Preimage and Decision Deposits",id:"claiming-the-preimage-and-decision-deposits",level:3},{value:"Claiming the Referendum Submission Deposit",id:"claiming-the-referendum-submission-deposit",level:3},{value:"Cancel or Kill a Referendum",id:"cancel-or-kill-a-referendum",level:2}],h={toc:c},m="wrapper";function k(e){var t=e.components,l=(0,n.Z)(e,s);return(0,i.kt)(m,(0,o.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"sticky",style:{zIndex:1}},(0,i.kt)("br",null),(0,i.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,i.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,i.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,i.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"this page")," to learn about Polkadot OpenGov."),(0,i.kt)("p",null,"This guide will instruct token holders how to propose and vote on public referenda using the\nReferenda module (OpenGov). Below are a few links to stay informed and directly engage with the\ncommunity."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction")," - a place to discuss\ngovernance and the future of Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Kusama-Direction:parity.io"},"Kusama Direction")," - a place to discuss\ngovernance and the future of Kusama."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.polkassembly.io"},"Polkadot")," and ",(0,i.kt)("a",{parentName:"li",href:"https://kusama.polkassembly.io"},"Kusama"),"\nPolkassembly - for current referenda, latest proposals, motions, treasury proposals, tips,\nbounties, and more."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://matrix.to/#/#dailydigest:web3.foundation"},"Polkadot Daily Digest")," - News about what is\nhappening in the Polkadot ecosystem, published every weekday except holidays.")),(0,i.kt)("h2",{id:"create-a-referenda-proposal"},"Create a Referenda Proposal"),(0,i.kt)("h3",{id:"submitting-a-preimage"},"Submitting a Preimage"),(0,i.kt)("p",null,"The act of creating a proposal is split from submitting the preimage for the proposal since the\nstorage cost of submitting a large preimage could be expensive. Allowing the preimage submission to\ncome as a separate transaction means that another account could submit the preimage for you and pay\nthe fee. The example below demonstrates the creation of a preimage to propose and approve a spend of\ntreasury funds."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit preimage",src:a(10579).Z,width:"1078",height:"606"})),(0,i.kt)("p",null,"Follow the steps below to submit a preimage as shown in the screenshot above."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Navigate to Governance -> Referenda."),(0,i.kt)("li",{parentName:"ol"},'Click on the "Add preimage" button.'),(0,i.kt)("li",{parentName:"ol"},"From the ",(0,i.kt)("em",{parentName:"li"},"propose")," drop-down field, select ",(0,i.kt)("inlineCode",{parentName:"li"},"treasury"),"."),(0,i.kt)("li",{parentName:"ol"},"From the unlabeled drop-down field to the right of the ",(0,i.kt)("em",{parentName:"li"},"propose")," drop-down field, select\n",(0,i.kt)("inlineCode",{parentName:"li"},"spendLocal(amount, beneficiary)"),"."),(0,i.kt)("li",{parentName:"ol"},"In the ",(0,i.kt)("inlineCode",{parentName:"li"},"amount: Compact (BalanceOf)")," text field, enter the spend amount."),(0,i.kt)("li",{parentName:"ol"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"beneficiary: MultiAddress (AccountIdLookupOf)")," drop-down field will have ",(0,i.kt)("inlineCode",{parentName:"li"},"Id")," selected by\ndefault. Select the beneficiary from the ",(0,i.kt)("inlineCode",{parentName:"li"},"Id: AccountId")," drop-down field.")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Copy the ",(0,i.kt)("inlineCode",{parentName:"p"},"preimage hash"),' value before clicking the "Submit preimage" button.')),(0,i.kt)("ol",{start:7},(0,i.kt)("li",{parentName:"ol"},'Click the "Submit preimage" button.')),(0,i.kt)("p",null,"After the preimage is submitted successfully on-chain, Polkadot-JS UI lists it under the tab of\nGovernance -> Preimages."),(0,i.kt)("h3",{id:"submitting-a-proposal"},"Submitting a Proposal"),(0,i.kt)("p",null,'Submitting a proposal requires you to bond some tokens. On Polkadot-JS UI, you can navigate to the\nGovernance -> Referenda to make a new proposal. In order to submit a proposal, you will need to\nsubmit what\'s called the preimage hash. The preimage hash is simply the hash of the proposal to be\nenacted. The easiest way to get the preimage hash is by clicking on the "Submit preimage" button as\nshown in the previous section.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"submit proposal",src:a(31993).Z,width:"1936",height:"1118"})),(0,i.kt)("p",null,"The proposal will be registered from the account selected and the balance lock will be applied to\nit. An appropriate origin must be chosen, as each origin has different privileges, and acceptance\ncriteria. After entering the hash of the preimage for the proposal, the preimage length field is\nautomatically populated. The enactment delay can be specified either as a block number, or as a\nspecific number of blocks after the referendum is approved. The deposit for this proposal will be\nlocked for the referendum duration."),(0,i.kt)("h3",{id:"submitting-a-referendum-on-the-whitelisted-caller-track"},"Submitting a Referendum on the Whitelisted Caller Track"),(0,i.kt)("p",null,"Let's consider increasing the number of validators participating in parachain consensus. You could\n",(0,i.kt)("a",{parentName:"p",href:"#submitting-a-preimage"},"submit a preimage")," with the call that sets the number of validators to\n1,000 and submit a referendum to the Root track directly. However, this requires a large decision\ndeposit and has very conservative passing parameters such that it will probably need the entire\n28-day voting period to pass."),(0,i.kt)("p",null,"Operations that are deemed safe or time critical by the Polkadot Technical Fellowship can use the\nWhitelisted Caller track. This track requires less turnout in the first half of the decision period\nso that it can pass more quickly. This track is typically used for more neutral, technical proposals\nlike runtime upgrades or changing the system's parachain validation configuration."),(0,i.kt)("p",null,"Using the Whitelisted Caller track requires some special calls. Submitting a referendum in the same\nform as other tracks will not work. Namely, rather than voting on a particular ",(0,i.kt)("inlineCode",{parentName:"p"},"proposal"),", the\nWhitelisted Caller track requires a vote to ",(0,i.kt)("inlineCode",{parentName:"p"},"dispatch")," the ",(0,i.kt)("inlineCode",{parentName:"p"},"proposal")," via the Whitelist pallet.\nBefore opening a referendum on this track, you should also attempt to get a positive signal from the\nFellowship that they will whitelist the proposal. If they do not, then even if the public referendum\npasses, it will not execute."),(0,i.kt)("p",null,"Below are the steps to follow when submitting a proposal to the Whitelist track."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#submitting-a-preimage"},"Submit a preimage")," with the call to ",(0,i.kt)("em",{parentName:"li"},"dispatch")," the proposal (",(0,i.kt)("inlineCode",{parentName:"li"},"call"),") you\nwant to submit -- ",(0,i.kt)("inlineCode",{parentName:"li"},"whitelist.dispatchWhitelistedCallWithPreimage(call)")," -- and obtain the preimage\nhash. This is the preimage for the ",(0,i.kt)("em",{parentName:"li"},"public referendum")," on the Whitelisted Caller track.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"preimage-whitelist",src:a(80474).Z,width:"2146",height:"1113"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Obtain the hash of ",(0,i.kt)("inlineCode",{parentName:"p"},"call"),". The Polkadot Fellowship needs to start a Fellowship referendum to\nwhitelist the call with ",(0,i.kt)("inlineCode",{parentName:"p"},"whitelist.whitelistCall(callHash)"),". The Fellowship referendum gets voted\non by the Polkadot Fellowship members only."),(0,i.kt)("p",{parentName:"li"},(0,i.kt)("img",{alt:"call-hash",src:a(78249).Z,width:"2257",height:"858"}))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"The public now votes on the referendum. Someone must place a decision deposit to go into the\ndeciding phase.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Once passed, it gets enacted successfully as long as the call has been whitelisted by the\nFellowship."))),(0,i.kt)("p",null,"Note that the public referendum and Fellowship referendum can happen simultaneously. However, if the\nFellowship does not whitelist the call, you must submit it directly to the Root origin."),(0,i.kt)("h2",{id:"voting-on-referenda"},"Voting on Referenda"),(0,i.kt)("p",null,"As Polkadot OpenGov takes both the approval and support into account, there are four options to\nchoose from when voting on a referendum:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Aye"),(0,i.kt)("li",{parentName:"ul"},"Nay"),(0,i.kt)("li",{parentName:"ul"},"Split"),(0,i.kt)("li",{parentName:"ul"},"Abstain")),(0,i.kt)("p",null,"Also, you have to specify the conviction multiplier for this vote. The longer you are willing to\nlock your tokens, the stronger your vote will be weighted. Unwillingness to lock your tokens means\nthat your vote only counts for 10% of the tokens that you hold."),(0,i.kt)("p",null,"For detailed instructions on how to vote on Polkadot OpenGov referenda, check\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184120-polkadot-opengov-how-to-vote"},"this support guide.")),(0,i.kt)("admonition",{title:"Polkadot OpenGov uses Conviction Voting Pallet (Not Democracy Pallet)",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Use ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting.vote")," for voting on Referenda in Polkadot OpenGov instead of ",(0,i.kt)("inlineCode",{parentName:"p"},"democracy.vote"),"\n(which only works for the old version of governance).")),(0,i.kt)("h3",{id:"removing-votes"},"Removing Votes"),(0,i.kt)("p",null,"To remove votes, you need to use the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab")," and\ncall the ",(0,i.kt)("inlineCode",{parentName:"p"},"removeVote")," function through the ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting")," pallet."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rm-vote",src:a(28422).Z,width:"2388",height:"594"})),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"class")," is the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins"},"OpenGov track")," of the referendum you voted\non and the ",(0,i.kt)("inlineCode",{parentName:"p"},"index")," is the referendum number."),(0,i.kt)("h3",{id:"removing-expired-voting-locks"},"Removing Expired Voting Locks"),(0,i.kt)("p",null,"To remove an expired lock, you need to use the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics tab")," and call the ",(0,i.kt)("inlineCode",{parentName:"p"},"unlock")," function through\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting")," pallet. Note that if you voted on referenda in multiple tracks, the tokens\nwill be unlocked after removing votes and unlocking on all the tracks. Similarly, if you you\n",(0,i.kt)("a",{parentName:"p",href:"#delegations"},"delegated")," on multiple tracks, the funds will be unlocked after\n",(0,i.kt)("a",{parentName:"p",href:"#undelegate-votes"},"undelegating")," and unlocking on all the tracks."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rm-voting-lock",src:a(43577).Z,width:"2382",height:"684"})),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"class")," is the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins"},"OpenGov track")," where you have the lock."),(0,i.kt)("p",null,"For additional instructions, check\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184129-polkadot-js-ui-how-to-remove-expired-referenda-locks"},"this support guide.")),(0,i.kt)("h2",{id:"delegations"},"Delegations"),(0,i.kt)("admonition",{title:"Video Tutorial about Delegations using the Polkadot-JS UI",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/PNGs11EvCB0"},"this video tutorial")," to learn about how to delegate, modify\ndelegations and remove delegations using the Polkadot-JS UI.")),(0,i.kt)("p",null,"For an overview of how delegation works in Polkadot OpenGov, check out the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#multirole-delegation"},"Multirole Delegation")," section on the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Learn Polkadot OpenGov")," page."),(0,i.kt)("p",null,"Instructions to do delegations with Polkadot-JS are also available on the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184776-polkadot-js-ui-how-to-delegate-your-voting-power-on-polkadot-opengov"},"Support Pages"),"."),(0,i.kt)("h3",{id:"delegate-votes"},"Delegate Votes"),(0,i.kt)("p",null,'You can start delegating your votes by clicking the "Delegate" button on\n',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-start",src:a(90691).Z,width:"1055",height:"497"})),(0,i.kt)("p",null,"If it is the first time you delegate or vote, there will be a banner message. You can delegate on a\nsingle track or all the tracks. You have an option to specify the number of votes (i.e., the number\nof tokens) and the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#voluntary-locking"},"conviction multiplier"),'. After\nclicking "Next", you will need to specify the account to delegate your votes to, and after clicking\n"Delegate" and "Sign and Submit" your delegations will appear for each track (see below).'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-allTracks",src:a(62428).Z,width:"2116",height:"1438"})),(0,i.kt)("p",null,"Note that if you want to delegate just a few tracks, you have two options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'Repeat the process using the "Delegate" button multiple times'),(0,i.kt)("li",{parentName:"ul"},"Issue a batch call with multiple ",(0,i.kt)("inlineCode",{parentName:"li"},"convictionVoting.delegate")," extrinsics under\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics"))),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-delegate",src:a(54853).Z,width:"2694",height:"1104"})),(0,i.kt)("p",null,'By clicking on "Add item" you can add new extrinsics for multiple tracks.'),(0,i.kt)("h3",{id:"undelegate-votes"},"Undelegate Votes"),(0,i.kt)("p",null,'The "Delegate" button on ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda")," is only\nfor delegating votes. You cannot undelegate or modify your delegations. If you wish to undelegate,\nyou will need to go to ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics")," and\nsubmit a ",(0,i.kt)("inlineCode",{parentName:"p"},"convictionVoting.undelegate")," extrinsic, specifying the track you wish to undelegate."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-undelegate",src:a(9459).Z,width:"2708",height:"632"})),(0,i.kt)("p",null,'Undelegated tracks will show up as "0 votes" on the Delegate tab.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"js-delegation-undelegate",src:a(93996).Z,width:"2128",height:"1432"})),(0,i.kt)("p",null,"After you undelegated, the conviction lock will start the countdown, and your funds will be\navailable for unlocking after the countdown ends."),(0,i.kt)("h3",{id:"remove-expired-locks-from-delegations"},"Remove Expired Locks from Delegations"),(0,i.kt)("p",null,"To remove expired locks from delegations, you can\n",(0,i.kt)("a",{parentName:"p",href:"#removing-expired-voting-locks"},"follow the same procedure as how to remove expired voting locks"),"."),(0,i.kt)("h3",{id:"modify-your-delegations"},"Modify your Delegations"),(0,i.kt)("p",null,'The "Delegate" button on ',(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda")," is only\nfor delegating votes. You cannot undelegate or modify your delegations. If you wish to update the\ndelegated account, the conviction, and the number of votes you will need to go to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Developer > Extrinsics"),", ",(0,i.kt)("a",{parentName:"p",href:"#undelegate-votes"},"undelegate"),"\nthe track and ",(0,i.kt)("a",{parentName:"p",href:"#delegate-votes"},"delegate")," again with updated information."),(0,i.kt)("h2",{id:"claiming-opengov-deposits"},"Claiming OpenGov Deposits"),(0,i.kt)("admonition",{title:"Video Tutorial about OpenGov deposits using the Polkadot-JS UI",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/kkEq5cqW2Pk"},"this video tutorial")," to learn about how to claim OpenGov deposits\nusing the Polkadot-JS UI.")),(0,i.kt)("h3",{id:"claiming-the-preimage-and-decision-deposits"},"Claiming the Preimage and Decision Deposits"),(0,i.kt)("p",null,"After a referendum finishes its life cycle (and gets approved or rejected or timed out), the\npreimage and decision deposits can be claimed. For claiming the preimage deposit, navigate to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/preimages"},"Polkadot-JS UI > Governance > Preimages")," and click on\nunnote button shown on the preimage you submitted."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Claim Preimage Deposit",src:a(80560).Z,width:"2828",height:"362"})),(0,i.kt)("p",null,"Similarly, to claim the decision deposit, navigate to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda")," and scroll down\nto the end of the page to click on the referenda with the decision deposit and claim it."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Claim Referendum Deposits",src:a(62248).Z,width:"2830",height:"444"})),(0,i.kt)("h3",{id:"claiming-the-referendum-submission-deposit"},"Claiming the Referendum Submission Deposit"),(0,i.kt)("p",null,"The submission deposit for a referendum can be claimed\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/cfb29254f74412cea35e8048d8aea94bc789fcb1/substrate/frame/referenda/src/types.rs#L261"},"only if the referendum was ",(0,i.kt)("inlineCode",{parentName:"a"},"Approved")," or ",(0,i.kt)("inlineCode",{parentName:"a"},"Canceled")),".\nThe submission deposit can be claimed by issuing the ",(0,i.kt)("inlineCode",{parentName:"p"},"refundSubmissionDeposit")," extrinsic."),(0,i.kt)("p",null,"Users can not refund their submission deposit while the referendum is ",(0,i.kt)("inlineCode",{parentName:"p"},"Ongoing")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"Rejected"),".\nSimilarly, users cannot refund their submission deposit if the proposal has ",(0,i.kt)("inlineCode",{parentName:"p"},"TimedOut")," (failing to\nsubmit the decision deposit within a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"const.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\nperiod will lead to a referendum timeout). This behavior exists so that users can refrain from\nspamming the chain with proposals that have no interest from the community. If a proposal is in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"TimedOut")," state, any user can call ",(0,i.kt)("inlineCode",{parentName:"p"},"slash_proposal_deposit"),", which will move the funds from the\nuser to a runtime-configured account, like the treasury."),(0,i.kt)("p",null,"To refund your slashed deposit, you can start a new referendum and specifically request a refund\nfrom the treasury. You need to make sure you have enough balance for a new submission and decision\ndeposit, and you will need to select the right track to ask for a refund. For example, the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#small-tipper"},"Small Tipper Track")," would be fine for any kind of\ndeposit refund up to 250 DOT."),(0,i.kt)("h2",{id:"cancel-or-kill-a-referendum"},"Cancel or Kill a Referendum"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Anybody can cancel an ongoing referendum (i.e., a referendum within the Lead-in or\nvoting/confirmation period). For more information about the referenda timeline in Polkadot OpenGov,\nsee the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#referenda-timeline"},"dedicated page"),"."),(0,i.kt)("p",{parentName:"admonition"},"To successfully cancel a referendum through the track ",(0,i.kt)("inlineCode",{parentName:"p"},"20 / Referendum Canceller"),", you will need to\nattain\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#referendum-canceller"},"specific approval and support levels"),".")),(0,i.kt)("p",null,"To cancel a referendum, you need first to submit a preimage with the ",(0,i.kt)("inlineCode",{parentName:"p"},"referenda.cancel")," extrinsic.\nGo to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda"),' and\nclick on the "Add Preimage" button. You must specify the ',(0,i.kt)("inlineCode",{parentName:"p"},"referenda.cancel")," extrinsic with the index\nequal to the ongoing Referendum you wish to cancel. In the screenshot below, the Referendum to be\ncancelled is 249."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-preimage-creation",src:a(78996).Z,width:"2144",height:"944"})),(0,i.kt)("p",null,"This call will cancel the referendum and return the deposit. You can also kill a referendum using\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"referenda.kill")," extrinsic. This will cancel the referendum and slash the deposit."),(0,i.kt)("admonition",{title:"Preimage Submission Deposit",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"A deposit is required for the preimage to be stored on chain. The preimage deposit is proportional\nto the amount of information stored within the preimage. The deposit amount required for a preimage\nwith a treasury spend transaction is around\n41 DOT. Ensure you have enough account\nbalance to pay for this submission deposit as well as the transaction fees.")),(0,i.kt)("p",null,"Once a preimage is submitted, it can be checked under\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/preimages"},"Governance > Preimages"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-preimage-check",src:a(16212).Z,width:"2758",height:"190"})),(0,i.kt)("p",null,"You must copy the preimage to use it when you submit your proposal. To submit the proposal to cancel\nreferendum 249, for example, you need to go under\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"Governance > Referenda"),' and click the "Submit Proposal"\nbutton.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cancel-referenda-proposal",src:a(81405).Z,width:"2130",height:"1226"})),(0,i.kt)("p",null,"You must specify the account to submit the proposal (this can differ from the account used to create\nthe preimage). Then you will need to specify the track ",(0,i.kt)("inlineCode",{parentName:"p"},"20 / Referendum Canceller")," and add the\npreimage hash containing the specific action that will be enacted if the referendum passes. Note\nthat a submission deposit of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.referenda.submissionDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"","\nwill be reserved for submitting the proposal."),(0,i.kt)("p",null,"Once the proposal has been submitted, it will stay in the Lead-in period until there is enough space\nwithin the track, and a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#polkadot-opengov-terminology-and-parameters"},"track-dependent preparation period and decision deposit"),"\nhave been met. Failing to submit the decision deposit within a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\nperiod will lead to a referendum timeout."))}k.isMDXComponent=!0},16212:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-preimage-check-45ef7f984450113a2b1a87e9e2751d69.png"},78996:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-preimage-creation-3923463db47aec298f74a426dba23166.png"},81405:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/cancel-referenda-proposal-b9c5e90784ec8216360053d8bda84980.png"},80560:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/claim-preimage-deposit-069843b91eba35d4829b237b59ab2d12.png"},62248:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/claim-referendum-decision-deposit-6352bbad189dac6fe7a651b5a3c8f5a5.png"},78249:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/encoded-call-hash-4e0347923993beea4d12d5a787649f8f.png"},80474:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-preimage-whitelist-67d383745b6e7b3ef31a37567e044e80.png"},10579:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-preimage-ddb9c9c348a6c169f24bf70b9439712e.png"},31993:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/opengov-submit-proposal-0c82b35f3f7b1d9e66130a621b76c44b.png"},62428:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-allTracks-788efa580f296aa78b65b77691570181.png"},54853:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-delegate-3bcce735bcc35b831079cd44ad0eef15.png"},90691:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-start-c8186f8875fd402b993abfd5ab09f515.png"},9459:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-undelegate-a5018d2ecd2d5523f711199cd6fa1e63.png"},93996:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/js-delegation-undelegated-9b5efde53d2016c4e4b1f0f6b651ecf5.png"},28422:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/rm-vote-8572ff30a00c8d6fe903fae7a39147f4.png"},43577:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/rm-voting-lock-214119c2fcfe92488190b321cdfe823a.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/c8dd560b.54b67c94.js b/assets/js/c8dd560b.54b67c94.js new file mode 100644 index 000000000000..cab432c7482b --- /dev/null +++ b/assets/js/c8dd560b.54b67c94.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[3978],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>d});var n=a(74165),o=a(15861),r=a(67294),i=a(87152),s=a(14741),p=a(67425);function u(e,t,a){return l.apply(this,arguments)}function l(){return(l=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var r,p,u,l,c;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,p=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return u=new i.U(r),e.next=21,s.G.create({provider:u});case 21:l=e.sent,(c=a.split(".")).forEach((function(e){e in l&&(l=l[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return p=l.toString(),e.abrupt("break",35);case 29:return e.next=31,l();case 31:return p=(p=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",p);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,a,n){switch(t){case"humanReadable":(0,p.HumanReadable)(e,a,n);break;case"precise":(0,p.Precise)(e,a,n);break;case"blocksToDays":(0,p.BlocksToDays)(e,n);break;case"erasToDays":(0,p.ErasToDays)(e,n,a);break;case"percentage":(0,p.Percentage)(e,n);break;case"permillToPercent":(0,p.PermillToPercent)(e,n);break;case"arrayLength":(0,p.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const d=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,p=void 0===s?void 0:s,l=(0,r.useState)(""),d=l[0],m=l[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==p?c(i.toString(),p,t,m):m(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,n.Z)().mark((function e(){var o;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,a,m);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==p?c(o,p,t,m):m(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),d}},67425:e=>{var t="polkadot",a="kusama",n="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var p=void 0;if(i===t||i===o)p=3;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");p=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(p)+" "+r[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},82651:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>h,frontMatter:()=>s,metadata:()=>u,toc:()=>c});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),i=(a(47940),["components"]),s={id:"learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",sidebar_label:"Pure Proxy Guides",description:"Polkadot-JS Guides about Pure Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy","pure proxy","anonymous proxy"],slug:"../learn-guides-accounts-proxy-pure"},p=void 0,u={unversionedId:"learn/learn-guides-accounts-proxy-pure",id:"learn/learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",description:"Polkadot-JS Guides about Pure Proxy Accounts",source:"@site/../docs/learn/learn-guides-accounts-proxy-pure.md",sourceDirName:"learn",slug:"/learn-guides-accounts-proxy-pure",permalink:"/docs/learn-guides-accounts-proxy-pure",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-proxy-pure.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",sidebar_label:"Pure Proxy Guides",description:"Polkadot-JS Guides about Pure Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy","pure proxy","anonymous proxy"],slug:"../learn-guides-accounts-proxy-pure"},sidebar:"docs",previous:{title:"Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy"},next:{title:"Transfer Guides",permalink:"/docs/learn-guides-transfers"}},l={},c=[{value:"Create and Remove Pure Proxies with Polkadot-JS",id:"create-and-remove-pure-proxies-with-polkadot-js",level:2},{value:"Advanced Account Management with Pure Proxies",id:"advanced-account-management-with-pure-proxies",level:2},{value:"Pure Proxies and Multisigs",id:"pure-proxies-and-multisigs",level:2},{value:"Scenario One: One Pure Proxy within a Multisig",id:"scenario-one-one-pure-proxy-within-a-multisig",level:3},{value:"Scenario Two: Multisig made of Pure Proxies",id:"scenario-two-multisig-made-of-pure-proxies",level:3},{value:"Scenario Three: Multisig controlling a Pure Proxy",id:"scenario-three-multisig-controlling-a-pure-proxy",level:3}],d={toc:c},m="wrapper";function h(e){var t=e.components,s=(0,o.Z)(e,i);return(0,r.kt)(m,(0,n.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("admonition",{title:"The Account Tab in the Polkadot-JS UI cannot handle complex proxy setups",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The Accounts Tab in the Polkadot-JS UI cannot handle complex proxy setups (e.g. a proxy -> multisig\n-> a pure proxy which is part of another multisig). These complex setups must be done using the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics Tab")," directly."),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"We recommend to use the ",(0,r.kt)("a",{parentName:"strong",href:"/docs/learn-DOT#getting-tokens-on-the-westend-testnet"},"Westend Testnet")," if\nyou are testing features for the first time.")," By performing the complex proxy setups on the\ntestnet, you can comfortably replicate the procedure on the main networks.")),(0,r.kt)("admonition",{title:"Risk of loss of funds",type:"danger"},(0,r.kt)("p",{parentName:"admonition"},"Read carefully the text below and before performing any action using anonymous proxies on\nPolkadot, experiment on the Westend testnet.")),(0,r.kt)("h2",{id:"create-and-remove-pure-proxies-with-polkadot-js"},"Create and Remove Pure Proxies with Polkadot-JS"),(0,r.kt)("p",null,"To create a ",(0,r.kt)("strong",{parentName:"p"},"pure proxy")," see\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182196"},"this support article"),", or\nwatch ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T443RcCYP24"},"this technical explainer video"),"."),(0,r.kt)("admonition",{title:"Removing Pure Proxies",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The procedure for removing a ",(0,r.kt)("em",{parentName:"p"},"pure"),' proxy is different from the one used to remove other proxies.\nVisit the section "Removing an Anonymous Proxy" on\n',(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182196"},"this support article"),", or\nwatch ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T443RcCYP24"},"this technical explainer video"),".")),(0,r.kt)("p",null,"Learn more about pure proxies from our\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=YkYApbhU3i0"},"technical explainer video"),"."),(0,r.kt)("h2",{id:"advanced-account-management-with-pure-proxies"},"Advanced Account Management with Pure Proxies"),(0,r.kt)("admonition",{title:"Walk-through tutorial video of Account Management",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=YkYApbhU3i0"},"this video tutorial")," that goes through the\nexample below. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"Let's take for example 3 accounts belonging to Charlie, Dan and Eleanor working for Company X.\nCharlie holds funds belonging to Company X, but he wants to leave the company and transfer the\neconomic responsibility to Eleanor. Dan is a staking proxy of Charlie."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Without ",(0,r.kt)("em",{parentName:"strong"},"Pure")," Proxy"),", Charlie must (see ",(0,r.kt)("em",{parentName:"p"},"left")," side of the Figure below):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Remove Dan as a staking proxy, this step requires 1 signature"),(0,r.kt)("li",{parentName:"ul"},"Stop nominating and unbound all funds , this step requires 2 signatures"),(0,r.kt)("li",{parentName:"ul"},"Transfer the funds to Eleanor, this step requires 1 signature")),(0,r.kt)("p",null,"Then Eleanor adds Dan as a staking proxy (1 signature). The whole process requires 5 signatures.\nHere we are presenting a simple example, in fact, with multi-signature accounts and multiple proxies\nthe procedure would be more time-consuming and labor-intensive."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"why anonymous proxies",src:a(9518).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"With ",(0,r.kt)("em",{parentName:"strong"},"Pure")," Proxy")," (see ",(0,r.kt)("em",{parentName:"p"},"right")," side of the Figure above), Charlie must add Eleanor as ",(0,r.kt)("em",{parentName:"p"},"any"),"\nproxy of the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, and remove himself (or Eleanor can remove him). The process requires just\n2 signatures (1 signature to add the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy and 1 signature the remove the old one). The\nfunds remain in the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, and it is not necessary to stop nominating or unbond funds. Also,\nany proxy relationships with the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy stay in place. Thus, if we use the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, with\nan increasing number of proxies we will always have to sign twice (not necessarily true in\nmulti-signature accounts). While if we are not using the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, the more the proxies the more\nsignatures we need to detach them from the old stash and attach them to the new stash (see Figure\nbelow)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"anon vs stash plot",src:a(78618).Z,width:"1920",height:"800"})),(0,r.kt)("h2",{id:"pure-proxies-and-multisigs"},"Pure Proxies and Multisigs"),(0,r.kt)("h3",{id:"scenario-one-one-pure-proxy-within-a-multisig"},"Scenario One: One Pure Proxy within a Multisig"),(0,r.kt)("admonition",{title:"Walk-through tutorial video",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=iGRoGstB_pQ"},"this video tutorial")," that goes through\nthis scenario. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"It is possible to put a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy within a multisig, and then transactions will be signed by the\n",(0,r.kt)("em",{parentName:"p"},"any")," proxy on behalf of the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy (proxied account). Let's take for example the diagram\nbelow. Alice, Bob and Anon are part of the multisig ABC, a multisig account with threshold 2. P-C is\na ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy spawned by Charlie, who now acts as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy and thus signs anything on behalf of\nP-C. The ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy cannot sign directly because it does not have a private key. So, for example,\nto send funds from the multisig to Dan, Charly needs to submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to P-C,\nwhich in turn will submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic to ABC containing the call data for the\n",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the transfer of some funds from ABC to Dan. Alice can\nthen approve the transfer by submitting a ",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic also containing the call data\nfor the ",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the transfer of some funds from ABC to Dan."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with one anon",src:a(19372).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"If Charly wants to leave the multisig, a new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy can be added to P-C and Charly can be\nremoved (by himself or by the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy). Note that the multisig also contains Bob that in\nthis specific example does not do anything."),(0,r.kt)("admonition",{title:"Proxy calls",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"To use a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy within a multisig you need to use the Extrinsic Tab and generate a\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic. If you try to sign a multisig transaction using the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy you will\nbe prompted with a warning. Remember, you cannot sign something directly if you do not have a\nprivate key.")),(0,r.kt)("h3",{id:"scenario-two-multisig-made-of-pure-proxies"},"Scenario Two: Multisig made of Pure Proxies"),(0,r.kt)("admonition",{title:"Walk-through Tutorial Video",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=F82C3zDNJyk"},"this video tutorial")," that goes through\nthis scenario. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"The diagram below shows a multisig that is made only with ",(0,r.kt)("em",{parentName:"p"},"pure")," proxies (P-A, P-B and P-C). In this\nsituation Alice, Bob or Charly can leave the multisig at any time without the requirement of\ncreating a new multisig. If for example, Bob leaves the multisig the procedure will require somebody\nelse to be added as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy to P-B, and then Bob can remove himself (or the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy can\nremove Bob)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with anons",src:a(58047).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"In the diagram above, Alice submits the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to P-A, which in turn submits the\n",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic containing the ",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the\ntransfer of some tokens from ABC to Dan. Then, Charly does the same to confirm the transaction. Note\nthat Charly will need to pay for some weight, for the computation that is necessary to execute the\ntransaction."),(0,r.kt)("h3",{id:"scenario-three-multisig-controlling-a-pure-proxy"},"Scenario Three: Multisig controlling a Pure Proxy"),(0,r.kt)("p",null,"This setup is used by the ",(0,r.kt)("a",{parentName:"p",href:"/docs/multisig-apps#multix"},"MultiX")," tool."),(0,r.kt)("p",null,"After its creation, a multi-signature account creates a pure proxy that becomes the proxied account.\nThe multi-signature account behaves as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of the pure. If signatories of the\nmulti-signature account change, a new multisig can be created, assigned as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of the pure,\nand then the old multisig can be removed as a proxy."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with pure",src:a(5348).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"Compared to ",(0,r.kt)("a",{parentName:"p",href:"#scenario-two-multisig-made-of-pure-proxies"},"Scenario Two"),", signatories do not need to\ncreate pure proxies here. Multisig controlling a Pure Proxy is a more practical solution, where the\nsignatories, number of signatories and/or the threshold can be changed, which changes the multisig\naddress but does not impact the pure proxy address. In Scenario Two, if signatories behind the pure\nproxies change, the address of the multisig stays the same. However, changing the number of\nsignatories and threshold would not be possible."))}h.isMDXComponent=!0},78618:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/anon-vs-stash-plot-fa8f730710dbf5cbec2d7db43d5d962d.png"},58047:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-anons-209a0f481e6a13ed943a952be07e1a75.png"},19372:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-one-anon-b8bb0a5183fbdc1d1809d4cd58489ab4.png"},5348:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-pure-684efe47eba1ab52cd41218daf674357.png"},9518:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/why-anon-proxy-48fc32ddd2da9a5e9342554c68372d98.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/c8dd560b.741f4575.js b/assets/js/c8dd560b.741f4575.js deleted file mode 100644 index 338b12e4f549..000000000000 --- a/assets/js/c8dd560b.741f4575.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[3978],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>d});var n=a(74165),o=a(15861),r=a(67294),i=a(87152),s=a(14741),p=a(67425);function u(e,t,a){return l.apply(this,arguments)}function l(){return(l=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var r,p,u,l,c;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,p=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return u=new i.U(r),e.next=21,s.G.create({provider:u});case 21:l=e.sent,(c=a.split(".")).forEach((function(e){e in l&&(l=l[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return p=l.toString(),e.abrupt("break",35);case 29:return e.next=31,l();case 31:return p=(p=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",p);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,a,n){switch(t){case"humanReadable":(0,p.HumanReadable)(e,a,n);break;case"precise":(0,p.Precise)(e,a,n);break;case"blocksToDays":(0,p.BlocksToDays)(e,n);break;case"erasToDays":(0,p.ErasToDays)(e,n,a);break;case"percentage":(0,p.Percentage)(e,n);break;case"permillToPercent":(0,p.PermillToPercent)(e,n);break;case"arrayLength":(0,p.ArrayLength)(e,n);break;default:return void console.log("Ignoring unknown filter type")}}const d=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,p=void 0===s?void 0:s,l=(0,r.useState)(""),d=l[0],m=l[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==p?c(i.toString(),p,t,m):m(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,o.Z)((0,n.Z)().mark((function e(){var o;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,a,m);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==p?c(o,p,t,m):m(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),d}},67425:e=>{var t="polkadot",a="kusama",n="statemine",o="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var p=void 0;if(i===t||i===o)p=3;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");p=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(p)+" "+r[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},82651:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>h,frontMatter:()=>s,metadata:()=>u,toc:()=>c});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),i=(a(47940),["components"]),s={id:"learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",sidebar_label:"Pure Proxy Guides",description:"Polkadot-JS Guides about Pure Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy","pure proxy","anonymous proxy"],slug:"../learn-guides-accounts-proxy-pure"},p=void 0,u={unversionedId:"learn/learn-guides-accounts-proxy-pure",id:"learn/learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",description:"Polkadot-JS Guides about Pure Proxy Accounts",source:"@site/../docs/learn/learn-guides-accounts-proxy-pure.md",sourceDirName:"learn",slug:"/learn-guides-accounts-proxy-pure",permalink:"/docs/learn-guides-accounts-proxy-pure",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-proxy-pure.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-accounts-proxy-pure",title:"Polkadot-JS Guides about Pure Proxy Accounts",sidebar_label:"Pure Proxy Guides",description:"Polkadot-JS Guides about Pure Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy","pure proxy","anonymous proxy"],slug:"../learn-guides-accounts-proxy-pure"},sidebar:"docs",previous:{title:"Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy"},next:{title:"Transfer Guides",permalink:"/docs/learn-guides-transfers"}},l={},c=[{value:"Create and Remove Pure Proxies with Polkadot-JS",id:"create-and-remove-pure-proxies-with-polkadot-js",level:2},{value:"Advanced Account Management with Pure Proxies",id:"advanced-account-management-with-pure-proxies",level:2},{value:"Pure Proxies and Multisigs",id:"pure-proxies-and-multisigs",level:2},{value:"Scenario One: One Pure Proxy within a Multisig",id:"scenario-one-one-pure-proxy-within-a-multisig",level:3},{value:"Scenario Two: Multisig made of Pure Proxies",id:"scenario-two-multisig-made-of-pure-proxies",level:3},{value:"Scenario Three: Multisig controlling a Pure Proxy",id:"scenario-three-multisig-controlling-a-pure-proxy",level:3}],d={toc:c},m="wrapper";function h(e){var t=e.components,s=(0,o.Z)(e,i);return(0,r.kt)(m,(0,n.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("admonition",{title:"The Account Tab in the Polkadot-JS UI cannot handle complex proxy setups",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The Accounts Tab in the Polkadot-JS UI cannot handle complex proxy setups (e.g. a proxy -> multisig\n-> a pure proxy which is part of another multisig). These complex setups must be done using the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsics Tab")," directly."),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"We recommend to use the ",(0,r.kt)("a",{parentName:"strong",href:"/docs/learn-DOT#getting-tokens-on-the-westend-testnet"},"Westend Testnet")," if\nyou are testing features for the first time.")," By performing the complex proxy setups on the\ntestnet, you can comfortably replicate the procedure on the main networks.")),(0,r.kt)("admonition",{title:"Risk of loss of funds",type:"danger"},(0,r.kt)("p",{parentName:"admonition"},"Read carefully the text below and before performing any action using anonymous proxies on\nPolkadot, experiment on the Westend testnet.")),(0,r.kt)("h2",{id:"create-and-remove-pure-proxies-with-polkadot-js"},"Create and Remove Pure Proxies with Polkadot-JS"),(0,r.kt)("p",null,"To create a ",(0,r.kt)("strong",{parentName:"p"},"pure proxy")," see\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182196"},"this support article"),", or\nwatch ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T443RcCYP24"},"this technical explainer video"),"."),(0,r.kt)("admonition",{title:"Removing Pure Proxies",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The procedure for removing a ",(0,r.kt)("em",{parentName:"p"},"pure"),' proxy is different from the one used to remove other proxies.\nVisit the section "Removing an Anonymous Proxy" on\n',(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182196"},"this support article"),", or\nwatch ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=T443RcCYP24"},"this technical explainer video"),".")),(0,r.kt)("p",null,"Learn more about pure proxies from our\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=YkYApbhU3i0"},"technical explainer video"),"."),(0,r.kt)("h2",{id:"advanced-account-management-with-pure-proxies"},"Advanced Account Management with Pure Proxies"),(0,r.kt)("admonition",{title:"Walk-through tutorial video of Account Management",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=YkYApbhU3i0"},"this video tutorial")," that goes through the\nexample below. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"Let's take for example 3 accounts belonging to Charlie, Dan and Eleanor working for Company X.\nCharlie holds funds belonging to Company X, but he wants to leave the company and transfer the\neconomic responsibility to Eleanor. Dan is a staking proxy of Charlie."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Without ",(0,r.kt)("em",{parentName:"strong"},"Pure")," Proxy"),", Charlie must (see ",(0,r.kt)("em",{parentName:"p"},"left")," side of the Figure below):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Remove Dan as a staking proxy, this step requires 1 signature"),(0,r.kt)("li",{parentName:"ul"},"Stop nominating and unbound all funds , this step requires 2 signatures"),(0,r.kt)("li",{parentName:"ul"},"Transfer the funds to Eleanor, this step requires 1 signature")),(0,r.kt)("p",null,"Then Eleanor adds Dan as a staking proxy (1 signature). The whole process requires 5 signatures.\nHere we are presenting a simple example, in fact, with multi-signature accounts and multiple proxies\nthe procedure would be more time-consuming and labor-intensive."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"why anonymous proxies",src:a(9518).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"With ",(0,r.kt)("em",{parentName:"strong"},"Pure")," Proxy")," (see ",(0,r.kt)("em",{parentName:"p"},"right")," side of the Figure above), Charlie must add Eleanor as ",(0,r.kt)("em",{parentName:"p"},"any"),"\nproxy of the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, and remove himself (or Eleanor can remove him). The process requires just\n2 signatures (1 signature to add the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy and 1 signature the remove the old one). The\nfunds remain in the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, and it is not necessary to stop nominating or unbond funds. Also,\nany proxy relationships with the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy stay in place. Thus, if we use the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, with\nan increasing number of proxies we will always have to sign twice (not necessarily true in\nmulti-signature accounts). While if we are not using the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, the more the proxies the more\nsignatures we need to detach them from the old stash and attach them to the new stash (see Figure\nbelow)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"anon vs stash plot",src:a(78618).Z,width:"1920",height:"800"})),(0,r.kt)("h2",{id:"pure-proxies-and-multisigs"},"Pure Proxies and Multisigs"),(0,r.kt)("h3",{id:"scenario-one-one-pure-proxy-within-a-multisig"},"Scenario One: One Pure Proxy within a Multisig"),(0,r.kt)("admonition",{title:"Walk-through tutorial video",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=iGRoGstB_pQ"},"this video tutorial")," that goes through\nthis scenario. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"It is possible to put a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy within a multisig, and then transactions will be signed by the\n",(0,r.kt)("em",{parentName:"p"},"any")," proxy on behalf of the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy (proxied account). Let's take for example the diagram\nbelow. Alice, Bob and Anon are part of the multisig ABC, a multisig account with threshold 2. P-C is\na ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy spawned by Charlie, who now acts as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy and thus signs anything on behalf of\nP-C. The ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy cannot sign directly because it does not have a private key. So, for example,\nto send funds from the multisig to Dan, Charly needs to submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to P-C,\nwhich in turn will submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic to ABC containing the call data for the\n",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the transfer of some funds from ABC to Dan. Alice can\nthen approve the transfer by submitting a ",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic also containing the call data\nfor the ",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the transfer of some funds from ABC to Dan."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with one anon",src:a(19372).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"If Charly wants to leave the multisig, a new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy can be added to P-C and Charly can be\nremoved (by himself or by the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy). Note that the multisig also contains Bob that in\nthis specific example does not do anything."),(0,r.kt)("admonition",{title:"Proxy calls",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"To use a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy within a multisig you need to use the Extrinsic Tab and generate a\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic. If you try to sign a multisig transaction using the ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy you will\nbe prompted with a warning. Remember, you cannot sign something directly if you do not have a\nprivate key.")),(0,r.kt)("h3",{id:"scenario-two-multisig-made-of-pure-proxies"},"Scenario Two: Multisig made of Pure Proxies"),(0,r.kt)("admonition",{title:"Walk-through Tutorial Video",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can see ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=F82C3zDNJyk"},"this video tutorial")," that goes through\nthis scenario. The tutorial requires some familiarity with the Extrinsic Tab of the Polkadot-JS UI.")),(0,r.kt)("p",null,"The diagram below shows a multisig that is made only with ",(0,r.kt)("em",{parentName:"p"},"pure")," proxies (P-A, P-B and P-C). In this\nsituation Alice, Bob or Charly can leave the multisig at any time without the requirement of\ncreating a new multisig. If for example, Bob leaves the multisig the procedure will require somebody\nelse to be added as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy to P-B, and then Bob can remove himself (or the new ",(0,r.kt)("em",{parentName:"p"},"any")," proxy can\nremove Bob)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with anons",src:a(58047).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"In the diagram above, Alice submits the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to P-A, which in turn submits the\n",(0,r.kt)("inlineCode",{parentName:"p"},"multisig.asMulti")," extrinsic containing the ",(0,r.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," extrinsic about the\ntransfer of some tokens from ABC to Dan. Then, Charly does the same to confirm the transaction. Note\nthat Charly will need to pay for some weight, for the computation that is necessary to execute the\ntransaction."),(0,r.kt)("h3",{id:"scenario-three-multisig-controlling-a-pure-proxy"},"Scenario Three: Multisig controlling a Pure Proxy"),(0,r.kt)("p",null,"This setup is used by the ",(0,r.kt)("a",{parentName:"p",href:"/docs/multisig-apps#multix"},"MultiX")," tool."),(0,r.kt)("p",null,"After its creation, a multi-signature account creates a pure proxy that becomes the proxied account.\nThe multi-signature account behaves as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of the pure. If signatories of the\nmulti-signature account change, a new multisig can be created, assigned as ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of the pure,\nand then the old multisig can be removed as a proxy."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"multisig with pure",src:a(5348).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"Compared to ",(0,r.kt)("a",{parentName:"p",href:"#scenario-two-multisig-made-of-pure-proxies"},"Scenario Two"),", signatories do not need to\ncreate pure proxies here. Multisig controlling a Pure Proxy is a more practical solution, where the\nsignatories, number of signatories and/or the threshold can be changed, which changes the multisig\naddress but does not impact the pure proxy address. In Scenario Two, if signatories behind the pure\nproxies change, the address of the multisig stays the same. However, changing the number of\nsignatories and threshold would not be possible."))}h.isMDXComponent=!0},78618:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/anon-vs-stash-plot-fa8f730710dbf5cbec2d7db43d5d962d.png"},58047:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-anons-209a0f481e6a13ed943a952be07e1a75.png"},19372:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-one-anon-b8bb0a5183fbdc1d1809d4cd58489ab4.png"},5348:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/multisig-with-pure-684efe47eba1ab52cd41218daf674357.png"},9518:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/why-anon-proxy-48fc32ddd2da9a5e9342554c68372d98.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/cb9afd28.5590c4d6.js b/assets/js/cb9afd28.3bcf28bf.js similarity index 60% rename from assets/js/cb9afd28.5590c4d6.js rename to assets/js/cb9afd28.3bcf28bf.js index 87ce787cc9c6..e29d0b1dce6e 100644 --- a/assets/js/cb9afd28.5590c4d6.js +++ b/assets/js/cb9afd28.3bcf28bf.js @@ -1 +1 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[3643],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var r=a(74165),n=a(15861),o=a(67294),i=a(87152),s=a(14741),l=a(67425);function u(e,t,a){return c.apply(this,arguments)}function c(){return(c=(0,n.Z)((0,r.Z)().mark((function e(t,a,n){var o,l,u,c,d;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){e.next=18;break}return e.abrupt("return");case 18:return u=new i.U(o),e.next=21,s.G.create({provider:u});case 21:c=e.sent,(d=a.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,a,r){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,r);break;case"precise":(0,l.Precise)(e,a,r);break;case"blocksToDays":(0,l.BlocksToDays)(e,r);break;case"erasToDays":(0,l.ErasToDays)(e,r,a);break;case"percentage":(0,l.Percentage)(e,r);break;case"permillToPercent":(0,l.PermillToPercent)(e,r);break;case"arrayLength":(0,l.ArrayLength)(e,r);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,c=(0,o.useState)(""),p=c[0],m=c[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?d(i.toString(),l,t,m):m(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var e=(0,n.Z)((0,r.Z)().mark((function e(){var n;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,a,m);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(n,l,t,m):m(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(s){console.log(s)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",r="statemine",n="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===n)l=3;else{if(i!==a&&i!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/o[i].precision)?e/o[i].precision+" "+o[i].symbol:(e/o[i].precision).toFixed(l)+" "+o[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/o[t].precision+" "+o[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,o,i){var s=void 0;if(i===t||i===n)s=1;else{if(i!==a&&i!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}o((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},52991:(e,t,a)=>{"use strict";a.d(t,{Z:()=>b});var r=a(67294),n=a(86010),o=a(53438),i=a(39960),s=a(13919),l=a(95999);const u={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function c(e){var t=e.href,a=e.children;return r.createElement(i.Z,{href:t,className:(0,n.Z)("card padding--lg",u.cardContainer)},a)}function d(e){var t=e.href,a=e.icon,o=e.title,i=e.description;return r.createElement(c,{href:t},r.createElement("h2",{className:(0,n.Z)("text--truncate",u.cardTitle),title:o},a," ",o),i&&r.createElement("p",{className:(0,n.Z)("text--truncate",u.cardDescription),title:i},i))}function p(e){var t,a=e.item,n=(0,o.Wl)(a);return n?r.createElement(d,{href:n,icon:"\ud83d\uddc3\ufe0f",title:a.label,description:null!=(t=a.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:a.items.length})}):null}function m(e){var t,a,n=e.item,i=(0,s.Z)(n.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,o.xz)(null!=(t=n.docId)?t:void 0);return r.createElement(d,{href:n.href,icon:i,title:n.label,description:null!=(a=n.description)?a:null==l?void 0:l.description})}function f(e){var t=e.item;switch(t.type){case"link":return r.createElement(m,{item:t});case"category":return r.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function k(e){var t=e.className,a=(0,o.jA)();return r.createElement(b,{items:a.items,className:t})}function b(e){var t=e.items,a=e.className;if(!t)return r.createElement(k,e);var i=(0,o.MN)(t);return r.createElement("section",{className:(0,n.Z)("row",a)},i.map((function(e,t){return r.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},r.createElement(f,{item:e}))})))}},85162:(e,t,a)=>{"use strict";a.d(t,{Z:()=>i});var r=a(67294),n=a(86010);const o={tabItem:"tabItem_Ymn6"};function i(e){var t=e.children,a=e.hidden,i=e.className;return r.createElement("div",{role:"tabpanel",className:(0,n.Z)(o.tabItem,i),hidden:a},t)}},74866:(e,t,a)=>{"use strict";a.d(t,{Z:()=>w});var r=a(87462),n=a(67294),o=a(86010),i=a(12466),s=a(16550),l=a(91980),u=a(67392),c=a(50012);function d(e){return function(e){var t,a;return null!=(t=null==(a=n.Children.map(e,(function(e){if(!e||(0,n.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,a=e.children;return(0,n.useMemo)((function(){var e=null!=t?t:d(a);return function(e){var t=(0,u.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function m(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function f(e){var t=e.queryString,a=void 0!==t&&t,r=e.groupId,o=(0,s.k6)(),i=function(e){var t=e.queryString,a=void 0!==t&&t,r=e.groupId;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=r?r:null}({queryString:a,groupId:r});return[(0,l._X)(i),(0,n.useCallback)((function(e){if(i){var t=new URLSearchParams(o.location.search);t.set(i,e),o.replace(Object.assign({},o.location,{search:t.toString()}))}}),[i,o])]}function k(e){var t,a,r,o,i=e.defaultValue,s=e.queryString,l=void 0!==s&&s,u=e.groupId,d=p(e),k=(0,n.useState)((function(){return function(e){var t,a=e.defaultValue,r=e.tabValues;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!m({value:a,tabValues:r}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+r.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}var n=null!=(t=r.find((function(e){return e.default})))?t:r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:i,tabValues:d})})),b=k[0],v=k[1],g=f({queryString:l,groupId:u}),h=g[0],y=g[1],w=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),a=(0,c.Nk)(t),r=a[0],o=a[1],[r,(0,n.useCallback)((function(e){t&&o.set(e)}),[t,o])]),E=w[0],S=w[1],N=function(){var e=null!=h?h:E;return m({value:e,tabValues:d})?e:null}();return(0,n.useLayoutEffect)((function(){N&&v(N)}),[N]),{selectedValue:b,selectValue:(0,n.useCallback)((function(e){if(!m({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);v(e),y(e),S(e)}),[y,S,d]),tabValues:d}}var b=a(72389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){var t=e.className,a=e.block,s=e.selectedValue,l=e.selectValue,u=e.tabValues,c=[],d=(0,i.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,a=c.indexOf(t),r=u[a].value;r!==s&&(d(t),l(r))},m=function(e){var t,a=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var r,n=c.indexOf(e.currentTarget)+1;a=null!=(r=c[n])?r:c[0];break;case"ArrowLeft":var o,i=c.indexOf(e.currentTarget)-1;a=null!=(o=c[i])?o:c[c.length-1]}null==(t=a)||t.focus()};return n.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},u.map((function(e){var t=e.value,a=e.label,i=e.attributes;return n.createElement("li",(0,r.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:function(e){return c.push(e)},onKeyDown:m,onClick:p},i,{className:(0,o.Z)("tabs__item",v.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===t})}),null!=a?a:t)})))}function h(e){var t=e.lazy,a=e.children,r=e.selectedValue,o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){var i=o.find((function(e){return e.props.value===r}));return i?(0,n.cloneElement)(i,{className:"margin-top--md"}):null}return n.createElement("div",{className:"margin-top--md"},o.map((function(e,t){return(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})})))}function y(e){var t=k(e);return n.createElement("div",{className:(0,o.Z)("tabs-container",v.tabList)},n.createElement(g,(0,r.Z)({},e,t)),n.createElement(h,(0,r.Z)({},e,t)))}function w(e){var t=(0,b.Z)();return n.createElement(y,(0,r.Z)({key:String(t)},e))}},46301:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>k,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var r=a(87462),n=a(63366),o=(a(67294),a(3905)),i=(a(47940),a(74866),a(85162),a(52991)),s=["components"],l={id:"learn-polkadot-js-guides",title:"Polkadot-JS Guides",sidebar_label:"Polkadot-JS Guides",description:"Guides about Polkadot-JS.",keywords:["polkadot-JS","polkadotjs","guides","advanced"],slug:"../learn-polkadot-js-guides"},u=void 0,c={unversionedId:"learn/learn-polkadot-js-guides",id:"learn/learn-polkadot-js-guides",title:"Polkadot-JS Guides",description:"Guides about Polkadot-JS.",source:"@site/../docs/learn/learn-polkadot-js-guides.md",sourceDirName:"learn",slug:"/learn-polkadot-js-guides",permalink:"/docs/learn-polkadot-js-guides",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-polkadot-js-guides.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1704367237,formattedLastUpdatedAt:"Jan 4, 2024",frontMatter:{id:"learn-polkadot-js-guides",title:"Polkadot-JS Guides",sidebar_label:"Polkadot-JS Guides",description:"Guides about Polkadot-JS.",keywords:["polkadot-JS","polkadotjs","guides","advanced"],slug:"../learn-polkadot-js-guides"},sidebar:"docs",previous:{title:"Polkadot-JS UI",permalink:"/docs/polkadotjs-ui"},next:{title:"Account Guides",permalink:"/docs/learn-guides-accounts"}},d={},p=[],m={toc:p},f="wrapper";function k(e){var t=e.components,a=(0,n.Z)(e,s);return(0,o.kt)(f,(0,r.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"We support only the use of the ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},(0,o.kt)("strong",{parentName:"a"},"Polkadot-JS UI")),"\ntogether with the ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/extension/"},(0,o.kt)("strong",{parentName:"a"},"Polkadot-JS browser extension")),",\n",(0,o.kt)("a",{parentName:"p",href:"https://www.ledger.com/ledger-live"},(0,o.kt)("strong",{parentName:"a"},"Ledger"))," and\n",(0,o.kt)("a",{parentName:"p",href:"https://www.parity.io/technologies/signer/"},(0,o.kt)("strong",{parentName:"a"},"Polkadot Vault"))," for signing transactions. We do not\nprovide support for third party applications.")),(0,o.kt)(i.Z,{mdxType:"DocCardList"}))}k.isMDXComponent=!0},46601:()=>{}}]); \ No newline at end of file +(self.webpackChunk=self.webpackChunk||[]).push([[3643],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var r=a(74165),n=a(15861),o=a(67294),s=a(87152),i=a(14741),l=a(67425);function u(e,t,a){return c.apply(this,arguments)}function c(){return(c=(0,n.Z)((0,r.Z)().mark((function e(t,a,n){var o,l,u,c,d;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){e.next=18;break}return e.abrupt("return");case 18:return u=new s.U(o),e.next=21,i.G.create({provider:u});case 21:c=e.sent,(d=a.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,a,r){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,r);break;case"precise":(0,l.Precise)(e,a,r);break;case"blocksToDays":(0,l.BlocksToDays)(e,r);break;case"erasToDays":(0,l.ErasToDays)(e,r,a);break;case"percentage":(0,l.Percentage)(e,r);break;case"permillToPercent":(0,l.PermillToPercent)(e,r);break;case"arrayLength":(0,l.ArrayLength)(e,r);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,a=e.path,s=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,c=(0,o.useState)(""),p=c[0],m=c[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?d(s.toString(),l,t,m):m(s.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var e=(0,n.Z)((0,r.Z)().mark((function e(){var n;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,a,m);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(n,l,t,m):m(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",r="statemine",n="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,s,i){var l=void 0;if(s===t||s===n)l=3;else{if(s!==a&&s!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),i((e=Number.isInteger(e/o[s].precision)?e/o[s].precision+" "+o[s].symbol:(e/o[s].precision).toFixed(l)+" "+o[s].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/o[t].precision+" "+o[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,o,s){var i=void 0;if(s===t||s===n)i=1;else{if(s!==a&&s!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");i=4}o((e/=i).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},52991:(e,t,a)=>{"use strict";a.d(t,{Z:()=>b});var r=a(67294),n=a(86010),o=a(53438),s=a(39960),i=a(13919),l=a(95999);const u={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function c(e){var t=e.href,a=e.children;return r.createElement(s.Z,{href:t,className:(0,n.Z)("card padding--lg",u.cardContainer)},a)}function d(e){var t=e.href,a=e.icon,o=e.title,s=e.description;return r.createElement(c,{href:t},r.createElement("h2",{className:(0,n.Z)("text--truncate",u.cardTitle),title:o},a," ",o),s&&r.createElement("p",{className:(0,n.Z)("text--truncate",u.cardDescription),title:s},s))}function p(e){var t,a=e.item,n=(0,o.Wl)(a);return n?r.createElement(d,{href:n,icon:"\ud83d\uddc3\ufe0f",title:a.label,description:null!=(t=a.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:a.items.length})}):null}function m(e){var t,a,n=e.item,s=(0,i.Z)(n.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,o.xz)(null!=(t=n.docId)?t:void 0);return r.createElement(d,{href:n.href,icon:s,title:n.label,description:null!=(a=n.description)?a:null==l?void 0:l.description})}function f(e){var t=e.item;switch(t.type){case"link":return r.createElement(m,{item:t});case"category":return r.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function k(e){var t=e.className,a=(0,o.jA)();return r.createElement(b,{items:a.items,className:t})}function b(e){var t=e.items,a=e.className;if(!t)return r.createElement(k,e);var s=(0,o.MN)(t);return r.createElement("section",{className:(0,n.Z)("row",a)},s.map((function(e,t){return r.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},r.createElement(f,{item:e}))})))}},85162:(e,t,a)=>{"use strict";a.d(t,{Z:()=>s});var r=a(67294),n=a(86010);const o={tabItem:"tabItem_Ymn6"};function s(e){var t=e.children,a=e.hidden,s=e.className;return r.createElement("div",{role:"tabpanel",className:(0,n.Z)(o.tabItem,s),hidden:a},t)}},74866:(e,t,a)=>{"use strict";a.d(t,{Z:()=>w});var r=a(87462),n=a(67294),o=a(86010),s=a(12466),i=a(16550),l=a(91980),u=a(67392),c=a(50012);function d(e){return function(e){var t,a;return null!=(t=null==(a=n.Children.map(e,(function(e){if(!e||(0,n.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function p(e){var t=e.values,a=e.children;return(0,n.useMemo)((function(){var e=null!=t?t:d(a);return function(e){var t=(0,u.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function m(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function f(e){var t=e.queryString,a=void 0!==t&&t,r=e.groupId,o=(0,i.k6)(),s=function(e){var t=e.queryString,a=void 0!==t&&t,r=e.groupId;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=r?r:null}({queryString:a,groupId:r});return[(0,l._X)(s),(0,n.useCallback)((function(e){if(s){var t=new URLSearchParams(o.location.search);t.set(s,e),o.replace(Object.assign({},o.location,{search:t.toString()}))}}),[s,o])]}function k(e){var t,a,r,o,s=e.defaultValue,i=e.queryString,l=void 0!==i&&i,u=e.groupId,d=p(e),k=(0,n.useState)((function(){return function(e){var t,a=e.defaultValue,r=e.tabValues;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!m({value:a,tabValues:r}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+r.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}var n=null!=(t=r.find((function(e){return e.default})))?t:r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:d})})),b=k[0],v=k[1],h=f({queryString:l,groupId:u}),g=h[0],y=h[1],w=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),a=(0,c.Nk)(t),r=a[0],o=a[1],[r,(0,n.useCallback)((function(e){t&&o.set(e)}),[t,o])]),S=w[0],E=w[1],N=function(){var e=null!=g?g:S;return m({value:e,tabValues:d})?e:null}();return(0,n.useLayoutEffect)((function(){N&&v(N)}),[N]),{selectedValue:b,selectValue:(0,n.useCallback)((function(e){if(!m({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);v(e),y(e),E(e)}),[y,E,d]),tabValues:d}}var b=a(72389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function h(e){var t=e.className,a=e.block,i=e.selectedValue,l=e.selectValue,u=e.tabValues,c=[],d=(0,s.o5)().blockElementScrollPositionUntilNextRender,p=function(e){var t=e.currentTarget,a=c.indexOf(t),r=u[a].value;r!==i&&(d(t),l(r))},m=function(e){var t,a=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":var r,n=c.indexOf(e.currentTarget)+1;a=null!=(r=c[n])?r:c[0];break;case"ArrowLeft":var o,s=c.indexOf(e.currentTarget)-1;a=null!=(o=c[s])?o:c[c.length-1]}null==(t=a)||t.focus()};return n.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},u.map((function(e){var t=e.value,a=e.label,s=e.attributes;return n.createElement("li",(0,r.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:function(e){return c.push(e)},onKeyDown:m,onClick:p},s,{className:(0,o.Z)("tabs__item",v.tabItem,null==s?void 0:s.className,{"tabs__item--active":i===t})}),null!=a?a:t)})))}function g(e){var t=e.lazy,a=e.children,r=e.selectedValue,o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){var s=o.find((function(e){return e.props.value===r}));return s?(0,n.cloneElement)(s,{className:"margin-top--md"}):null}return n.createElement("div",{className:"margin-top--md"},o.map((function(e,t){return(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})})))}function y(e){var t=k(e);return n.createElement("div",{className:(0,o.Z)("tabs-container",v.tabList)},n.createElement(h,(0,r.Z)({},e,t)),n.createElement(g,(0,r.Z)({},e,t)))}function w(e){var t=(0,b.Z)();return n.createElement(y,(0,r.Z)({key:String(t)},e))}},46301:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>k,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var r=a(87462),n=a(63366),o=(a(67294),a(3905)),s=(a(47940),a(74866),a(85162),a(52991)),i=["components"],l={id:"learn-polkadot-js-guides",title:"Polkadot-JS Guides",sidebar_label:"Polkadot-JS Guides",description:"Guides about Polkadot-JS.",keywords:["polkadot-JS","polkadotjs","guides","advanced"],slug:"../learn-polkadot-js-guides"},u=void 0,c={unversionedId:"learn/learn-polkadot-js-guides",id:"learn/learn-polkadot-js-guides",title:"Polkadot-JS Guides",description:"Guides about Polkadot-JS.",source:"@site/../docs/learn/learn-polkadot-js-guides.md",sourceDirName:"learn",slug:"/learn-polkadot-js-guides",permalink:"/docs/learn-polkadot-js-guides",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-polkadot-js-guides.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-polkadot-js-guides",title:"Polkadot-JS Guides",sidebar_label:"Polkadot-JS Guides",description:"Guides about Polkadot-JS.",keywords:["polkadot-JS","polkadotjs","guides","advanced"],slug:"../learn-polkadot-js-guides"},sidebar:"docs",previous:{title:"Polkadot-JS UI",permalink:"/docs/polkadotjs-ui"},next:{title:"Account Guides",permalink:"/docs/learn-guides-accounts"}},d={},p=[],m={toc:p},f="wrapper";function k(e){var t=e.components,a=(0,n.Z)(e,i);return(0,o.kt)(f,(0,r.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"We support only the use of the ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},(0,o.kt)("strong",{parentName:"a"},"Polkadot-JS UI")),"\ntogether with the ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.js.org/extension/"},(0,o.kt)("strong",{parentName:"a"},"Polkadot-JS browser extension")),",\n",(0,o.kt)("a",{parentName:"p",href:"https://www.ledger.com/ledger-live"},(0,o.kt)("strong",{parentName:"a"},"Ledger"))," and\n",(0,o.kt)("a",{parentName:"p",href:"https://www.parity.io/technologies/signer/"},(0,o.kt)("strong",{parentName:"a"},"Polkadot Vault"))," for signing transactions. We do not\nprovide support for third party applications.")),(0,o.kt)(s.Z,{mdxType:"DocCardList"}))}k.isMDXComponent=!0},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/ccc1222e.9a1f2884.js b/assets/js/ccc1222e.9a1f2884.js new file mode 100644 index 000000000000..39a835ac2bd8 --- /dev/null +++ b/assets/js/ccc1222e.9a1f2884.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6920],{3905:(t,a,e)=>{e.d(a,{Zo:()=>m,kt:()=>k});var r=e(67294);function n(t,a,e){return a in t?Object.defineProperty(t,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[a]=e,t}function o(t,a){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable}))),e.push.apply(e,r)}return e}function i(t){for(var a=1;a=0||(n[e]=t[e]);return n}(t,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,e)&&(n[e]=t[e])}return n}var l=r.createContext({}),h=function(t){var a=r.useContext(l),e=a;return t&&(e="function"==typeof t?t(a):i(i({},a),t)),e},m=function(t){var a=h(t.components);return r.createElement(l.Provider,{value:a},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var a=t.children;return r.createElement(r.Fragment,{},a)}},u=r.forwardRef((function(t,a){var e=t.components,n=t.mdxType,o=t.originalType,l=t.parentName,m=p(t,["components","mdxType","originalType","parentName"]),s=h(e),u=n,k=s["".concat(l,".").concat(u)]||s[u]||d[u]||o;return e?r.createElement(k,i(i({ref:a},m),{},{components:e})):r.createElement(k,i({ref:a},m))}));function k(t,a){var e=arguments,n=a&&a.mdxType;if("string"==typeof t||n){var o=e.length,i=new Array(o);i[0]=u;var p={};for(var l in a)hasOwnProperty.call(a,l)&&(p[l]=a[l]);p.originalType=t,p[s]="string"==typeof t?t:n,i[1]=p;for(var h=2;h{e.r(a),e.d(a,{assets:()=>m,contentTitle:()=>l,default:()=>k,frontMatter:()=>p,metadata:()=>h,toc:()=>s});var r=e(87462),n=e(63366),o=(e(67294),e(3905)),i=["components"],p={id:"build-open-source",title:"Open Source Stack",sidebar_label:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",keywords:["open","source","development","code","resources","tools","apis"],slug:"../build-open-source"},l="Open Source Polkadot Stack \x3c!-- omit in toc --\x3e",h={unversionedId:"build/build-open-source",id:"build/build-open-source",title:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",source:"@site/../docs/build/build-open-source.md",sourceDirName:"build",slug:"/build-open-source",permalink:"/docs/build-open-source",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-open-source.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711540791,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"build-open-source",title:"Open Source Stack",sidebar_label:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",keywords:["open","source","development","code","resources","tools","apis"],slug:"../build-open-source"},sidebar:"docs",previous:{title:"Explorer, Data, & Indexing Tools",permalink:"/docs/build-data"},next:{title:"Hackathons",permalink:"/docs/build-hackathon"}},m={},s=[{value:"About",id:"about",level:2},{value:"Layers of Polkadot Stack",id:"layers-of-polkadot-stack",level:2},{value:"Wallets",id:"wallets",level:3},{value:"User Interface",id:"user-interface",level:3},{value:"Tools, APIs, and Languages",id:"tools-apis-and-languages",level:3},{value:"ink! Smart Contracts",id:"ink-smart-contracts",level:3},{value:"Chains and Pallets",id:"chains-and-pallets",level:3},{value:"Host",id:"host",level:3},{value:"Network Maintenance Tools",id:"network-maintenance-tools",level:3},{value:"Signatures",id:"signatures",level:3},{value:"Consensus",id:"consensus",level:3},{value:"Networking",id:"networking",level:3},{value:"Primitives",id:"primitives",level:3},{value:"Contributing",id:"contributing",level:2}],d={toc:s},u="wrapper";function k(t){var a=t.components,e=(0,n.Z)(t,i);return(0,o.kt)(u,(0,r.Z)({},d,e,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"open-source-polkadot-stack--omit-in-toc-"},"Open Source Polkadot Stack "),(0,o.kt)("admonition",{title:"Do your research before using open-source tools",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The tools listed here are open-source and are linked directly to their source code. Before using these tools to build your projects, always ",(0,o.kt)("a",{parentName:"p",href:"/docs/how-to-dyor"},"do your research")," and be aware of ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-scams"},"scams"),".")),(0,o.kt)("p",null,"This page aims to provide an overview of the open-source Polkadot Tech Stack."),(0,o.kt)("p",null,"This is a living document, and we rely on everyone to contribute and help maintain\nit. ",(0,o.kt)("a",{parentName:"p",href:"#contributing"},(0,o.kt)("strong",{parentName:"a"},"Please feel free to make edits and additions via pull requests")),". We\napologize if we missed your project!"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#about"},"About")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#layers-of-polkadot-stack"},"Layers of Polkadot Stack"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#wallets"},"Wallets")," "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#user-interface"},"User Interface")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#tools-apis-and-languages"},"Tools, APIs, and Languages")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#ink-smart-contracts"},"ink! Smart Contracts")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#chains-and-pallets"},"Chains and Pallets")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#host"},"Host")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#network-maintenance-tools"},"Network Maintenance Tools")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#signatures"},"Signatures")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#consensus"},"Consensus")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#networking"},"Networking")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#primitives"},"Primitives")))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#contributing"},"Contributing"))),(0,o.kt)("h2",{id:"about"},"About"),(0,o.kt)("p",null,"The Polkadot Tech Stack is a subset of the Web 3.0 Tech Stack, which consists of the ",(0,o.kt)("strong",{parentName:"p"},"open-source"),"\ntechnologies contributing to and relying on ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/"},"Polkadot"),". It is meant to be used\nfor decentralized application (Dapp) development within numerous verticals, including DeFi, Gaming,\nProvenance and many others not pictured below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"|------|--------|------------|\n| DeFi | Gaming | Provenance |\n|______|________|____________|\n Dapps\n|--------------------------/-|\n| Explorers, Wallets / |\n|------------------------/---|\n| Tools, Apis, Languages/ |\n|----------------------/-----|\n| 2nd layer protocols / |\n|--------------------/-------|\n| Chains / other |\n|------------------/--- --|\n| *Polkadot* | tech |\n|------------------\\---------|\n| P2P, Crypto, Wasm \\ |\n|--------------------\\-------|\n")),(0,o.kt)("h2",{id:"layers-of-polkadot-stack"},"Layers of Polkadot Stack"),(0,o.kt)("p",null,"In the below sections, you can find a list of different layers of the Polkadot Stack."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Maintenance Status"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\ud83d\udfe2 Actively maintained"),(0,o.kt)("li",{parentName:"ul"},"\ud83d\udfe1 Stale (no activity on the main branch for one month)"),(0,o.kt)("li",{parentName:"ul"},"\u26aa Unmaintained (no activity on the main branch for more than three months)")),(0,o.kt)("h3",{id:"wallets"},"Wallets"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Web Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/Multix"},"Multix")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkasafe/polkasafe-ui"},"Polkasafe")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/apps"},"polkadot-js/apps")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman-web"},"Talisman Web Application")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/enkryptcom/mydotwallet"},"mydotwallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subid"},"Sub ID")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Primis-Labs/client"},"Primis")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3finance/sakura"},"Sakura")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/Web3Box-apps"},"Web3Box")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CoongCrafts/coong-wallet"},"Coong Wallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan-multisig-react"},"Subscan Multisig UI - React")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan-multisig-ui"},"Subscan Multisig UI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DoraFactory/dorafactory-multisig"},"Dorafactory-Multisig")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/capi-multisig-app"},"Capi Multisig App")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"User-friendly Wallet based on the ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/frame/recovery"},"Recovery Pallet"),", Web wallets focused on user-onboarding (e.g. using ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/near/near-wallet"},"localStorage"),")")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Desktop Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/nova-spektr"},"nova-spektr")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/omni-desktop-prototype"},"Omni desktop")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Enterprise Wallets")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Browser Extensions"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman"},"Talisman-Extension")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubWallet-Extension"},"SubWallet-Extension")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/enkryptcom/enKrypt"},"Enkrypt")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/extension"},"Polkadot{.js}")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/PolkaGate/polkagate-extension"},"PolkaGate")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainBridgeNetworkTeam/Doter"},"Doter")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GetSpeckle/speckle-browser-extension"},"Speckle OS")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/kuma-wallet"},"Kuma Cross-chain Wallet")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"Sign-in with your Polkadot, Kusama, etc. account.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Mobile Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/nova-wallet-ios"},"Nova Wallet iOS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/nova-wallet-android"},"Nova Wallet Android")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-signer"},"Polkadot Vault")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/fearless-Android"},"Fearless Wallet Android")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/fearless-iOS"},"Fearless Wallet iOS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubWallet-Mobile"},"SubWallet-Mobile")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Kalapaja/kampela-firmware"},"Kampela")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airgap-it/airgap-wallet"},"AirGap")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Interstellar-Network/wallet-app"},"Interstellar Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/luniehq/lunie"},"Lunie")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkawallet-io/polkawallet-flutter"},"Polkawallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/consenlabs/token-core"},"imToken")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stylo-app/stylo"},"Stylo")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fractapp/fractapp/"},"Fractapp")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hypha-dao/hashed-wallet"},"Hashed Wallet")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Burner Wallets/Faucet/Gifts"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/hamidra/dotdrop"},"dotdrop")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/vue-polkadot/apps"},"KodaDot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/astar-faucet-bot"},"Astar Faucet Bot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/karooolis/sybil-resistant-substrate-faucet"},"Generic sybil-resistant faucet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/StringNick/sybil-resistant-chat-bot-substrate-faucet"},"sybil-resistant Chat Bot Faucet")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Faucet (a sybil-resistant way to receive free tokens)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Wallet Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/metamask-snap-polkadot"},"Metamask-Snap by Chainsafe")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"CLI Wallet"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/yxf/subwallet"},"Subwallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/canontech/proxy-hot-wallet"},"Proxy-hot-wallet")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Hardware Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZondaX/ledger-polkadot"},"Ledger Polkadot")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-kusama"},"Ledger Kusama")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-statemint"},"Ledger Statemint")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-statemine"},"Ledger Statemine")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"Trezor")))),(0,o.kt)("h3",{id:"user-interface"},"User Interface"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Block Explorers"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/topmonks/calamar"},"Calamar")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/explorer-api"},"Polkascan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Colm3na/polkastats-backend"},"Polkastats")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan"},"Subscan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/statescan-v2"},"Statescan")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/edgeware-builders/edgscan"},"Edgscan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/epirus-substrate"},"Sirato")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/ink-substrate-explorer-api"},"ink! Explorer API")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/substats"},"Substats")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hybrid-explorer/hybrid-dapp"},"Hybrid Block Explorer")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Mempool focused explorer (including parachain transaction)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator Dashboards"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-telemetry"},"Polkadot Telemetry")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashquark-io/polkacube-frontend"},"Polkacube")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/buidl-labs/YieldScan"},"YieldScan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-community/hubble/tree/master/app/controllers/polkadot"},"Hubble")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ArthurHoeke/cyclops"},"Cyclops")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3go-xyz/web3go-xyz-v2"},"Web3Go")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/MathCryptoDoc/insights-1kv"},"1kv insights")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Node Explorers"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/protos-research/polkadot-node-explorer"},"Polkadot Node Explorer")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT Explorer"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/nft-gallery"},"NFT Explorer for Kusama & Polkadot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance Dashboards"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/governance-ui"},"Polkadot Delegation Dashboard")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/premiurly/polkassembly"},"Polkassembly")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/dotreasury"},"dotreasury")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/bright-tresury"},"Bright Treasury")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/collaboration"},"OpenSquare offchain voting")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/wpank/open-gov-insights"},"OpenGov Insights")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stake-plus/treasury-tracker"},"Treasury Tracker")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/joepetrowski/opengov-cli"},"OpenGov CLI")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"UI for the Kusama and/or Polkadot treasury (see ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/pull/5715"},"bounty module"),"), UI for Parachain Lease Offering (PLO)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Staking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/staking-rewards-collector"},"Staking Rewards Collector")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/jackson-harris-iii/staking-rewards-viewer"},"Staking Rewards Viewer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cryptolab-network/polkadot-staking-site"},"Polkadot Staking Site")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-staking-dashboard"},"Polkadot Staking Dashboard")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/James-Sangalli/dot-validator-selector"},"Polkadot/Kusama Validator Selector")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/James-Sangalli/dot-staking-income"},"Staking Income CSV Generator")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridge UI"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-bridges-ui"},"Parity Bridges UI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nutbox-dao/donut-interface"},"Donut Interface (Steem - Dot)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RostislavLitovkin/PlutonicationServer"},"Plutonication")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Parachain/Crowdloan"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/jhonalino/parachains.network"},"Parachains.Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CrommVardek/polk-auction-ui"},"PolkAuction")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/10clouds/crowdloan-template"},"Crowdloan Front End Template")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hack-ink/slothunter/"},"Slothunter")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identicon"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://polkadot.cloud/polkicon"},"Polkicon")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RidOne-technologies/polkadot-web-identicon"},"PolkadotWebIdenticon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RidOne-technologies/polkadot-angular-identicon"},"Polkadot Angular IdentIcon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Noc2/Bird-Identicon"},"Bird Identicon")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Coretime"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LasticXYZ/LasticUI"},"Lastic")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RegionX-Labs/RegionX"},"RegionX")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://polkadot.cloud"},"Polkadot Cloud")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/KappaSigmaMu/ksm-app"},"KappaSigmaMu Fratority")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/quadratic-funding-webapp"},"Quadratic Funding Webapp")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://gitlab.com/polkawatch/polkawatch"},"Polkawatch"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bytepayment/bytepay"},"Bytepay")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Delmonicos/charging-management-platform"},"charging-management-platform")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TDSoftware/subidentity-webapp"},"subidentity-webapp")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/paid-qa/"},"OpenSquare Paid QA")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CrossChainLabs-DOT/dotpulse-api"},"DotPulse")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bsn-si/rubeus-smartcontract"},"Rubeus Keeper")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/justmert/eco-flow-frontend"},"Polkaflow")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/chainviz"},"ChainViz")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fidi-tech/dotsight"},"Dotsight")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://docs.sui.io/build/zk_login"},"zkLogin"),", Portfolio Viewer like Zapper or Zerion")))),(0,o.kt)("h3",{id:"tools-apis-and-languages"},"Tools, APIs, and Languages"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Runtime/Parachain frameworks"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk"},"Polkadot Blockchain SDK")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/gosemble"},"Gosemble")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/subsembly"},"Subsembly")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/parachain-utilities"},"Parachain utilities")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gantree-io/gantree-core"},"Gantree")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ideal-lab5"},"Cryptex")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Tools to create parachains with other frameworks, like the ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cosmos/cosmos-sdk"},"Cosmos SDK")," or ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/0xPolygon/cdk-validium-node"},"Polygon CDK"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Client Libraries"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-api"},"Polkadot API - Typescript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/capi"},"Capi - Typescript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/packages/tree/main/sub-api"},"sub-api")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/go-substrate-rpc-client"},"Go")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_api_dotnet"},".Net")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ajuna-network/Ajuna.NetApi"},".NET Standard 2.0")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubstrateGaming/Substrate.NET.Toolchain"},"Substrate .NET Toolchain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"C++")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/finoabanking/substrate-c-tool"},"C")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/hs-web3"},"Haskell")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/api"},"Javascript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-api-sidecar"},"Substrate API Sidecar - TypeScript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/py-substrate-interface"},"Python")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkaj"},"Java (+ Android)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/strategyobject/substrate-client-java"},"Substrate Client Java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scs/substrate-api-client"},"Rust SCS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/subxt"},"Rust Parity (subxt)")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/trevor-crypto"},"Rust pdotc")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/php-substrate-api"},"PHP (gmajor-encrypt)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/neha0921/substrate-interface-package"},"PHP (neha0921)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/frontier"},"RPC-Ethereum")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/Substrate.swift"},"Swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NodleCode/substrate-client-kotlin"},"Kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/substrate-client-kotlin"},"substrate-client-kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/substrate-client-swift"},"substrate-client-swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rankanizer/polkadart"},"Dart")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polywrap/integrations"},"Substrate Core Polywrapper")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/substrate-sdk-ios"},"Substrate SDK iOS")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/substrate-sdk-android"},"Substrate SDK Android")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CoongCrafts/delightfuldot"},"DelightfulDot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"RPC Gateway"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/subway"},"Subway")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Substrate Contract clients"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/go-patract"},"PatractGo")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Easy Runtime Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/hack-ink/subalfred"},"Subalfred")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kaichaosun/substrate-stencil"},"substrate-stencil")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kaichaosun/play-substrate"},"Play Substrate")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/substrate-node-template"},"substrate-node-template")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-playground"},"Substrate Playground")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/as-substrate-runtime"},"AssemblyScript Runtime Generation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/clearloop/sup"},"Substrate Package Manager")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/subsembly"},"Subsembly: Framework for developing AssemblyScript Substrate Runtimes")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bkchr/diener"},"dependency diener")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IDE Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/vscode-substrate"},"Substrate Marketplace VS Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/everstake/vscode-plugin-substrate"},"VS Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/everstake/atom-plugin-substrate"},"Atom Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/zombienet-vscode-extension"},"zombienet extension")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Runtime/Pallet Security"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/srlabs/substrate-runtime-fuzzer"},"Substrate Runtime Fuzzer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/shawntabrizi/substrate-toml-lint"},"Substrate Toml Lint")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kframework/wasm-semantics"},"K specifications")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSecurity/polpatrol"},"PolPatrol - Polkadot Runtime Checker")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Automated Runtime checking tools, economic audit simulator such as ",(0,o.kt)("a",{parentName:"td",href:"https://gauntlet.network/"},"gauntlet.network"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart Contract Languages"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"#ink-smart-contracts"},"ink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ask-lang/ask"},"Ask!")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/slickup/subscript"},"Subscript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hyperledger-labs/solang"},"Solang")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eigerco/pallet-move"},"pallet-move")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pontem-network/sp-move"},"Move VM Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/neatcoin/neatcoin"},"Move smart contract by Neatcoin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pepyakin/substrate-seal-ebpf"},"eBPF Contracts Hackathon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/koute/polkavm"},"PolkaVM")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Functional Programming Languages, other languages with developed toolchains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-introspector"},"Polkadot introspector")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subdirectory/subshell"},"Subshell")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/sc-simnode"},"substrate-simnode")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/halva-suite/halva"},"Halva")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/redspot"},"Redspot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mixbytes/tank"},"MixBytes Tank")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NikVolf/sub-flood"},"sub-flood")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-debug-kit"},"Substrate debug-kit")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/JesseAbram/asset_cli_tool"},"Asset CLI tool")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/JesseAbram/unfinished_testing_tool"},"sub_crash")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chevdor/subwasm"},"subwasm")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ascjones/subsee"},"subsee")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-lab"},"polkadot-lab")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dwellir-public/rpc-perf/"},"RPC-perf")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Static Analysis"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/KaiserKarel/substrace"},"Substrace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/simon-perriard/saft"},"Static analyzer for Substrate FRAME's pallets")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CoinFabrik/scout"},"CoinFabrik Scout")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testnet"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/zombienet"},"Zombienet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/chopsticks"},"Chopsticks")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-launch"},"Polkadot Launch")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/koute/polkadot-starship"},"polkadot-starship")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/maxsam4/fork-off-substrate"},"Fork off Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/try-runtime-cli"},"try-runtime-cli")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/parachain-launch"},"Parachain Launch")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zeeve-App/larch"},"Larch Zombienet GUI")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Benchmarking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk/tree/master/substrate/utils/frame/benchmarking-cli"},"Benchmarking CLI")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-stps"},"Polkadot sTPS")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/0xekez/clockchain"},"Clockchain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/shawntabrizi/substrate-graph-benchmarks"},"Substrate Graph Benchmarks")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Nikhil-Desai-Talentica/substrate-node-template-benchmarking"},"ink! & pallet benchmarking template")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/smart-bench"},"smart-bench")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Blockchain Indexing Engine"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/subsquid/squid-sdk"},"Squid SDK")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hybrid-explorer/hybrid-indexer"},"Hybrid Indexer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-archive"},"Substrate Archive")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_psql_indexer"},"PSQL Indexer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playzero/substrate-graph"},"Substrate Graph")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OnFinality-io/subql"},"Subquery")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/p2p-org/polkadot-profit-transformer"},"MBELT3")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/stick"},"stick")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Infra3-Network/hyperdot"},"Hyperdot")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Blockchain/Event Monitoring"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/guardian"},"Web3 Guardian")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/HugoByte/aurras-event-manager"},"Aurras Event Manager")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hicommonwealth/chain-events"},"@commonwealth/chain-events")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/massbitchain"},"Massbit")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kianenigma/polkadot-basic-notification"},"Polkadot Basic Notifications")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sodazone/ocelloids"},"Ocelloids")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TrackingChains/TrackingChain"},"Tracking Chain")," \u26aa,"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dodorare/crossbow"},"Crossbow")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://amethyst.rs/"},"Amethyst")," + ",(0,o.kt)("a",{parentName:"td",href:"https://substrate.dev/"},"Substrate"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"No-code Platforms"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/NovaBloq/Bubble-Plugin-Polkadot.js"},"EzCode's Polkadot.js plugin on Bubble.io")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Blackprint/nodes-polkadot.js"},"Blackprint Visual Programming Polkadot.js module")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subrelay/interface"},"SubRelay")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman-connect"},"Talisman Connect")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubConnect"},"SubWallet-SubConnect")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nova-wallet/metadata-portal"},"Metadata Portal")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/Tesseract.rs"},"Tesseract")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/walletconnect-v2-monorepo"},"WalletConnect")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/BitGo/BitGoJS/tree/master"},"BitGoJS")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"XCM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/trappist"},"Trappist")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Moonsong-Labs/xcm-tools"},"XCM-tools")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/substrate-api-rpc"},"XCM-tools Golang")," \ud83d\udfe1,",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paraspell/ui-v2"},"ParaSpell")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/t3rn/xbi"},"XBI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/xcm-sdk"},"XCM TS/JS SDK")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/XcmSend/app"},"XCMSend")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sodazone/xcm-monitoring/"},"XCM Monitoring Server")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/moonbeam-foundation/xcm-sdk"},"Moonbeam Foundation XCM-SDK")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/asset-transfer-api"},"asset-transfer-api")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/txwrapper-core"},"txwrapper-core")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/open-web3.js"},"open-web3 JS library")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CycanTech/GVM-Bridge"},"VM-Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/srtool"},"srtool")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chevdor/srtool-cli"},"srtool-cli")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-tip-bot"},"Substrate Tip Bot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/syntifi/ori"},"ORI (Onchain Risk Intelligence)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/albertov19/PolkaTools"},"PolkaTools")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-scripts"},"polkadot-scripts")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/virto-network/sube"},"Sube")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/data-store-sidecar"},"data-store-sidecar")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SugarFunge/sugarfunge-node"},"SugarFunge")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/second-state/substrate-wasmedge"},"substrate-wasmedge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eightfish-org/eightfish"},"EightFish")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sandoxio/sandox"},"Sandox")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/apk-verifier/"},"APK verifier")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"ink-smart-contracts"},"ink! Smart Contracts"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Core Libraries"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink"},"ink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/cargo-contract"},"cargo-contract")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk/tree/master/substrate/frame/contracts"},"pallet-contracts")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Local Nodes"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-contracts-node"},"substrate-contracts-node")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/swankyhub/swanky-cli"},"Swanky")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart Contract Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/drink"},"DRink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/contracts-ui"},"contracts-ui")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Smart-Beaver"},"SmartBeaver"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/h4nsu/openbrush-contracts"},"OpenBrush")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/727-Ventures/sol2ink"},"Sol2Ink")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/protofire/polkadot-contract-wizard"},"Polkadot Contract Wizard")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/ink-wrapper"},"ink-wrapper")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink-playground"},"ink-playground")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockchain-it-hr/ink-remix-plugin"},"ink! Remix Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/standardweb3/signac/"},"Signac")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/avirajkhare00/ink-boxes/"},"ink!-boxes")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/avirajkhare00/ink-wizard"},"ink!-smart-contract-wizard")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Security & Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink-waterfall"},"ink! Waterfall")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/ink-verifier-image"},"Verifier Image for ink!")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Brushfam/patron-backend/"},"Patron")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/scio-labs/inkathon"},"ink!athon Boilerplate")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/useink"},"useink")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scio-labs/use-inkathon"},"useInkathon")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subsquid/squid-sdk/tree/master/substrate/ink-typegen"},"ink-typegen")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Brushfam/typechain-polkadot"},"Typechain Polkadot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IDE Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ink-analyzer/ink-analyzer"},"ink! Analyzer")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridges"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dantenetwork/protocol-stack-for-ink"},"Dante Protocol")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DeFi"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/pendulum-ink-wrapper"},"Pendulum-Ink-Wrapper")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RottenKiwi/Panorama-Swap-INK-SC"},"Panorama Swap")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Juminstock/ink_bank"},"ink_bank")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/realnimish/polkadot-amm"},"Polkadot AMM")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/veradefi/defi"},"Vera")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nsure-tech/dot-contract"},"Nsure Insurance")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CycanTech/ELC"},"Everlasting Cash")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Coinversation/coinpro"},"Coinversation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zenlinkpro/zenlink-dex-contract"},"zenlink-dex-contract")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ReserveLabs/AlgoCash"},"AlgoCash")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"New seigniorage-style stable coins")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/OpenEmojiBattler/open-emoji-battler"},"Open Emoji Battler")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/WiktorStarczewski/newomega.polkadot/blob/master/newomega_delegator/newomega/newomega.rs"},"NewOmega")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DAO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/SyncraDAO/modular-dao"},"SyncraDAO")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/subDAO-contracts"},"subDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RainbowcityFoundation/RainbowDAO-Protocol-Ink-milestone_1"},"RainbowDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Mangoboxlabs/Mangoboxink"},"MangoBox")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Mangoboxlabs/MangoSaleV2"},"MangoSale")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identity/DID"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TheDotflow"},"Dotflow")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Oracles"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/diadata-org/dia-wasm-oracle"},"DIA WASM Oracle")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Spam Protection"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/prosopo/captcha"},"Prosopo")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/AbaxFinance/Governance"},"Abax Governance")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ArtZero-io/Contracts"},"ArtZero")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/pnsproject/ink-aa"},"Polkadot Smart Account")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/swankyhub/magink-dapp"},"magink")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/ink-test-contracts"},"ink-test-contracts")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/agryaznov/candle-auction-ink"},"Candle Auctions")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubDAO-Network/polkasign-contract"},"polkasign-contract")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bsn-si/ocex-cli"},"OCEX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RoloiMoney/roloi-polkadot-w3f-grant"},"Roloi")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadrys/openPayroll"},"OpenPayroll")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/InkSmartContract/BlockchainFoodOrder"},"BlockchainFoodOrder")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"chains-and-pallets"},"Chains and Pallets"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Scalable Transactions"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/perun-network/perun-polkadot-pallet"},"Perun channels")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/perun-network/perun-polkadot-demo"},"CLI demo of Perun")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/Astar"},"Astar")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/celer-network/cChannel-substrate"},"Celer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GunClear/Gunero"},"Gunclear")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/BCS-Labs/tpscore-etl-system"},"TPScore")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/auguth/pocs"},"proof-of-contract-stake")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"roll-ups, DAG-based consensus mechanisms, side chains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridges"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/interlay/interbtc"},"interBTC")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/dkg-substrate"},"DKG Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sygmaprotocol/sygma-substrate-pallets"},"Sygma")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bifrost-finance/bifrost-eos-relay"},"EOS by Bifrost")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-bridge"},"POA - Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/akropolisio/POC-polkadai-bridge"},"Substrate - Ethereum DAI Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-bridge-relay"},"Substrate - Substrate Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chainx-org/ChainX"},"BTC by ChainX")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChorusOne/wormhole-bridge"},"Cosmos-Substrate bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/octopus-network/substrate-ibc"},"Substrate IBC Pallet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Snowfork/polkadot-ethereum"},"Polkadot Ethereum Bridge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/darwinia"},"Darwinia")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/spacewalk"},"Spacewalk: a Stellar bridge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/filecoindot"},"Filecoindot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/axelar-cgp-substrate/tree/main"},"Axelar-Substrate")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"ZCash")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Privacy"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LayerXcom/zero-chain"},"ZeroChain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/xx-labs/xxchain"},"xx network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Phala-Network/phala-blockchain"},"pLibra (Phala Network)")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/automata-network/automata"},"Automata Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zero-network/zero"},"Zero Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/appliedblockchain/silentdata-polkadot"},"Silent Data")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/anoma/masp"},"Multi-Asset Shielded Pool (MASP)")," , ",(0,o.kt)("a",{parentName:"td",href:"https://arxiv.org/pdf/2009.01020.pdf"},"Zkay"),", ",(0,o.kt)("a",{parentName:"td",href:"https://eprint.iacr.org/2018/962.pdf"},"Zexe"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"ZKP"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/zeropoolnetwork/zeropool-substrate-groth16-example"},"ZeroPool")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/megaclite"},"Megaclite")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/zkmega"},"zkMega")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/plonk"},"PLONK for Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/protocol-substrate"},"Webb Anchor Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/zk-snarks-with-substrate/"},"zk-SNARKs tutorial")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zkvers/substrate-zk"},"substrate-zk")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"TEE"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Acurast/acurast-core"},"Acurast")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/integritee-network/worker"},"Integritee")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scs/substraTEE"},"substraTEE")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/wetee-dao/chain"},"WeTEE")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/keysafe-protocol/keysafe-app"},"Keysafe Protocol")," \u26aa")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DeFi"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/kapilsinha/privadex"},"PrivaDEX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/uinb/fusotao"},"Fusotao")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/reef-defi/reef-chain"},"Reef")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Diora-Network/Diora"},"Diora")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/pendulum"},"Pendulum Chain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/compound-finance/gateway"},"Compound Gateway")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/parallel-finance/parallel"},"Parallel Finance")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/PINT"},"PINT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/laminar-protocol/laminar-chain"},"Laminar Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/Acala"},"Acala")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/centrifuge-chain"},"Centrifuge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stafiprotocol/stafi-node"},"Stafi")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/y2labs-0sh/definex"},"Definex")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAXFoundation/parrot"},"OAX Foundation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/alexxuyang/substrate-dex"},"Cybex")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zenlinkpro/pallet-zenlink"},"Zenlink")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/lsaether/pallet-swaps"},"Swaps Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Polkadex-Substrate/Polkadex/tree/master"},"Polkadex")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subdarkdex/subdex-parachain"},"SubDEX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/hack.HydraDX-node"},"HydraDX")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/apopiak/stablecoin"},"Substrate Stablecoin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/digitalnativeinc/standard-substrate"},"Standard protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sora-xor/sora2-network"},"Polkaswap")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/equilibrium-eosdt/equilibrium-curve-amm"},"Curve AMM")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/konomi-network/cumulus/"},"Konomi Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nutsfinance/stable-asset"},"Stable Asset")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/atscaletech/libra"},"Libra Payment")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mangata-finance/mangata-node"},"Mangata")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tidelabs/tidechain"},"Tidechain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/Basilisk-node"},"Basilisk")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/PolymeshAssociation/Polymesh"},"Polymesh")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"DEX with privacy and confidentiality features such as those found in a ",(0,o.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Dark_pool"},"dark pool"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart contract chains"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/PureStake/moonbeam"},"moonbeam")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Magport/Magnet"},"Magnet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/aleph-node"},"Aleph-node")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hicommonwealth/edgeware-node"},"Edgeware")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ParaState/substrate-ssvm-node"},"ParaState")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gear-tech/gear"},"gear")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cennznet/cennznet"},"CENNZnet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/skyekiwi/skyekiwi-network"},"SkyeKiwi")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/OAK-blockchain"},"OAK-blockchain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/ice-substrate"},"ICE Blockchain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OmniBTC/PSC"},"Polkadot Smart Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/keep-starknet-strange/madara"},"Madara - Cairo/Starknet")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"smart contract chains with novel security approaches, smart contract chains based on existing toolchains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Oracle"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/tellor-io/tellor-pallet"},"Tellor")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/laminar-protocol/open-runtime-module-library/tree/master/oracle"},"Laminar")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/smartcontractkit/chainlink-polkadot"},"Chainlink-polkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/aresprotocols/ares"},"Ares Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Kylin-Network/kylin-node"},"Kylin Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/interlay/interbtc-clients/tree/master/oracle"},"interbtc-clients oracle")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/anonima"},"Anonima")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SaaS3-Foundation/dRuntime-fat"},"SaaS3")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tellor-io/tellor-parachain-contracts"},"Tellor")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/diadata-org/bridgestate-ocw"},"Bridgestate Oracle")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identity/DID"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/parami-foundation/parami-blockchain"},"Parami")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/litentry/litentry-parachain"},"Litentry")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/pallet-did"},"pallet-did")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/prasad-kumkar/dot-id"},"dot-id")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IoT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/NodleCode/chain"},"Nodle")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DataHighway-DHX/node"},"MXC/DataHighway")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/peaqnetwork/peaq-network-node"},"peaq-network-node")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Verifiable Claims"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/KILTprotocol/kilt-node"},"KILT")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/docknetwork/dock-substrate"},"Dock")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fennelLabs/Fennel-Protocol"},"Fennel Protocol")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Supply chain"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/digicatapult/dscp-node"},"DSCP Node")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Health care"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Music Industry"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Allfeat/Allfeat"},"Allfeat Network")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data Availability"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/availproject/avail"},"Avail")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZeroDAO/melodot"},"Melodot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Social Networking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LibertyDSNP/frequency"},"Frequency")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/social-network/blockchain"},"Social Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subsocial-parachain"},"SubSocial")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZeroDAO/ZeroDAO-node"},"ZeroDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/myriadsocial/myriad-node"},"Myriad Node")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/randombishop/wika_etl"},"Wika Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LibertyDSNP/mrc"},"Project Liberty")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/listenofficial/listen-parachain"},"Listen")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tribal-protocol/tribal_contract"},"Tribal Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rust-0x0/hex-space-protocol-substrate"},"Five Degrees on Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/acuity-social/acuity-substrate"},"Acuity Social")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"Private instant messenger that uses on-chain identity")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance/DAO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/aisland-dao/aisland-node/tree/main"},"Aisland Node")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashed-io/hashed-substrate"},"Hashed Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sunshine-protocol/sunshine-bounty"},"Sunshine DAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NucleiStudio/governance-os"},"Governance OS")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/idavollnetwork/idavoll"},"Idavoll Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DoraFactory/Substrate-Moloch-V2"},"Substrate Moloch")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Qrucial/QRUCIAL-DAO"},"QRUCIAL-DAO")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sctllabs/societal-node"},"Societal")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/daos-org/daos"},"DAOs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/amiyatulu/shivarthu/"},"Shivarthu")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/faterium"},"Faterium")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/decentration/apps"},"Supersig")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/deep-ink-ventures/genesis-dao-node"},"GenesisDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dao-entrance/dao-entrance-node"},"DAO Entrance")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/liberland/liberland_substrate"},"Liberland")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/consul/consul"},"Consul")," - Open Government and E-Participation Web Software")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Prediction Markets and Futarchy"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/zeitgeistpm/zeitgeist"},"Zeitgeist")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/XPredictMarket/NodePredict"},"X Predict Market")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Messaging"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/validitylabs/HOPR-PL-Substrate"},"HOPR")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chainify/nolik"},"Nolik")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Uke-Messaging/uke-pallet"},"Uke")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Belsoft-rs/diffychat-pallet"},"Diffy Chat")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"File Storage, Cloud"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subsocial-offchain"},"Subsocial-Offchain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playproject-io/datdot"},"DatDot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/crustio/crust"},"Crust Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rs-ipfs/offchain-ipfs-manual"},"offchain::ipfs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/canyon-network/canyon"},"Canyon Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cumulus2021/cess"},"CESS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/cess-proving-system"},"CESS Proving Subsystem")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ideal-lab5/iris"},"Iris")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/fmd-cess"},"fmd-cess")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DanHenton/pocket-substrate/tree/ipfs-ocw"},"IPFS Frame V3")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/threefoldtech/tfchain"},"Threefold Chain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Apron-Network/apron-node"},"Apron")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TDSoftware/substrate-ipfs"},"IPFS Utilities")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://gitlab.com/dinfra/dinfra"},"DINFRA")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Name Service"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/xaya/substrate-names"},"Substrate Names")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hskang9/substrate-name-service"},"ENS on Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pnsproject/pns-pallets"},"PNS-Pallets")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/HeisenbergLin22/Faceless_milestone2_delivery"},"Faceless")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ff13dfly/Anchor"},"Anchor")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/bit-country/Bit-Country-Blockchain"},"Bit.country")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubGame-Network/subgame-network"},"SubGame")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playzero/subzero"},"subzero")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3gamesofficial/web3games-blockchain"},"Web3Games")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ajuna-network/Ajuna"},"Ajuna Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cryptoviet/gafi"},"Gafi Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://gitlab.com/asylum-space/asylum-item-nft"},"Asylum")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/3Dpass/3DP"},"3DPass")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polketio/toearnfun_flutter_app"},"Polket")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Computation/AI"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Deitos-Network/deitos-ip"},"Deitos Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DeepBrainChain/DeepBrainChain-MainChain"},"DeepBrain Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/anudit/cerebrum"},"AI Infrastructure on Blockchain")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Enable specific use-cases"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/deep-ink-ventures/pallet_hookpoints"},"pallet-hookpoints")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/substrate-node-robonomics"},"Robonomics")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/UniversalDot/pallets"},"UniversalDOT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/EvercityEcosystem/evercity-chain"},"Evercity Sustainable Finance Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fennelLabs/Fennel-Protocol"},"Fennel Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/logion-network/logion-node"},"logion")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Me-Protocol/rusty-protocol-v0.1/"},"Me Protocol")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/QSTN-US/Polkadot-QSTN-v1/"},"QSTN")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/capsule-corp-ternoa/chain"},"ternoa")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/danforbes/pallet-nft"},"FRAME Pallet: NFTs for Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/UniqueNetwork/unique-chain"},"Unique NFT Parachain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DNFT-Team/dnft-substrate-node/tree/master/pallets"},"DNFT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rmrk-team/rmrk-substrate"},"RMRK-Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Popular-Coding/nt-nft"},"NT-NFTs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GreenLemonProtocol/dksap-polkadot"},"Green Lemon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/Basilisk-node"},"Basilisk")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Randomness"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/substrate/tree/randomness-beacon"},"DKG and Randomness Beacon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/random-meat/drand-substrate-client"},"drand-substrate-client")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Licensing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/anagolay/anagolay-chain"},"Anagolay Network")," \u2754"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Banking Integration"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/element36-io/ebics-java-service"},"FIAT on-off-ramp")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Crowdfunding"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ImbueNetwork/imbue"},"Imbue Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zhangjiannan/QFgrant"},"Quadratic Funding pallet by Dora")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/quadratic-funding-pallet/tree/master"},"Quadratic Funding pallet by OAK")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413"},"Minimum Anti-Collusion Infrastructure (MACI)"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Collection of Pallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/open-runtime-module-library"},"Substrate Open Runtime Module Library")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/warehouse"},"warehouse")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/InvArch/InvArch-Frames"},"InvArch FRAME Pallet Library")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Marketplaces"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/WowLabz/dot-marketplace-v2/tree/Phase3_Milestone3"},"Dot Marketplace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashed-io/hashed-substrate/tree/main/pallets/gated-marketplace"},"Gated Marketplace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Popular-Coding/ventur"},"Ventur")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Carbon Credits"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/bitgreen/bitg-node"},"BitGreen")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/EvercityEcosystem/carbon-assets"},"Carbon Assets Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SequesterChain/pallets"},"Sequester Pallets")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"UTXO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Off-Narrative-Labs/Tuxedo"},"Tuxedo")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Moonsong-Labs/moonkit"},"Moonkit")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/substrate-account-filter"},"Substrate Account Filter")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opentensor/subtensor"},"Subtensor")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AdMetaNetwork/admeta"},"AdMeta")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chocolatenetwork/chocolate-node"},"Chocolate Node")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/virto-network/virto-node"},"Virto Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/substrate-validator-set"},"Substrate Validator Set")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DEIPworld/deip-node"},"DEIP")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/debionetwork/debio-node"},"DeBio")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mathwallet/MathChain"},"MathChain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/encointer/encointer-node"},"encointer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/grasslandnetwork/substrate_node"},"Grassland")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rusty-crewmates/substrate-tutorials"},"Substrate-Tutorials")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Fair-Squares/fair-squares"},"Fair Squares")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/totem-tech/totem"},"Totem Live Accounting")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/herou/EscrowPallet"},"Escrow Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NexTokenTech/TREX"},"TREX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/relationlabs/Relation-Graph"},"Relation Graph")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gertt/Invoice"},"Decentralized Invoice")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/redstone-network/redstone-node"},"Redstone Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/WunderbarNetwork/access-control"},"Access Control Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Omniverse-Web3-Labs/omniverse-swap/tree/web3-grant"},"Omniverse DLT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/substrate-ismp"},"ISMP")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/xcmp_prototype_playground"},"XCMP")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dhiway/cord"},"CORD Chain")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Decentralized review/reputation system")))),(0,o.kt)("h3",{id:"host"},"Host"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Rust"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate"},"Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/cumulus"},"Cumulus")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"C++"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/kagome"},"Kagome")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/mayon"},"Mayon")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Go"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/gossamer"},"Gossamer")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Java"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/Fruzhin"},"Fruzhin")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/java-host-research"},"Java Host Research")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"AssemblyScript"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Light Client"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/smol-dot/smoldot"},"smoldot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-connect"},"Substrate Connect")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eqlabs/polkadot-light-client"},"C++ Polkadot Light Client")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/polkadot-conformance"},"Polkadot Conformance")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sigp/polkafuzz"},"Polkafuzz")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"network-maintenance-tools"},"Network Maintenance Tools"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Secure validator setup"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkachu/polkadot-validator"},"Polkadot Validation Node Ansible Setup")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-validator-setup"},"W3F Polkadot Validator Setup")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Nexus2k/polkadot-ansible"},"polkadot-ansible")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"High availability setup"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/luguslabs/archipel"},"Archipel")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/protofire/polkadot-failover-mechanism"},"Polkadot Failover Mechanism")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Datagen-Project/Datagen-Substrate-Grant"},"Datagen")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/substrate-raft"},"High Availability Validator Setup")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Load Balanced Endpoints"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/insight-w3f/terragrunt-polkadot"},"terragrunt-polkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sudoblockio/substrate-meta"},"Geometry Labs' Substrate Meta repo")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Deployment Tools"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Blockdaemon/bpm-sdk"},"Polkadot Package Manager")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/akropolisio/polkahub-monorepo"},"PolkaHub")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AvadoDServer/AVADO-DNP-Polkadot-custom"},"Avado")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-deployer"},"Polkadot Deployer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/for-parity-with-love/unified-collator-node-deployment"},"Unified Collator Deployment")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator monitoring"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/turboflakes/one-t"},"ONE-T")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/subvt-backend"},"SubVT")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SimplyVC/panic"},"P.A.N.I.C.")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/polkalert"},"Polkalert")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nodebreaker0-0/substrate/tree/prometheus_v0.3"},"B-Harvest")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stakezone/nmonpolkadot"},"nmonpolkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ironoa/polkadot-k8s-monitor"},"Polkadot-K8s-Monitor")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-watcher"},"Polkadot-Watcher")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/polkadot-kusama-1kv-telegram-bot"},"1KV Telegram Bot")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator payout management"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Colm3na/substrate-auto-payout"},"Substrate validator auto payout")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-payouts"},"Polkadot Payouts")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emostov/staking-payouts"},"staking-payouts CLI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stakelink/substrate-payctl"},"Payctl")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/turboflakes/crunch"},"crunch")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Staking Miner"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/staking-miner-v2"},"Staking Miner v2")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Nominator Tools"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/miepsik/validators_selection"},"Validator Selection")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/filippoweb3/polkanalyzer"},"Polkanalyzer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/filippoweb3/polkanalyzer-app"},"Polkanalyzer-app")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"signatures"},"Signatures"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"SR25519"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/schnorrkel"},"rust")," \u26aa(contains partial bindings for C, JavaScript, and Python), ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/sr25519-dotnet"},".Net bindings")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/sr25519"},"C")," \u26aa",(0,o.kt)("em",{parentName:"td"},"(old)"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TerenceGe/sr25519-donna"},"C")," \u26aa",(0,o.kt)("em",{parentName:"td"},"(new)"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/soramitsu-sr25519-crust"},"C/C++")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/sr25519_dotnet"},"C#")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/go-schnorrkel"},"Go")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/debuggor/schnorrkel-java"},"java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/sr25519-bindings"},"PHP")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Signature Aggregation"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/apk-proofs"},"apk-proofs")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Distributed key generation (DKG) or management"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/isislovecruft/frost-dalek"},"keygen.rs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/sword"},"Secure Wallet Origin Distribution (SWORD)")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator HSMs"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/buildroot-zondax"},"Zondax Remote Signer")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"MPC"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/orochi-network/orochi-network.github.io"},"Orochi Network")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"consensus"},"Consensus"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"PoC"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/subspace/substrate"},"Spartan")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"PoW"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/pow"},"PoW consensus for Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kulupu/kulupu/tree/master/pow"},"RandomX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/recipes/tree/master/consensus/sha3pow"},"Sha3 PoW")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Block production"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/babe"},"BABE")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/aura"},"Aura")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Finality"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/frame/grandpa"},"GRANDPA")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/AlephBFT"},"AlephBFT")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/PureStake/nimbus"},"Nimbus: Upgradeable consensus framework")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"networking"},"Networking"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"SCALE Codec"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-scale-codec"},"Rust")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-scale-codec-ts"},"TypeScript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/py-scale-codec"},"Python")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/gossamer/tree/development/pkg/scale/"},"Golang Chainsafe")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/scale.go"},"Golang Itering")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/MatthewDarnell/cScale"},"C")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/scale-codec-cpp"},"C++")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/api"},"JavaScript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/as-scale-codec"},"AssemblyScript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/hs-web3/tree/master/packages/scale/src/Codec"},"Haskell")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkaj"},"Java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/scale.rb"},"Ruby")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nbltrust/dart-scale-codec"},"Dart")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/swift-scale-codec"},"Swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/scale-codec-swift"},"scale-codec-swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/scale-codec-kotlin"},"scale-codec-kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/php-scale-codec"},"PHP")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/scale-codec-js-library"},"JavaScript by Soramitsu")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/scale-codec-comparator"},"Scale Codec Comparator")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/darwinia-messages-sol/blob/master/contracts/utils/contracts/ScaleCodec.sol"},"ScaleCodec.sol by Darwinia")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Snowfork/snowbridge/blob/main/core/packages/contracts/contracts/ScaleCodec.sol"},"ScaleCodec.sol by Snowfork")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/arijitAD/dotscale"},"Dotscale")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Networking Framework"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/libp2p/libp2p"},"libp2p")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DHT Crawler"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/atredispartners/dht-crawler-polkadot"},"Go")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkabot"},"Kotlin")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"RPC Tor-like access"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Evanesco-Labs/WhiteNoise.rs"},"WhiteNoise")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"primitives"},"Primitives"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Storage"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/frisitano/merkle-tree-db"},"Merkle Tree DB")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Merkle Proofs"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/solidity-merkle-trees"},"Solidity Trie Verifier")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h2",{id:"contributing"},"Contributing"),(0,o.kt)("p",null,"Pull requests, issues, or other contributions from the community are encouraged! You can not only\nadd specific projects, but also potentially interesting fields/areas which are currently missing in\nthe tech stack."),(0,o.kt)("p",null,"\u2757 All technologies listed above need to be open-source. Ideally, the links\nlead directly to the code."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Note: You will need a GitHub account to suggest changes or open issues. If you do not have one, you\nmay ",(0,o.kt)("a",{parentName:"em",href:"https://github.com/join"},"sign up for free"),".")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ccc1222e.cf52621d.js b/assets/js/ccc1222e.cf52621d.js deleted file mode 100644 index 59373d373a50..000000000000 --- a/assets/js/ccc1222e.cf52621d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6920],{3905:(t,a,e)=>{e.d(a,{Zo:()=>m,kt:()=>k});var r=e(67294);function n(t,a,e){return a in t?Object.defineProperty(t,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[a]=e,t}function o(t,a){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable}))),e.push.apply(e,r)}return e}function i(t){for(var a=1;a=0||(n[e]=t[e]);return n}(t,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,e)&&(n[e]=t[e])}return n}var l=r.createContext({}),h=function(t){var a=r.useContext(l),e=a;return t&&(e="function"==typeof t?t(a):i(i({},a),t)),e},m=function(t){var a=h(t.components);return r.createElement(l.Provider,{value:a},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var a=t.children;return r.createElement(r.Fragment,{},a)}},u=r.forwardRef((function(t,a){var e=t.components,n=t.mdxType,o=t.originalType,l=t.parentName,m=p(t,["components","mdxType","originalType","parentName"]),s=h(e),u=n,k=s["".concat(l,".").concat(u)]||s[u]||d[u]||o;return e?r.createElement(k,i(i({ref:a},m),{},{components:e})):r.createElement(k,i({ref:a},m))}));function k(t,a){var e=arguments,n=a&&a.mdxType;if("string"==typeof t||n){var o=e.length,i=new Array(o);i[0]=u;var p={};for(var l in a)hasOwnProperty.call(a,l)&&(p[l]=a[l]);p.originalType=t,p[s]="string"==typeof t?t:n,i[1]=p;for(var h=2;h{e.r(a),e.d(a,{assets:()=>m,contentTitle:()=>l,default:()=>k,frontMatter:()=>p,metadata:()=>h,toc:()=>s});var r=e(87462),n=e(63366),o=(e(67294),e(3905)),i=["components"],p={id:"build-open-source",title:"Open Source Stack",sidebar_label:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",keywords:["open","source","development","code","resources","tools","apis"],slug:"../build-open-source"},l="Open Source Polkadot Stack \x3c!-- omit in toc --\x3e",h={unversionedId:"build/build-open-source",id:"build/build-open-source",title:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",source:"@site/../docs/build/build-open-source.md",sourceDirName:"build",slug:"/build-open-source",permalink:"/docs/build-open-source",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-open-source.md",tags:[],version:"current",lastUpdatedBy:"github-actions[bot]",lastUpdatedAt:1711358993,formattedLastUpdatedAt:"Mar 25, 2024",frontMatter:{id:"build-open-source",title:"Open Source Stack",sidebar_label:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",keywords:["open","source","development","code","resources","tools","apis"],slug:"../build-open-source"},sidebar:"docs",previous:{title:"Explorer, Data, & Indexing Tools",permalink:"/docs/build-data"},next:{title:"Hackathons",permalink:"/docs/build-hackathon"}},m={},s=[{value:"About",id:"about",level:2},{value:"Layers of Polkadot Stack",id:"layers-of-polkadot-stack",level:2},{value:"Wallets",id:"wallets",level:3},{value:"User Interface",id:"user-interface",level:3},{value:"Tools, APIs, and Languages",id:"tools-apis-and-languages",level:3},{value:"ink! Smart Contracts",id:"ink-smart-contracts",level:3},{value:"Chains and Pallets",id:"chains-and-pallets",level:3},{value:"Host",id:"host",level:3},{value:"Network Maintenance Tools",id:"network-maintenance-tools",level:3},{value:"Signatures",id:"signatures",level:3},{value:"Consensus",id:"consensus",level:3},{value:"Networking",id:"networking",level:3},{value:"Primitives",id:"primitives",level:3},{value:"Contributing",id:"contributing",level:2}],d={toc:s},u="wrapper";function k(t){var a=t.components,e=(0,n.Z)(t,i);return(0,o.kt)(u,(0,r.Z)({},d,e,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"open-source-polkadot-stack--omit-in-toc-"},"Open Source Polkadot Stack "),(0,o.kt)("admonition",{title:"Do your research before using open-source tools",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The tools listed here are open-source and are linked directly to their source code. Before using these tools to build your projects, always ",(0,o.kt)("a",{parentName:"p",href:"/docs/how-to-dyor"},"do your research")," and be aware of ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-scams"},"scams"),".")),(0,o.kt)("p",null,"This page aims to provide an overview of the open-source Polkadot Tech Stack."),(0,o.kt)("p",null,"This is a living document, and we rely on everyone to contribute and help maintain\nit. ",(0,o.kt)("a",{parentName:"p",href:"#contributing"},(0,o.kt)("strong",{parentName:"a"},"Please feel free to make edits and additions via pull requests")),". We\napologize if we missed your project!"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#about"},"About")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#layers-of-polkadot-stack"},"Layers of Polkadot Stack"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#wallets"},"Wallets")," "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#user-interface"},"User Interface")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#tools-apis-and-languages"},"Tools, APIs, and Languages")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#ink-smart-contracts"},"ink! Smart Contracts")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#chains-and-pallets"},"Chains and Pallets")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#host"},"Host")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#network-maintenance-tools"},"Network Maintenance Tools")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#signatures"},"Signatures")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#consensus"},"Consensus")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#networking"},"Networking")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#primitives"},"Primitives")))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#contributing"},"Contributing"))),(0,o.kt)("h2",{id:"about"},"About"),(0,o.kt)("p",null,"The Polkadot Tech Stack is a subset of the Web 3.0 Tech Stack, which consists of the ",(0,o.kt)("strong",{parentName:"p"},"open-source"),"\ntechnologies contributing to and relying on ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/"},"Polkadot"),". It is meant to be used\nfor decentralized application (Dapp) development within numerous verticals, including DeFi, Gaming,\nProvenance and many others not pictured below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"|------|--------|------------|\n| DeFi | Gaming | Provenance |\n|______|________|____________|\n Dapps\n|--------------------------/-|\n| Explorers, Wallets / |\n|------------------------/---|\n| Tools, Apis, Languages/ |\n|----------------------/-----|\n| 2nd layer protocols / |\n|--------------------/-------|\n| Chains / other |\n|------------------/--- --|\n| *Polkadot* | tech |\n|------------------\\---------|\n| P2P, Crypto, Wasm \\ |\n|--------------------\\-------|\n")),(0,o.kt)("h2",{id:"layers-of-polkadot-stack"},"Layers of Polkadot Stack"),(0,o.kt)("p",null,"In the below sections, you can find a list of different layers of the Polkadot Stack."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Maintenance Status"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\ud83d\udfe2 Actively maintained"),(0,o.kt)("li",{parentName:"ul"},"\ud83d\udfe1 Stale (no activity on the main branch for one month)"),(0,o.kt)("li",{parentName:"ul"},"\u26aa Unmaintained (no activity on the main branch for more than three months)")),(0,o.kt)("h3",{id:"wallets"},"Wallets"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Web Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/Multix"},"Multix")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkasafe/polkasafe-ui"},"Polkasafe")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/apps"},"polkadot-js/apps")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman-web"},"Talisman Web Application")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/enkryptcom/mydotwallet"},"mydotwallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subid"},"Sub ID")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Primis-Labs/client"},"Primis")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3finance/sakura"},"Sakura")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/Web3Box-apps"},"Web3Box")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CoongCrafts/coong-wallet"},"Coong Wallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan-multisig-react"},"Subscan Multisig UI - React")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan-multisig-ui"},"Subscan Multisig UI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DoraFactory/dorafactory-multisig"},"Dorafactory-Multisig")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/capi-multisig-app"},"Capi Multisig App")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"User-friendly Wallet based on the ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/frame/recovery"},"Recovery Pallet"),", Web wallets focused on user-onboarding (e.g. using ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/near/near-wallet"},"localStorage"),")")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Desktop Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/nova-spektr"},"nova-spektr")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/omni-desktop-prototype"},"Omni desktop")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Enterprise Wallets")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Browser Extensions"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman"},"Talisman-Extension")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubWallet-Extension"},"SubWallet-Extension")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/enkryptcom/enKrypt"},"Enkrypt")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/extension"},"Polkadot{.js}")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/PolkaGate/polkagate-extension"},"PolkaGate")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainBridgeNetworkTeam/Doter"},"Doter")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GetSpeckle/speckle-browser-extension"},"Speckle OS")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/kuma-wallet"},"Kuma Cross-chain Wallet")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"Sign-in with your Polkadot, Kusama, etc. account.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Mobile Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/nova-wallet-ios"},"Nova Wallet iOS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/nova-wallet-android"},"Nova Wallet Android")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-signer"},"Polkadot Vault")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/fearless-Android"},"Fearless Wallet Android")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/fearless-iOS"},"Fearless Wallet iOS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubWallet-Mobile"},"SubWallet-Mobile")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Kalapaja/kampela-firmware"},"Kampela")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airgap-it/airgap-wallet"},"AirGap")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Interstellar-Network/wallet-app"},"Interstellar Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/luniehq/lunie"},"Lunie")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkawallet-io/polkawallet-flutter"},"Polkawallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/consenlabs/token-core"},"imToken")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stylo-app/stylo"},"Stylo")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fractapp/fractapp/"},"Fractapp")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hypha-dao/hashed-wallet"},"Hashed Wallet")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Burner Wallets/Faucet/Gifts"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/hamidra/dotdrop"},"dotdrop")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/vue-polkadot/apps"},"KodaDot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/astar-faucet-bot"},"Astar Faucet Bot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/karooolis/sybil-resistant-substrate-faucet"},"Generic sybil-resistant faucet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/StringNick/sybil-resistant-chat-bot-substrate-faucet"},"sybil-resistant Chat Bot Faucet")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Faucet (a sybil-resistant way to receive free tokens)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Wallet Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/metamask-snap-polkadot"},"Metamask-Snap by Chainsafe")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"CLI Wallet"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/yxf/subwallet"},"Subwallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/canontech/proxy-hot-wallet"},"Proxy-hot-wallet")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Hardware Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZondaX/ledger-polkadot"},"Ledger Polkadot")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-kusama"},"Ledger Kusama")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-statemint"},"Ledger Statemint")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-statemine"},"Ledger Statemine")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"Trezor")))),(0,o.kt)("h3",{id:"user-interface"},"User Interface"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Block Explorers"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/topmonks/calamar"},"Calamar")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/colorfulnotion/polkaholic"},"Polkaholic")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/explorer-api"},"Polkascan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Colm3na/polkastats-backend"},"Polkastats")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan"},"Subscan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/statescan-v2"},"Statescan")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/edgeware-builders/edgscan"},"Edgscan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/epirus-substrate"},"Sirato")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/ink-substrate-explorer-api"},"ink! Explorer API")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/substats"},"Substats")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hybrid-explorer/hybrid-dapp"},"Hybrid Block Explorer")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Mempool focused explorer (including parachain transaction)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator Dashboards"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-telemetry"},"Polkadot Telemetry")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashquark-io/polkacube-frontend"},"Polkacube")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/buidl-labs/YieldScan"},"YieldScan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-community/hubble/tree/master/app/controllers/polkadot"},"Hubble")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ArthurHoeke/cyclops"},"Cyclops")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3go-xyz/web3go-xyz-v2"},"Web3Go")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/MathCryptoDoc/insights-1kv"},"1kv insights")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Node Explorers"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/protos-research/polkadot-node-explorer"},"Polkadot Node Explorer")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT Explorer"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/nft-gallery"},"NFT Explorer for Kusama & Polkadot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance Dashboards"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/governance-ui"},"Polkadot Delegation Dashboard")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/premiurly/polkassembly"},"Polkassembly")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/dotreasury"},"dotreasury")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/bright-tresury"},"Bright Treasury")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/collaboration"},"OpenSquare offchain voting")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/wpank/open-gov-insights"},"OpenGov Insights")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stake-plus/treasury-tracker"},"Treasury Tracker")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/joepetrowski/opengov-cli"},"OpenGov CLI")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"UI for the Kusama and/or Polkadot treasury (see ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/pull/5715"},"bounty module"),"), UI for Parachain Lease Offering (PLO)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Staking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/staking-rewards-collector"},"Staking Rewards Collector")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/jackson-harris-iii/staking-rewards-viewer"},"Staking Rewards Viewer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cryptolab-network/polkadot-staking-site"},"Polkadot Staking Site")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-staking-dashboard"},"Polkadot Staking Dashboard")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/James-Sangalli/dot-validator-selector"},"Polkadot/Kusama Validator Selector")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/James-Sangalli/dot-staking-income"},"Staking Income CSV Generator")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridge UI"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-bridges-ui"},"Parity Bridges UI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nutbox-dao/donut-interface"},"Donut Interface (Steem - Dot)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RostislavLitovkin/PlutonicationServer"},"Plutonication")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Parachain/Crowdloan"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/jhonalino/parachains.network"},"Parachains.Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CrommVardek/polk-auction-ui"},"PolkAuction")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/10clouds/crowdloan-template"},"Crowdloan Front End Template")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hack-ink/slothunter/"},"Slothunter")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identicon"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://polkadot.cloud/polkicon"},"Polkicon")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RidOne-technologies/polkadot-web-identicon"},"PolkadotWebIdenticon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RidOne-technologies/polkadot-angular-identicon"},"Polkadot Angular IdentIcon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Noc2/Bird-Identicon"},"Bird Identicon")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Coretime"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LasticXYZ/LasticUI"},"Lastic")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RegionX-Labs/RegionX"},"RegionX")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://polkadot.cloud"},"Polkadot Cloud")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/KappaSigmaMu/ksm-app"},"KappaSigmaMu Fratority")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/quadratic-funding-webapp"},"Quadratic Funding Webapp")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://gitlab.com/polkawatch/polkawatch"},"Polkawatch"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bytepayment/bytepay"},"Bytepay")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Delmonicos/charging-management-platform"},"charging-management-platform")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TDSoftware/subidentity-webapp"},"subidentity-webapp")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/paid-qa/"},"OpenSquare Paid QA")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CrossChainLabs-DOT/dotpulse-api"},"DotPulse")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bsn-si/rubeus-smartcontract"},"Rubeus Keeper")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/justmert/eco-flow-frontend"},"Polkaflow")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/chainviz"},"ChainViz")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fidi-tech/dotsight"},"Dotsight")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://docs.sui.io/build/zk_login"},"zkLogin"),", Portfolio Viewer like Zapper or Zerion")))),(0,o.kt)("h3",{id:"tools-apis-and-languages"},"Tools, APIs, and Languages"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Runtime/Parachain frameworks"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk"},"Polkadot Blockchain SDK")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/gosemble"},"Gosemble")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/subsembly"},"Subsembly")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/parachain-utilities"},"Parachain utilities")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gantree-io/gantree-core"},"Gantree")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ideal-lab5"},"Cryptex")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Tools to create parachains with other frameworks, like the ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cosmos/cosmos-sdk"},"Cosmos SDK")," or ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/0xPolygon/cdk-validium-node"},"Polygon CDK"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Client Libraries"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-api"},"Polkadot API - Typescript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/capi"},"Capi - Typescript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/packages/tree/main/sub-api"},"sub-api")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/go-substrate-rpc-client"},"Go")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_api_dotnet"},".Net")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ajuna-network/Ajuna.NetApi"},".NET Standard 2.0")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubstrateGaming/Substrate.NET.Toolchain"},"Substrate .NET Toolchain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"C++")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/finoabanking/substrate-c-tool"},"C")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/hs-web3"},"Haskell")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/api"},"Javascript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-api-sidecar"},"Substrate API Sidecar - TypeScript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/py-substrate-interface"},"Python")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkaj"},"Java (+ Android)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/strategyobject/substrate-client-java"},"Substrate Client Java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scs/substrate-api-client"},"Rust SCS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/subxt"},"Rust Parity (subxt)")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/trevor-crypto"},"Rust pdotc")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/php-substrate-api"},"PHP (gmajor-encrypt)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/neha0921/substrate-interface-package"},"PHP (neha0921)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/frontier"},"RPC-Ethereum")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/Substrate.swift"},"Swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NodleCode/substrate-client-kotlin"},"Kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/substrate-client-kotlin"},"substrate-client-kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/substrate-client-swift"},"substrate-client-swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rankanizer/polkadart"},"Dart")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polywrap/integrations"},"Substrate Core Polywrapper")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/substrate-sdk-ios"},"Substrate SDK iOS")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/substrate-sdk-android"},"Substrate SDK Android")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CoongCrafts/delightfuldot"},"DelightfulDot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"RPC Gateway"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/subway"},"Subway")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Substrate Contract clients"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/go-patract"},"PatractGo")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Easy Runtime Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/hack-ink/subalfred"},"Subalfred")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kaichaosun/substrate-stencil"},"substrate-stencil")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kaichaosun/play-substrate"},"Play Substrate")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/substrate-node-template"},"substrate-node-template")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-playground"},"Substrate Playground")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/as-substrate-runtime"},"AssemblyScript Runtime Generation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/clearloop/sup"},"Substrate Package Manager")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/subsembly"},"Subsembly: Framework for developing AssemblyScript Substrate Runtimes")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bkchr/diener"},"dependency diener")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IDE Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/vscode-substrate"},"Substrate Marketplace VS Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/everstake/vscode-plugin-substrate"},"VS Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/everstake/atom-plugin-substrate"},"Atom Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/zombienet-vscode-extension"},"zombienet extension")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Runtime/Pallet Security"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/srlabs/substrate-runtime-fuzzer"},"Substrate Runtime Fuzzer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/shawntabrizi/substrate-toml-lint"},"Substrate Toml Lint")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kframework/wasm-semantics"},"K specifications")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSecurity/polpatrol"},"PolPatrol - Polkadot Runtime Checker")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Automated Runtime checking tools, economic audit simulator such as ",(0,o.kt)("a",{parentName:"td",href:"https://gauntlet.network/"},"gauntlet.network"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart Contract Languages"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"#ink-smart-contracts"},"ink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ask-lang/ask"},"Ask!")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/slickup/subscript"},"Subscript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hyperledger-labs/solang"},"Solang")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eigerco/pallet-move"},"pallet-move")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pontem-network/sp-move"},"Move VM Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/neatcoin/neatcoin"},"Move smart contract by Neatcoin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pepyakin/substrate-seal-ebpf"},"eBPF Contracts Hackathon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/koute/polkavm"},"PolkaVM")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Functional Programming Languages, other languages with developed toolchains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-introspector"},"Polkadot introspector")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subdirectory/subshell"},"Subshell")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/sc-simnode"},"substrate-simnode")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/halva-suite/halva"},"Halva")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/redspot"},"Redspot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mixbytes/tank"},"MixBytes Tank")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NikVolf/sub-flood"},"sub-flood")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-debug-kit"},"Substrate debug-kit")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/JesseAbram/asset_cli_tool"},"Asset CLI tool")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/JesseAbram/unfinished_testing_tool"},"sub_crash")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chevdor/subwasm"},"subwasm")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ascjones/subsee"},"subsee")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-lab"},"polkadot-lab")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dwellir-public/rpc-perf/"},"RPC-perf")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Static Analysis"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/KaiserKarel/substrace"},"Substrace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/simon-perriard/saft"},"Static analyzer for Substrate FRAME's pallets")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CoinFabrik/scout"},"CoinFabrik Scout")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testnet"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/zombienet"},"Zombienet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/chopsticks"},"Chopsticks")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-launch"},"Polkadot Launch")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/koute/polkadot-starship"},"polkadot-starship")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/maxsam4/fork-off-substrate"},"Fork off Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/try-runtime-cli"},"try-runtime-cli")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/parachain-launch"},"Parachain Launch")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zeeve-App/larch"},"Larch Zombienet GUI")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Benchmarking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk/tree/master/substrate/utils/frame/benchmarking-cli"},"Benchmarking CLI")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-stps"},"Polkadot sTPS")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/0xekez/clockchain"},"Clockchain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/shawntabrizi/substrate-graph-benchmarks"},"Substrate Graph Benchmarks")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Nikhil-Desai-Talentica/substrate-node-template-benchmarking"},"ink! & pallet benchmarking template")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/smart-bench"},"smart-bench")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Blockchain Indexing Engine"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/subsquid/squid-sdk"},"Squid SDK")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hybrid-explorer/hybrid-indexer"},"Hybrid Indexer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-archive"},"Substrate Archive")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_psql_indexer"},"PSQL Indexer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playzero/substrate-graph"},"Substrate Graph")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OnFinality-io/subql"},"Subquery")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/p2p-org/polkadot-profit-transformer"},"MBELT3")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/stick"},"stick")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Infra3-Network/hyperdot"},"Hyperdot")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Blockchain/Event Monitoring"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/guardian"},"Web3 Guardian")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/HugoByte/aurras-event-manager"},"Aurras Event Manager")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hicommonwealth/chain-events"},"@commonwealth/chain-events")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/massbitchain"},"Massbit")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kianenigma/polkadot-basic-notification"},"Polkadot Basic Notifications")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sodazone/ocelloids"},"Ocelloids")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TrackingChains/TrackingChain"},"Tracking Chain")," \u26aa,"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dodorare/crossbow"},"Crossbow")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://amethyst.rs/"},"Amethyst")," + ",(0,o.kt)("a",{parentName:"td",href:"https://substrate.dev/"},"Substrate"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"No-code Platforms"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/NovaBloq/Bubble-Plugin-Polkadot.js"},"EzCode's Polkadot.js plugin on Bubble.io")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Blackprint/nodes-polkadot.js"},"Blackprint Visual Programming Polkadot.js module")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subrelay/interface"},"SubRelay")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman-connect"},"Talisman Connect")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubConnect"},"SubWallet-SubConnect")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nova-wallet/metadata-portal"},"Metadata Portal")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/Tesseract.rs"},"Tesseract")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/walletconnect-v2-monorepo"},"WalletConnect")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/BitGo/BitGoJS/tree/master"},"BitGoJS")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"XCM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/trappist"},"Trappist")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Moonsong-Labs/xcm-tools"},"XCM-tools")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/substrate-api-rpc"},"XCM-tools Golang")," \ud83d\udfe1,",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paraspell/ui-v2"},"ParaSpell")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/t3rn/xbi"},"XBI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/xcm-sdk"},"XCM TS/JS SDK")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/XcmSend/app"},"XCMSend")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sodazone/xcm-monitoring/"},"XCM Monitoring Server")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/moonbeam-foundation/xcm-sdk"},"Moonbeam Foundation XCM-SDK")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/asset-transfer-api"},"asset-transfer-api")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/txwrapper-core"},"txwrapper-core")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/open-web3.js"},"open-web3 JS library")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CycanTech/GVM-Bridge"},"VM-Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/srtool"},"srtool")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chevdor/srtool-cli"},"srtool-cli")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-tip-bot"},"Substrate Tip Bot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/syntifi/ori"},"ORI (Onchain Risk Intelligence)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/albertov19/PolkaTools"},"PolkaTools")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-scripts"},"polkadot-scripts")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/virto-network/sube"},"Sube")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/data-store-sidecar"},"data-store-sidecar")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SugarFunge/sugarfunge-node"},"SugarFunge")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/second-state/substrate-wasmedge"},"substrate-wasmedge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eightfish-org/eightfish"},"EightFish")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sandoxio/sandox"},"Sandox")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/apk-verifier/"},"APK verifier")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"ink-smart-contracts"},"ink! Smart Contracts"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Core Libraries"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink"},"ink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/cargo-contract"},"cargo-contract")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk/tree/master/substrate/frame/contracts"},"pallet-contracts")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Local Nodes"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-contracts-node"},"substrate-contracts-node")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/swankyhub/swanky-cli"},"Swanky")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart Contract Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/drink"},"DRink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/contracts-ui"},"contracts-ui")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Smart-Beaver"},"SmartBeaver"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/h4nsu/openbrush-contracts"},"OpenBrush")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/727-Ventures/sol2ink"},"Sol2Ink")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/protofire/polkadot-contract-wizard"},"Polkadot Contract Wizard")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/ink-wrapper"},"ink-wrapper")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink-playground"},"ink-playground")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockchain-it-hr/ink-remix-plugin"},"ink! Remix Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/standardweb3/signac/"},"Signac")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/avirajkhare00/ink-boxes/"},"ink!-boxes")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/avirajkhare00/ink-wizard"},"ink!-smart-contract-wizard")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Security & Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink-waterfall"},"ink! Waterfall")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/ink-verifier-image"},"Verifier Image for ink!")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Brushfam/patron-backend/"},"Patron")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/scio-labs/inkathon"},"ink!athon Boilerplate")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/useink"},"useink")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scio-labs/use-inkathon"},"useInkathon")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subsquid/squid-sdk/tree/master/substrate/ink-typegen"},"ink-typegen")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Brushfam/typechain-polkadot"},"Typechain Polkadot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IDE Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ink-analyzer/ink-analyzer"},"ink! Analyzer")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridges"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dantenetwork/protocol-stack-for-ink"},"Dante Protocol")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DeFi"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/pendulum-ink-wrapper"},"Pendulum-Ink-Wrapper")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RottenKiwi/Panorama-Swap-INK-SC"},"Panorama Swap")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Juminstock/ink_bank"},"ink_bank")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/realnimish/polkadot-amm"},"Polkadot AMM")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/veradefi/defi"},"Vera")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nsure-tech/dot-contract"},"Nsure Insurance")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CycanTech/ELC"},"Everlasting Cash")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Coinversation/coinpro"},"Coinversation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zenlinkpro/zenlink-dex-contract"},"zenlink-dex-contract")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ReserveLabs/AlgoCash"},"AlgoCash")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"New seigniorage-style stable coins")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/OpenEmojiBattler/open-emoji-battler"},"Open Emoji Battler")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/WiktorStarczewski/newomega.polkadot/blob/master/newomega_delegator/newomega/newomega.rs"},"NewOmega")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DAO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/SyncraDAO/modular-dao"},"SyncraDAO")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/subDAO-contracts"},"subDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RainbowcityFoundation/RainbowDAO-Protocol-Ink-milestone_1"},"RainbowDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Mangoboxlabs/Mangoboxink"},"MangoBox")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Mangoboxlabs/MangoSaleV2"},"MangoSale")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identity/DID"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TheDotflow"},"Dotflow")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Oracles"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/diadata-org/dia-wasm-oracle"},"DIA WASM Oracle")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Spam Protection"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/prosopo/captcha"},"Prosopo")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/AbaxFinance/Governance"},"Abax Governance")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ArtZero-io/Contracts"},"ArtZero")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/pnsproject/ink-aa"},"Polkadot Smart Account")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/swankyhub/magink-dapp"},"magink")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/ink-test-contracts"},"ink-test-contracts")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/agryaznov/candle-auction-ink"},"Candle Auctions")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubDAO-Network/polkasign-contract"},"polkasign-contract")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bsn-si/ocex-cli"},"OCEX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RoloiMoney/roloi-polkadot-w3f-grant"},"Roloi")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadrys/openPayroll"},"OpenPayroll")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/InkSmartContract/BlockchainFoodOrder"},"BlockchainFoodOrder")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"chains-and-pallets"},"Chains and Pallets"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Scalable Transactions"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/perun-network/perun-polkadot-pallet"},"Perun channels")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/perun-network/perun-polkadot-demo"},"CLI demo of Perun")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/Astar"},"Astar")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/celer-network/cChannel-substrate"},"Celer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GunClear/Gunero"},"Gunclear")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/BCS-Labs/tpscore-etl-system"},"TPScore")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/auguth/pocs"},"proof-of-contract-stake")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"roll-ups, DAG-based consensus mechanisms, side chains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridges"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/interlay/interbtc"},"interBTC")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/dkg-substrate"},"DKG Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sygmaprotocol/sygma-substrate-pallets"},"Sygma")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bifrost-finance/bifrost-eos-relay"},"EOS by Bifrost")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-bridge"},"POA - Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/akropolisio/POC-polkadai-bridge"},"Substrate - Ethereum DAI Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-bridge-relay"},"Substrate - Substrate Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chainx-org/ChainX"},"BTC by ChainX")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChorusOne/wormhole-bridge"},"Cosmos-Substrate bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/octopus-network/substrate-ibc"},"Substrate IBC Pallet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Snowfork/polkadot-ethereum"},"Polkadot Ethereum Bridge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/darwinia"},"Darwinia")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/spacewalk"},"Spacewalk: a Stellar bridge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/filecoindot"},"Filecoindot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/axelar-cgp-substrate/tree/main"},"Axelar-Substrate")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"ZCash")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Privacy"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LayerXcom/zero-chain"},"ZeroChain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/xx-labs/xxchain"},"xx network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Phala-Network/phala-blockchain"},"pLibra (Phala Network)")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/automata-network/automata"},"Automata Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zero-network/zero"},"Zero Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/appliedblockchain/silentdata-polkadot"},"Silent Data")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/anoma/masp"},"Multi-Asset Shielded Pool (MASP)")," , ",(0,o.kt)("a",{parentName:"td",href:"https://arxiv.org/pdf/2009.01020.pdf"},"Zkay"),", ",(0,o.kt)("a",{parentName:"td",href:"https://eprint.iacr.org/2018/962.pdf"},"Zexe"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"ZKP"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/zeropoolnetwork/zeropool-substrate-groth16-example"},"ZeroPool")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/megaclite"},"Megaclite")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/zkmega"},"zkMega")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/plonk"},"PLONK for Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/protocol-substrate"},"Webb Anchor Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/zk-snarks-with-substrate/"},"zk-SNARKs tutorial")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zkvers/substrate-zk"},"substrate-zk")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"TEE"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Acurast/acurast-core"},"Acurast")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/integritee-network/worker"},"Integritee")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scs/substraTEE"},"substraTEE")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/wetee-dao/chain"},"WeTEE")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/keysafe-protocol/keysafe-app"},"Keysafe Protocol")," \u26aa")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DeFi"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/kapilsinha/privadex"},"PrivaDEX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/uinb/fusotao"},"Fusotao")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/reef-defi/reef-chain"},"Reef")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Diora-Network/Diora"},"Diora")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/pendulum"},"Pendulum Chain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/compound-finance/gateway"},"Compound Gateway")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/parallel-finance/parallel"},"Parallel Finance")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/PINT"},"PINT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/laminar-protocol/laminar-chain"},"Laminar Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/Acala"},"Acala")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/centrifuge-chain"},"Centrifuge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stafiprotocol/stafi-node"},"Stafi")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/y2labs-0sh/definex"},"Definex")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAXFoundation/parrot"},"OAX Foundation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/alexxuyang/substrate-dex"},"Cybex")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zenlinkpro/pallet-zenlink"},"Zenlink")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/lsaether/pallet-swaps"},"Swaps Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Polkadex-Substrate/Polkadex/tree/master"},"Polkadex")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subdarkdex/subdex-parachain"},"SubDEX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/hack.HydraDX-node"},"HydraDX")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/apopiak/stablecoin"},"Substrate Stablecoin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/digitalnativeinc/standard-substrate"},"Standard protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sora-xor/sora2-network"},"Polkaswap")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/equilibrium-eosdt/equilibrium-curve-amm"},"Curve AMM")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/konomi-network/cumulus/"},"Konomi Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nutsfinance/stable-asset"},"Stable Asset")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/atscaletech/libra"},"Libra Payment")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mangata-finance/mangata-node"},"Mangata")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tidelabs/tidechain"},"Tidechain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/Basilisk-node"},"Basilisk")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/PolymeshAssociation/Polymesh"},"Polymesh")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"DEX with privacy and confidentiality features such as those found in a ",(0,o.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Dark_pool"},"dark pool"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart contract chains"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/PureStake/moonbeam"},"moonbeam")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Magport/Magnet"},"Magnet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/aleph-node"},"Aleph-node")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hicommonwealth/edgeware-node"},"Edgeware")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ParaState/substrate-ssvm-node"},"ParaState")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gear-tech/gear"},"gear")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cennznet/cennznet"},"CENNZnet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/skyekiwi/skyekiwi-network"},"SkyeKiwi")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/OAK-blockchain"},"OAK-blockchain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/ice-substrate"},"ICE Blockchain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OmniBTC/PSC"},"Polkadot Smart Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/keep-starknet-strange/madara"},"Madara - Cairo/Starknet")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"smart contract chains with novel security approaches, smart contract chains based on existing toolchains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Oracle"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/tellor-io/tellor-pallet"},"Tellor")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/laminar-protocol/open-runtime-module-library/tree/master/oracle"},"Laminar")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/smartcontractkit/chainlink-polkadot"},"Chainlink-polkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/aresprotocols/ares"},"Ares Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Kylin-Network/kylin-node"},"Kylin Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/interlay/interbtc-clients/tree/master/oracle"},"interbtc-clients oracle")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/anonima"},"Anonima")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SaaS3-Foundation/dRuntime-fat"},"SaaS3")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tellor-io/tellor-parachain-contracts"},"Tellor")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/diadata-org/bridgestate-ocw"},"Bridgestate Oracle")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identity/DID"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/parami-foundation/parami-blockchain"},"Parami")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/litentry/litentry-parachain"},"Litentry")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/pallet-did"},"pallet-did")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/prasad-kumkar/dot-id"},"dot-id")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IoT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/NodleCode/chain"},"Nodle")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DataHighway-DHX/node"},"MXC/DataHighway")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/peaqnetwork/peaq-network-node"},"peaq-network-node")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Verifiable Claims"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/KILTprotocol/kilt-node"},"KILT")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/docknetwork/dock-substrate"},"Dock")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fennelLabs/Fennel-Protocol"},"Fennel Protocol")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Supply chain"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/digicatapult/dscp-node"},"DSCP Node")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Health care"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Music Industry"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Allfeat/Allfeat"},"Allfeat Network")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data Availability"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/availproject/avail"},"Avail")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZeroDAO/melodot"},"Melodot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Social Networking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LibertyDSNP/frequency"},"Frequency")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/social-network/blockchain"},"Social Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subsocial-parachain"},"SubSocial")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZeroDAO/ZeroDAO-node"},"ZeroDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/myriadsocial/myriad-node"},"Myriad Node")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/randombishop/wika_etl"},"Wika Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LibertyDSNP/mrc"},"Project Liberty")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/listenofficial/listen-parachain"},"Listen")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tribal-protocol/tribal_contract"},"Tribal Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rust-0x0/hex-space-protocol-substrate"},"Five Degrees on Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/acuity-social/acuity-substrate"},"Acuity Social")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"Private instant messenger that uses on-chain identity")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance/DAO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/aisland-dao/aisland-node/tree/main"},"Aisland Node")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashed-io/hashed-substrate"},"Hashed Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sunshine-protocol/sunshine-bounty"},"Sunshine DAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NucleiStudio/governance-os"},"Governance OS")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/idavollnetwork/idavoll"},"Idavoll Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DoraFactory/Substrate-Moloch-V2"},"Substrate Moloch")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Qrucial/QRUCIAL-DAO"},"QRUCIAL-DAO")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sctllabs/societal-node"},"Societal")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/daos-org/daos"},"DAOs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/amiyatulu/shivarthu/"},"Shivarthu")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/faterium"},"Faterium")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/decentration/apps"},"Supersig")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/deep-ink-ventures/genesis-dao-node"},"GenesisDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dao-entrance/dao-entrance-node"},"DAO Entrance")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/liberland/liberland_substrate"},"Liberland")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/consul/consul"},"Consul")," - Open Government and E-Participation Web Software")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Prediction Markets and Futarchy"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/zeitgeistpm/zeitgeist"},"Zeitgeist")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/XPredictMarket/NodePredict"},"X Predict Market")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Messaging"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/validitylabs/HOPR-PL-Substrate"},"HOPR")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chainify/nolik"},"Nolik")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Uke-Messaging/uke-pallet"},"Uke")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Belsoft-rs/diffychat-pallet"},"Diffy Chat")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"File Storage, Cloud"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subsocial-offchain"},"Subsocial-Offchain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playproject-io/datdot"},"DatDot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/crustio/crust"},"Crust Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rs-ipfs/offchain-ipfs-manual"},"offchain::ipfs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/canyon-network/canyon"},"Canyon Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cumulus2021/cess"},"CESS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/cess-proving-system"},"CESS Proving Subsystem")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ideal-lab5/iris"},"Iris")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/fmd-cess"},"fmd-cess")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DanHenton/pocket-substrate/tree/ipfs-ocw"},"IPFS Frame V3")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/threefoldtech/tfchain"},"Threefold Chain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Apron-Network/apron-node"},"Apron")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TDSoftware/substrate-ipfs"},"IPFS Utilities")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://gitlab.com/dinfra/dinfra"},"DINFRA")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Name Service"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/xaya/substrate-names"},"Substrate Names")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hskang9/substrate-name-service"},"ENS on Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pnsproject/pns-pallets"},"PNS-Pallets")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/HeisenbergLin22/Faceless_milestone2_delivery"},"Faceless")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ff13dfly/Anchor"},"Anchor")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/bit-country/Bit-Country-Blockchain"},"Bit.country")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubGame-Network/subgame-network"},"SubGame")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playzero/subzero"},"subzero")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3gamesofficial/web3games-blockchain"},"Web3Games")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ajuna-network/Ajuna"},"Ajuna Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cryptoviet/gafi"},"Gafi Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://gitlab.com/asylum-space/asylum-item-nft"},"Asylum")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/3Dpass/3DP"},"3DPass")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polketio/toearnfun_flutter_app"},"Polket")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Computation/AI"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Deitos-Network/deitos-ip"},"Deitos Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DeepBrainChain/DeepBrainChain-MainChain"},"DeepBrain Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/anudit/cerebrum"},"AI Infrastructure on Blockchain")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Enable specific use-cases"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/deep-ink-ventures/pallet_hookpoints"},"pallet-hookpoints")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/substrate-node-robonomics"},"Robonomics")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/UniversalDot/pallets"},"UniversalDOT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/EvercityEcosystem/evercity-chain"},"Evercity Sustainable Finance Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fennelLabs/Fennel-Protocol"},"Fennel Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/logion-network/logion-node"},"logion")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Me-Protocol/rusty-protocol-v0.1/"},"Me Protocol")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/QSTN-US/Polkadot-QSTN-v1/"},"QSTN")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/capsule-corp-ternoa/chain"},"ternoa")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/danforbes/pallet-nft"},"FRAME Pallet: NFTs for Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/UniqueNetwork/unique-chain"},"Unique NFT Parachain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DNFT-Team/dnft-substrate-node/tree/master/pallets"},"DNFT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rmrk-team/rmrk-substrate"},"RMRK-Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Popular-Coding/nt-nft"},"NT-NFTs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GreenLemonProtocol/dksap-polkadot"},"Green Lemon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/Basilisk-node"},"Basilisk")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Randomness"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/substrate/tree/randomness-beacon"},"DKG and Randomness Beacon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/random-meat/drand-substrate-client"},"drand-substrate-client")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Licensing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/anagolay/anagolay-chain"},"Anagolay Network")," \u2754"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Banking Integration"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/element36-io/ebics-java-service"},"FIAT on-off-ramp")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Crowdfunding"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ImbueNetwork/imbue"},"Imbue Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zhangjiannan/QFgrant"},"Quadratic Funding pallet by Dora")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/quadratic-funding-pallet/tree/master"},"Quadratic Funding pallet by OAK")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413"},"Minimum Anti-Collusion Infrastructure (MACI)"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Collection of Pallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/open-runtime-module-library"},"Substrate Open Runtime Module Library")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/warehouse"},"warehouse")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/InvArch/InvArch-Frames"},"InvArch FRAME Pallet Library")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Marketplaces"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/WowLabz/dot-marketplace-v2/tree/Phase3_Milestone3"},"Dot Marketplace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashed-io/hashed-substrate/tree/main/pallets/gated-marketplace"},"Gated Marketplace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Popular-Coding/ventur"},"Ventur")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Carbon Credits"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/bitgreen/bitg-node"},"BitGreen")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/EvercityEcosystem/carbon-assets"},"Carbon Assets Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SequesterChain/pallets"},"Sequester Pallets")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"UTXO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Off-Narrative-Labs/Tuxedo"},"Tuxedo")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Moonsong-Labs/moonkit"},"Moonkit")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/substrate-account-filter"},"Substrate Account Filter")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opentensor/subtensor"},"Subtensor")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AdMetaNetwork/admeta"},"AdMeta")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chocolatenetwork/chocolate-node"},"Chocolate Node")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/virto-network/virto-node"},"Virto Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/substrate-validator-set"},"Substrate Validator Set")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DEIPworld/deip-node"},"DEIP")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/debionetwork/debio-node"},"DeBio")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mathwallet/MathChain"},"MathChain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/encointer/encointer-node"},"encointer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/grasslandnetwork/substrate_node"},"Grassland")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rusty-crewmates/substrate-tutorials"},"Substrate-Tutorials")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Fair-Squares/fair-squares"},"Fair Squares")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/totem-tech/totem"},"Totem Live Accounting")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/herou/EscrowPallet"},"Escrow Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NexTokenTech/TREX"},"TREX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/relationlabs/Relation-Graph"},"Relation Graph")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gertt/Invoice"},"Decentralized Invoice")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/redstone-network/redstone-node"},"Redstone Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/WunderbarNetwork/access-control"},"Access Control Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Omniverse-Web3-Labs/omniverse-swap/tree/web3-grant"},"Omniverse DLT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/substrate-ismp"},"ISMP")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/xcmp_prototype_playground"},"XCMP")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dhiway/cord"},"CORD Chain")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Decentralized review/reputation system")))),(0,o.kt)("h3",{id:"host"},"Host"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Rust"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate"},"Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/cumulus"},"Cumulus")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"C++"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/kagome"},"Kagome")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/mayon"},"Mayon")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Go"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/gossamer"},"Gossamer")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Java"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/Fruzhin"},"Fruzhin")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/java-host-research"},"Java Host Research")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"AssemblyScript"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Light Client"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/smol-dot/smoldot"},"smoldot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-connect"},"Substrate Connect")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eqlabs/polkadot-light-client"},"C++ Polkadot Light Client")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/polkadot-conformance"},"Polkadot Conformance")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sigp/polkafuzz"},"Polkafuzz")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"network-maintenance-tools"},"Network Maintenance Tools"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Secure validator setup"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkachu/polkadot-validator"},"Polkadot Validation Node Ansible Setup")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-validator-setup"},"W3F Polkadot Validator Setup")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Nexus2k/polkadot-ansible"},"polkadot-ansible")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"High availability setup"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/luguslabs/archipel"},"Archipel")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/protofire/polkadot-failover-mechanism"},"Polkadot Failover Mechanism")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Datagen-Project/Datagen-Substrate-Grant"},"Datagen")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/substrate-raft"},"High Availability Validator Setup")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Load Balanced Endpoints"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/insight-w3f/terragrunt-polkadot"},"terragrunt-polkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sudoblockio/substrate-meta"},"Geometry Labs' Substrate Meta repo")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Deployment Tools"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Blockdaemon/bpm-sdk"},"Polkadot Package Manager")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/akropolisio/polkahub-monorepo"},"PolkaHub")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AvadoDServer/AVADO-DNP-Polkadot-custom"},"Avado")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-deployer"},"Polkadot Deployer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/for-parity-with-love/unified-collator-node-deployment"},"Unified Collator Deployment")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator monitoring"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/turboflakes/one-t"},"ONE-T")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/subvt-backend"},"SubVT")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SimplyVC/panic"},"P.A.N.I.C.")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/polkalert"},"Polkalert")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nodebreaker0-0/substrate/tree/prometheus_v0.3"},"B-Harvest")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stakezone/nmonpolkadot"},"nmonpolkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ironoa/polkadot-k8s-monitor"},"Polkadot-K8s-Monitor")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-watcher"},"Polkadot-Watcher")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/polkadot-kusama-1kv-telegram-bot"},"1KV Telegram Bot")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator payout management"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Colm3na/substrate-auto-payout"},"Substrate validator auto payout")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-payouts"},"Polkadot Payouts")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emostov/staking-payouts"},"staking-payouts CLI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stakelink/substrate-payctl"},"Payctl")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/turboflakes/crunch"},"crunch")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Staking Miner"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/staking-miner-v2"},"Staking Miner v2")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Nominator Tools"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/miepsik/validators_selection"},"Validator Selection")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/filippoweb3/polkanalyzer"},"Polkanalyzer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/filippoweb3/polkanalyzer-app"},"Polkanalyzer-app")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"signatures"},"Signatures"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"SR25519"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/schnorrkel"},"rust")," \u26aa(contains partial bindings for C, JavaScript, and Python), ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/sr25519-dotnet"},".Net bindings")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/sr25519"},"C")," \u26aa",(0,o.kt)("em",{parentName:"td"},"(old)"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TerenceGe/sr25519-donna"},"C")," \u26aa",(0,o.kt)("em",{parentName:"td"},"(new)"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/soramitsu-sr25519-crust"},"C/C++")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/sr25519_dotnet"},"C#")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/go-schnorrkel"},"Go")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/debuggor/schnorrkel-java"},"java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/sr25519-bindings"},"PHP")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Signature Aggregation"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/apk-proofs"},"apk-proofs")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Distributed key generation (DKG) or management"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/isislovecruft/frost-dalek"},"keygen.rs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/sword"},"Secure Wallet Origin Distribution (SWORD)")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator HSMs"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/buildroot-zondax"},"Zondax Remote Signer")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"MPC"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/orochi-network/orochi-network.github.io"},"Orochi Network")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"consensus"},"Consensus"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"PoC"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/subspace/substrate"},"Spartan")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"PoW"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/pow"},"PoW consensus for Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kulupu/kulupu/tree/master/pow"},"RandomX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/recipes/tree/master/consensus/sha3pow"},"Sha3 PoW")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Block production"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/babe"},"BABE")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/aura"},"Aura")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Finality"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/frame/grandpa"},"GRANDPA")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/AlephBFT"},"AlephBFT")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/PureStake/nimbus"},"Nimbus: Upgradeable consensus framework")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"networking"},"Networking"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"SCALE Codec"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-scale-codec"},"Rust")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-scale-codec-ts"},"TypeScript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/py-scale-codec"},"Python")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/gossamer/tree/development/pkg/scale/"},"Golang Chainsafe")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/scale.go"},"Golang Itering")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/MatthewDarnell/cScale"},"C")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/scale-codec-cpp"},"C++")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/api"},"JavaScript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/as-scale-codec"},"AssemblyScript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/hs-web3/tree/master/packages/scale/src/Codec"},"Haskell")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkaj"},"Java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/scale.rb"},"Ruby")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nbltrust/dart-scale-codec"},"Dart")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/swift-scale-codec"},"Swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/scale-codec-swift"},"scale-codec-swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/scale-codec-kotlin"},"scale-codec-kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/php-scale-codec"},"PHP")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/scale-codec-js-library"},"JavaScript by Soramitsu")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/scale-codec-comparator"},"Scale Codec Comparator")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/darwinia-messages-sol/blob/master/contracts/utils/contracts/ScaleCodec.sol"},"ScaleCodec.sol by Darwinia")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Snowfork/snowbridge/blob/main/core/packages/contracts/contracts/ScaleCodec.sol"},"ScaleCodec.sol by Snowfork")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/arijitAD/dotscale"},"Dotscale")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Networking Framework"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/libp2p/libp2p"},"libp2p")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DHT Crawler"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/atredispartners/dht-crawler-polkadot"},"Go")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkabot"},"Kotlin")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"RPC Tor-like access"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Evanesco-Labs/WhiteNoise.rs"},"WhiteNoise")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"primitives"},"Primitives"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Storage"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/frisitano/merkle-tree-db"},"Merkle Tree DB")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Merkle Proofs"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/solidity-merkle-trees"},"Solidity Trie Verifier")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h2",{id:"contributing"},"Contributing"),(0,o.kt)("p",null,"Pull requests, issues, or other contributions from the community are encouraged! You can not only\nadd specific projects, but also potentially interesting fields/areas which are currently missing in\nthe tech stack."),(0,o.kt)("p",null,"\u2757 All technologies listed above need to be open-source. Ideally, the links\nlead directly to the code."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Note: You will need a GitHub account to suggest changes or open issues. If you do not have one, you\nmay ",(0,o.kt)("a",{parentName:"em",href:"https://github.com/join"},"sign up for free"),".")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cd144357.4c7efdf9.js b/assets/js/cd144357.83cfa5bf.js similarity index 57% rename from assets/js/cd144357.4c7efdf9.js rename to assets/js/cd144357.83cfa5bf.js index 3b826fafe9e6..a1c9fe6c0622 100644 --- a/assets/js/cd144357.4c7efdf9.js +++ b/assets/js/cd144357.83cfa5bf.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9779],{14423:a=>{a.exports=JSON.parse('{"title":"Polkadot\'s Parachains","description":"Everything about Polkadot\'s Parachains.","slug":"/learn-parachains-index","permalink":"/docs/learn-parachains-index","navigation":{"previous":{"title":"Validator","permalink":"/docs/learn-validator"},"next":{"title":"Introduction to Parachains","permalink":"/docs/learn-parachains"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9779],{14423:a=>{a.exports=JSON.parse('{"title":"Polkadot\'s Parachains","description":"Everything about Polkadot\'s Parachains.","slug":"/learn-parachains-index","permalink":"/docs/learn-parachains-index","navigation":{"previous":{"title":"Architecture","permalink":"/docs/learn-architecture"},"next":{"title":"Introduction to Parachains","permalink":"/docs/learn-parachains"}}}')}}]); \ No newline at end of file diff --git a/assets/js/cda87995.07fc26a3.js b/assets/js/cda87995.07fc26a3.js new file mode 100644 index 000000000000..dfad038cfb28 --- /dev/null +++ b/assets/js/cda87995.07fc26a3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3933],{3905:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>m});var o=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,o)}return a}function n(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var s=o.createContext({}),p=function(t){var e=o.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):n(n({},e),t)),a},u=function(t){var e=p(t.components);return o.createElement(s.Provider,{value:e},t.children)},c="mdxType",h={inlineCode:"code",wrapper:function(t){var e=t.children;return o.createElement(o.Fragment,{},e)}},d=o.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,s=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),c=p(a),d=r,m=c["".concat(s,".").concat(d)]||c[d]||h[d]||i;return a?o.createElement(m,n(n({ref:e},u),{},{components:a})):o.createElement(m,n({ref:e},u))}));function m(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,n=new Array(i);n[0]=d;var l={};for(var s in e)hasOwnProperty.call(e,s)&&(l[s]=e[s]);l.originalType=t,l[c]="string"==typeof t?t:r,n[1]=l;for(var p=2;p{a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>p,toc:()=>c});var o=a(87462),r=a(63366),i=(a(67294),a(3905)),n=["components"],l={id:"build-tools-index",title:"Tool Index",sidebar_label:"Tool Index",description:"Reference point for a list of tools to support your development.",keywords:["tools","clients","libraries","explorers","monitor","data","SCALE"],slug:"../build-tools-index"},s=void 0,p={unversionedId:"build/build-tools-index",id:"build/build-tools-index",title:"Tool Index",description:"Reference point for a list of tools to support your development.",source:"@site/../docs/build/build-tools-index.md",sourceDirName:"build",slug:"/build-tools-index",permalink:"/docs/build-tools-index",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-tools-index.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711540791,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"build-tools-index",title:"Tool Index",sidebar_label:"Tool Index",description:"Reference point for a list of tools to support your development.",keywords:["tools","clients","libraries","explorers","monitor","data","SCALE"],slug:"../build-tools-index"},sidebar:"docs",previous:{title:"Node Management",permalink:"/docs/build-node-management"},next:{title:"Explorer, Data, & Indexing Tools",permalink:"/docs/build-data"}},u={},c=[{value:"Wallets",id:"wallets",level:2},{value:"Block Explorers",id:"block-explorers",level:2},{value:"Blockchain Analytics",id:"blockchain-analytics",level:2},{value:"Network Monitoring & Reporting",id:"network-monitoring--reporting",level:2},{value:"Clients",id:"clients",level:2},{value:"Tools",id:"tools",level:2},{value:"IDEs",id:"ides",level:2},{value:"UI",id:"ui",level:2},{value:"Libraries",id:"libraries",level:2},{value:"Polkadot-JS API",id:"polkadot-js-api",level:3},{value:"Alternative Libraries",id:"alternative-libraries",level:3},{value:"CLI Tools",id:"cli-tools",level:3},{value:"WASM",id:"wasm",level:3},{value:"RPC and API Tools",id:"rpc-and-api-tools",level:3},{value:"SCALE Codec",id:"scale-codec",level:3},{value:"Data Crawling and Conversion",id:"data-crawling-and-conversion",level:2}],h={toc:c},d="wrapper";function m(t){var e=t.components,a=(0,r.Z)(t,n);return(0,i.kt)(d,(0,o.Z)({},h,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Here, we provide a list of tools available for your development needs. They are sorted by context.\nIf you're actively maintaining a tool that might be useful to other Polkadot, Kusama or Substrate\ndevelopers, feel free to ",(0,i.kt)("a",{parentName:"p",href:"/docs/contributing"},"add it in"),"."),(0,i.kt)("h2",{id:"wallets"},"Wallets"),(0,i.kt)("p",null,"Please see the ",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"Wallets")," page."),(0,i.kt)("h2",{id:"block-explorers"},"Block Explorers"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps Explorer")," - Polkadot dashboard block\nexplorer. Supports dozens of other networks, including Kusama, Westend, and other remote or local\nendpoints. ",(0,i.kt)("a",{parentName:"li",href:"https://cloudflare-ipfs.com/ipns/dotapps.io"},"Access via IPFS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://subscan.io"},"Subscan")," - Blockchain explorer for Substrate chains.\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/itering/subscan-essentials"},"Repo"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://3xpl.com/polkadot"},"3xpl.com")," - Fastest ad-free universal block explorer and JSON API with\nPolkadot support."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://blockchair.com/polkadot"},"Blockchair.com")," - Universal blockchain explorer and search\nengine with Polkadot support."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.statescan.io/"},"Statescan.io")," - Polkadot & Kusama Blockchain explorer.")),(0,i.kt)("h2",{id:"blockchain-analytics"},"Blockchain Analytics"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://app.web3go.xyz/#/"},"Web3go")," - An open platform for everyone to play with, curate and\nvisualize multi-blockchain data"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkawatch.app/"},"Polkawatch")," - Polkadot Decentralization Analytics")),(0,i.kt)("h2",{id:"network-monitoring--reporting"},"Network Monitoring & Reporting"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://telemetry.polkadot.io/"},"Polkadot Telemetry Service")," - Network information including what\nnodes are running the chain, what software versions they are running, sync status, and location."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://gitlab.com/Polkabot"},"Polkabot")," - Polkadot network monitoring and reporting using Matrix\n(Riot / Element) chat. Users may create custom bot plugins.\n",(0,i.kt)("a",{parentName:"li",href:"https://medium.com/polkadot-network/polkabot-a3dba18c20c8"},"Blogpost"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/Ryabina-io/substratebot"},"Ryabina's Telegram Bot")," - A Telegram bot for\nmonitoring on-chain events of Substrate chains.\n",(0,i.kt)("a",{parentName:"li",href:"https://gitlab.com/Polkabot/polkabot"},"GitHub Repository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkastats.io/"},"PolkaStats")," - Polkadot network statistics (includes Kusama). Shows\nnetwork information and staking details from validators and intentions.\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/Colm3na/polkastats-v2/"},"GitHub Repository"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/SimplyVC/panic"},"Panic")," - A node monitoring and alert server for validators."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/open-web3-stack/guardian"},"OpenWeb3/Guardian")," - A CLI tool and JS library to\nmonitor on chain states and events."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/sodazone/ocelloids"},"Ocelloids SDK")," - Typescript SDK for multi-chain monitoring\nthat supports domain-specific logic for different pallets."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/ArthurHoeke/cyclops/"},"Cyclops Dashboard")," - a validator dashboard application\nthat helps Polkadot network validators keep track of all their validators, their staking rewards,\nand performance.")),(0,i.kt)("h2",{id:"clients"},"Clients"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot"},"Polkadot")," - The original Rust implementation of the\nPolkadot Host."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/kagome"},"Kagome")," - A C++ Polkadot implementation of the Polkadot Host\ndeveloped by ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu"},"Soramitsu"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/ChainSafe/gossamer"},"Gossamer")," - A Go implementation of the Polkadot Host\ndeveloped by ",(0,i.kt)("a",{parentName:"li",href:"https://chainsafe.io/"},"ChainSafe Systems"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/txwrapper"},"TX Wrapper")," - Helper functions for offline transaction\ngeneration.")),(0,i.kt)("h2",{id:"tools"},"Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate"},"Substrate")," - Blockchain development platform written in\nRust. The Rust version of the Polkadot Host is being built with Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.substrate.io/"},"Substrate Docs")," - Comprehensive documentation and tutorials for\nbuilding a blockchain using Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/vscode-substrate"},"Substrate VSCode plugin"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-debug-kit"},"Substrate Debug Kit")," - A collection of debug\ntools and libraries around substrate chains. Includes tools to calculate NPoS elections offline,\ndisk usage monitoring, test templates against chain state and other pallet-specific helper."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://crates.io/crates/diener"},"Diener")," - A tool for easy changing of Polkadot or Substrate\ndependency versions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/shawntabrizi/polkadot-launch"},"Polkadot Launch")," - A tool to easily launch\ncustom local parachain-enabled Polkadot versions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/halva-suite/halva"},"Halva")," - A Truffle-inspired local development environment\nfor Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/maxsam4/fork-off-substrate"},"Fork-off Substrate")," - Copies the state of an\nexisting chain into your local version and lets you further experiment on it."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.chevdor.com/tags/srtool/"},"srtool")," - A tool for verifying runtime versions against\non-chain proposal hashes."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/nikvolf/sub-bench"},"sub-bench")," - A tool to spam your node with transactions for\nthe sake of benchmarking."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/danforbes/substrate-devhub-utils"},"substrate-devhub-utils")," - A set of\nJavaScript utilities making life with Substrate a little easier."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/NikVolf/sub-flood"},"sub-flood")," - A tool to benchmark Substrate by flooding it\nwith requests."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/Apillon"},"Apillon")," - A Web3 development platform with a complete toolbox and\naccess to Polkadot\u2019s technology stack.")),(0,i.kt)("h2",{id:"ides"},"IDEs"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://chainide.gitbook.io/chainide-english-1/ethereum-ide-1/13.-astar-ide"},"Astar IDE")," by\n",(0,i.kt)("a",{parentName:"li",href:"https://chainide.com/"},"Chain IDE")," is a tool for lightning-speed smart contracts and dApp\ndevelopment for ",(0,i.kt)("a",{parentName:"li",href:"https://chainide.com/s/createTempProject/astar-wasm?language=en"},"Wasm")," and\n",(0,i.kt)("a",{parentName:"li",href:"https://chainide.com/s/createTempProject/astar-evm?language=en"},"EVM"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/sandoxio/sandox"},"Sandox IDE")," is an integrated development environment (IDE)\nwith tools for building in the Polkadot environment. Currently helpful for creating applications\nin JS.")),(0,i.kt)("h2",{id:"ui"},"UI"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/Swader/polkadash"},"Polkadash")," - VueJS-based starter kit for custom user\ninterfaces for Substrate chains."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/apps"},"Polkadot JS Apps UI")," - Repository of the\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps"},"polkadot.js.org/apps")," UI."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/substrate-developer-hub/substrate-front-end-template"},"Substrate Front-end Template")," -\nReactJS-based starter UI for custom user interfaces for Substrate chains."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/extension"},"Polkadot JS Browser Extension")," - Key management in a\nChrome extension."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot-ui.info/"},"Polkadot UI")," - A library and platform for developing and publishing\nassets for Polkadot dapps.")),(0,i.kt)("h2",{id:"libraries"},"Libraries"),(0,i.kt)("h3",{id:"polkadot-js-api"},"Polkadot-JS API"),(0,i.kt)("p",null,"The Polkadot-JS API provides various utility functions that are used across all projects in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"@polkadot")," namespace and is split into a number of internal utility packages. The documentation and\nusage instructions are provided at ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/"},"Polkadot-JS API Documentation"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring"},"@polkadot/keyring")," This allows you to create and load\naccounts in JavaScript. It is helpful for creating wallets or any application that will require\nthe user to write to chain. ",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring/start/create"},"Examples"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring/start/install#other-dependencies"},"@polkadot/util")," Utility\nfunctions like checking if a string is hex-encoded."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/util-crypto/"},"@polkadot/util-crypto")," Useful cryptographic utilities\nfor developing with Polkadot.")),(0,i.kt)("h3",{id:"alternative-libraries"},"Alternative Libraries"),(0,i.kt)("p",null,"The following libraries/SDKs allow for interfacing with a Substrate node in other languages:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/py-substrate-interface"},"Python Library by Polkascan")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/centrifuge/go-substrate-rpc-client"},"Go Library by Centrifuge")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/strategyobject/substrate-client-java"},"Java Library by StrategyObject")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/fearless-utils-iOS"},"Fearless Utils iOS Swift SDK")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/nova-wallet/substrate-sdk-ios"},"Nova Wallet iOS/Swift Substrate SDK")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/fearless-utils-Android"},"Kotlin SDK")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/leonardocustodio/polkadart"},"Dart/Flutter Library"))),(0,i.kt)("h3",{id:"cli-tools"},"CLI Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/api-cli"},"@polkadot/api-cli")," Command\nline interface for the polkadot API. ",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/api/start"},"Documentation"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/monitor-rpc"},"@polkadot/monitor-rpc")," An\nRPC monitor for Polkadot. See the RPC tools below for additional information."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/signer-cli"},"@polkadot/signer-cli")," A\nTool to construct, sign, and broadcast transactions. Signing can be done offline."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"Polkadot API Cpp")," - A \u0421++ API for Polkadot, can\nbuild ",(0,i.kt)("inlineCode",{parentName:"li"},"clip"),", a command line tool."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.substrate.io/reference/command-line-tools/subkey/"},"Subkey")," - Command line utility\nfor generating and inspecting key pairs.")),(0,i.kt)("h3",{id:"wasm"},"WASM"),(0,i.kt)("p",null,"WebAssembly related tools and projects."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/ink/"},"ink!")," - An eDSL to write WebAssembly based smart contracts\nusing the Rust programming language."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/parity-wasm"},"parity-wasm")," - Low-level WebAssembly format library."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/wasm-utils"},"wasm-utils")," - Collection of WebAssembly utilities used\nin pwasm-ethereum and substrate contract development."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/wasmi"},"wasmi")," - A WebAssembly interpreter conceived as a component\nof parity-ethereum (Ethereum-like contracts in Wasm) and Substrate.")),(0,i.kt)("h3",{id:"rpc-and-api-tools"},"RPC and API Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/api/tree/master/packages/rpc-provider"},"@polkadot/api/rpc-provider"),"\nDemonstrates how the JS tools interact with the node over RPC."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/substrate/rpc"},"RPC documentation")," - Documentation of Substrate RPC\nmethods."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/SimplyVC/polkadot_api_server"},"Polkadot API Server by SimplyVC")," - A wrapper\naround the Polkadot API which makes it easier to make Polkadot API calls from any programming\nlanguage."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/itering/substrate-api-rpc"},"Go: Subscan API")," - Go API for Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"C++ Polkadot API")," - \u0421++ API for Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/ajuna-network/Ajuna.SDK"},".NET Toolchain for Polkadot/Substrate API")," -\nToolchain to generate Polkadot API & Service Layer for .NET (usable in Unity)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_dotnet"},".NET Polkadot API")," - Polkadot Substrate API\nfor .NET."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/py-substrate-interface"},"Python Polkadot API")," - Polkadot library for\nPython."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/centrifuge/go-substrate-rpc-client/"},"GSRPC")," - Substrate RPC client in Go,\na.k.a. GSRPC."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-api-sidecar"},"Substrate API Sidecar")," - An HTTP wrapper for\nSubstrate, abstracting some complex RPC calls into simple REST calls."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-subxt"},"Subxt")," - A Rust library to submit extrinsics to a\nSubstrate node via RPC.")),(0,i.kt)("h3",{id:"scale-codec"},"SCALE Codec"),(0,i.kt)("p",null,"The SCALE (Simple Concatenated Aggregate Little-Endian) Codec is a lightweight, efficient, binary\nserialization and deserialization codec."),(0,i.kt)("p",null,"It is designed for high-performance, copy-free encoding and decoding of data in resource-constrained\nexecution contexts, such as the Substrate runtime. It is not self-describing in any way and assumes\nthe decoding context has all type knowledge about the encoded data."),(0,i.kt)("p",null,"It is used in almost all communication to/from Substrate nodes, so implementations in different\nlanguages exist:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/substrate-developer-hub/awesome-substrate#scale-codec"},"Substrate Awesome"),"\nmaintains a list of SCALE codex implementations.")),(0,i.kt)("h2",{id:"data-crawling-and-conversion"},"Data Crawling and Conversion"),(0,i.kt)("p",null,"The following tools help you extract and structure data from a Substrate node."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-archive"},"Parity's Substrate Archive")," - Can be run\nalongside a Substrate node to archive all blocks, state, and extrinsic data into PostgreSQL\ndatabase."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/subsquid/squid-archive-setup"},"Subsquid Archives")," - Generate a GraphQL database\nfrom a Substrate chain's data with rich filtering and querying capabilities. The data (events,\nextrinsics, blocks) for most parachains is readily available though public archive GraphQL\nendpoints, kept in\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/subsquid/archive-registry/blob/main/archives.json"},"Squid Archive Registry")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/TheGoldenEye/polka-store"},"Polka-store")," - A tool which scans a Substrate chain\nand stores balance-relevant transactions in an SQLite database."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/playzero/substrate-graph"},"Substrate-graph")," - A compact indexer for Substrate\nbased nodes providing a GraphQL interface.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cda87995.1ea09317.js b/assets/js/cda87995.1ea09317.js deleted file mode 100644 index 521db555a158..000000000000 --- a/assets/js/cda87995.1ea09317.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3933],{3905:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>m});var o=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,o)}return a}function n(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var s=o.createContext({}),p=function(t){var e=o.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):n(n({},e),t)),a},u=function(t){var e=p(t.components);return o.createElement(s.Provider,{value:e},t.children)},c="mdxType",h={inlineCode:"code",wrapper:function(t){var e=t.children;return o.createElement(o.Fragment,{},e)}},d=o.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,s=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),c=p(a),d=r,m=c["".concat(s,".").concat(d)]||c[d]||h[d]||i;return a?o.createElement(m,n(n({ref:e},u),{},{components:a})):o.createElement(m,n({ref:e},u))}));function m(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,n=new Array(i);n[0]=d;var l={};for(var s in e)hasOwnProperty.call(e,s)&&(l[s]=e[s]);l.originalType=t,l[c]="string"==typeof t?t:r,n[1]=l;for(var p=2;p{a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>p,toc:()=>c});var o=a(87462),r=a(63366),i=(a(67294),a(3905)),n=["components"],l={id:"build-tools-index",title:"Tool Index",sidebar_label:"Tool Index",description:"Reference point for a list of tools to support your development.",keywords:["tools","clients","libraries","explorers","monitor","data","SCALE"],slug:"../build-tools-index"},s=void 0,p={unversionedId:"build/build-tools-index",id:"build/build-tools-index",title:"Tool Index",description:"Reference point for a list of tools to support your development.",source:"@site/../docs/build/build-tools-index.md",sourceDirName:"build",slug:"/build-tools-index",permalink:"/docs/build-tools-index",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-tools-index.md",tags:[],version:"current",lastUpdatedBy:"Radha",lastUpdatedAt:1711011897,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"build-tools-index",title:"Tool Index",sidebar_label:"Tool Index",description:"Reference point for a list of tools to support your development.",keywords:["tools","clients","libraries","explorers","monitor","data","SCALE"],slug:"../build-tools-index"},sidebar:"docs",previous:{title:"Node Management",permalink:"/docs/build-node-management"},next:{title:"Explorer, Data, & Indexing Tools",permalink:"/docs/build-data"}},u={},c=[{value:"Wallets",id:"wallets",level:2},{value:"Block Explorers",id:"block-explorers",level:2},{value:"Blockchain Analytics",id:"blockchain-analytics",level:2},{value:"Network Monitoring & Reporting",id:"network-monitoring--reporting",level:2},{value:"Clients",id:"clients",level:2},{value:"Tools",id:"tools",level:2},{value:"IDEs",id:"ides",level:2},{value:"UI",id:"ui",level:2},{value:"Libraries",id:"libraries",level:2},{value:"Polkadot-JS API",id:"polkadot-js-api",level:3},{value:"Alternative Libraries",id:"alternative-libraries",level:3},{value:"CLI Tools",id:"cli-tools",level:3},{value:"WASM",id:"wasm",level:3},{value:"RPC and API Tools",id:"rpc-and-api-tools",level:3},{value:"SCALE Codec",id:"scale-codec",level:3},{value:"Data Crawling and Conversion",id:"data-crawling-and-conversion",level:2}],h={toc:c},d="wrapper";function m(t){var e=t.components,a=(0,r.Z)(t,n);return(0,i.kt)(d,(0,o.Z)({},h,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Here, we provide a list of tools available for your development needs. They are sorted by context.\nIf you're actively maintaining a tool that might be useful to other Polkadot, Kusama or Substrate\ndevelopers, feel free to ",(0,i.kt)("a",{parentName:"p",href:"/docs/contributing"},"add it in"),"."),(0,i.kt)("h2",{id:"wallets"},"Wallets"),(0,i.kt)("p",null,"Please see the ",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"Wallets")," page."),(0,i.kt)("h2",{id:"block-explorers"},"Block Explorers"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps Explorer")," - Polkadot dashboard block\nexplorer. Supports dozens of other networks, including Kusama, Westend, and other remote or local\nendpoints. ",(0,i.kt)("a",{parentName:"li",href:"https://cloudflare-ipfs.com/ipns/dotapps.io"},"Access via IPFS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://subscan.io"},"Subscan")," - Blockchain explorer for Substrate chains.\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/itering/subscan-essentials"},"Repo"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://3xpl.com/polkadot"},"3xpl.com")," - Fastest ad-free universal block explorer and JSON API with\nPolkadot support."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://blockchair.com/polkadot"},"Blockchair.com")," - Universal blockchain explorer and search\nengine with Polkadot support."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkaholic.io"},"Polkaholic.io")," - Polkadot & Kusama Blockchain explorer with API and DeFi\nsupport across 40+ parachains.")),(0,i.kt)("h2",{id:"blockchain-analytics"},"Blockchain Analytics"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://app.web3go.xyz/#/"},"Web3go")," - An open platform for everyone to play with, curate and\nvisualize multi-blockchain data"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkawatch.app/"},"Polkawatch")," - Polkadot Decentralization Analytics")),(0,i.kt)("h2",{id:"network-monitoring--reporting"},"Network Monitoring & Reporting"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://telemetry.polkadot.io/"},"Polkadot Telemetry Service")," - Network information including what\nnodes are running the chain, what software versions they are running, sync status, and location."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://gitlab.com/Polkabot"},"Polkabot")," - Polkadot network monitoring and reporting using Matrix\n(Riot / Element) chat. Users may create custom bot plugins.\n",(0,i.kt)("a",{parentName:"li",href:"https://medium.com/polkadot-network/polkabot-a3dba18c20c8"},"Blogpost"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/Ryabina-io/substratebot"},"Ryabina's Telegram Bot")," - A Telegram bot for\nmonitoring on-chain events of Substrate chains.\n",(0,i.kt)("a",{parentName:"li",href:"https://gitlab.com/Polkabot/polkabot"},"GitHub Repository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkastats.io/"},"PolkaStats")," - Polkadot network statistics (includes Kusama). Shows\nnetwork information and staking details from validators and intentions.\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/Colm3na/polkastats-v2/"},"GitHub Repository"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/SimplyVC/panic"},"Panic")," - A node monitoring and alert server for validators."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/open-web3-stack/guardian"},"OpenWeb3/Guardian")," - A CLI tool and JS library to\nmonitor on chain states and events."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/sodazone/ocelloids"},"Ocelloids SDK")," - Typescript SDK for multi-chain monitoring\nthat supports domain-specific logic for different pallets."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/ArthurHoeke/cyclops/"},"Cyclops Dashboard")," - a validator dashboard application\nthat helps Polkadot network validators keep track of all their validators, their staking rewards,\nand performance.")),(0,i.kt)("h2",{id:"clients"},"Clients"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot"},"Polkadot")," - The original Rust implementation of the\nPolkadot Host."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/kagome"},"Kagome")," - A C++ Polkadot implementation of the Polkadot Host\ndeveloped by ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu"},"Soramitsu"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/ChainSafe/gossamer"},"Gossamer")," - A Go implementation of the Polkadot Host\ndeveloped by ",(0,i.kt)("a",{parentName:"li",href:"https://chainsafe.io/"},"ChainSafe Systems"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/txwrapper"},"TX Wrapper")," - Helper functions for offline transaction\ngeneration.")),(0,i.kt)("h2",{id:"tools"},"Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate"},"Substrate")," - Blockchain development platform written in\nRust. The Rust version of the Polkadot Host is being built with Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.substrate.io/"},"Substrate Docs")," - Comprehensive documentation and tutorials for\nbuilding a blockchain using Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/vscode-substrate"},"Substrate VSCode plugin"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-debug-kit"},"Substrate Debug Kit")," - A collection of debug\ntools and libraries around substrate chains. Includes tools to calculate NPoS elections offline,\ndisk usage monitoring, test templates against chain state and other pallet-specific helper."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://crates.io/crates/diener"},"Diener")," - A tool for easy changing of Polkadot or Substrate\ndependency versions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/shawntabrizi/polkadot-launch"},"Polkadot Launch")," - A tool to easily launch\ncustom local parachain-enabled Polkadot versions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/halva-suite/halva"},"Halva")," - A Truffle-inspired local development environment\nfor Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/maxsam4/fork-off-substrate"},"Fork-off Substrate")," - Copies the state of an\nexisting chain into your local version and lets you further experiment on it."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.chevdor.com/tags/srtool/"},"srtool")," - A tool for verifying runtime versions against\non-chain proposal hashes."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/nikvolf/sub-bench"},"sub-bench")," - A tool to spam your node with transactions for\nthe sake of benchmarking."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/danforbes/substrate-devhub-utils"},"substrate-devhub-utils")," - A set of\nJavaScript utilities making life with Substrate a little easier."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/NikVolf/sub-flood"},"sub-flood")," - A tool to benchmark Substrate by flooding it\nwith requests."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/Apillon"},"Apillon")," - A Web3 development platform with a complete toolbox and\naccess to Polkadot\u2019s technology stack.")),(0,i.kt)("h2",{id:"ides"},"IDEs"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://chainide.gitbook.io/chainide-english-1/ethereum-ide-1/13.-astar-ide"},"Astar IDE")," by\n",(0,i.kt)("a",{parentName:"li",href:"https://chainide.com/"},"Chain IDE")," is a tool for lightning-speed smart contracts and dApp\ndevelopment for ",(0,i.kt)("a",{parentName:"li",href:"https://chainide.com/s/createTempProject/astar-wasm?language=en"},"Wasm")," and\n",(0,i.kt)("a",{parentName:"li",href:"https://chainide.com/s/createTempProject/astar-evm?language=en"},"EVM"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/sandoxio/sandox"},"Sandox IDE")," is an integrated development environment (IDE)\nwith tools for building in the Polkadot environment. Currently helpful for creating applications\nin JS.")),(0,i.kt)("h2",{id:"ui"},"UI"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/Swader/polkadash"},"Polkadash")," - VueJS-based starter kit for custom user\ninterfaces for Substrate chains."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/apps"},"Polkadot JS Apps UI")," - Repository of the\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps"},"polkadot.js.org/apps")," UI."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/substrate-developer-hub/substrate-front-end-template"},"Substrate Front-end Template")," -\nReactJS-based starter UI for custom user interfaces for Substrate chains."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/extension"},"Polkadot JS Browser Extension")," - Key management in a\nChrome extension."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot-ui.info/"},"Polkadot UI")," - A library and platform for developing and publishing\nassets for Polkadot dapps.")),(0,i.kt)("h2",{id:"libraries"},"Libraries"),(0,i.kt)("h3",{id:"polkadot-js-api"},"Polkadot-JS API"),(0,i.kt)("p",null,"The Polkadot-JS API provides various utility functions that are used across all projects in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"@polkadot")," namespace and is split into a number of internal utility packages. The documentation and\nusage instructions are provided at ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/"},"Polkadot-JS API Documentation"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring"},"@polkadot/keyring")," This allows you to create and load\naccounts in JavaScript. It is helpful for creating wallets or any application that will require\nthe user to write to chain. ",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring/start/create"},"Examples"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring/start/install#other-dependencies"},"@polkadot/util")," Utility\nfunctions like checking if a string is hex-encoded."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/util-crypto/"},"@polkadot/util-crypto")," Useful cryptographic utilities\nfor developing with Polkadot.")),(0,i.kt)("h3",{id:"alternative-libraries"},"Alternative Libraries"),(0,i.kt)("p",null,"The following libraries/SDKs allow for interfacing with a Substrate node in other languages:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/py-substrate-interface"},"Python Library by Polkascan")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/centrifuge/go-substrate-rpc-client"},"Go Library by Centrifuge")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/strategyobject/substrate-client-java"},"Java Library by StrategyObject")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/fearless-utils-iOS"},"Fearless Utils iOS Swift SDK")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/nova-wallet/substrate-sdk-ios"},"Nova Wallet iOS/Swift Substrate SDK")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/fearless-utils-Android"},"Kotlin SDK")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/leonardocustodio/polkadart"},"Dart/Flutter Library"))),(0,i.kt)("h3",{id:"cli-tools"},"CLI Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/api-cli"},"@polkadot/api-cli")," Command\nline interface for the polkadot API. ",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/api/start"},"Documentation"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/monitor-rpc"},"@polkadot/monitor-rpc")," An\nRPC monitor for Polkadot. See the RPC tools below for additional information."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/signer-cli"},"@polkadot/signer-cli")," A\nTool to construct, sign, and broadcast transactions. Signing can be done offline."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"Polkadot API Cpp")," - A \u0421++ API for Polkadot, can\nbuild ",(0,i.kt)("inlineCode",{parentName:"li"},"clip"),", a command line tool."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.substrate.io/reference/command-line-tools/subkey/"},"Subkey")," - Command line utility\nfor generating and inspecting key pairs.")),(0,i.kt)("h3",{id:"wasm"},"WASM"),(0,i.kt)("p",null,"WebAssembly related tools and projects."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/ink/"},"ink!")," - An eDSL to write WebAssembly based smart contracts\nusing the Rust programming language."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/parity-wasm"},"parity-wasm")," - Low-level WebAssembly format library."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/wasm-utils"},"wasm-utils")," - Collection of WebAssembly utilities used\nin pwasm-ethereum and substrate contract development."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/wasmi"},"wasmi")," - A WebAssembly interpreter conceived as a component\nof parity-ethereum (Ethereum-like contracts in Wasm) and Substrate.")),(0,i.kt)("h3",{id:"rpc-and-api-tools"},"RPC and API Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/api/tree/master/packages/rpc-provider"},"@polkadot/api/rpc-provider"),"\nDemonstrates how the JS tools interact with the node over RPC."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/substrate/rpc"},"RPC documentation")," - Documentation of Substrate RPC\nmethods."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/SimplyVC/polkadot_api_server"},"Polkadot API Server by SimplyVC")," - A wrapper\naround the Polkadot API which makes it easier to make Polkadot API calls from any programming\nlanguage."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/itering/substrate-api-rpc"},"Go: Subscan API")," - Go API for Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"C++ Polkadot API")," - \u0421++ API for Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/ajuna-network/Ajuna.SDK"},".NET Toolchain for Polkadot/Substrate API")," -\nToolchain to generate Polkadot API & Service Layer for .NET (usable in Unity)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_dotnet"},".NET Polkadot API")," - Polkadot Substrate API\nfor .NET."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/py-substrate-interface"},"Python Polkadot API")," - Polkadot library for\nPython."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/centrifuge/go-substrate-rpc-client/"},"GSRPC")," - Substrate RPC client in Go,\na.k.a. GSRPC."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-api-sidecar"},"Substrate API Sidecar")," - An HTTP wrapper for\nSubstrate, abstracting some complex RPC calls into simple REST calls."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-subxt"},"Subxt")," - A Rust library to submit extrinsics to a\nSubstrate node via RPC.")),(0,i.kt)("h3",{id:"scale-codec"},"SCALE Codec"),(0,i.kt)("p",null,"The SCALE (Simple Concatenated Aggregate Little-Endian) Codec is a lightweight, efficient, binary\nserialization and deserialization codec."),(0,i.kt)("p",null,"It is designed for high-performance, copy-free encoding and decoding of data in resource-constrained\nexecution contexts, such as the Substrate runtime. It is not self-describing in any way and assumes\nthe decoding context has all type knowledge about the encoded data."),(0,i.kt)("p",null,"It is used in almost all communication to/from Substrate nodes, so implementations in different\nlanguages exist:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/substrate-developer-hub/awesome-substrate#scale-codec"},"Substrate Awesome"),"\nmaintains a list of SCALE codex implementations.")),(0,i.kt)("h2",{id:"data-crawling-and-conversion"},"Data Crawling and Conversion"),(0,i.kt)("p",null,"The following tools help you extract and structure data from a Substrate node."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-archive"},"Parity's Substrate Archive")," - Can be run\nalongside a Substrate node to archive all blocks, state, and extrinsic data into PostgreSQL\ndatabase."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/subsquid/squid-archive-setup"},"Subsquid Archives")," - Generate a GraphQL database\nfrom a Substrate chain's data with rich filtering and querying capabilities. The data (events,\nextrinsics, blocks) for most parachains is readily available though public archive GraphQL\nendpoints, kept in\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/subsquid/archive-registry/blob/main/archives.json"},"Squid Archive Registry")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/TheGoldenEye/polka-store"},"Polka-store")," - A tool which scans a Substrate chain\nand stores balance-relevant transactions in an SQLite database."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/playzero/substrate-graph"},"Substrate-graph")," - A compact indexer for Substrate\nbased nodes providing a GraphQL interface.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dbbd9e76.985d034c.js b/assets/js/dbbd9e76.985d034c.js deleted file mode 100644 index 71fa15314f24..000000000000 --- a/assets/js/dbbd9e76.985d034c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3669],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>m});var n=a(67294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,o=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=s(a),c=i,m=u["".concat(p,".").concat(c)]||u[c]||h[c]||o;return a?n.createElement(m,r(r({ref:t},d),{},{components:a})):n.createElement(m,r({ref:t},d))}));function m(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=a.length,r=new Array(o);r[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:i,r[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var n=a(87462),i=a(63366),o=(a(67294),a(3905)),r=["components"],l={id:"learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",sidebar_label:"Polkadot Vault Guides",description:"Polkadot-JS Guides about Polkadot Vault.",keywords:["parity signer","signer","polkadot vault","polkadot-js"],slug:"../learn-guides-vault"},p=void 0,s={unversionedId:"learn/learn-guides-vault",id:"learn/learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",description:"Polkadot-JS Guides about Polkadot Vault.",source:"@site/../docs/learn/learn-guides-vault.md",sourceDirName:"learn",slug:"/learn-guides-vault",permalink:"/docs/learn-guides-vault",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-vault.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",sidebar_label:"Polkadot Vault Guides",description:"Polkadot-JS Guides about Polkadot Vault.",keywords:["parity signer","signer","polkadot vault","polkadot-js"],slug:"../learn-guides-vault"},sidebar:"docs",previous:{title:"Ledger Guides",permalink:"/docs/learn-guides-ledger"},next:{title:"Asset Hub Guides",permalink:"/docs/learn-guides-assets"}},d={},u=[{value:"Sending a Transfer with the Vault App",id:"sending-a-transfer-with-the-vault-app",level:2},{value:"Import Vault Accounts into Polkadot-JS",id:"import-vault-accounts-into-polkadot-js",level:2},{value:"Do Your Own Chain Spec and Metadata Update",id:"do-your-own-chain-spec-and-metadata-update",level:2},{value:"Chain Specification",id:"chain-specification",level:3},{value:"Chain Spec QR",id:"chain-spec-qr",level:4},{value:"Generating Signature",id:"generating-signature",level:4},{value:"Signing Chain Spec",id:"signing-chain-spec",level:4},{value:"Metadata Updates",id:"metadata-updates",level:3},{value:"Metadata QR Fountain",id:"metadata-qr-fountain",level:4},{value:"Generating Signature",id:"generating-signature-1",level:4},{value:"Signing Metadata",id:"signing-metadata",level:4},{value:"Add Chain & Update Metadata",id:"add-chain--update-metadata",level:3},{value:"Metadata Portal",id:"metadata-portal",level:3},{value:"Modify config File",id:"modify-config-file",level:4},{value:"Rename Chain's Files",id:"rename-chains-files",level:4},{value:"Run Portal",id:"run-portal",level:4}],h={toc:u},c="wrapper";function m(e){var t=e.components,a=(0,i.Z)(e,r);return(0,o.kt)(c,(0,n.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"These guides apply to both Parity Signer and Polkadot Vault apps.")),(0,o.kt)("h2",{id:"sending-a-transfer-with-the-vault-app"},"Sending a Transfer with the Vault App"),(0,o.kt)("admonition",{title:"Verifying Extrinsics",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Visit the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-using-Ledger"},(0,o.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=360"},(0,o.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions.")),(0,o.kt)("p",null,"General instructions to send a transfer can be found on\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170304-how-to-send-transfer-funds-out-of-your-dot-account-on-the-polkadot-js-ui"},"this support page"),".\nTo sign transactions with the Polkadot Vault app check\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182000-how-to-sign-a-transaction-in-parity-signer"},"this support article"),"\nor see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=281"},"this video tutorial"),"."),(0,o.kt)("h2",{id:"import-vault-accounts-into-polkadot-js"},"Import Vault Accounts into Polkadot-JS"),(0,o.kt)("p",null,"See\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184118-polkadot-vault-how-to-add-your-account-on-polkadot-js-ui"},"this support article"),"\nto import a Polkadot Vault account into the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"Polkadot-JS Browser Extension")," or\n",(0,o.kt)("a",{parentName:"p",href:"https://chrome.google.com/webstore/detail/parity-signer-companion/damllfnhhcbmclmjilomenbhkappdjgb"},"Parity Signer Companion"),".\nAccounts added to those extensions will be injected into the Polkadot-JS UI."),(0,o.kt)("h2",{id:"do-your-own-chain-spec-and-metadata-update"},"Do Your Own Chain Spec and Metadata Update"),(0,o.kt)("admonition",{title:"This section is for developers and power users only",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"By requesting the chain specification and metadata you trust the specific endpoint you are using\n(unless you are using you own node).")),(0,o.kt)("p",null,"The following guide bases on the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/parity-signer"},"Parity Signer")," Github\npage (to create the Chain Spec QR code and the metadata QR code fountain) and\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/metadata-portal"},"Metadata Portal")," Github page (to embed the Chain\nSpec and Metadata into a portal)."),(0,o.kt)("h3",{id:"chain-specification"},"Chain Specification"),(0,o.kt)("h4",{id:"chain-spec-qr"},"Chain Spec QR"),(0,o.kt)("p",null,"To add more chains on the Vault app you can follow the instructions\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/parity-signer/tutorials/Add-New-Network.html#add-network-specs"},"here"),".\nIn this example we will add the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-assets"},"Asset Hub")," system parachain. Briefly,\nfork the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/parity-signer"},"Parity Signer GitHub repository"),", start the\nterminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run add-specs -d -u wss://kusama-asset-hub-rpc.polkadot.io --encryption sr25519")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"wss://kusama-asset.hub-rpc.polkadot.io")," is the Parity RPC endpoint for the Asset Hub on\nKusama. This will create the file ",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_add_specs_statemine_sr25510")," under the\n",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder. See\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/polkadot-js/apps/blob/089fd77b14169749e35e073a93f7e7276963009c/packages/apps-config/src/endpoints/productionRelayPolkadot.ts"},"this GitHub page")," for a list of all endpoints listed in the Polkadot-JS UI.",""),(0,o.kt)("h4",{id:"generating-signature"},"Generating Signature"),(0,o.kt)("admonition",{title:"Use a hot account",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that the account used to sign the chain specification is a hot account. Never use a cold\naccount from the Vault app or Ledger, as after typing the seed phrase into the terminal that account\nwill be considered hot.")),(0,o.kt)("p",null,"Start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},'cat sign_me_add_specs_statemine_sr25519 | subkey sign --suri "YOUR SEED PHRASE"')),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"')," is the seed phrase of the account that will be used to sign and\nauthenticate both the chain spec and later on the metadata. Running the code above will return a\nsignature similar to that below:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"0xc4ce72db959000b6166af96d3bda55a927fd837747bf1bf1ae8a69e57c9ef37c25a88707c47b105a9eb1fbcf9345680eff57eb978cf73919506f6c738834e78a")),(0,o.kt)("h4",{id:"signing-chain-spec"},"Signing Chain Spec"),(0,o.kt)("p",null,"Now, go back to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run --release make --goal qr --crypto sr25519 --msg add-specs --payload sign_me_add_specs_statemine_sr25519 --verifier-hex PUBLIC KEY --signature-hex SIGNATURE")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"PUBLIC KEY")," is the public key of the account with seed ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"'),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"SIGNATURE"),"\nis the signature generated in the previous step. Running the code above will create the file\n",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/completed")," folder."),(0,o.kt)("h3",{id:"metadata-updates"},"Metadata Updates"),(0,o.kt)("p",null,"Similarly to what we did for the chain specification, we now generate and sign the Asset Hub\nmetadata."),(0,o.kt)("h4",{id:"metadata-qr-fountain"},"Metadata QR Fountain"),(0,o.kt)("p",null,"To update the chain metadata for the Asset Hub specs on the Vault app you can follow the\ninstructions\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/parity-signer/tutorials/Add-New-Network.html#add-network-metadata"},"here"),".\nBriefly, in the Parity Signer repository, start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder\nand type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run load-metadata -d -u wss://kusama-asset-hub-rpc.polkadot.io")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"wss://kusama-asset-hub-rpc.polkadot.io")," is the Parity RPC endpoint for the Asset Hub on\nKusama. This will create the file ",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV9370")," under the\n",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder. Note that for future metadata updates the file name will change as the\nversion at the time of writing was ",(0,o.kt)("inlineCode",{parentName:"p"},"V9370"),"."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Note that the name of the file changes according to the network version. That is, ",(0,o.kt)("inlineCode",{parentName:"p"},"????")," in\n",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV????")," will be the latest version at fetch time.")),(0,o.kt)("h4",{id:"generating-signature-1"},"Generating Signature"),(0,o.kt)("admonition",{title:"Use a hot account",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that the account used to sign the metadata is a hot account. Never use a cold account from\nthe Vault app or Ledger, as after typing the seed phrase into the terminal that account will be\nconsidered hot.")),(0,o.kt)("p",null,"Start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},'cat sign_me_load_metadata_statemineV9370 | subkey sign --suri "YOUR SEED PHRASE"')),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"')," is the seed phrase of the account you used to sign the chain\nspecification. Running the code above will return a signature similar to that below:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"0xde1ad7aeb252acb3cf42a522dcc8dc3f317a49be2ed636836dd6df8f7e47135f2c712480055822eba87e9ea5ac7d3bba96045992ae795856fdf4eea09a411f85")),(0,o.kt)("admonition",{title:"Do not copy the code lines above",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Note that the name of the file changes according to the network version. That is, ",(0,o.kt)("inlineCode",{parentName:"p"},"????")," in\n",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV????")," will be the latest version at fetch time. So, do not copy the\ncode line above, but change the version with the appropriate one saved under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress"),"\nfolder. The signature changes as well.")),(0,o.kt)("h4",{id:"signing-metadata"},"Signing Metadata"),(0,o.kt)("p",null,"Now, go back to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run --release make --goal qr --crypto sr25519 --msg load-metadata --payload sign_me_load_metadata_statemineV9370 --verifier-hex PUBLIC KEY --signature-hex SIGNATURE")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"PUBLIC KEY")," is the public key of the account with seed ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"'),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"SIGNATURE"),"\nis the signature generated in the previous step. Running the code above will create the file\n",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370")," under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/completed")," folder."),(0,o.kt)("h3",{id:"add-chain--update-metadata"},"Add Chain & Update Metadata"),(0,o.kt)("p",null,"You can open ",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," on your browser (just drag the file on an open tab). This\nis a .png file containing the QR code to add the Asset Hub chain specification into the Vault App.\nYou can do the same with the ",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370"),". This is a .apng file containing the QR\ncode fountain to do the metadata update for the Asset Hub on Kusama."),(0,o.kt)("h3",{id:"metadata-portal"},"Metadata Portal"),(0,o.kt)("h4",{id:"modify-config-file"},"Modify ",(0,o.kt)("inlineCode",{parentName:"h4"},"config")," File"),(0,o.kt)("p",null,"Alternatively, you can add the chain specification QR code and the metadata QR code fountain in a\nmetadata portal. Briefly, fork the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/metadata-portal"},"Parity's Metadata Portal GitHub repository"),". You can\nmodify the following fields of the ",(0,o.kt)("inlineCode",{parentName:"p"},"config.toml")," file:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"name"),": your name / institution"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"public_key"),": the public key of the account you use to sign the chain spec and the metadata."),(0,o.kt)("li",{parentName:"ul"},"At the bottom of the file add the following information:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'[[chains]]\nname = "Statemine"\ntitle = "Kusama Asset Hub"\nrpc_endpoint = "wss://kusama-asset-hub-rpc.polkadot.io"\ncolor = "#f27230"\n\n[chains.github_release]\nowner = "paritytech"\nrepo = "statemint"\ngenesis_hash = "0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a"\n')),(0,o.kt)("p",null,"For each additional chain, you need to add the respective information. Information about the genesis\nhash can be found on the Polkadot-JS UI > connect to the relevant chain > Developer > Chain State."),(0,o.kt)("h4",{id:"rename-chains-files"},"Rename Chain's Files"),(0,o.kt)("p",null,"Rename the signed chain specification and metadata files as follow:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Chain specification: ",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," --\x3e ",(0,o.kt)("inlineCode",{parentName:"p"},"statemine_specs.png"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Metadata updates: ",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370"),"--\x3e ",(0,o.kt)("inlineCode",{parentName:"p"},"statemine_metadata_9370.apng")))),(0,o.kt)("p",null,"Thus, for chain specification the file must be renamed to ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName_specs.png")," while for metadata\nthe file must be renamed to ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName_metadata_version.apng")," where ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName")," is the name of the\nchain and ",(0,o.kt)("inlineCode",{parentName:"p"},"version")," is the version of the metadata."),(0,o.kt)("p",null,"Add the renamed files to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/public/qr folder")," within the Metadata Portal repository."),(0,o.kt)("h4",{id:"run-portal"},"Run Portal"),(0,o.kt)("p",null,"Open the terminal within the Metadata Portal repository and run ",(0,o.kt)("inlineCode",{parentName:"p"},"make updater"),". Then run\n",(0,o.kt)("inlineCode",{parentName:"p"},"make collector"),"; this will create the ",(0,o.kt)("inlineCode",{parentName:"p"},"_latest.apng")," files for each of the chains (removed by the\ncommand ",(0,o.kt)("inlineCode",{parentName:"p"},"make cleaner"),"). Finally, run ",(0,o.kt)("inlineCode",{parentName:"p"},"yarn start")," to load the metadata portal on your localhost."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dbbd9e76.ed32f583.js b/assets/js/dbbd9e76.ed32f583.js new file mode 100644 index 000000000000..eafa0213bec0 --- /dev/null +++ b/assets/js/dbbd9e76.ed32f583.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3669],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>m});var n=a(67294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,o=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=s(a),c=i,m=u["".concat(p,".").concat(c)]||u[c]||h[c]||o;return a?n.createElement(m,r(r({ref:t},d),{},{components:a})):n.createElement(m,r({ref:t},d))}));function m(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=a.length,r=new Array(o);r[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:i,r[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var n=a(87462),i=a(63366),o=(a(67294),a(3905)),r=["components"],l={id:"learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",sidebar_label:"Polkadot Vault Guides",description:"Polkadot-JS Guides about Polkadot Vault.",keywords:["parity signer","signer","polkadot vault","polkadot-js"],slug:"../learn-guides-vault"},p=void 0,s={unversionedId:"learn/learn-guides-vault",id:"learn/learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",description:"Polkadot-JS Guides about Polkadot Vault.",source:"@site/../docs/learn/learn-guides-vault.md",sourceDirName:"learn",slug:"/learn-guides-vault",permalink:"/docs/learn-guides-vault",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-vault.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-vault",title:"Polkadot-JS Guides about the Vault App",sidebar_label:"Polkadot Vault Guides",description:"Polkadot-JS Guides about Polkadot Vault.",keywords:["parity signer","signer","polkadot vault","polkadot-js"],slug:"../learn-guides-vault"},sidebar:"docs",previous:{title:"Ledger Guides",permalink:"/docs/learn-guides-ledger"},next:{title:"Asset Hub Guides",permalink:"/docs/learn-guides-assets"}},d={},u=[{value:"Sending a Transfer with the Vault App",id:"sending-a-transfer-with-the-vault-app",level:2},{value:"Import Vault Accounts into Polkadot-JS",id:"import-vault-accounts-into-polkadot-js",level:2},{value:"Do Your Own Chain Spec and Metadata Update",id:"do-your-own-chain-spec-and-metadata-update",level:2},{value:"Chain Specification",id:"chain-specification",level:3},{value:"Chain Spec QR",id:"chain-spec-qr",level:4},{value:"Generating Signature",id:"generating-signature",level:4},{value:"Signing Chain Spec",id:"signing-chain-spec",level:4},{value:"Metadata Updates",id:"metadata-updates",level:3},{value:"Metadata QR Fountain",id:"metadata-qr-fountain",level:4},{value:"Generating Signature",id:"generating-signature-1",level:4},{value:"Signing Metadata",id:"signing-metadata",level:4},{value:"Add Chain & Update Metadata",id:"add-chain--update-metadata",level:3},{value:"Metadata Portal",id:"metadata-portal",level:3},{value:"Modify config File",id:"modify-config-file",level:4},{value:"Rename Chain's Files",id:"rename-chains-files",level:4},{value:"Run Portal",id:"run-portal",level:4}],h={toc:u},c="wrapper";function m(e){var t=e.components,a=(0,i.Z)(e,r);return(0,o.kt)(c,(0,n.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"These guides apply to both Parity Signer and Polkadot Vault apps.")),(0,o.kt)("h2",{id:"sending-a-transfer-with-the-vault-app"},"Sending a Transfer with the Vault App"),(0,o.kt)("admonition",{title:"Verifying Extrinsics",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Visit the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000179161-how-can-i-verify-what-extrinsic-i-m-signing-#Verify-an-extrinsic-using-Ledger"},(0,o.kt)("strong",{parentName:"a"},"dedicated support page")),"\nand see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/bxMs-9fBtFk?t=360"},(0,o.kt)("strong",{parentName:"a"},"this video tutorial"))," tutorial to learn about how to\nverify extrinsics before signing them. The video will also mention potential attacks that can happen\nto you while signing for transactions.")),(0,o.kt)("p",null,"General instructions to send a transfer can be found on\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170304-how-to-send-transfer-funds-out-of-your-dot-account-on-the-polkadot-js-ui"},"this support page"),".\nTo sign transactions with the Polkadot Vault app check\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182000-how-to-sign-a-transaction-in-parity-signer"},"this support article"),"\nor see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/gbvrHzr4EDY?t=281"},"this video tutorial"),"."),(0,o.kt)("h2",{id:"import-vault-accounts-into-polkadot-js"},"Import Vault Accounts into Polkadot-JS"),(0,o.kt)("p",null,"See\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000184118-polkadot-vault-how-to-add-your-account-on-polkadot-js-ui"},"this support article"),"\nto import a Polkadot Vault account into the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},"Polkadot-JS Browser Extension")," or\n",(0,o.kt)("a",{parentName:"p",href:"https://chrome.google.com/webstore/detail/parity-signer-companion/damllfnhhcbmclmjilomenbhkappdjgb"},"Parity Signer Companion"),".\nAccounts added to those extensions will be injected into the Polkadot-JS UI."),(0,o.kt)("h2",{id:"do-your-own-chain-spec-and-metadata-update"},"Do Your Own Chain Spec and Metadata Update"),(0,o.kt)("admonition",{title:"This section is for developers and power users only",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"By requesting the chain specification and metadata you trust the specific endpoint you are using\n(unless you are using you own node).")),(0,o.kt)("p",null,"The following guide bases on the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/parity-signer"},"Parity Signer")," Github\npage (to create the Chain Spec QR code and the metadata QR code fountain) and\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/metadata-portal"},"Metadata Portal")," Github page (to embed the Chain\nSpec and Metadata into a portal)."),(0,o.kt)("h3",{id:"chain-specification"},"Chain Specification"),(0,o.kt)("h4",{id:"chain-spec-qr"},"Chain Spec QR"),(0,o.kt)("p",null,"To add more chains on the Vault app you can follow the instructions\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/parity-signer/tutorials/Add-New-Network.html#add-network-specs"},"here"),".\nIn this example we will add the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-assets"},"Asset Hub")," system parachain. Briefly,\nfork the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/parity-signer"},"Parity Signer GitHub repository"),", start the\nterminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run add-specs -d -u wss://kusama-asset-hub-rpc.polkadot.io --encryption sr25519")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"wss://kusama-asset.hub-rpc.polkadot.io")," is the Parity RPC endpoint for the Asset Hub on\nKusama. This will create the file ",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_add_specs_statemine_sr25510")," under the\n",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder. See\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/polkadot-js/apps/blob/089fd77b14169749e35e073a93f7e7276963009c/packages/apps-config/src/endpoints/productionRelayPolkadot.ts"},"this GitHub page")," for a list of all endpoints listed in the Polkadot-JS UI.",""),(0,o.kt)("h4",{id:"generating-signature"},"Generating Signature"),(0,o.kt)("admonition",{title:"Use a hot account",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that the account used to sign the chain specification is a hot account. Never use a cold\naccount from the Vault app or Ledger, as after typing the seed phrase into the terminal that account\nwill be considered hot.")),(0,o.kt)("p",null,"Start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},'cat sign_me_add_specs_statemine_sr25519 | subkey sign --suri "YOUR SEED PHRASE"')),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"')," is the seed phrase of the account that will be used to sign and\nauthenticate both the chain spec and later on the metadata. Running the code above will return a\nsignature similar to that below:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"0xc4ce72db959000b6166af96d3bda55a927fd837747bf1bf1ae8a69e57c9ef37c25a88707c47b105a9eb1fbcf9345680eff57eb978cf73919506f6c738834e78a")),(0,o.kt)("h4",{id:"signing-chain-spec"},"Signing Chain Spec"),(0,o.kt)("p",null,"Now, go back to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run --release make --goal qr --crypto sr25519 --msg add-specs --payload sign_me_add_specs_statemine_sr25519 --verifier-hex PUBLIC KEY --signature-hex SIGNATURE")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"PUBLIC KEY")," is the public key of the account with seed ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"'),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"SIGNATURE"),"\nis the signature generated in the previous step. Running the code above will create the file\n",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/completed")," folder."),(0,o.kt)("h3",{id:"metadata-updates"},"Metadata Updates"),(0,o.kt)("p",null,"Similarly to what we did for the chain specification, we now generate and sign the Asset Hub\nmetadata."),(0,o.kt)("h4",{id:"metadata-qr-fountain"},"Metadata QR Fountain"),(0,o.kt)("p",null,"To update the chain metadata for the Asset Hub specs on the Vault app you can follow the\ninstructions\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/parity-signer/tutorials/Add-New-Network.html#add-network-metadata"},"here"),".\nBriefly, in the Parity Signer repository, start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder\nand type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run load-metadata -d -u wss://kusama-asset-hub-rpc.polkadot.io")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"wss://kusama-asset-hub-rpc.polkadot.io")," is the Parity RPC endpoint for the Asset Hub on\nKusama. This will create the file ",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV9370")," under the\n",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder. Note that for future metadata updates the file name will change as the\nversion at the time of writing was ",(0,o.kt)("inlineCode",{parentName:"p"},"V9370"),"."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Note that the name of the file changes according to the network version. That is, ",(0,o.kt)("inlineCode",{parentName:"p"},"????")," in\n",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV????")," will be the latest version at fetch time.")),(0,o.kt)("h4",{id:"generating-signature-1"},"Generating Signature"),(0,o.kt)("admonition",{title:"Use a hot account",type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that the account used to sign the metadata is a hot account. Never use a cold account from\nthe Vault app or Ledger, as after typing the seed phrase into the terminal that account will be\nconsidered hot.")),(0,o.kt)("p",null,"Start the terminal within the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},'cat sign_me_load_metadata_statemineV9370 | subkey sign --suri "YOUR SEED PHRASE"')),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"')," is the seed phrase of the account you used to sign the chain\nspecification. Running the code above will return a signature similar to that below:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"0xde1ad7aeb252acb3cf42a522dcc8dc3f317a49be2ed636836dd6df8f7e47135f2c712480055822eba87e9ea5ac7d3bba96045992ae795856fdf4eea09a411f85")),(0,o.kt)("admonition",{title:"Do not copy the code lines above",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Note that the name of the file changes according to the network version. That is, ",(0,o.kt)("inlineCode",{parentName:"p"},"????")," in\n",(0,o.kt)("inlineCode",{parentName:"p"},"sign_me_load_metadata_statemineV????")," will be the latest version at fetch time. So, do not copy the\ncode line above, but change the version with the appropriate one saved under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/in_progress"),"\nfolder. The signature changes as well.")),(0,o.kt)("h4",{id:"signing-metadata"},"Signing Metadata"),(0,o.kt)("p",null,"Now, go back to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/generate_message")," folder and type the following:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"cargo run --release make --goal qr --crypto sr25519 --msg load-metadata --payload sign_me_load_metadata_statemineV9370 --verifier-hex PUBLIC KEY --signature-hex SIGNATURE")),(0,o.kt)("p",null,"where ",(0,o.kt)("inlineCode",{parentName:"p"},"PUBLIC KEY")," is the public key of the account with seed ",(0,o.kt)("inlineCode",{parentName:"p"},'"YOUR SEED PHRASE"'),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"SIGNATURE"),"\nis the signature generated in the previous step. Running the code above will create the file\n",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370")," under the ",(0,o.kt)("inlineCode",{parentName:"p"},"files/completed")," folder."),(0,o.kt)("h3",{id:"add-chain--update-metadata"},"Add Chain & Update Metadata"),(0,o.kt)("p",null,"You can open ",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," on your browser (just drag the file on an open tab). This\nis a .png file containing the QR code to add the Asset Hub chain specification into the Vault App.\nYou can do the same with the ",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370"),". This is a .apng file containing the QR\ncode fountain to do the metadata update for the Asset Hub on Kusama."),(0,o.kt)("h3",{id:"metadata-portal"},"Metadata Portal"),(0,o.kt)("h4",{id:"modify-config-file"},"Modify ",(0,o.kt)("inlineCode",{parentName:"h4"},"config")," File"),(0,o.kt)("p",null,"Alternatively, you can add the chain specification QR code and the metadata QR code fountain in a\nmetadata portal. Briefly, fork the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/metadata-portal"},"Parity's Metadata Portal GitHub repository"),". You can\nmodify the following fields of the ",(0,o.kt)("inlineCode",{parentName:"p"},"config.toml")," file:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"name"),": your name / institution"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"public_key"),": the public key of the account you use to sign the chain spec and the metadata."),(0,o.kt)("li",{parentName:"ul"},"At the bottom of the file add the following information:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'[[chains]]\nname = "Statemine"\ntitle = "Kusama Asset Hub"\nrpc_endpoint = "wss://kusama-asset-hub-rpc.polkadot.io"\ncolor = "#f27230"\n\n[chains.github_release]\nowner = "paritytech"\nrepo = "statemint"\ngenesis_hash = "0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a"\n')),(0,o.kt)("p",null,"For each additional chain, you need to add the respective information. Information about the genesis\nhash can be found on the Polkadot-JS UI > connect to the relevant chain > Developer > Chain State."),(0,o.kt)("h4",{id:"rename-chains-files"},"Rename Chain's Files"),(0,o.kt)("p",null,"Rename the signed chain specification and metadata files as follow:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Chain specification: ",(0,o.kt)("inlineCode",{parentName:"p"},"add_specs_statemine-sr25519")," --\x3e ",(0,o.kt)("inlineCode",{parentName:"p"},"statemine_specs.png"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Metadata updates: ",(0,o.kt)("inlineCode",{parentName:"p"},"load_metadata_statemineV9370"),"--\x3e ",(0,o.kt)("inlineCode",{parentName:"p"},"statemine_metadata_9370.apng")))),(0,o.kt)("p",null,"Thus, for chain specification the file must be renamed to ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName_specs.png")," while for metadata\nthe file must be renamed to ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName_metadata_version.apng")," where ",(0,o.kt)("inlineCode",{parentName:"p"},"chainName")," is the name of the\nchain and ",(0,o.kt)("inlineCode",{parentName:"p"},"version")," is the version of the metadata."),(0,o.kt)("p",null,"Add the renamed files to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/public/qr folder")," within the Metadata Portal repository."),(0,o.kt)("h4",{id:"run-portal"},"Run Portal"),(0,o.kt)("p",null,"Open the terminal within the Metadata Portal repository and run ",(0,o.kt)("inlineCode",{parentName:"p"},"make updater"),". Then run\n",(0,o.kt)("inlineCode",{parentName:"p"},"make collector"),"; this will create the ",(0,o.kt)("inlineCode",{parentName:"p"},"_latest.apng")," files for each of the chains (removed by the\ncommand ",(0,o.kt)("inlineCode",{parentName:"p"},"make cleaner"),"). Finally, run ",(0,o.kt)("inlineCode",{parentName:"p"},"yarn start")," to load the metadata portal on your localhost."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dd2fa029.01163b0e.js b/assets/js/dd2fa029.01163b0e.js new file mode 100644 index 000000000000..3d7850c35ae3 --- /dev/null +++ b/assets/js/dd2fa029.01163b0e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9962],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},d=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=s(r),m=a,f=p["".concat(c,".").concat(m)]||p[m]||u[m]||o;return r?n.createElement(f,l(l({ref:t},d),{},{components:r})):n.createElement(f,l({ref:t},d))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[p]="string"==typeof e?e:a,l[1]=i;for(var s=2;s{r.d(t,{Z:()=>y});var n=r(67294),a=r(86010),o=r(53438),l=r(39960),i=r(13919),c=r(95999);const s={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){var t=e.href,r=e.children;return n.createElement(l.Z,{href:t,className:(0,a.Z)("card padding--lg",s.cardContainer)},r)}function p(e){var t=e.href,r=e.icon,o=e.title,l=e.description;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,a.Z)("text--truncate",s.cardTitle),title:o},r," ",o),l&&n.createElement("p",{className:(0,a.Z)("text--truncate",s.cardDescription),title:l},l))}function u(e){var t,r=e.item,a=(0,o.Wl)(r);return a?n.createElement(p,{href:a,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,c.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r,a=e.item,l=(0,i.Z)(a.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",c=(0,o.xz)(null!=(t=a.docId)?t:void 0);return n.createElement(p,{href:a.href,icon:l,title:a.label,description:null!=(r=a.description)?r:null==c?void 0:c.description})}function f(e){var t=e.item;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(u,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function k(e){var t=e.className,r=(0,o.jA)();return n.createElement(y,{items:r.items,className:t})}function y(e){var t=e.items,r=e.className;if(!t)return n.createElement(k,e);var l=(0,o.MN)(t);return n.createElement("section",{className:(0,a.Z)("row",r)},l.map((function(e,t){return n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(f,{item:e}))})))}},78209:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>k,frontMatter:()=>c,metadata:()=>d,toc:()=>u});var n=r(87462),a=r(63366),o=(r(67294),r(3905)),l=r(52991),i=["components"],c={id:"learn-polkadotjs",title:"Polkadot-JS",sidebar_label:"Polkadot-JS",description:"Overview of Polkadot-JS.",keywords:["polkadot-js","polkadot js"],slug:"../learn-polkadotjs"},s=void 0,d={unversionedId:"learn/learn-polkadotjs",id:"learn/learn-polkadotjs",title:"Polkadot-JS",description:"Overview of Polkadot-JS.",source:"@site/../docs/learn/learn-polkadotjs.md",sourceDirName:"learn",slug:"/learn-polkadotjs",permalink:"/docs/learn-polkadotjs",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-polkadotjs.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-polkadotjs",title:"Polkadot-JS",sidebar_label:"Polkadot-JS",description:"Overview of Polkadot-JS.",keywords:["polkadot-js","polkadot js"],slug:"../learn-polkadotjs"},sidebar:"docs",previous:{title:"Advanced",permalink:"/docs/learn-advanced-index"},next:{title:"Polkadot-JS Tooling",permalink:"/docs/polkadotjs"}},p={},u=[],m={toc:u},f="wrapper";function k(e){var t=e.components,r=(0,a.Z)(e,i);return(0,o.kt)(f,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)(l.Z,{mdxType:"DocCardList"}))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ec3b6a32.03a19c6b.js b/assets/js/ec3b6a32.03a19c6b.js deleted file mode 100644 index 4ff20bf81207..000000000000 --- a/assets/js/ec3b6a32.03a19c6b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4004],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(n),h=r,f=p["".concat(l,".").concat(h)]||p[h]||u[h]||i;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:r,o[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var a=n(87462),r=n(63366),i=(n(67294),n(3905)),o=["components"],s={id:"learn-nft",title:"NFTs",sidebar_label:"Introduction to NFTs",description:"The NFT Landscape of the Polkadot Ecosystem.",keywords:["NFT","non-fungible token","NFT 2.0"],slug:"../learn-nft"},l=void 0,c={unversionedId:"learn/learn-nft",id:"learn/learn-nft",title:"NFTs",description:"The NFT Landscape of the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-nft.md",sourceDirName:"learn",slug:"/learn-nft",permalink:"/docs/learn-nft",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-nft.md",tags:[],version:"current",lastUpdatedBy:"github-actions[bot]",lastUpdatedAt:1693818728,formattedLastUpdatedAt:"Sep 4, 2023",frontMatter:{id:"learn-nft",title:"NFTs",sidebar_label:"Introduction to NFTs",description:"The NFT Landscape of the Polkadot Ecosystem.",keywords:["NFT","non-fungible token","NFT 2.0"],slug:"../learn-nft"},sidebar:"docs",previous:{title:"Teleporting Assets",permalink:"/docs/learn-teleport"},next:{title:"Components",permalink:"/docs/learn-components-index"}},d={},p=[{value:"Fungibility",id:"fungibility",level:2},{value:"NFT Standards",id:"nft-standards",level:2},{value:"A typical NFT on Ethereum",id:"a-typical-nft-on-ethereum",level:3},{value:"NFTs in Polkadot & Kusama",id:"nfts-in-polkadot--kusama",level:2},{value:"Bridging",id:"bridging",level:2},{value:"References",id:"references",level:2}],u={toc:p},h="wrapper";function f(e){var t=e.components,s=(0,r.Z)(e,o);return(0,i.kt)(h,(0,a.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"This page is a high-level overview of NFTs in the blockchain space and the various approaches to\nNFTs within the Polkadot network."),(0,i.kt)("h2",{id:"fungibility"},"Fungibility"),(0,i.kt)("p",null,"NFT stands for ",(0,i.kt)("em",{parentName:"p"},"non-fungible token"),". Fungibility means interchangeability inside of a group. In\ntheory, a $20 bill is always worth $20 in a store and identical in value to any other $20 bill. It\nis not, however, fungible with a $1 or $100 dollar bill (outside its group)."),(0,i.kt)("p",null,"A Pokemon\u2122 trading card of a Charizard is non-fungible with a card of Squirtle, whereas editions of\nCharizard are fungible with each other."),(0,i.kt)("p",null,"Fungibility is a spectrum - what is fungible to some might not be fungible to others. In reality,\nPokemon\u2122 cards, the canonical example of non-fungible assets are more fungible than US dollar\nbills, each of which has a unique serial number that may be important to a government agency. The\ncards have no serial numbers ","[1]","."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://www.investopedia.com/thmb/Nr-RLORu5CX_lIWZfLmV5X0eIrc=/613x345/smart/filters:no_upscale()/Clipboard01-d20f6eb9351e4f36a46e11fd87b53b2d.jpg",alt:"one dollar"})),(0,i.kt)("p",null,'Additionally, a digital item like a "purple magic sword" in a game may be fungible with another\nvisually identical sword if all the player cares about is the looks of their character. But if the\nother sword has a different function, and that function influences the outcome of an adventure the\nplayer is about to embark on, then visually identical swords are absolutely non-fungible.'),(0,i.kt)("p",null,"Bearing that in mind, the simplest explanation of NFTs is that ",(0,i.kt)("strong",{parentName:"p"},'NFTs are rows of arbitrary,\nproject-specific, and non-interchangeable data that can be cryptographically proven to "belong" to\nsomeone'),". This data can be anything - concert tickets, attendance badges, simple words, avatars,\nplots of land in a metaverse, audio clips, house deeds, mortgages, and more."),(0,i.kt)("h2",{id:"nft-standards"},"NFT Standards"),(0,i.kt)("p",null,'A general-purpose blockchain is not built to natively understand the concept of NFTs. It is only\nnatively aware and optimized for its own native tokens, but implementations built on such a chain\nare essentially "hacks".'),(0,i.kt)("p",null,'For example, Ethereum is a general-purpose blockchain that does not have the concept of "tokens"\n(fungible or not) built-in. Tokens in Ethereum are essentially spreadsheets of information to be\ninterpreted and read in a certain way by various user interfaces. This ',(0,i.kt)("em",{parentName:"p"},"way")," in which they should\nread them is called a ",(0,i.kt)("em",{parentName:"p"},"standard"),"."),(0,i.kt)("p",null,"The most widespread fungible token standard you may have heard of is ERC20, while the most\nwidespread NFT standard is ERC721, followed closely by ERC1155. The downside of having to define\nthese standards is that they are always instructions for how to read a spreadsheet pretending to\nserve information in a certain way, which by definition cannot be optimized. For this reason, even\non a good day of extremely low network congestion, interactions with NFTs on any EVM chain will cost\na few dollars but were on average around $100 per interaction (transfer, mint, sale) in 2021 on\nEthereum."),(0,i.kt)("p",null,"This prevents use cases that go beyond the current craze of ",(0,i.kt)("em",{parentName:"p"},"digital dust gathering NFTs"),' on\nEthereum - profile pictures, generative "look once and then put away" art, ',(0,i.kt)("a",{parentName:"p",href:"ens"},"ENS")," addresses, and\n",(0,i.kt)("a",{parentName:"p",href:"https://poap.xyz/"},"proof of attendance badges")," (which have since moved to the xDAI chain to save on\ngas fees)."),(0,i.kt)("h3",{id:"a-typical-nft-on-ethereum"},"A typical ",(0,i.kt)("a",{parentName:"h3",href:"https://opensea.io/assets/ethereum/0x2127fe7ffce4380459cced92f2d4793f3af094a4/12598"},"NFT on Ethereum")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"samurai nft",src:n(78101).Z,width:"506",height:"507"})),(0,i.kt)("p",null,"For the sake of comparison, we can refer to these as NFTs 1.0: static NFTs that are almost\nexclusively image-based collectibles of varying rarity."),(0,i.kt)("h2",{id:"nfts-in-polkadot--kusama"},"NFTs in Polkadot & Kusama"),(0,i.kt)("p",null,"This is where Polkadot's technology shines and\nwhere NFTs 2.0 come into play. By allowing\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains"},"heterogeneous application-specific shards")," to exist, builders can natively\noptimize for complex NFT use cases without tradeoffs that would make interacting with the system\nprohibitively inefficient and expensive in other environments."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nft-projects"},"this page")," for more information about specific NFT project on Polkadot\nand Kusama.")),(0,i.kt)("h2",{id:"bridging"},"Bridging"),(0,i.kt)("p",null,"Bridging to and from Substrate chains and EVM chains takes much effort but is a highly desired\nfeature in the NFT industry. Merging the collector and customer base has significant implications,\nso multiple projects focus on making this possible."),(0,i.kt)("p",null,"Apart from RMRK (Substrate-to-Substrate seamless teleportation natively with ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCMP"),")\nand Efinity (Paratoken), the following efforts are underway:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://mynft.com/"},(0,i.kt)("strong",{parentName:"a"},"MyNFT")),": an EVM to EVM bridging effort."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"RMRK <-> EVM")," Simplification bridge: a bridge developed during the\n",(0,i.kt)("a",{parentName:"li",href:"https://rmrk.devpost.com"},"RMRK hackathon")," for porting RMRK NFTs into simplified IOUs on EVM\nchains")),(0,i.kt)("h2",{id:"references"},"References"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"[1]",": ",(0,i.kt)("a",{parentName:"li",href:"https://www.investopedia.com/terms/l/liars-poker.asp"},"Investopedia")),(0,i.kt)("li",{parentName:"ul"},"[2]",":\n",(0,i.kt)("a",{parentName:"li",href:"https://unique.network/blog/chelobricks-making-waves-with-10-000-substrate-based-nfts/"},"Unique Network's Chelobrick"))))}f.isMDXComponent=!0},78101:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/samurai-830479330323f7feeae0b981479ad9cc.png"}}]); \ No newline at end of file diff --git a/assets/js/ec3b6a32.47637506.js b/assets/js/ec3b6a32.47637506.js new file mode 100644 index 000000000000..3f9f7fb99e73 --- /dev/null +++ b/assets/js/ec3b6a32.47637506.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4004],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(n),h=r,f=p["".concat(l,".").concat(h)]||p[h]||u[h]||i;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:r,o[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var a=n(87462),r=n(63366),i=(n(67294),n(3905)),o=["components"],s={id:"learn-nft",title:"NFTs",sidebar_label:"Introduction to NFTs",description:"The NFT Landscape of the Polkadot Ecosystem.",keywords:["NFT","non-fungible token","NFT 2.0"],slug:"../learn-nft"},l=void 0,c={unversionedId:"learn/learn-nft",id:"learn/learn-nft",title:"NFTs",description:"The NFT Landscape of the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-nft.md",sourceDirName:"learn",slug:"/learn-nft",permalink:"/docs/learn-nft",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-nft.md",tags:[],version:"current",lastUpdatedBy:"github-actions[bot]",lastUpdatedAt:1693818728,formattedLastUpdatedAt:"Sep 4, 2023",frontMatter:{id:"learn-nft",title:"NFTs",sidebar_label:"Introduction to NFTs",description:"The NFT Landscape of the Polkadot Ecosystem.",keywords:["NFT","non-fungible token","NFT 2.0"],slug:"../learn-nft"},sidebar:"docs",previous:{title:"Teleporting Assets",permalink:"/docs/learn-teleport"},next:{title:"Network Participants",permalink:"/docs/learn-participants-index"}},d={},p=[{value:"Fungibility",id:"fungibility",level:2},{value:"NFT Standards",id:"nft-standards",level:2},{value:"A typical NFT on Ethereum",id:"a-typical-nft-on-ethereum",level:3},{value:"NFTs in Polkadot & Kusama",id:"nfts-in-polkadot--kusama",level:2},{value:"Bridging",id:"bridging",level:2},{value:"References",id:"references",level:2}],u={toc:p},h="wrapper";function f(e){var t=e.components,s=(0,r.Z)(e,o);return(0,i.kt)(h,(0,a.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"This page is a high-level overview of NFTs in the blockchain space and the various approaches to\nNFTs within the Polkadot network."),(0,i.kt)("h2",{id:"fungibility"},"Fungibility"),(0,i.kt)("p",null,"NFT stands for ",(0,i.kt)("em",{parentName:"p"},"non-fungible token"),". Fungibility means interchangeability inside of a group. In\ntheory, a $20 bill is always worth $20 in a store and identical in value to any other $20 bill. It\nis not, however, fungible with a $1 or $100 dollar bill (outside its group)."),(0,i.kt)("p",null,"A Pokemon\u2122 trading card of a Charizard is non-fungible with a card of Squirtle, whereas editions of\nCharizard are fungible with each other."),(0,i.kt)("p",null,"Fungibility is a spectrum - what is fungible to some might not be fungible to others. In reality,\nPokemon\u2122 cards, the canonical example of non-fungible assets are more fungible than US dollar\nbills, each of which has a unique serial number that may be important to a government agency. The\ncards have no serial numbers ","[1]","."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://www.investopedia.com/thmb/Nr-RLORu5CX_lIWZfLmV5X0eIrc=/613x345/smart/filters:no_upscale()/Clipboard01-d20f6eb9351e4f36a46e11fd87b53b2d.jpg",alt:"one dollar"})),(0,i.kt)("p",null,'Additionally, a digital item like a "purple magic sword" in a game may be fungible with another\nvisually identical sword if all the player cares about is the looks of their character. But if the\nother sword has a different function, and that function influences the outcome of an adventure the\nplayer is about to embark on, then visually identical swords are absolutely non-fungible.'),(0,i.kt)("p",null,"Bearing that in mind, the simplest explanation of NFTs is that ",(0,i.kt)("strong",{parentName:"p"},'NFTs are rows of arbitrary,\nproject-specific, and non-interchangeable data that can be cryptographically proven to "belong" to\nsomeone'),". This data can be anything - concert tickets, attendance badges, simple words, avatars,\nplots of land in a metaverse, audio clips, house deeds, mortgages, and more."),(0,i.kt)("h2",{id:"nft-standards"},"NFT Standards"),(0,i.kt)("p",null,'A general-purpose blockchain is not built to natively understand the concept of NFTs. It is only\nnatively aware and optimized for its own native tokens, but implementations built on such a chain\nare essentially "hacks".'),(0,i.kt)("p",null,'For example, Ethereum is a general-purpose blockchain that does not have the concept of "tokens"\n(fungible or not) built-in. Tokens in Ethereum are essentially spreadsheets of information to be\ninterpreted and read in a certain way by various user interfaces. This ',(0,i.kt)("em",{parentName:"p"},"way")," in which they should\nread them is called a ",(0,i.kt)("em",{parentName:"p"},"standard"),"."),(0,i.kt)("p",null,"The most widespread fungible token standard you may have heard of is ERC20, while the most\nwidespread NFT standard is ERC721, followed closely by ERC1155. The downside of having to define\nthese standards is that they are always instructions for how to read a spreadsheet pretending to\nserve information in a certain way, which by definition cannot be optimized. For this reason, even\non a good day of extremely low network congestion, interactions with NFTs on any EVM chain will cost\na few dollars but were on average around $100 per interaction (transfer, mint, sale) in 2021 on\nEthereum."),(0,i.kt)("p",null,"This prevents use cases that go beyond the current craze of ",(0,i.kt)("em",{parentName:"p"},"digital dust gathering NFTs"),' on\nEthereum - profile pictures, generative "look once and then put away" art, ',(0,i.kt)("a",{parentName:"p",href:"ens"},"ENS")," addresses, and\n",(0,i.kt)("a",{parentName:"p",href:"https://poap.xyz/"},"proof of attendance badges")," (which have since moved to the xDAI chain to save on\ngas fees)."),(0,i.kt)("h3",{id:"a-typical-nft-on-ethereum"},"A typical ",(0,i.kt)("a",{parentName:"h3",href:"https://opensea.io/assets/ethereum/0x2127fe7ffce4380459cced92f2d4793f3af094a4/12598"},"NFT on Ethereum")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"samurai nft",src:n(78101).Z,width:"506",height:"507"})),(0,i.kt)("p",null,"For the sake of comparison, we can refer to these as NFTs 1.0: static NFTs that are almost\nexclusively image-based collectibles of varying rarity."),(0,i.kt)("h2",{id:"nfts-in-polkadot--kusama"},"NFTs in Polkadot & Kusama"),(0,i.kt)("p",null,"This is where Polkadot's technology shines and\nwhere NFTs 2.0 come into play. By allowing\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains"},"heterogeneous application-specific shards")," to exist, builders can natively\noptimize for complex NFT use cases without tradeoffs that would make interacting with the system\nprohibitively inefficient and expensive in other environments."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nft-projects"},"this page")," for more information about specific NFT project on Polkadot\nand Kusama.")),(0,i.kt)("h2",{id:"bridging"},"Bridging"),(0,i.kt)("p",null,"Bridging to and from Substrate chains and EVM chains takes much effort but is a highly desired\nfeature in the NFT industry. Merging the collector and customer base has significant implications,\nso multiple projects focus on making this possible."),(0,i.kt)("p",null,"Apart from RMRK (Substrate-to-Substrate seamless teleportation natively with ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCMP"),")\nand Efinity (Paratoken), the following efforts are underway:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://mynft.com/"},(0,i.kt)("strong",{parentName:"a"},"MyNFT")),": an EVM to EVM bridging effort."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"RMRK <-> EVM")," Simplification bridge: a bridge developed during the\n",(0,i.kt)("a",{parentName:"li",href:"https://rmrk.devpost.com"},"RMRK hackathon")," for porting RMRK NFTs into simplified IOUs on EVM\nchains")),(0,i.kt)("h2",{id:"references"},"References"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"[1]",": ",(0,i.kt)("a",{parentName:"li",href:"https://www.investopedia.com/terms/l/liars-poker.asp"},"Investopedia")),(0,i.kt)("li",{parentName:"ul"},"[2]",":\n",(0,i.kt)("a",{parentName:"li",href:"https://unique.network/blog/chelobricks-making-waves-with-10-000-substrate-based-nfts/"},"Unique Network's Chelobrick"))))}f.isMDXComponent=!0},78101:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/samurai-830479330323f7feeae0b981479ad9cc.png"}}]); \ No newline at end of file diff --git a/assets/js/ed3409b3.31e512ea.js b/assets/js/ed3409b3.31e512ea.js deleted file mode 100644 index 329e753091fb..000000000000 --- a/assets/js/ed3409b3.31e512ea.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[8609],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var o=a(74165),n=a(15861),r=a(67294),i=a(87152),s=a(14741),u=a(67425);function d(e,t,a){return l.apply(this,arguments)}function l(){return(l=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var r,u,d,l,p;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,u=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return d=new i.U(r),e.next=21,s.G.create({provider:d});case 21:l=e.sent,(p=a.split(".")).forEach((function(e){e in l&&(l=l[e])})),e.t1=p[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return u=l.toString(),e.abrupt("break",35);case 29:return e.next=31,l();case 31:return u=(u=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+a);case 35:return e.abrupt("return",u);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(e,t,a,o){switch(t){case"humanReadable":(0,u.HumanReadable)(e,a,o);break;case"precise":(0,u.Precise)(e,a,o);break;case"blocksToDays":(0,u.BlocksToDays)(e,o);break;case"erasToDays":(0,u.ErasToDays)(e,o,a);break;case"percentage":(0,u.Percentage)(e,o);break;case"permillToPercent":(0,u.PermillToPercent)(e,o);break;case"arrayLength":(0,u.ArrayLength)(e,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,u=void 0===s?void 0:s,l=(0,r.useState)(""),c=l[0],h=l[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==u?p(i.toString(),u,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,n.Z)((0,o.Z)().mark((function e(){var n;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d(t,a,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==u?p(n,u,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",o="statemine",n="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var u=void 0;if(i===t||i===n)u=3;else{if(i!==a&&i!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");u=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(u)+" "+r[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===n)s=1;else{if(i!==a&&i!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},64539:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>u,metadata:()=>l,toc:()=>c});var o=a(87462),n=a(63366),r=(a(67294),a(3905)),i=a(47940),s=["components"],u={id:"learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",sidebar_label:"Bounty Guides",description:"Polkadot-JS Guides for Bounties",keyword:["treasury","bounties","guides","child bounty","polkadot-js"],slug:"../learn-guides-bounties"},d=void 0,l={unversionedId:"learn/learn-guides-bounties",id:"learn/learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",description:"Polkadot-JS Guides for Bounties",source:"@site/../docs/learn/learn-guides-bounties.md",sourceDirName:"learn",slug:"/learn-guides-bounties",permalink:"/docs/learn-guides-bounties",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-bounties.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",sidebar_label:"Bounty Guides",description:"Polkadot-JS Guides for Bounties",keyword:["treasury","bounties","guides","child bounty","polkadot-js"],slug:"../learn-guides-bounties"},sidebar:"docs",previous:{title:"Treasury Guides",permalink:"/docs/learn-guides-treasury"},next:{title:"Identity Guides",permalink:"/docs/learn-guides-identity"}},p={},c=[{value:"Submit a Bounty Proposal",id:"submit-a-bounty-proposal",level:2},{value:"Assign a Curator to a Bounty",id:"assign-a-curator-to-a-bounty",level:2},{value:"Create and Award Child Bounties",id:"create-and-award-child-bounties",level:2},{value:"Claim a Child Bounty Reward",id:"claim-a-child-bounty-reward",level:2}],h={toc:c},m="wrapper";function b(e){var t=e.components,u=(0,n.Z)(e,s);return(0,r.kt)(m,(0,o.Z)({},h,u,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury#bounties"},"this page")," to learn about Bounties."),(0,r.kt)("admonition",{title:"Notify the Polkadot Direction Channel",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Remember always to notify the\n",(0,r.kt)("a",{parentName:"p",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction Element Channel")," about\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#referenda"},"OpenGov referenda")," so that the community can start reviewing\nthem and voting on them.")),(0,r.kt)("h2",{id:"submit-a-bounty-proposal"},"Submit a Bounty Proposal"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Submit_a_Bounty_Proposal_on_Polkadotjs_Apps__Ps_zfmNXRbm6PuZaj28JBQ"},"this written tutorial"),"\nto learn more about how to submit a bounty proposal.")),(0,r.kt)("p",null,"See the video tutorial below to learn how you can create a bounty and submit it for approval through\nan OpenGov referendum."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=8Cft1-8RWmk"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/8Cft1-8RWmk/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=8Cft1-8RWmk"},"Submit a Bounty")))),(0,r.kt)("p",null,'When you add a bounty, this will show as "proposed" in the main\n',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),'. Once the community approves your bounty\nproposal as an OpenGov referendum, the bounty will show as "funded" at the end of the\n',(0,r.kt)("a",{parentName:"p",href:"/docs/glossary#spend-period"},"spending period")," on the main\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),". You can then proceed with assigning\ncurators to the bounty."),(0,r.kt)("p",null,"To minimize storage on chain in the same way as any proposal, bounties don't contain contextual\ninformation. When a user submits a bounty spending proposal, they will need to find an off-chain\nmedium to explain the proposal, for example a bounty proposal document on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/opengov"},"Polkassembly")," or\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subsquare.io/"},"Subsquare"),".\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1-IBz_owspV5OcvezWXpksWDQReWowschD0TFuaVKKcU/edit?usp=sharing"},"This template"),"\ncan be used to submit all the information needed by OpenGov voters to make an informed decision."),(0,r.kt)("p",null,"Submitting a bounty proposal will reserve\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.bounties.bountyDepositBase",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"","."),(0,r.kt)("h2",{id:"assign-a-curator-to-a-bounty"},"Assign a Curator to a Bounty"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Assign_a_Curator_to_a_Bounty_on_Polkadotjs_Apps__JgK3eSfXQdm_PSvtz8TelQ"},"this written tutorial"),"\nto learn more about how to assign a curator to a bounty.")),(0,r.kt)("p",null,'Once your bounty is shown as "funded" on the main\n',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),", you can propose a bounty curator. See the\nvideo tutorial below to learn how you can add a curator to a bounty and submit it for approval\nthrough an OpenGov referendum."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=TM7vk3oP9IA"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/TM7vk3oP9IA/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=TM7vk3oP9IA"},"Assign Curator to a Bounty")))),(0,r.kt)("p",null,"Once your OpenGov referendum has been approved by the community and served the required\n",(0,r.kt)("a",{parentName:"p",href:"/docs/glossary#spend-period"},"spending period"),', the bounty will still show as "funded" on\nthe main ',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page")," and await the curator's\nacceptance. The curator must formally accept the curator role by signing a ",(0,r.kt)("inlineCode",{parentName:"p"},"bounties.acceptCurator"),"\nextrinsic. More information about when to do this can be found on the main\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),'. Only after the curators claim their\ncandidacy the bounty will show as "active" on the main Bounty page.'),(0,r.kt)("admonition",{title:"Curator assignment call must be executed after bounty is funded",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Curator assignment must take place after the bounty has been funded, and approved bounties are\nfunded after a spend period has been completed. A curator assignment referendum cannot be executed\nduring the same spend period when the bounty is funded."),(0,r.kt)("p",{parentName:"admonition"},"If your bounty has been awarded but is not funded yet, you need to make sure that the curator\nassignment referendum gets enacted in the subsequent spending period (you can set a delay in\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov#submitting-a-proposal"},"Polkadot-JS")," when you submit the proposal\nduring the current spend period).")),(0,r.kt)("h2",{id:"create-and-award-child-bounties"},"Create and Award Child Bounties"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Create_and_Award_a_Child_Bounty__Q-YFGkYAR3WxMnvYGHiU3Q"},"this written tutorial"),"\nto learn more about how to create and award child bounties.")),(0,r.kt)("admonition",{title:"Remember to add contextual information about child bounties",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"When you add child bounties, please add contextual information on the governance forums\n",(0,r.kt)("a",{parentName:"p",href:"https://polkassembly.io/"},"Polkassembly")," or ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subsquare.io/"},"Subsquare"),".")),(0,r.kt)("p",null,"See the video tutorial below to learn how to create a child bounty, assign a curator, and award a\nchild bounty."),(0,r.kt)("p",null,"The video will show how to create and award a child bounty using a batch call. We will also include\nproposing and approving curator candidacy for the child bounty. The calls can be executed\nseparately, depending on the process curators consider appropriate for their bounty."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=mLpvx0OQoyM"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/mLpvx0OQoyM/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=mLpvx0OQoyM"},"Create and Award Child Bounties")))),(0,r.kt)("p",null,"Note that once a child bounty is awarded, awardees need to wait for the\n8-day delay to be complete before claiming the\nchild bounty."),(0,r.kt)("h2",{id:"claim-a-child-bounty-reward"},"Claim a Child Bounty Reward"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_claim_a_Child_Bounty_reward_on_Polkadotjs__t3V7NDUjQlus40EUjc-5Kw"},"this written tutorial"),"\nto learn more about how to claim a child bounty reward.")),(0,r.kt)("p",null,"The status of child bounties can be viewed on the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/bounties"},"Polkassembly Bounty page"),' under the specific parent\nbounty. A child bounty status can be "Added", "Awarded", or "Claimed". For example, the parent\nbounty 17 refers to the Community Events Bounty, which has 183 child bounties.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkassembly-child-bounties",src:a(83001).Z,width:"2408",height:"1053"})),(0,r.kt)("p",null,"After a child bounty has been awarded and the\n",(0,r.kt)(i.Z,{network:"polkadot",path:"consts.bounties.bountyDepositPayoutDelay",defaultValue:115200,filter:"blocksToDays",mdxType:"RPC"}),"","-day\ndelay elapsed, follow the guidelines in the video tutorial below to learn how to claim a child\nbounty reward. Note that the extrinsic to claim the child bounty reward is permissionless, and\nanyone can initiate the claim on behalf of the beneficiary."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=db82aHgy23c"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/db82aHgy23c/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=db82aHgy23c"},"Claim Child Bounty Reward")))))}b.isMDXComponent=!0},83001:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/polkassembly-child-bounties-fde994e770f3e109a07752068aa417b1.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/ed3409b3.6861a858.js b/assets/js/ed3409b3.6861a858.js new file mode 100644 index 000000000000..c2c20173acd9 --- /dev/null +++ b/assets/js/ed3409b3.6861a858.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[8609],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var o=a(74165),n=a(15861),r=a(67294),s=a(87152),i=a(14741),u=a(67425);function d(e,t,a){return l.apply(this,arguments)}function l(){return(l=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var r,u,d,l,p;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,u=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return d=new s.U(r),e.next=21,i.G.create({provider:d});case 21:l=e.sent,(p=a.split(".")).forEach((function(e){e in l&&(l=l[e])})),e.t1=p[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return u=l.toString(),e.abrupt("break",35);case 29:return e.next=31,l();case 31:return u=(u=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+p[0]+") in "+a);case 35:return e.abrupt("return",u);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(e,t,a,o){switch(t){case"humanReadable":(0,u.HumanReadable)(e,a,o);break;case"precise":(0,u.Precise)(e,a,o);break;case"blocksToDays":(0,u.BlocksToDays)(e,o);break;case"erasToDays":(0,u.ErasToDays)(e,o,a);break;case"percentage":(0,u.Percentage)(e,o);break;case"permillToPercent":(0,u.PermillToPercent)(e,o);break;case"arrayLength":(0,u.ArrayLength)(e,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,s=e.defaultValue,i=e.filter,u=void 0===i?void 0:i,l=(0,r.useState)(""),c=l[0],h=l[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==u?p(s.toString(),u,t,h):h(s.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,n.Z)((0,o.Z)().mark((function e(){var n;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d(t,a,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==u?p(n,u,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(i){console.log(i)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",o="statemine",n="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,s,i){var u=void 0;if(s===t||s===n)u=3;else{if(s!==a&&s!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");u=6}e=parseFloat(e),i((e=Number.isInteger(e/r[s].precision)?e/r[s].precision+" "+r[s].symbol:(e/r[s].precision).toFixed(u)+" "+r[s].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,s){var i=void 0;if(s===t||s===n)i=1;else{if(s!==a&&s!==o)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");i=4}r((e/=i).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},64539:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>u,metadata:()=>l,toc:()=>c});var o=a(87462),n=a(63366),r=(a(67294),a(3905)),s=a(47940),i=["components"],u={id:"learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",sidebar_label:"Bounty Guides",description:"Polkadot-JS Guides for Bounties",keyword:["treasury","bounties","guides","child bounty","polkadot-js"],slug:"../learn-guides-bounties"},d=void 0,l={unversionedId:"learn/learn-guides-bounties",id:"learn/learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",description:"Polkadot-JS Guides for Bounties",source:"@site/../docs/learn/learn-guides-bounties.md",sourceDirName:"learn",slug:"/learn-guides-bounties",permalink:"/docs/learn-guides-bounties",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-bounties.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-bounties",title:"Polkadot-JS Guides about Bounties",sidebar_label:"Bounty Guides",description:"Polkadot-JS Guides for Bounties",keyword:["treasury","bounties","guides","child bounty","polkadot-js"],slug:"../learn-guides-bounties"},sidebar:"docs",previous:{title:"Treasury Guides",permalink:"/docs/learn-guides-treasury"},next:{title:"Identity Guides",permalink:"/docs/learn-guides-identity"}},p={},c=[{value:"Submit a Bounty Proposal",id:"submit-a-bounty-proposal",level:2},{value:"Assign a Curator to a Bounty",id:"assign-a-curator-to-a-bounty",level:2},{value:"Create and Award Child Bounties",id:"create-and-award-child-bounties",level:2},{value:"Claim a Child Bounty Reward",id:"claim-a-child-bounty-reward",level:2}],h={toc:c},m="wrapper";function b(e){var t=e.components,u=(0,n.Z)(e,i);return(0,r.kt)(m,(0,o.Z)({},h,u,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury#bounties"},"this page")," to learn about Bounties."),(0,r.kt)("admonition",{title:"Notify the Polkadot Direction Channel",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Remember always to notify the\n",(0,r.kt)("a",{parentName:"p",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction Element Channel")," about\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov#referenda"},"OpenGov referenda")," so that the community can start reviewing\nthem and voting on them.")),(0,r.kt)("h2",{id:"submit-a-bounty-proposal"},"Submit a Bounty Proposal"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Submit_a_Bounty_Proposal_on_Polkadotjs_Apps__Ps_zfmNXRbm6PuZaj28JBQ"},"this written tutorial"),"\nto learn more about how to submit a bounty proposal.")),(0,r.kt)("p",null,"See the video tutorial below to learn how you can create a bounty and submit it for approval through\nan OpenGov referendum."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=8Cft1-8RWmk"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/8Cft1-8RWmk/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=8Cft1-8RWmk"},"Submit a Bounty")))),(0,r.kt)("p",null,'When you add a bounty, this will show as "proposed" in the main\n',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),'. Once the community approves your bounty\nproposal as an OpenGov referendum, the bounty will show as "funded" at the end of the\n',(0,r.kt)("a",{parentName:"p",href:"/docs/glossary#spend-period"},"spending period")," on the main\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),". You can then proceed with assigning\ncurators to the bounty."),(0,r.kt)("p",null,"To minimize storage on chain in the same way as any proposal, bounties don't contain contextual\ninformation. When a user submits a bounty spending proposal, they will need to find an off-chain\nmedium to explain the proposal, for example a bounty proposal document on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/opengov"},"Polkassembly")," or\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subsquare.io/"},"Subsquare"),".\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1-IBz_owspV5OcvezWXpksWDQReWowschD0TFuaVKKcU/edit?usp=sharing"},"This template"),"\ncan be used to submit all the information needed by OpenGov voters to make an informed decision."),(0,r.kt)("p",null,"Submitting a bounty proposal will reserve\n",(0,r.kt)(s.Z,{network:"polkadot",path:"consts.bounties.bountyDepositBase",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"","."),(0,r.kt)("h2",{id:"assign-a-curator-to-a-bounty"},"Assign a Curator to a Bounty"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Assign_a_Curator_to_a_Bounty_on_Polkadotjs_Apps__JgK3eSfXQdm_PSvtz8TelQ"},"this written tutorial"),"\nto learn more about how to assign a curator to a bounty.")),(0,r.kt)("p",null,'Once your bounty is shown as "funded" on the main\n',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),", you can propose a bounty curator. See the\nvideo tutorial below to learn how you can add a curator to a bounty and submit it for approval\nthrough an OpenGov referendum."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=TM7vk3oP9IA"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/TM7vk3oP9IA/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=TM7vk3oP9IA"},"Assign Curator to a Bounty")))),(0,r.kt)("p",null,"Once your OpenGov referendum has been approved by the community and served the required\n",(0,r.kt)("a",{parentName:"p",href:"/docs/glossary#spend-period"},"spending period"),', the bounty will still show as "funded" on\nthe main ',(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page")," and await the curator's\nacceptance. The curator must formally accept the curator role by signing a ",(0,r.kt)("inlineCode",{parentName:"p"},"bounties.acceptCurator"),"\nextrinsic. More information about when to do this can be found on the main\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/bounties"},"Bounties page"),'. Only after the curators claim their\ncandidacy the bounty will show as "active" on the main Bounty page.'),(0,r.kt)("admonition",{title:"Curator assignment call must be executed after bounty is funded",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Curator assignment must take place after the bounty has been funded, and approved bounties are\nfunded after a spend period has been completed. A curator assignment referendum cannot be executed\nduring the same spend period when the bounty is funded."),(0,r.kt)("p",{parentName:"admonition"},"If your bounty has been awarded but is not funded yet, you need to make sure that the curator\nassignment referendum gets enacted in the subsequent spending period (you can set a delay in\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov#submitting-a-proposal"},"Polkadot-JS")," when you submit the proposal\nduring the current spend period).")),(0,r.kt)("h2",{id:"create-and-award-child-bounties"},"Create and Award Child Bounties"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_Create_and_Award_a_Child_Bounty__Q-YFGkYAR3WxMnvYGHiU3Q"},"this written tutorial"),"\nto learn more about how to create and award child bounties.")),(0,r.kt)("admonition",{title:"Remember to add contextual information about child bounties",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"When you add child bounties, please add contextual information on the governance forums\n",(0,r.kt)("a",{parentName:"p",href:"https://polkassembly.io/"},"Polkassembly")," or ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.subsquare.io/"},"Subsquare"),".")),(0,r.kt)("p",null,"See the video tutorial below to learn how to create a child bounty, assign a curator, and award a\nchild bounty."),(0,r.kt)("p",null,"The video will show how to create and award a child bounty using a batch call. We will also include\nproposing and approving curator candidacy for the child bounty. The calls can be executed\nseparately, depending on the process curators consider appropriate for their bounty."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=mLpvx0OQoyM"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/mLpvx0OQoyM/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=mLpvx0OQoyM"},"Create and Award Child Bounties")))),(0,r.kt)("p",null,"Note that once a child bounty is awarded, awardees need to wait for the\n8-day delay to be complete before claiming the\nchild bounty."),(0,r.kt)("h2",{id:"claim-a-child-bounty-reward"},"Claim a Child Bounty Reward"),(0,r.kt)("admonition",{title:"Step-by-step written tutorial",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See\n",(0,r.kt)("a",{parentName:"p",href:"https://scribehow.com/shared/How_to_claim_a_Child_Bounty_reward_on_Polkadotjs__t3V7NDUjQlus40EUjc-5Kw"},"this written tutorial"),"\nto learn more about how to claim a child bounty reward.")),(0,r.kt)("p",null,"The status of child bounties can be viewed on the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/bounties"},"Polkassembly Bounty page"),' under the specific parent\nbounty. A child bounty status can be "Added", "Awarded", or "Claimed". For example, the parent\nbounty 17 refers to the Community Events Bounty, which has 183 child bounties.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkassembly-child-bounties",src:a(83001).Z,width:"2408",height:"1053"})),(0,r.kt)("p",null,"After a child bounty has been awarded and the\n",(0,r.kt)(s.Z,{network:"polkadot",path:"consts.bounties.bountyDepositPayoutDelay",defaultValue:115200,filter:"blocksToDays",mdxType:"RPC"}),"","-day\ndelay elapsed, follow the guidelines in the video tutorial below to learn how to claim a child\nbounty reward. Note that the extrinsic to claim the child bounty reward is permissionless, and\nanyone can initiate the claim on behalf of the beneficiary."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=db82aHgy23c"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/db82aHgy23c/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=db82aHgy23c"},"Claim Child Bounty Reward")))))}b.isMDXComponent=!0},83001:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/polkassembly-child-bounties-fde994e770f3e109a07752068aa417b1.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/eef3f1dd.2e6b0474.js b/assets/js/eef3f1dd.2e6b0474.js new file mode 100644 index 000000000000..a5f2578d6125 --- /dev/null +++ b/assets/js/eef3f1dd.2e6b0474.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[4097],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var r=a(74165),o=a(15861),n=a(67294),i=a(87152),s=a(14741),l=a(67425);function p(e,t,a){return u.apply(this,arguments)}function u(){return(u=(0,o.Z)((0,r.Z)().mark((function e(t,a,o){var n,l,p,u,d;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return n="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return n="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return n="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return n="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==n){e.next=18;break}return e.abrupt("return");case 18:return p=new i.U(n),e.next=21,s.G.create({provider:p});case 21:u=e.sent,(d=a.split(".")).forEach((function(e){e in u&&(u=u[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=u.toString(),e.abrupt("break",35);case 29:return e.next=31,u();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,a,r){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,r);break;case"precise":(0,l.Precise)(e,a,r);break;case"blocksToDays":(0,l.BlocksToDays)(e,r);break;case"erasToDays":(0,l.ErasToDays)(e,r,a);break;case"percentage":(0,l.Percentage)(e,r);break;case"permillToPercent":(0,l.PermillToPercent)(e,r);break;case"arrayLength":(0,l.ArrayLength)(e,r);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,u=(0,n.useState)(""),c=u[0],m=u[1];return t=t.toLowerCase(),(0,n.useEffect)((function(){void 0!==l?d(i.toString(),l,t,m):m(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var n=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(){var o;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,a,m);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,m):m(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{n()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",r="statemine",o="statemint",n={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===o)l=3;else{if(i!==a&&i!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/n[i].precision)?e/n[i].precision+" "+n[i].symbol:(e/n[i].precision).toFixed(l)+" "+n[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/n[t].precision+" "+n[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,n,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}n((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},7522:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>k,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var r=a(87462),o=a(63366),n=(a(67294),a(3905)),i=a(47940),s=["components"],l={id:"learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",sidebar_label:"Treasury Guides",description:"Polkadot-JS Guides about the Polkadot Treasury.",keywords:["opengov","polkadot opengov","referenda","treasury","tipps","polkadot-js"],slug:"../learn-guides-treasury"},p=void 0,u={unversionedId:"learn/learn-guides-treasury",id:"learn/learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",description:"Polkadot-JS Guides about the Polkadot Treasury.",source:"@site/../docs/learn/learn-guides-treasury.md",sourceDirName:"learn",slug:"/learn-guides-treasury",permalink:"/docs/learn-guides-treasury",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-treasury.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",sidebar_label:"Treasury Guides",description:"Polkadot-JS Guides about the Polkadot Treasury.",keywords:["opengov","polkadot opengov","referenda","treasury","tipps","polkadot-js"],slug:"../learn-guides-treasury"},sidebar:"docs",previous:{title:"OpenGov Guides",permalink:"/docs/learn-guides-polkadot-opengov"},next:{title:"Bounty Guides",permalink:"/docs/learn-guides-bounties"}},d={},c=[{value:"Creating a Treasury Proposal",id:"creating-a-treasury-proposal",level:2},{value:"Announcing the Proposal",id:"announcing-the-proposal",level:3},{value:"Submit Treasury Proposal Preimage",id:"submit-treasury-proposal-preimage",level:3},{value:"Submit a Treasury Track Referendum",id:"submit-a-treasury-track-referendum",level:3},{value:"Place a Decision Deposit for the Treasury Track Referendum",id:"place-a-decision-deposit-for-the-treasury-track-referendum",level:3},{value:"Requesting Tips from the Treasury",id:"requesting-tips-from-the-treasury",level:2}],m={toc:c},h="wrapper";function k(e){var t=e.components,l=(0,o.Z)(e,s);return(0,n.kt)(h,(0,r.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("div",{className:"sticky",style:{zIndex:1}},(0,n.kt)("br",null),(0,n.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,n.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,n.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,n.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,n.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,n.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,n.kt)("p",null,"See ",(0,n.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury"},"this page")," to learn about the Polkadot Treasury."),(0,n.kt)("h2",{id:"creating-a-treasury-proposal"},"Creating a Treasury Proposal"),(0,n.kt)("p",null,"Your proposal should address a problem, outline a goal, give a detailed account of how you will\nreach that goal, and include any ongoing maintenance needs. As much as possible, you should itemize\nthe tasks to be completed so fees can be evaluated and milestones can be followed. You can check the\n",(0,n.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1IZykdp2cyQavcRyZd_dgNj5DcgxgZR6kAqGdcNARu1w"},"guidelines for a successful proposal"),"","\nand fill out the\n",(0,n.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1O_84mXYFERCavmnJyxbIPKFkG0bVBySRjCVy-d-VKcc"},"Treasury proposal template"),"\nprovided."),(0,n.kt)("h3",{id:"announcing-the-proposal"},"Announcing the Proposal"),(0,n.kt)("p",null,"To minimize storage on-chain, proposals don't contain contextual information. When a user submits a\nproposal, they will need to find an off-chain way to explain the proposal:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Many community members participate in discussion in the\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#polkadot-watercooler:web3.foundation"},"Polkadot Watercooler")," and\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction room"),".\n",""),(0,n.kt)("li",{parentName:"ul"},"Use platforms like ",(0,n.kt)("a",{parentName:"li",href:"https://polkassembly.io"},"Polkassembly")," and\n",(0,n.kt)("a",{parentName:"li",href:"https://www.subsquare.io/"},"SubSquare")," to initiate discussion with the community. They also offer\na gauge poll to capture the community sentiment before submitting an on-chain referendum.")),(0,n.kt)("p",null,"Spreading the word about the proposal's explanation to the community is ultimately up to the\nproposer."),(0,n.kt)("admonition",{title:"Use Accounts with Verified On-Chain Identity for Treasury Proposals",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"To ensure legitimacy, it is required that the account linked to the Treasury proposal has an\n",(0,n.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981-how-to-set-and-clear-an-identity"},"identity set"),"\nand is\n",(0,n.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181990-how-to-request-and-cancel-identity-judgement"},"verified by an on-chain registrar"),".")),(0,n.kt)("h3",{id:"submit-treasury-proposal-preimage"},"Submit Treasury Proposal Preimage"),(0,n.kt)("p",null,"The example below shows how to create a ",(0,n.kt)("a",{parentName:"p",href:"../general/glossary#preimage"},"preimage")," for a transaction\nthat requests 100 DOT from Treasury."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Navigate to ",(0,n.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/preimages"},"Polkadot-JS UI > Governance > Preimages"),"\nand then click on Add Preimage."),(0,n.kt)("li",{parentName:"ul"},"Select the account which will be used to submit the preimage."),(0,n.kt)("li",{parentName:"ul"},"Choose ",(0,n.kt)("inlineCode",{parentName:"li"},"treasury"),' pallet in the "propose" dropdown and the ',(0,n.kt)("inlineCode",{parentName:"li"},"spend_local(amount, beneficiary)"),"call"),(0,n.kt)("li",{parentName:"ul"},"Enter the DOT amount."),(0,n.kt)("li",{parentName:"ul"},"Enter the AccountID of the beneficiary (which has a verified on-chain identity)."),(0,n.kt)("li",{parentName:"ul"},"Submit preimage"),(0,n.kt)("li",{parentName:"ul"},"Sign and submit the transaction by paying the specified transaction fees.")),(0,n.kt)("admonition",{title:"Preimage Submission Deposit",type:"info"},(0,n.kt)("p",{parentName:"admonition"},"A deposit is required for the preimage to be stored on chain. The preimage deposit is proportional\nto the amount of information stored within the preimage. The deposit amount required for a preimage\nwith a treasury spend transaction is around\n41 DOT. Ensure you have enough account\nbalance to pay for the submission deposit and the transaction fees.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Treasury Preimage",src:a(95773).Z,width:"1188",height:"655"})),(0,n.kt)("p",null,"After successful submission of the preimage, it is displayed on Polkadot-JS UI > Governance >\nPreimages page. Every preimage is associated with a unique preimage hash (highlighted in a box in\nthe image below). Take a note of this preimage hash, which is required to submit a referendum."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Treasury Preimage Hash",src:a(83601).Z,width:"2879",height:"453"})),(0,n.kt)("h3",{id:"submit-a-treasury-track-referendum"},"Submit a Treasury Track Referendum"),(0,n.kt)("p",null,"The example below shows how to submit a Treasury track referendum."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Navigate to ",(0,n.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda"),"\nand then click on Submit proposal."),(0,n.kt)("li",{parentName:"ul"},"Select the account which will be used to submit the proposal."),(0,n.kt)("li",{parentName:"ul"},"Choose the appropriate submission track (The example below selected Small Spender track)."),(0,n.kt)("li",{parentName:"ul"},"Enter the preimage hash of the treasury spend transaction.(If the preimage exists on-chain, the\npreimage length box is automatically populated)"),(0,n.kt)("li",{parentName:"ul"},"Click on Submit proposal."),(0,n.kt)("li",{parentName:"ul"},"Sign and submit the transaction.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Submit Treasury Proposal",src:a(67847).Z,width:"2141",height:"1238"})),(0,n.kt)("p",null,"Once your submission is executed, your referendum will appear under your chosen track on the\nPolkadot-JS UI ",(0,n.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"referenda page"),"."),(0,n.kt)("h3",{id:"place-a-decision-deposit-for-the-treasury-track-referendum"},"Place a Decision Deposit for the Treasury Track Referendum"),(0,n.kt)("p",null,"For the referendum to move from preparing phase to the deciding phase, a decision deposit needs to\nbe placed. The decision deposit values for each individual\n",(0,n.kt)("a",{parentName:"p",href:"./learn-polkadot-opengov-treasury#treasury-tracks"},"Treasury Tracks")," are listed in a section above\nin this document."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Submit Treasury Proposal Decision Deposit",src:a(49431).Z,width:"2133",height:"168"})),(0,n.kt)("p",null,"The preimage and decision deposits\n",(0,n.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov#claiming-the-preimage-and-decision-deposits"},"can be claimed once the referendum ends"),"."),(0,n.kt)("h2",{id:"requesting-tips-from-the-treasury"},"Requesting Tips from the Treasury"),(0,n.kt)("p",null,"To request a tip funded by the treasury, you can follow the above steps for\n",(0,n.kt)("a",{parentName:"p",href:"#creating-a-treasury-proposal"},"creating a treasury proposal")," but instead of submitting the proposal\nto the ",(0,n.kt)("inlineCode",{parentName:"p"},"32 / Small Spender")," track, you will need to submit it to the ",(0,n.kt)("inlineCode",{parentName:"p"},"30 / Small Tipper")," or\n",(0,n.kt)("inlineCode",{parentName:"p"},"31 / Big Tipper")," tracks depending on the number of tokens to be requested."),(0,n.kt)("p",null,"Briefly, you will need to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Create a preimage using the ",(0,n.kt)("inlineCode",{parentName:"li"},"treasury.spendLocal")," extrinsic and specifying the number of tokens\nand the beneficiary of the tip"),(0,n.kt)("li",{parentName:"ul"},"Submit a proposal to the right track (i.e. ",(0,n.kt)("inlineCode",{parentName:"li"},"30")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"31"),") using the preimage hash"),(0,n.kt)("li",{parentName:"ul"},"Once you started the referendum go to ",(0,n.kt)("a",{parentName:"li",href:"https://polkassembly.io/"},"Polkassembly"),", log in with the\nproposer account and edit the referendum details"),(0,n.kt)("li",{parentName:"ul"},"Notify the\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction Element Channel"),"","\nabout your referendum"),(0,n.kt)("li",{parentName:"ul"},"Place the decision deposit before the\n",(0,n.kt)(i.Z,{network:"polkadot",path:"consts.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\ntimeout"),(0,n.kt)("li",{parentName:"ul"},"Once the referendum ends you can\n",(0,n.kt)("a",{parentName:"li",href:"/docs/learn-guides-polkadot-opengov#claiming-the-preimage-and-decision-deposits"},"claim the preimage and decision deposits back"))))}k.isMDXComponent=!0},67847:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/submit-proposal-treasury-3948a231c4f3162a8680ad052af9e903.png"},83601:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-preimage-hash-05bb427d21d3ecf7d5e38418a0a0f4ed.png"},95773:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-preimage-24f67df8dba06111635d87a19ee0ce15.png"},49431:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-proposal-decision-deposit-849d27481ba0134acf743f7474d8f6a4.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/eef3f1dd.dfb7ed91.js b/assets/js/eef3f1dd.dfb7ed91.js deleted file mode 100644 index b07a1a4162d0..000000000000 --- a/assets/js/eef3f1dd.dfb7ed91.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[4097],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var r=a(74165),o=a(15861),n=a(67294),i=a(87152),s=a(14741),l=a(67425);function p(e,t,a){return u.apply(this,arguments)}function u(){return(u=(0,o.Z)((0,r.Z)().mark((function e(t,a,o){var n,l,p,u,d;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return n="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return n="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return n="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return n="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==n){e.next=18;break}return e.abrupt("return");case 18:return p=new i.U(n),e.next=21,s.G.create({provider:p});case 21:u=e.sent,(d=a.split(".")).forEach((function(e){e in u&&(u=u[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=u.toString(),e.abrupt("break",35);case 29:return e.next=31,u();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,a,r){switch(t){case"humanReadable":(0,l.HumanReadable)(e,a,r);break;case"precise":(0,l.Precise)(e,a,r);break;case"blocksToDays":(0,l.BlocksToDays)(e,r);break;case"erasToDays":(0,l.ErasToDays)(e,r,a);break;case"percentage":(0,l.Percentage)(e,r);break;case"permillToPercent":(0,l.PermillToPercent)(e,r);break;case"arrayLength":(0,l.ArrayLength)(e,r);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,a=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,u=(0,n.useState)(""),c=u[0],m=u[1];return t=t.toLowerCase(),(0,n.useEffect)((function(){void 0!==l?d(i.toString(),l,t,m):m(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var n=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(){var o;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,a,m);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(o,l,t,m):m(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{n()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",r="statemine",o="statemint",n={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===o)l=3;else{if(i!==a&&i!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/n[i].precision)?e/n[i].precision+" "+n[i].symbol:(e/n[i].precision).toFixed(l)+" "+n[i].symbol).toString())},Precise:function(e,t,a){a(e=(e=parseFloat(e))/n[t].precision+" "+n[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,n,i){var s=void 0;if(i===t||i===o)s=1;else{if(i!==a&&i!==r)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}n((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},7522:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>k,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var r=a(87462),o=a(63366),n=(a(67294),a(3905)),i=a(47940),s=["components"],l={id:"learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",sidebar_label:"Treasury Guides",description:"Polkadot-JS Guides about the Polkadot Treasury.",keywords:["opengov","polkadot opengov","referenda","treasury","tipps","polkadot-js"],slug:"../learn-guides-treasury"},p=void 0,u={unversionedId:"learn/learn-guides-treasury",id:"learn/learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",description:"Polkadot-JS Guides about the Polkadot Treasury.",source:"@site/../docs/learn/learn-guides-treasury.md",sourceDirName:"learn",slug:"/learn-guides-treasury",permalink:"/docs/learn-guides-treasury",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-treasury.md",tags:[],version:"current",lastUpdatedBy:"bader y",lastUpdatedAt:1711096215,formattedLastUpdatedAt:"Mar 22, 2024",frontMatter:{id:"learn-guides-treasury",title:"Polkadot-JS Guides about the Treasury",sidebar_label:"Treasury Guides",description:"Polkadot-JS Guides about the Polkadot Treasury.",keywords:["opengov","polkadot opengov","referenda","treasury","tipps","polkadot-js"],slug:"../learn-guides-treasury"},sidebar:"docs",previous:{title:"OpenGov Guides",permalink:"/docs/learn-guides-polkadot-opengov"},next:{title:"Bounty Guides",permalink:"/docs/learn-guides-bounties"}},d={},c=[{value:"Creating a Treasury Proposal",id:"creating-a-treasury-proposal",level:2},{value:"Announcing the Proposal",id:"announcing-the-proposal",level:3},{value:"Submit Treasury Proposal Preimage",id:"submit-treasury-proposal-preimage",level:3},{value:"Submit a Treasury Track Referendum",id:"submit-a-treasury-track-referendum",level:3},{value:"Place a Decision Deposit for the Treasury Track Referendum",id:"place-a-decision-deposit-for-the-treasury-track-referendum",level:3},{value:"Requesting Tips from the Treasury",id:"requesting-tips-from-the-treasury",level:2}],m={toc:c},h="wrapper";function k(e){var t=e.components,l=(0,o.Z)(e,s);return(0,n.kt)(h,(0,r.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("div",{className:"sticky",style:{zIndex:1}},(0,n.kt)("br",null),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,n.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,n.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,n.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,n.kt)("p",null,"See ",(0,n.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury"},"this page")," to learn about the Polkadot Treasury."),(0,n.kt)("h2",{id:"creating-a-treasury-proposal"},"Creating a Treasury Proposal"),(0,n.kt)("p",null,"Your proposal should address a problem, outline a goal, give a detailed account of how you will\nreach that goal, and include any ongoing maintenance needs. As much as possible, you should itemize\nthe tasks to be completed so fees can be evaluated and milestones can be followed. You can check the\n",(0,n.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1IZykdp2cyQavcRyZd_dgNj5DcgxgZR6kAqGdcNARu1w"},"guidelines for a successful proposal"),"","\nand fill out the\n",(0,n.kt)("a",{parentName:"p",href:"https://docs.google.com/document/d/1O_84mXYFERCavmnJyxbIPKFkG0bVBySRjCVy-d-VKcc"},"Treasury proposal template"),"\nprovided."),(0,n.kt)("h3",{id:"announcing-the-proposal"},"Announcing the Proposal"),(0,n.kt)("p",null,"To minimize storage on-chain, proposals don't contain contextual information. When a user submits a\nproposal, they will need to find an off-chain way to explain the proposal:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Many community members participate in discussion in the\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#polkadot-watercooler:web3.foundation"},"Polkadot Watercooler")," and\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction room"),".\n",""),(0,n.kt)("li",{parentName:"ul"},"Use platforms like ",(0,n.kt)("a",{parentName:"li",href:"https://polkassembly.io"},"Polkassembly")," and\n",(0,n.kt)("a",{parentName:"li",href:"https://www.subsquare.io/"},"SubSquare")," to initiate discussion with the community. They also offer\na gauge poll to capture the community sentiment before submitting an on-chain referendum.")),(0,n.kt)("p",null,"Spreading the word about the proposal's explanation to the community is ultimately up to the\nproposer."),(0,n.kt)("admonition",{title:"Use Accounts with Verified On-Chain Identity for Treasury Proposals",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"To ensure legitimacy, it is required that the account linked to the Treasury proposal has an\n",(0,n.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181981-how-to-set-and-clear-an-identity"},"identity set"),"\nand is\n",(0,n.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181990-how-to-request-and-cancel-identity-judgement"},"verified by an on-chain registrar"),".")),(0,n.kt)("h3",{id:"submit-treasury-proposal-preimage"},"Submit Treasury Proposal Preimage"),(0,n.kt)("p",null,"The example below shows how to create a ",(0,n.kt)("a",{parentName:"p",href:"../general/glossary#preimage"},"preimage")," for a transaction\nthat requests 100 DOT from Treasury."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Navigate to ",(0,n.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/preimages"},"Polkadot-JS UI > Governance > Preimages"),"\nand then click on Add Preimage."),(0,n.kt)("li",{parentName:"ul"},"Select the account which will be used to submit the preimage."),(0,n.kt)("li",{parentName:"ul"},"Choose ",(0,n.kt)("inlineCode",{parentName:"li"},"treasury"),' pallet in the "propose" dropdown and the ',(0,n.kt)("inlineCode",{parentName:"li"},"spend_local(amount, beneficiary)"),"call"),(0,n.kt)("li",{parentName:"ul"},"Enter the DOT amount."),(0,n.kt)("li",{parentName:"ul"},"Enter the AccountID of the beneficiary (which has a verified on-chain identity)."),(0,n.kt)("li",{parentName:"ul"},"Submit preimage"),(0,n.kt)("li",{parentName:"ul"},"Sign and submit the transaction by paying the specified transaction fees.")),(0,n.kt)("admonition",{title:"Preimage Submission Deposit",type:"info"},(0,n.kt)("p",{parentName:"admonition"},"A deposit is required for the preimage to be stored on chain. The preimage deposit is proportional\nto the amount of information stored within the preimage. The deposit amount required for a preimage\nwith a treasury spend transaction is around\n41 DOT. Ensure you have enough account\nbalance to pay for the submission deposit and the transaction fees.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Treasury Preimage",src:a(95773).Z,width:"1188",height:"655"})),(0,n.kt)("p",null,"After successful submission of the preimage, it is displayed on Polkadot-JS UI > Governance >\nPreimages page. Every preimage is associated with a unique preimage hash (highlighted in a box in\nthe image below). Take a note of this preimage hash, which is required to submit a referendum."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Treasury Preimage Hash",src:a(83601).Z,width:"2879",height:"453"})),(0,n.kt)("h3",{id:"submit-a-treasury-track-referendum"},"Submit a Treasury Track Referendum"),(0,n.kt)("p",null,"The example below shows how to submit a Treasury track referendum."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Navigate to ",(0,n.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/referenda"},"Polkadot-JS UI > Governance > Referenda"),"\nand then click on Submit proposal."),(0,n.kt)("li",{parentName:"ul"},"Select the account which will be used to submit the proposal."),(0,n.kt)("li",{parentName:"ul"},"Choose the appropriate submission track (The example below selected Small Spender track)."),(0,n.kt)("li",{parentName:"ul"},"Enter the preimage hash of the treasury spend transaction.(If the preimage exists on-chain, the\npreimage length box is automatically populated)"),(0,n.kt)("li",{parentName:"ul"},"Click on Submit proposal."),(0,n.kt)("li",{parentName:"ul"},"Sign and submit the transaction.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Submit Treasury Proposal",src:a(67847).Z,width:"2141",height:"1238"})),(0,n.kt)("p",null,"Once your submission is executed, your referendum will appear under your chosen track on the\nPolkadot-JS UI ",(0,n.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/referenda"},"referenda page"),"."),(0,n.kt)("h3",{id:"place-a-decision-deposit-for-the-treasury-track-referendum"},"Place a Decision Deposit for the Treasury Track Referendum"),(0,n.kt)("p",null,"For the referendum to move from preparing phase to the deciding phase, a decision deposit needs to\nbe placed. The decision deposit values for each individual\n",(0,n.kt)("a",{parentName:"p",href:"./learn-polkadot-opengov-treasury#treasury-tracks"},"Treasury Tracks")," are listed in a section above\nin this document."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Submit Treasury Proposal Decision Deposit",src:a(49431).Z,width:"2133",height:"168"})),(0,n.kt)("p",null,"The preimage and decision deposits\n",(0,n.kt)("a",{parentName:"p",href:"/docs/learn-guides-polkadot-opengov#claiming-the-preimage-and-decision-deposits"},"can be claimed once the referendum ends"),"."),(0,n.kt)("h2",{id:"requesting-tips-from-the-treasury"},"Requesting Tips from the Treasury"),(0,n.kt)("p",null,"To request a tip funded by the treasury, you can follow the above steps for\n",(0,n.kt)("a",{parentName:"p",href:"#creating-a-treasury-proposal"},"creating a treasury proposal")," but instead of submitting the proposal\nto the ",(0,n.kt)("inlineCode",{parentName:"p"},"32 / Small Spender")," track, you will need to submit it to the ",(0,n.kt)("inlineCode",{parentName:"p"},"30 / Small Tipper")," or\n",(0,n.kt)("inlineCode",{parentName:"p"},"31 / Big Tipper")," tracks depending on the number of tokens to be requested."),(0,n.kt)("p",null,"Briefly, you will need to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Create a preimage using the ",(0,n.kt)("inlineCode",{parentName:"li"},"treasury.spendLocal")," extrinsic and specifying the number of tokens\nand the beneficiary of the tip"),(0,n.kt)("li",{parentName:"ul"},"Submit a proposal to the right track (i.e. ",(0,n.kt)("inlineCode",{parentName:"li"},"30")," or ",(0,n.kt)("inlineCode",{parentName:"li"},"31"),") using the preimage hash"),(0,n.kt)("li",{parentName:"ul"},"Once you started the referendum go to ",(0,n.kt)("a",{parentName:"li",href:"https://polkassembly.io/"},"Polkassembly"),", log in with the\nproposer account and edit the referendum details"),(0,n.kt)("li",{parentName:"ul"},"Notify the\n",(0,n.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction Element Channel"),"","\nabout your referendum"),(0,n.kt)("li",{parentName:"ul"},"Place the decision deposit before the\n",(0,n.kt)(i.Z,{network:"polkadot",path:"consts.referenda.undecidingTimeout",defaultValue:201600,filter:"blocksToDays",mdxType:"RPC"}),"","-day\ntimeout"),(0,n.kt)("li",{parentName:"ul"},"Once the referendum ends you can\n",(0,n.kt)("a",{parentName:"li",href:"/docs/learn-guides-polkadot-opengov#claiming-the-preimage-and-decision-deposits"},"claim the preimage and decision deposits back"))))}k.isMDXComponent=!0},67847:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/submit-proposal-treasury-3948a231c4f3162a8680ad052af9e903.png"},83601:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-preimage-hash-05bb427d21d3ecf7d5e38418a0a0f4ed.png"},95773:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-preimage-24f67df8dba06111635d87a19ee0ce15.png"},49431:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});const r=a.p+"assets/images/treasury-proposal-decision-deposit-849d27481ba0134acf743f7474d8f6a4.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/f0ff685a.32e462fb.js b/assets/js/f0ff685a.32e462fb.js deleted file mode 100644 index efefde161986..000000000000 --- a/assets/js/f0ff685a.32e462fb.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[8191],{47940:(e,t,o)=>{"use strict";o.d(t,{Z:()=>u});var a=o(74165),n=o(15861),r=o(67294),i=o(87152),s=o(14741),l=o(67425);function c(e,t,o){return p.apply(this,arguments)}function p(){return(p=(0,n.Z)((0,a.Z)().mark((function e(t,o,n){var r,l,c,p,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return c=new i.U(r),e.next=21,s.G.create({provider:c});case 21:p=e.sent,(d=o.split(".")).forEach((function(e){e in p&&(p=p[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=p.toString(),e.abrupt("break",35);case 29:return e.next=31,p();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+o);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,o,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,o,a);break;case"precise":(0,l.Precise)(e,o,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,o);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const u=function(e){var t=e.network,o=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,p=(0,r.useState)(""),u=p[0],h=p[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(i.toString(),l,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c(t,o,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),u}},67425:e=>{var t="polkadot",o="kusama",a="statemine",n="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===n)l=3;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(l)+" "+r[i].symbol).toString())},Precise:function(e,t,o){o(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===n)s=1;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},56870:(e,t,o)=>{"use strict";o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>y,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=o(87462),n=o(63366),r=(o(67294),o(3905)),i=(o(47940),["components"]),s={id:"learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",sidebar_label:"Proxy Guides",description:"Polkadot-JS Guides about Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy"],slug:"../learn-guides-accounts-proxy"},l=void 0,c={unversionedId:"learn/learn-guides-accounts-proxy",id:"learn/learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",description:"Polkadot-JS Guides about Proxy Accounts",source:"@site/../docs/learn/learn-guides-accounts-proxy.md",sourceDirName:"learn",slug:"/learn-guides-accounts-proxy",permalink:"/docs/learn-guides-accounts-proxy",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-proxy.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",sidebar_label:"Proxy Guides",description:"Polkadot-JS Guides about Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy"],slug:"../learn-guides-accounts-proxy"},sidebar:"docs",previous:{title:"Multisig Guides",permalink:"/docs/learn-guides-accounts-multisig"},next:{title:"Pure Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy-pure"}},p={},d=[{value:"Creating Proxy with Polkadot-JS",id:"creating-proxy-with-polkadot-js",level:2},{value:"Removing Proxy with Polkadot-JS",id:"removing-proxy-with-polkadot-js",level:2},{value:"View your Proxy on Polkadot-JS",id:"view-your-proxy-on-polkadot-js",level:2},{value:"Set-up and Use of Time-delayed Proxies with Polkadot-JS",id:"set-up-and-use-of-time-delayed-proxies-with-polkadot-js",level:2},{value:"Proxy calls",id:"proxy-calls",level:2},{value:"Nested Proxy Calls",id:"nested-proxy-calls",level:3}],u={toc:d},h="wrapper";function y(e){var t=e.components,s=(0,n.Z)(e,i);return(0,r.kt)(h,(0,a.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("p",null,"Proxies allow users to use an account (it can be in cold storage or a hot wallet) less frequently\nbut actively participate in the network with the weight of the tokens in that account. Proxies are\nallowed to perform a limited amount of actions related to specific\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/frame-pallets/"},"substrate pallets")," on behalf of another\naccount. The video below contains more information about using proxies."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=1tcygkq52tU"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/1tcygkq52tU/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=1tcygkq52tU"},"Proxy Accounts Tutorial")))),(0,r.kt)("admonition",{title:"Know how to check the calls and pallets accessible by proxies",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"For the latest information on the calls and pallets that can be fully accessed by proxies, check the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/153543b0c8c582e73f520e5c08cbe33bddfb5f69/runtime/polkadot/src/lib.rs#L1158"},"source code in the runtime folder"),"\non the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk"},"Polkadot repository"))),(0,r.kt)("h2",{id:"creating-proxy-with-polkadot-js"},"Creating Proxy with Polkadot-JS"),(0,r.kt)("p",null,"To create a proxy account with Polkadot-JS read\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182179-how-to-create-a-proxy-account"},"this support article"),"."),(0,r.kt)("h2",{id:"removing-proxy-with-polkadot-js"},"Removing Proxy with Polkadot-JS"),(0,r.kt)("p",null,'Read the section "Removing Proxies" on\n',(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182179-how-to-create-a-proxy-account"},"this support page"),"\nto learn how to remove proxies."),(0,r.kt)("h2",{id:"view-your-proxy-on-polkadot-js"},"View your Proxy on Polkadot-JS"),(0,r.kt)("p",null,"To view your proxy, just go on the ",(0,r.kt)("em",{parentName:"p"},"Accounts")," menu in the Polkadot-JS UI, next to the proxied\naccount you will notice a blue icon. Hover on it, and you will see ",(0,r.kt)("em",{parentName:"p"},"Proxy overview"),". Click on it and\nyou will be presented with a list of all proxies for that account."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkadot_view_proxies",src:o(42273).Z,width:"1842",height:"120"})),(0,r.kt)("p",null,"Additionally, you can head over to the ",(0,r.kt)("em",{parentName:"p"},"Chain State")," tab (underneath the ",(0,r.kt)("em",{parentName:"p"},"Developer")," menu) on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/chainstate"},"Polkadot-JS Apps"),". If\nyou've created your proxy on a Polkadot\naccount, it is required to change your network accordingly using the top left navigation button. On\nthis page, the proxy pallet should be selected, returning the announcements and proxies functions.\nThe proxies function will allow you to see your created proxies for either one account or for all\naccounts (using the toggle will enable this). Proxy announcements are what time lock proxies do to\nannounce they are going to conduct an action."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkadot_view_proxies_dev",src:o(28902).Z,width:"1871",height:"820"})),(0,r.kt)("h2",{id:"set-up-and-use-of-time-delayed-proxies-with-polkadot-js"},"Set-up and Use of Time-delayed Proxies with Polkadot-JS"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/3L7Vu2SX0PE"},"this video tutorial")," to learn how you can setup and use\ntime-delayed proxies. The video goes through the example below.")),(0,r.kt)("p",null,"Initially the time time-delayed proxy announces its intended action using the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.announce"),"\nextrinsic and will wait for the number of blocks defined in the delay time before executing it. The\nproxy will include the hash of the intended function call in the announcement. Within this time\nwindow, the intended action may be canceled by accounts that control the proxy. This can be done by\nthe proxy itself using the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.removeAnnouncement")," extrinsic or by the proxied account using the\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.rejectAnnouncement")," extrinsic. Now we can use proxies knowing that any malicious actions\ncan be noticed and reverted within a delay period. After the time-delay, the proxy can use the\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxyAnnounced")," extrinsic to execute the announced call."),(0,r.kt)("p",null,"Let's take for example the stash account Eleanor setting Bob as a time-delayed staking proxy. In\nthis way, if Bob submits an extrinsic to change the reward destination, such extrinsic can be\nrejected by Eleanor. This implies that Eleanor monitors Bob, and that within the time-delay she can\nspot the announced extrinsic. Eleanor can check all the proxy call announcements made by her\naccount's proxies on-chain. On Polkadot-JS UI, go to Developer > Storage > Proxy > Announcements to\ncheck the hashes for the calls made by the proxy accounts and the block height at which they are\nenabled for execution."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"time-delayed proxies",src:o(54481).Z,width:"1920",height:"800"})),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"If you try to use ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxyAnnounced"),' to execute the call within the time-delay window you will\nget an error "Proxy unannounced" since the announcement will be done after the time delay. Also note\nthat regular ',(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," calls do not work with time-delayed proxies, you need to announce the\ncall first and then execute the announced call on a separate transaction.")),(0,r.kt)("h2",{id:"proxy-calls"},"Proxy calls"),(0,r.kt)("p",null,"Proxy calls are used by proxies to call proxied accounts. These calls are important for example in\nthe case of ",(0,r.kt)("em",{parentName:"p"},"pure")," proxies, as any attempt to sign transactions with a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy will fail. For\nmore details see the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies-pure"},"dedicated section about pure proxies"),"."),(0,r.kt)("h3",{id:"nested-proxy-calls"},"Nested Proxy Calls"),(0,r.kt)("p",null,"As the term suggests, nested proxy calls are proxy calls within proxy calls. Such calls are needed\nif there are proxied accounts that are proxies themselves. In the example diagram below, Alice has a\nstash account that has a ",(0,r.kt)("em",{parentName:"p"},"staking")," proxy account, P-C. P-C is a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, a proxied account\noriginally spawned by Charly that is now an ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of P-C and signs everything on its behalf."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"nested proxy calls",src:o(51050).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"For example, to bond more funds, Charly needs to submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"prox.proxy")," extrinsic to P-C, which in\nturn submits a ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to Alice including for example a ",(0,r.kt)("inlineCode",{parentName:"p"},"staking.bondExtra"),"\nextrinsic, specifying the number of extra tokens that need to be bounded. If Charly wants to leave,\na new account can take his place as any proxy (before Charly leaves!). There is no need to change\nthe staking proxy account. Also, Alice is the only one who can remove P-C as a staking proxy, and\nP-C can only perform staking-related tasks. For example, P-C cannot send funds out from Alice's\naccount."),(0,r.kt)("p",null,"Proxy calls can be done using the Extrinsic Tab in the Polkadot-JS UI. Nested proxy calls can be\ndone by calling each ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic separately, or in some cases by just calling the last\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic. In the diagram above, submitting the proxy call from P-C to Alice will\nautomatically ask for Charly's signature. Thus one proxy call will trigger the second one because\nCharly's is the only ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of P-C, and P-C cannot sign anything. While if we want to use Bob's\naccount we will need to submit all three proxy calls."))}y.isMDXComponent=!0},51050:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nested-proxy-calls-65bdc70624a0b21a087da639743c710d.png"},42273:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/polkadot_view_proxies-5c65a3f24dc6902f1734de8887dd5696.png"},28902:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/polkadot_view_proxies_dev-c7f33e592f2c37cade0cc3d37e356aef.png"},54481:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/time-delayed-proxies-8b85523c3caac25b32d1d884af71c048.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/f0ff685a.b45f4759.js b/assets/js/f0ff685a.b45f4759.js new file mode 100644 index 000000000000..e57c47d7d5e5 --- /dev/null +++ b/assets/js/f0ff685a.b45f4759.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[8191],{47940:(e,t,o)=>{"use strict";o.d(t,{Z:()=>u});var a=o(74165),n=o(15861),r=o(67294),i=o(87152),s=o(14741),l=o(67425);function c(e,t,o){return p.apply(this,arguments)}function p(){return(p=(0,n.Z)((0,a.Z)().mark((function e(t,o,n){var r,l,c,p,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return r="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return r="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return r="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return r="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==r){e.next=18;break}return e.abrupt("return");case 18:return c=new i.U(r),e.next=21,s.G.create({provider:c});case 21:p=e.sent,(d=o.split(".")).forEach((function(e){e in p&&(p=p[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=p.toString(),e.abrupt("break",35);case 29:return e.next=31,p();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+o);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,o,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,o,a);break;case"precise":(0,l.Precise)(e,o,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,o);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const u=function(e){var t=e.network,o=e.path,i=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,p=(0,r.useState)(""),u=p[0],h=p[1];return t=t.toLowerCase(),(0,r.useEffect)((function(){void 0!==l?d(i.toString(),l,t,h):h(i.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var r=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c(t,o,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{r()}catch(s){console.log(s)}}}),[]),u}},67425:e=>{var t="polkadot",o="kusama",a="statemine",n="statemint",r={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,i,s){var l=void 0;if(i===t||i===n)l=3;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),s((e=Number.isInteger(e/r[i].precision)?e/r[i].precision+" "+r[i].symbol:(e/r[i].precision).toFixed(l)+" "+r[i].symbol).toString())},Precise:function(e,t,o){o(e=(e=parseFloat(e))/r[t].precision+" "+r[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,r,i){var s=void 0;if(i===t||i===n)s=1;else{if(i!==o&&i!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}r((e/=s).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},56870:(e,t,o)=>{"use strict";o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>y,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=o(87462),n=o(63366),r=(o(67294),o(3905)),i=(o(47940),["components"]),s={id:"learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",sidebar_label:"Proxy Guides",description:"Polkadot-JS Guides about Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy"],slug:"../learn-guides-accounts-proxy"},l=void 0,c={unversionedId:"learn/learn-guides-accounts-proxy",id:"learn/learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",description:"Polkadot-JS Guides about Proxy Accounts",source:"@site/../docs/learn/learn-guides-accounts-proxy.md",sourceDirName:"learn",slug:"/learn-guides-accounts-proxy",permalink:"/docs/learn-guides-accounts-proxy",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-accounts-proxy.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-accounts-proxy",title:"Polkadot-JS Guides about Proxy Accounts",sidebar_label:"Proxy Guides",description:"Polkadot-JS Guides about Proxy Accounts",keyword:["guides","polkadot-js","accounts","proxy"],slug:"../learn-guides-accounts-proxy"},sidebar:"docs",previous:{title:"Multisig Guides",permalink:"/docs/learn-guides-accounts-multisig"},next:{title:"Pure Proxy Guides",permalink:"/docs/learn-guides-accounts-proxy-pure"}},p={},d=[{value:"Creating Proxy with Polkadot-JS",id:"creating-proxy-with-polkadot-js",level:2},{value:"Removing Proxy with Polkadot-JS",id:"removing-proxy-with-polkadot-js",level:2},{value:"View your Proxy on Polkadot-JS",id:"view-your-proxy-on-polkadot-js",level:2},{value:"Set-up and Use of Time-delayed Proxies with Polkadot-JS",id:"set-up-and-use-of-time-delayed-proxies-with-polkadot-js",level:2},{value:"Proxy calls",id:"proxy-calls",level:2},{value:"Nested Proxy Calls",id:"nested-proxy-calls",level:3}],u={toc:d},h="wrapper";function y(e){var t=e.components,s=(0,n.Z)(e,i);return(0,r.kt)(h,(0,a.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("p",null,"Proxies allow users to use an account (it can be in cold storage or a hot wallet) less frequently\nbut actively participate in the network with the weight of the tokens in that account. Proxies are\nallowed to perform a limited amount of actions related to specific\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/frame-pallets/"},"substrate pallets")," on behalf of another\naccount. The video below contains more information about using proxies."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=1tcygkq52tU"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/1tcygkq52tU/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://www.youtube.com/watch?v=1tcygkq52tU"},"Proxy Accounts Tutorial")))),(0,r.kt)("admonition",{title:"Know how to check the calls and pallets accessible by proxies",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"For the latest information on the calls and pallets that can be fully accessed by proxies, check the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/153543b0c8c582e73f520e5c08cbe33bddfb5f69/runtime/polkadot/src/lib.rs#L1158"},"source code in the runtime folder"),"\non the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk"},"Polkadot repository"))),(0,r.kt)("h2",{id:"creating-proxy-with-polkadot-js"},"Creating Proxy with Polkadot-JS"),(0,r.kt)("p",null,"To create a proxy account with Polkadot-JS read\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182179-how-to-create-a-proxy-account"},"this support article"),"."),(0,r.kt)("h2",{id:"removing-proxy-with-polkadot-js"},"Removing Proxy with Polkadot-JS"),(0,r.kt)("p",null,'Read the section "Removing Proxies" on\n',(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182179-how-to-create-a-proxy-account"},"this support page"),"\nto learn how to remove proxies."),(0,r.kt)("h2",{id:"view-your-proxy-on-polkadot-js"},"View your Proxy on Polkadot-JS"),(0,r.kt)("p",null,"To view your proxy, just go on the ",(0,r.kt)("em",{parentName:"p"},"Accounts")," menu in the Polkadot-JS UI, next to the proxied\naccount you will notice a blue icon. Hover on it, and you will see ",(0,r.kt)("em",{parentName:"p"},"Proxy overview"),". Click on it and\nyou will be presented with a list of all proxies for that account."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkadot_view_proxies",src:o(42273).Z,width:"1842",height:"120"})),(0,r.kt)("p",null,"Additionally, you can head over to the ",(0,r.kt)("em",{parentName:"p"},"Chain State")," tab (underneath the ",(0,r.kt)("em",{parentName:"p"},"Developer")," menu) on\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/chainstate"},"Polkadot-JS Apps"),". If\nyou've created your proxy on a Polkadot\naccount, it is required to change your network accordingly using the top left navigation button. On\nthis page, the proxy pallet should be selected, returning the announcements and proxies functions.\nThe proxies function will allow you to see your created proxies for either one account or for all\naccounts (using the toggle will enable this). Proxy announcements are what time lock proxies do to\nannounce they are going to conduct an action."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"polkadot_view_proxies_dev",src:o(28902).Z,width:"1871",height:"820"})),(0,r.kt)("h2",{id:"set-up-and-use-of-time-delayed-proxies-with-polkadot-js"},"Set-up and Use of Time-delayed Proxies with Polkadot-JS"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/3L7Vu2SX0PE"},"this video tutorial")," to learn how you can setup and use\ntime-delayed proxies. The video goes through the example below.")),(0,r.kt)("p",null,"Initially the time time-delayed proxy announces its intended action using the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.announce"),"\nextrinsic and will wait for the number of blocks defined in the delay time before executing it. The\nproxy will include the hash of the intended function call in the announcement. Within this time\nwindow, the intended action may be canceled by accounts that control the proxy. This can be done by\nthe proxy itself using the ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.removeAnnouncement")," extrinsic or by the proxied account using the\nthe ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.rejectAnnouncement")," extrinsic. Now we can use proxies knowing that any malicious actions\ncan be noticed and reverted within a delay period. After the time-delay, the proxy can use the\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxyAnnounced")," extrinsic to execute the announced call."),(0,r.kt)("p",null,"Let's take for example the stash account Eleanor setting Bob as a time-delayed staking proxy. In\nthis way, if Bob submits an extrinsic to change the reward destination, such extrinsic can be\nrejected by Eleanor. This implies that Eleanor monitors Bob, and that within the time-delay she can\nspot the announced extrinsic. Eleanor can check all the proxy call announcements made by her\naccount's proxies on-chain. On Polkadot-JS UI, go to Developer > Storage > Proxy > Announcements to\ncheck the hashes for the calls made by the proxy accounts and the block height at which they are\nenabled for execution."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"time-delayed proxies",src:o(54481).Z,width:"1920",height:"800"})),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"If you try to use ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxyAnnounced"),' to execute the call within the time-delay window you will\nget an error "Proxy unannounced" since the announcement will be done after the time delay. Also note\nthat regular ',(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," calls do not work with time-delayed proxies, you need to announce the\ncall first and then execute the announced call on a separate transaction.")),(0,r.kt)("h2",{id:"proxy-calls"},"Proxy calls"),(0,r.kt)("p",null,"Proxy calls are used by proxies to call proxied accounts. These calls are important for example in\nthe case of ",(0,r.kt)("em",{parentName:"p"},"pure")," proxies, as any attempt to sign transactions with a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy will fail. For\nmore details see the ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies-pure"},"dedicated section about pure proxies"),"."),(0,r.kt)("h3",{id:"nested-proxy-calls"},"Nested Proxy Calls"),(0,r.kt)("p",null,"As the term suggests, nested proxy calls are proxy calls within proxy calls. Such calls are needed\nif there are proxied accounts that are proxies themselves. In the example diagram below, Alice has a\nstash account that has a ",(0,r.kt)("em",{parentName:"p"},"staking")," proxy account, P-C. P-C is a ",(0,r.kt)("em",{parentName:"p"},"pure")," proxy, a proxied account\noriginally spawned by Charly that is now an ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of P-C and signs everything on its behalf."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"nested proxy calls",src:o(51050).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"For example, to bond more funds, Charly needs to submit a ",(0,r.kt)("inlineCode",{parentName:"p"},"prox.proxy")," extrinsic to P-C, which in\nturn submits a ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic to Alice including for example a ",(0,r.kt)("inlineCode",{parentName:"p"},"staking.bondExtra"),"\nextrinsic, specifying the number of extra tokens that need to be bounded. If Charly wants to leave,\na new account can take his place as any proxy (before Charly leaves!). There is no need to change\nthe staking proxy account. Also, Alice is the only one who can remove P-C as a staking proxy, and\nP-C can only perform staking-related tasks. For example, P-C cannot send funds out from Alice's\naccount."),(0,r.kt)("p",null,"Proxy calls can be done using the Extrinsic Tab in the Polkadot-JS UI. Nested proxy calls can be\ndone by calling each ",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic separately, or in some cases by just calling the last\n",(0,r.kt)("inlineCode",{parentName:"p"},"proxy.proxy")," extrinsic. In the diagram above, submitting the proxy call from P-C to Alice will\nautomatically ask for Charly's signature. Thus one proxy call will trigger the second one because\nCharly's is the only ",(0,r.kt)("em",{parentName:"p"},"any")," proxy of P-C, and P-C cannot sign anything. While if we want to use Bob's\naccount we will need to submit all three proxy calls."))}y.isMDXComponent=!0},51050:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/nested-proxy-calls-65bdc70624a0b21a087da639743c710d.png"},42273:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/polkadot_view_proxies-5c65a3f24dc6902f1734de8887dd5696.png"},28902:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/polkadot_view_proxies_dev-c7f33e592f2c37cade0cc3d37e356aef.png"},54481:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const a=o.p+"assets/images/time-delayed-proxies-8b85523c3caac25b32d1d884af71c048.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/f14351c1.6ee81354.js b/assets/js/f14351c1.461d06e3.js similarity index 60% rename from assets/js/f14351c1.6ee81354.js rename to assets/js/f14351c1.461d06e3.js index a056badb2a13..7f2833f4cc51 100644 --- a/assets/js/f14351c1.6ee81354.js +++ b/assets/js/f14351c1.461d06e3.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3356],{2551:e=>{e.exports=JSON.parse('{"title":"Components","description":"Key components of the Polkadot ecosystem.","slug":"/learn-components-index","permalink":"/docs/learn-components-index","navigation":{"previous":{"title":"Introduction to NFTs","permalink":"/docs/learn-nft"},"next":{"title":"Polkadot Host","permalink":"/docs/learn-polkadot-host"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3356],{2551:e=>{e.exports=JSON.parse('{"title":"Components","description":"Key components of the Polkadot ecosystem.","slug":"/learn-components-index","permalink":"/docs/learn-components-index","navigation":{"previous":{"title":"Validator","permalink":"/docs/learn-validator"},"next":{"title":"Polkadot Host","permalink":"/docs/learn-polkadot-host"}}}')}}]); \ No newline at end of file diff --git a/assets/js/f3027c84.6df02cfe.js b/assets/js/f3027c84.6df02cfe.js new file mode 100644 index 000000000000..ada81ec2b15a --- /dev/null +++ b/assets/js/f3027c84.6df02cfe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2242],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(a),k=o,h=d["".concat(l,".").concat(k)]||d[k]||u[k]||r;return a?n.createElement(h,s(s({ref:t},c),{},{components:a})):n.createElement(h,s({ref:t},c))}));function h(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,s=new Array(r);s[0]=k;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:o,s[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>p,toc:()=>d});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),s=["components"],i={id:"polkadotjs-ui",title:"Polkadot-JS UI (Wallet)",sidebar_label:"Polkadot-JS UI",description:"A Wallet for Power-users and Developers.",keywords:["polkadotjs","polkadotjs apps","apps UI","extension"],slug:"../polkadotjs-ui"},l=void 0,p={unversionedId:"general/polkadotjs-ui",id:"general/polkadotjs-ui",title:"Polkadot-JS UI (Wallet)",description:"A Wallet for Power-users and Developers.",source:"@site/../docs/general/polkadotjs-ui.md",sourceDirName:"general",slug:"/polkadotjs-ui",permalink:"/docs/polkadotjs-ui",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/polkadotjs-ui.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"polkadotjs-ui",title:"Polkadot-JS UI (Wallet)",sidebar_label:"Polkadot-JS UI",description:"A Wallet for Power-users and Developers.",keywords:["polkadotjs","polkadotjs apps","apps UI","extension"],slug:"../polkadotjs-ui"},sidebar:"docs",previous:{title:"Polkadot-JS Tooling",permalink:"/docs/polkadotjs"},next:{title:"Polkadot-JS Guides",permalink:"/docs/learn-polkadot-js-guides"}},c={},d=[{value:"Main Functionalities",id:"main-functionalities",level:2},{value:"Accounts",id:"accounts",level:3},{value:"Network (Staking)",id:"network-staking",level:3},{value:"Settings",id:"settings",level:3},{value:"Other Functionalities",id:"other-functionalities",level:2},{value:"Network",id:"network",level:3},{value:"Governance",id:"governance",level:3},{value:"Developer",id:"developer",level:3},{value:"Beginner's Guide to Polkadot-JS",id:"beginners-guide-to-polkadot-js",level:2}],u={toc:d},k="wrapper";function h(e){var t=e.components,a=(0,o.Z)(e,s);return(0,r.kt)(k,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"sticky",style:{zIndex:1}},(0,r.kt)("br",null),(0,r.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the Polkadot-JS UI, you\ncan contact the ",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more\nuser-friendly tools see the ",(0,r.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,r.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,r.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},(0,r.kt)("strong",{parentName:"a"},"Polkadot-JS UI"))," is the native application for\naccessing all features available on Substrate chains as Polkadot and Kusama. The UI is one of the\nmoving parts of ",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs"},(0,r.kt)("strong",{parentName:"a"},"Polkadot-JS tool collection")),", and its functionalities go\nbeyond normal wallet functionalities such as transfers."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Note that the UI may not precisely align with the functionality of individual parachains. For more\ninformation see the ",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-api"},(0,r.kt)("strong",{parentName:"a"},"Polkadot-JS Page")),".")),(0,r.kt)("h2",{id:"main-functionalities"},"Main Functionalities"),(0,r.kt)("p",null,"Here we describe those functionalities that will likely be useful to most users. Those\nfunctionalities include account generation, balance transfers, and staking."),(0,r.kt)("h3",{id:"accounts"},"Accounts"),(0,r.kt)("p",null,"In this section of the UI, you can see accounts injected from a browser extension, such as the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},(0,r.kt)("strong",{parentName:"a"},"Polkadot-JS Extension"))," or\n",(0,r.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions#browser-extensions"},(0,r.kt)("strong",{parentName:"a"},"other in-browser wallets")),". It is also possible\nto expand balance details and see different\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-accounts#account-balance-types"},(0,r.kt)("strong",{parentName:"a"},"account balance types")),". You can also:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Add an account (this option must be enabled under ",(0,r.kt)("a",{parentName:"li",href:"#settings"},"Settings"),"). Note that if you clear\nthe cache of your browser, you will lose it, and you will need to recover it through seed phrase\nor JSON file."),(0,r.kt)("li",{parentName:"ul"},"Recover and account from JSON file."),(0,r.kt)("li",{parentName:"ul"},"Add an account from QR code."),(0,r.kt)("li",{parentName:"ul"},"Add an account from a ",(0,r.kt)("a",{parentName:"li",href:"/docs/ledger"},(0,r.kt)("strong",{parentName:"a"},"Ledger"))," device (this option must be enabled under\n",(0,r.kt)("a",{parentName:"li",href:"#settings"},"Settings"),")."),(0,r.kt)("li",{parentName:"ul"},"Create a ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-account-multisig"},(0,r.kt)("strong",{parentName:"a"},"multi-signature account")),"."),(0,r.kt)("li",{parentName:"ul"},"Add a proxied account (see\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-proxies-pure#anonymous-proxy-pure-proxy"},(0,r.kt)("strong",{parentName:"a"},"Pure Proxies"))," for more\ninformation).")),(0,r.kt)("p",null,"For each account visible in the UI, you can perform different actions, including\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},(0,r.kt)("strong",{parentName:"a"},"adding a proxy")),",\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-identity"},(0,r.kt)("strong",{parentName:"a"},"setting an identity")),", and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-transactions#balance-transfers"},(0,r.kt)("strong",{parentName:"a"},"sending tokens")),"."),(0,r.kt)("p",null,"For more information about adding and recovering accounts, see the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-accounts#account-generation"},(0,r.kt)("strong",{parentName:"a"},"Account Generation"))," page."),(0,r.kt)("h3",{id:"network-staking"},"Network (Staking)"),(0,r.kt)("p",null,"In this section of the UI, you can participate in ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking"},(0,r.kt)("strong",{parentName:"a"},"staking")),". In the\nStaking menu you can access:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Overview")," tab showing active or waiting validators."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Accounts")," tab (visible only if you added an account) showing accounts that are currently\nused for staking\n(",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-staking#stash-account-and-staking-proxy"},(0,r.kt)("strong",{parentName:"a"},"stash and staking proxy")),"), bonded\namount, and nominations. In this tab, you can do staking-related transactions such as bonding more\nfunds or changing nominations. If you have\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#staking-proxies"},(0,r.kt)("strong",{parentName:"a"},"staking proxies"))," here, you can use them\nwhile signing for staking-related transactions."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Payouts")," tab (visible only if you added an account) showing any pending rewards that still\nneed to be paid out to you."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Pool")," tab showing all registered ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools"},(0,r.kt)("strong",{parentName:"a"},"nomination pool")),"\nwith the respective state (open, blocked, or destroying). This tab can also be used to create and\njoin a pool."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Targets")," tab showing detailed information about validators such as commission and return.\nMore information can be found in the ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-nominator"},(0,r.kt)("strong",{parentName:"a"},"Nominator Page")),"."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Bags"),' tab (visible only if you added an account) showing the bag you are in ("My bags") and\nall bags within the ',(0,r.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},(0,r.kt)("strong",{parentName:"a"},"bags list")),". Here (if\napplicable), you can rebag accounts that do not belong to the bag you are in, and you can move\nyour account in front of the account having less stake than you."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Slashes")," tab showing if there are any global slashes."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Validator stats")," tab showing statistics for a chosen validator.")),(0,r.kt)("h3",{id:"settings"},"Settings"),(0,r.kt)("p",null,"In this UI section, you can change general settings such as appearance and language. You can also:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Allow local in-browser account storage. This is used to add accounts directly in the UI (which\ndiffers from having an account injected from a browser extension)."),(0,r.kt)("li",{parentName:"ul"},"Choose to attach Ledger devices. This adds an account directly in the UI from a Ledger device.")),(0,r.kt)("p",null,"Under Settings you can also do the metadata update. Usually, if there is an update, this will be\nshown as a notification. For more information about metadata updates, see the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-accounts#metadata-updates-with-the-polkadot-js-browser-extension"},(0,r.kt)("strong",{parentName:"a"},"dedicated section")),"."),(0,r.kt)("h2",{id:"other-functionalities"},"Other Functionalities"),(0,r.kt)("p",null,"In this section, we describe those functionalities that will less likely interest the average user."),(0,r.kt)("h3",{id:"network"},"Network"),(0,r.kt)("p",null,"In addition to staking, in the Network section, you can also:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"See the Explorer with the most recent blocks and events."),(0,r.kt)("li",{parentName:"ul"},"Inspect ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-parachains"},(0,r.kt)("strong",{parentName:"a"},"parachains")),", see parachain\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-auction"},(0,r.kt)("strong",{parentName:"a"},"auctions"))," and participate to parachain\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-crowdloans"},(0,r.kt)("strong",{parentName:"a"},"crowdloans")),".")),(0,r.kt)("h3",{id:"governance"},"Governance"),(0,r.kt)("p",null,"In this section of the UI, you can participate in\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},(0,r.kt)("strong",{parentName:"a"},"governance")),"."),(0,r.kt)("h3",{id:"developer"},"Developer"),(0,r.kt)("p",null,"In this section of the UI, you can access advanced features such as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/chainstate"},"Query on-chain data")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/rpc"},"Query the node using RPC calls")),(0,r.kt)("li",{parentName:"ul"},"Call ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-transactions"},(0,r.kt)("strong",{parentName:"a"},"extrinsics"))," using your account (you are able to see this\noption only if you have an account in the UI)")),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsic tab")," provides the use to access more\ngranular functions such as\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies-pure#anonymous-proxy-pure-proxy"},(0,r.kt)("strong",{parentName:"a"},"pure proxies"))," and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies#time-delayed-proxy"},(0,r.kt)("strong",{parentName:"a"},"time-delayed proxies")),", change\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},(0,r.kt)("strong",{parentName:"a"},"nomination pool"))," settings (nomination and roles) and use\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies#non-transfer-proxy"},(0,r.kt)("strong",{parentName:"a"},"non-transfer proxies")),",\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-assets#destroying-an-asset"},(0,r.kt)("strong",{parentName:"a"},"destroy assets")),", and much more."),(0,r.kt)("h2",{id:"beginners-guide-to-polkadot-js"},"Beginner's Guide to Polkadot-JS"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=4EQqwGFV1D8"},"Introduction to Polkadot-JS")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=sy7lvAqyzkY"},"Create an account using Polkadot-JS")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=g4b4IWR6OrE"},"Network Explorer on Polkadot-JS UI"))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f3027c84.f254b300.js b/assets/js/f3027c84.f254b300.js deleted file mode 100644 index 350745b2d99b..000000000000 --- a/assets/js/f3027c84.f254b300.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2242],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(a),k=o,h=d["".concat(l,".").concat(k)]||d[k]||u[k]||r;return a?n.createElement(h,s(s({ref:t},c),{},{components:a})):n.createElement(h,s({ref:t},c))}));function h(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,s=new Array(r);s[0]=k;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:o,s[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>p,toc:()=>d});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),s=["components"],i={id:"polkadotjs-ui",title:"Polkadot-JS UI (Wallet)",sidebar_label:"Polkadot-JS UI",description:"A Wallet for Power-users and Developers.",keywords:["polkadotjs","polkadotjs apps","apps UI","extension"],slug:"../polkadotjs-ui"},l=void 0,p={unversionedId:"general/polkadotjs-ui",id:"general/polkadotjs-ui",title:"Polkadot-JS UI (Wallet)",description:"A Wallet for Power-users and Developers.",source:"@site/../docs/general/polkadotjs-ui.md",sourceDirName:"general",slug:"/polkadotjs-ui",permalink:"/docs/polkadotjs-ui",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/polkadotjs-ui.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1704367237,formattedLastUpdatedAt:"Jan 4, 2024",frontMatter:{id:"polkadotjs-ui",title:"Polkadot-JS UI (Wallet)",sidebar_label:"Polkadot-JS UI",description:"A Wallet for Power-users and Developers.",keywords:["polkadotjs","polkadotjs apps","apps UI","extension"],slug:"../polkadotjs-ui"},sidebar:"docs",previous:{title:"Polkadot-JS Tooling",permalink:"/docs/polkadotjs"},next:{title:"Polkadot-JS Guides",permalink:"/docs/learn-polkadot-js-guides"}},c={},d=[{value:"Main Functionalities",id:"main-functionalities",level:2},{value:"Accounts",id:"accounts",level:3},{value:"Network (Staking)",id:"network-staking",level:3},{value:"Settings",id:"settings",level:3},{value:"Other Functionalities",id:"other-functionalities",level:2},{value:"Network",id:"network",level:3},{value:"Governance",id:"governance",level:3},{value:"Developer",id:"developer",level:3},{value:"Beginner's Guide to Polkadot-JS",id:"beginners-guide-to-polkadot-js",level:2}],u={toc:d},k="wrapper";function h(e){var t=e.components,a=(0,o.Z)(e,s);return(0,r.kt)(k,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"A Wallet for Developers and Power Users",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"If you need help using the Polkadot-JS UI, you can contact the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},(0,r.kt)("strong",{parentName:"a"},"Polkadot Support Team")),". Please note that this\nwallet is oriented toward developers and power users. Check out treasury-funded wallets on the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"Wallets Page")," for more user-friendly wallets.")),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},(0,r.kt)("strong",{parentName:"a"},"Polkadot-JS UI"))," is the native application for\naccessing all features available on Substrate chains as Polkadot and Kusama. The UI is one of the\nmoving parts of ",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs"},(0,r.kt)("strong",{parentName:"a"},"Polkadot-JS tool collection")),", and its functionalities go\nbeyond normal wallet functionalities such as transfers."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Note that the UI may not precisely align with the functionality of individual parachains. For more\ninformation see the ",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-api"},(0,r.kt)("strong",{parentName:"a"},"Polkadot-JS Page")),".")),(0,r.kt)("h2",{id:"main-functionalities"},"Main Functionalities"),(0,r.kt)("p",null,"Here we describe those functionalities that will likely be useful to most users. Those\nfunctionalities include account generation, balance transfers, and staking."),(0,r.kt)("h3",{id:"accounts"},"Accounts"),(0,r.kt)("p",null,"In this section of the UI, you can see accounts injected from a browser extension, such as the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadotjs#polkadot-js-extension"},(0,r.kt)("strong",{parentName:"a"},"Polkadot-JS Extension"))," or\n",(0,r.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions#browser-extensions"},(0,r.kt)("strong",{parentName:"a"},"other in-browser wallets")),". It is also possible\nto expand balance details and see different\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-accounts#account-balance-types"},(0,r.kt)("strong",{parentName:"a"},"account balance types")),". You can also:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Add an account (this option must be enabled under ",(0,r.kt)("a",{parentName:"li",href:"#settings"},"Settings"),"). Note that if you clear\nthe cache of your browser, you will lose it, and you will need to recover it through seed phrase\nor JSON file."),(0,r.kt)("li",{parentName:"ul"},"Recover and account from JSON file."),(0,r.kt)("li",{parentName:"ul"},"Add an account from QR code."),(0,r.kt)("li",{parentName:"ul"},"Add an account from a ",(0,r.kt)("a",{parentName:"li",href:"/docs/ledger"},(0,r.kt)("strong",{parentName:"a"},"Ledger"))," device (this option must be enabled under\n",(0,r.kt)("a",{parentName:"li",href:"#settings"},"Settings"),")."),(0,r.kt)("li",{parentName:"ul"},"Create a ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-account-multisig"},(0,r.kt)("strong",{parentName:"a"},"multi-signature account")),"."),(0,r.kt)("li",{parentName:"ul"},"Add a proxied account (see\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-proxies-pure#anonymous-proxy-pure-proxy"},(0,r.kt)("strong",{parentName:"a"},"Pure Proxies"))," for more\ninformation).")),(0,r.kt)("p",null,"For each account visible in the UI, you can perform different actions, including\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},(0,r.kt)("strong",{parentName:"a"},"adding a proxy")),",\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-identity"},(0,r.kt)("strong",{parentName:"a"},"setting an identity")),", and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-transactions#balance-transfers"},(0,r.kt)("strong",{parentName:"a"},"sending tokens")),"."),(0,r.kt)("p",null,"For more information about adding and recovering accounts, see the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-accounts#account-generation"},(0,r.kt)("strong",{parentName:"a"},"Account Generation"))," page."),(0,r.kt)("h3",{id:"network-staking"},"Network (Staking)"),(0,r.kt)("p",null,"In this section of the UI, you can participate in ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking"},(0,r.kt)("strong",{parentName:"a"},"staking")),". In the\nStaking menu you can access:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Overview")," tab showing active or waiting validators."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Accounts")," tab (visible only if you added an account) showing accounts that are currently\nused for staking\n(",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-staking#stash-account-and-staking-proxy"},(0,r.kt)("strong",{parentName:"a"},"stash and staking proxy")),"), bonded\namount, and nominations. In this tab, you can do staking-related transactions such as bonding more\nfunds or changing nominations. If you have\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#staking-proxies"},(0,r.kt)("strong",{parentName:"a"},"staking proxies"))," here, you can use them\nwhile signing for staking-related transactions."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Payouts")," tab (visible only if you added an account) showing any pending rewards that still\nneed to be paid out to you."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Pool")," tab showing all registered ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools"},(0,r.kt)("strong",{parentName:"a"},"nomination pool")),"\nwith the respective state (open, blocked, or destroying). This tab can also be used to create and\njoin a pool."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Targets")," tab showing detailed information about validators such as commission and return.\nMore information can be found in the ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-nominator"},(0,r.kt)("strong",{parentName:"a"},"Nominator Page")),"."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Bags"),' tab (visible only if you added an account) showing the bag you are in ("My bags") and\nall bags within the ',(0,r.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},(0,r.kt)("strong",{parentName:"a"},"bags list")),". Here (if\napplicable), you can rebag accounts that do not belong to the bag you are in, and you can move\nyour account in front of the account having less stake than you."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Slashes")," tab showing if there are any global slashes."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("strong",{parentName:"li"},"Validator stats")," tab showing statistics for a chosen validator.")),(0,r.kt)("h3",{id:"settings"},"Settings"),(0,r.kt)("p",null,"In this UI section, you can change general settings such as appearance and language. You can also:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Allow local in-browser account storage. This is used to add accounts directly in the UI (which\ndiffers from having an account injected from a browser extension)."),(0,r.kt)("li",{parentName:"ul"},"Choose to attach Ledger devices. This adds an account directly in the UI from a Ledger device.")),(0,r.kt)("p",null,"Under Settings you can also do the metadata update. Usually, if there is an update, this will be\nshown as a notification. For more information about metadata updates, see the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-guides-accounts#metadata-updates-with-the-polkadot-js-browser-extension"},(0,r.kt)("strong",{parentName:"a"},"dedicated section")),"."),(0,r.kt)("h2",{id:"other-functionalities"},"Other Functionalities"),(0,r.kt)("p",null,"In this section, we describe those functionalities that will less likely interest the average user."),(0,r.kt)("h3",{id:"network"},"Network"),(0,r.kt)("p",null,"In addition to staking, in the Network section, you can also:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"See the Explorer with the most recent blocks and events."),(0,r.kt)("li",{parentName:"ul"},"Inspect ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-parachains"},(0,r.kt)("strong",{parentName:"a"},"parachains")),", see parachain\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-auction"},(0,r.kt)("strong",{parentName:"a"},"auctions"))," and participate to parachain\n",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-crowdloans"},(0,r.kt)("strong",{parentName:"a"},"crowdloans")),".")),(0,r.kt)("h3",{id:"governance"},"Governance"),(0,r.kt)("p",null,"In this section of the UI, you can participate in\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},(0,r.kt)("strong",{parentName:"a"},"governance")),"."),(0,r.kt)("h3",{id:"developer"},"Developer"),(0,r.kt)("p",null,"In this section of the UI, you can access advanced features such as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/chainstate"},"Query on-chain data")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/rpc"},"Query the node using RPC calls")),(0,r.kt)("li",{parentName:"ul"},"Call ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-transactions"},(0,r.kt)("strong",{parentName:"a"},"extrinsics"))," using your account (you are able to see this\noption only if you have an account in the UI)")),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/extrinsics"},"Extrinsic tab")," provides the use to access more\ngranular functions such as\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies-pure#anonymous-proxy-pure-proxy"},(0,r.kt)("strong",{parentName:"a"},"pure proxies"))," and\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies#time-delayed-proxy"},(0,r.kt)("strong",{parentName:"a"},"time-delayed proxies")),", change\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},(0,r.kt)("strong",{parentName:"a"},"nomination pool"))," settings (nomination and roles) and use\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies#non-transfer-proxy"},(0,r.kt)("strong",{parentName:"a"},"non-transfer proxies")),",\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-assets#destroying-an-asset"},(0,r.kt)("strong",{parentName:"a"},"destroy assets")),", and much more."),(0,r.kt)("h2",{id:"beginners-guide-to-polkadot-js"},"Beginner's Guide to Polkadot-JS"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=4EQqwGFV1D8"},"Introduction to Polkadot-JS")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=sy7lvAqyzkY"},"Create an account using Polkadot-JS")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=g4b4IWR6OrE"},"Network Explorer on Polkadot-JS UI"))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f4130007.72a10007.js b/assets/js/f4130007.72a10007.js deleted file mode 100644 index 4325ecf89ec1..000000000000 --- a/assets/js/f4130007.72a10007.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2665],{3905:(t,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>g});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function o(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var i=n.createContext({}),p=function(t){var e=n.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):o(o({},e),t)),a},d=function(t){var e=p(t.components);return n.createElement(i.Provider,{value:e},t.children)},m="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,i=t.parentName,d=s(t,["components","mdxType","originalType","parentName"]),m=p(a),k=r,g=m["".concat(i,".").concat(k)]||m[k]||u[k]||l;return a?n.createElement(g,o(o({ref:e},d),{},{components:a})):n.createElement(g,o({ref:e},d))}));function g(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,o=new Array(l);o[0]=k;var s={};for(var i in e)hasOwnProperty.call(e,i)&&(s[i]=e[i]);s.originalType=t,s[m]="string"==typeof t?t:r,o[1]=s;for(var p=2;p{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>g,frontMatter:()=>s,metadata:()=>p,toc:()=>m});var n=a(87462),r=a(63366),l=(a(67294),a(3905)),o=["components"],s={id:"wallets-and-extensions",title:"Wallets and Extensions",sidebar_label:"Wallets and Extensions",description:"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.",keywords:["wallets","account","signer","supported wallets","balance","token"],slug:"../wallets-and-extensions"},i=void 0,p={unversionedId:"general/wallets-and-extensions",id:"general/wallets-and-extensions",title:"Wallets and Extensions",description:"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.",source:"@site/../docs/general/wallets-and-extensions.md",sourceDirName:"general",slug:"/wallets-and-extensions",permalink:"/docs/wallets-and-extensions",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/wallets-and-extensions.md",tags:[],version:"current",lastUpdatedBy:"github-actions[bot]",lastUpdatedAt:1710759676,formattedLastUpdatedAt:"Mar 18, 2024",frontMatter:{id:"wallets-and-extensions",title:"Wallets and Extensions",sidebar_label:"Wallets and Extensions",description:"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.",keywords:["wallets","account","signer","supported wallets","balance","token"],slug:"../wallets-and-extensions"},sidebar:"docs",previous:{title:"Wallets",permalink:"/docs/wallets-index"},next:{title:"Ledger",permalink:"/docs/ledger"}},d={},m=[{value:"Overview",id:"overview",level:2},{value:"Browser Extensions",id:"browser-extensions",level:3},{value:"Mobile Wallets",id:"mobile-wallets",level:3},{value:"Web Wallets",id:"web-wallets",level:3},{value:"Enkrypt",id:"enkrypt",level:2},{value:"Fearless Wallet",id:"fearless-wallet",level:2},{value:"Nova Wallet",id:"nova-wallet",level:2},{value:"PolkaGate",id:"polkagate",level:2},{value:"Polkawallet",id:"polkawallet",level:2},{value:"SubWallet",id:"subwallet",level:2},{value:"Talisman",id:"talisman",level:2}],u={toc:m},k="wrapper";function g(t){var e=t.components,a=(0,r.Z)(t,o);return(0,l.kt)(k,(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("admonition",{type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"Using your due diligence in researching and using the wallets listed below would be best. For any\nissues related to these wallet, reach out to their support teams directly.")),(0,l.kt)("admonition",{type:"info"},(0,l.kt)("p",{parentName:"admonition"},"Explore Polkadot with a secure and user-friendly wallets listed on the\n",(0,l.kt)("a",{parentName:"p",href:"https://www.polkadot.network/ecosystem/wallets/"},"Polkadot website"),".")),(0,l.kt)("p",null,"If you are new to blockchain technology, generally a typical blockchain network account is a\npublic-private key pair. Access to a private key gives full access to all the allowed transactions\non that blockchain account. It is essential to keep the private key secure."),(0,l.kt)("p",null,"Typically, the account keys are either stored and accessed through a browser extension or a\nsmartphone app (which are considered as a hot wallets as they are online), or an air-gapped device\nor a hardware wallet (which are considered as cold wallets as they are offline)."),(0,l.kt)("admonition",{title:"Not your keys, not your tokens!",type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"With ",(0,l.kt)("strong",{parentName:"p"},"custodial wallets")," (like accounts in centralized exchanges), another party controls your\nprivate keys. Private keys are used to access funds in your account, so you trust the exchange that\nyour key will always be given to you whenever you need it. With ",(0,l.kt)("strong",{parentName:"p"},"non-custodial wallets"),", only you\ncan access your account's private key.")),(0,l.kt)("p",null,"To realize the multichain vision of Polkadot,\nit is important to have non-custodial wallets that make it convenient to interact with multiple\nblockchains in Polkadot ecosystem. Below there\nis a list of all non-custodial treasury-funded wallets developed by the community."),(0,l.kt)("h2",{id:"overview"},"Overview"),(0,l.kt)("h3",{id:"browser-extensions"},"Browser Extensions"),(0,l.kt)("p",null,"At a bare minimum, browser extension wallets act as key storage and management solution, allowing\nyou to use your accounts with apps in the Web3 space. The wallets listed below offer functionality\nbeyond that, allowing the featured actions to be performed directly through the extension. Some of\nthem also allow interaction with air-gapped wallets and hardware devices."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Wallet"),(0,l.kt)("th",{parentName:"tr",align:null},"Browsers"),(0,l.kt)("th",{parentName:"tr",align:null},"Staking and Nomination Pools"),(0,l.kt)("th",{parentName:"tr",align:null},"NFTs"),(0,l.kt)("th",{parentName:"tr",align:null},"Crowdloans"),(0,l.kt)("th",{parentName:"tr",align:null},"Ledger support"),(0,l.kt)("th",{parentName:"tr",align:null},"Governance"),(0,l.kt)("th",{parentName:"tr",align:null},"Other features"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.enkrypt.com/?mtm_campaign=Polkadot%20Wiki%20-%20Supported%20Wallets"},"Enkrypt")),(0,l.kt)("td",{parentName:"tr",align:null},"Brave, Chrome, Edge, Firefox, Opera, Safari"),(0,l.kt)("td",{parentName:"tr",align:null},"No, No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#enkrypt"},"Enkrypt Features"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://polkagate.xyz/"},"PolkaGate")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/polkagate-the-gateway-to/ginchbkmljhldofnbjabmeophlhdldgp"},"Brave"),", ",(0,l.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/polkagate-the-gateway-to/ginchbkmljhldofnbjabmeophlhdldgp"},"Chrome"),", ",(0,l.kt)("a",{parentName:"td",href:"https://addons.mozilla.org/en-US/firefox/addon/polkagate"},"Firefox"),", ",(0,l.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/polkagate-the-gateway-to/ginchbkmljhldofnbjabmeophlhdldgp"},"Edge")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes"),", ",(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#polkagate"},"PolkaGate features"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://subwallet.app/"},"SubWallet")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/subwallet-polkadot-extens/onhogfjeacnfoofkfgppdlbmlmnplgbn"},"Brave"),", ",(0,l.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/subwallet-polkadot-extens/onhogfjeacnfoofkfgppdlbmlmnplgbn"},"Chrome"),", ",(0,l.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/subwallet-polkadot-extens/onhogfjeacnfoofkfgppdlbmlmnplgbn"},"Edge"),", ",(0,l.kt)("a",{parentName:"td",href:"https://addons.mozilla.org/en-US/firefox/addon/subwallet/"},"Firefox")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes"),", ",(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#subwallet"},"SubWallet features"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.talisman.xyz/"},"Talisman")),(0,l.kt)("td",{parentName:"tr",align:null},"Brave, Chrome, Edge, Firefox"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes"),", ",(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#talisman"},"Talisman features"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://fearlesswallet.io/"},"Fearless Wallet")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/fearless-wallet/nhlnehondigmgckngjomcpcefcdplmgc"},"Brave"),", ",(0,l.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/fearless-wallet/nhlnehondigmgckngjomcpcefcdplmgc"},"Chrome")),(0,l.kt)("td",{parentName:"tr",align:null},"No, No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#fearless-wallet"},"Fearless Wallet Features"))))),(0,l.kt)("admonition",{title:"Ledger support only for chromium-based browsers",type:"info"},(0,l.kt)("p",{parentName:"admonition"},"Currently, all browser extensions support Ledger devices only on chromium-based browsers (i.e.\nChrome, Brave, Edge, Opera).")),(0,l.kt)("h3",{id:"mobile-wallets"},"Mobile Wallets"),(0,l.kt)("p",null,"Mobile wallets are fully packaged apps that allow all the featured actions, as well as the storage\nand management of your accounts, through the mobile app. Unlike browser extensions, mobile wallets\nusually can\u2019t connect to third-party web apps. Some mobile wallets provide support for hardware\nwallets through Bluetooth connectivity."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Wallet"),(0,l.kt)("th",{parentName:"tr",align:null},"Platforms"),(0,l.kt)("th",{parentName:"tr",align:null},"Staking and Nomination Pools"),(0,l.kt)("th",{parentName:"tr",align:null},"NFTs"),(0,l.kt)("th",{parentName:"tr",align:null},"Crowdloans"),(0,l.kt)("th",{parentName:"tr",align:null},"Ledger support"),(0,l.kt)("th",{parentName:"tr",align:null},"Governance"),(0,l.kt)("th",{parentName:"tr",align:null},"Other features"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://fearlesswallet.io/"},"Fearless Wallet")),(0,l.kt)("td",{parentName:"tr",align:null},"iOS, Android"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes"),", ",(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#fearless-wallet"},"Fearless Wallet Features"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://novawallet.io/"},"Nova Wallet"),"*"),(0,l.kt)("td",{parentName:"tr",align:null},"iOS, Android"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes"),", ",(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#nova-wallet"},"Nova Wallet features"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://polkawallet.io/"},"Polkawallet")),(0,l.kt)("td",{parentName:"tr",align:null},"iOS, Android"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes"),", ",(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#polkawallet"},"Polkawallet features"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://subwallet.app/"},"SubWallet")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://apps.apple.com/us/app/subwallet-polkadot-wallet/id1633050285"},"iOS"),", ",(0,l.kt)("a",{parentName:"td",href:"bit.ly/3DE2Dlg"},"Android")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes"),", ",(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#subwallet"},"SubWallet features"))))),(0,l.kt)("admonition",{type:"caution"},(0,l.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"*","Note about Nova wallet"),(0,l.kt)("p",{parentName:"admonition"},"There's ",(0,l.kt)("strong",{parentName:"p"},"another")," Nova wallet that is ",(0,l.kt)("strong",{parentName:"p"},"unrelated")," to the Polkadot ecosystem. Users are advised\nto ensure that they use the correct Nova wallet by downloading the app from their official website:\n",(0,l.kt)("a",{parentName:"p",href:"https://novawallet.io/"},"https://novawallet.io/"),". Before creating or restoring accounts , it is wise\nto double-check the wallet website URLs through official channels (most projects have it listed on\ntheir official social media handles).")),(0,l.kt)("h3",{id:"web-wallets"},"Web Wallets"),(0,l.kt)("p",null,"Web Wallets are the all-in-one solution to accessing the Web3 space, allowing you to sign\ntransactions on the web without having to download and install any browser extension and mobile app.\nWith all of the features of mobile wallets, you can also connect to and interact with decentralized\nweb apps."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Wallet"),(0,l.kt)("th",{parentName:"tr",align:null},"Platforms"),(0,l.kt)("th",{parentName:"tr",align:null},"Staking and Nomination Pools"),(0,l.kt)("th",{parentName:"tr",align:null},"Liquid Staking"),(0,l.kt)("th",{parentName:"tr",align:null},"NFTs"),(0,l.kt)("th",{parentName:"tr",align:null},"Crowdloans"),(0,l.kt)("th",{parentName:"tr",align:null},"Ledger support"),(0,l.kt)("th",{parentName:"tr",align:null},"Governance"),(0,l.kt)("th",{parentName:"tr",align:null},"Other features"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://web.subwallet.app/"},"SubWallet")),(0,l.kt)("td",{parentName:"tr",align:null},"Any web browsers"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes, Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Yes")),(0,l.kt)("td",{parentName:"tr",align:null},"No"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#subwallet"},"SubWallet features"))))),(0,l.kt)("h2",{id:"enkrypt"},"Enkrypt"),(0,l.kt)("p",null,"A multichain crypto wallet - Bitcoin, Ethereum, Polkadot, Kusama and a few parachains.\nNon-custodial, private, hardware wallet support (Ledger and Trezor). Private and open source. Hold,\nsend, and receive tokens and NFTs. Swap tokens and bridge assets between chains. Manage multiple\naccounts on multiple networks. Connect to web3 apps. Recipient of a development grant from Web3\nFoundation."),(0,l.kt)("h2",{id:"fearless-wallet"},"Fearless Wallet"),(0,l.kt)("p",null,"The Fearless DeFi Wallet for the Future. Simply, intuitively, and fearlessly interact with\n",(0,l.kt)("a",{parentName:"p",href:"/docs/web3-and-polkadot"},"Web3"),". Currently supports Staking, Crowdloans, Parachain Accounts,\nNomination Pools Native Staking, dApp Signer on desktop through your mobile phone (experimental),\nChromium-based browser extension. Safety features such as Scam Address Warning and Network Failure\nWarnings help fearlessly navigate ",(0,l.kt)("a",{parentName:"p",href:"/docs/web3-and-polkadot"},"web3"),". Formerly funded and supported by\nKusama Treasury [",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/23"},"1"),",\n",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/34"},"2"),", ",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/74"},"3"),",\n",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/102"},"4"),", ",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/178"},"5"),"],\nand the SORA community [",(0,l.kt)("a",{parentName:"p",href:"https://sora.subscan.io/referenda/193?tab=votes"},"1"),"], developed with <3 by\nSORAMITSU. Stay Fearless!"),(0,l.kt)("h2",{id:"nova-wallet"},"Nova Wallet"),(0,l.kt)("p",null,"A user-friendly wallet for the Polkadot & Kusama ecosystems, providing a smooth web3 experience on\nboth iOS and Android. Nova Wallet supports ",(0,l.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov"),"\n(including agile delegations), Governance v1 (including support for parachain governance), Staking,\nNFT management, XCM Transfers, Parity Signer & Ledger Support, DApp Support with Polkadot JS and\nMetamask/EVM Integration and crowdloans. Nova Wallet received funding from Kusama Treasury\n[",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/122"},"1"),",\n",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/158"},"2"),"], as well as funding from the Polkadot Treasury\n[",(0,l.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/motion/314"},"1"),"]."),(0,l.kt)("h2",{id:"polkagate"},"PolkaGate"),(0,l.kt)("p",null,"PolkaGate extension is a user-friendly and feature-rich wallet/extension, supported by the Kusama\nTreasury [",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/205"},"1"),",\n",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/referenda/124"},"2"),"]. It provides a diverse range of functionalities\nto enhance your experience, such as proxy management, open governance, pool staking management, spam\naddress warning, support for address-only accounts, crowdloans, account export/import/derivation,\nledger support, parachain accounts, phishing website detection, QR account import, solo staking,\nremote node selection, fund transfers, balance viewing in both cryptocurrency and USD, transaction\nhistory viewing, and the ability to generate QR codes for addresses."),(0,l.kt)("h2",{id:"polkawallet"},"Polkawallet"),(0,l.kt)("p",null,"Polkawallet provides cross-chain asset one-stop management, convenient staking, governance, and\nmultiple DeFi services; the private key is self-owned. Polkawallet received funding from Kusama\nTreasury [",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/32"},"1"),",\n",(0,l.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/41"},"2"),"]."),(0,l.kt)("h2",{id:"subwallet"},"SubWallet"),(0,l.kt)("p",null,"A non-custodial Polkadot, Substrate & Ethereum wallet. Track, send, receive, and monitor multi-chain\nassets on 150+ networks. Import account with seed phrase, private key, QR code, and JSON file.\nImport token & NFT, attach read-only account. XCM Transfer, NFT Management, Parity Signer & Ledger\nsupport, light clients support, EVM DApp support, MetaMask compatibility, custom endpoints, fiat\non-ramp, phishing detection, transaction history. SubWallet received funding from Polkadot Treasury\n[",(0,l.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/treasury/138"},"1"),",\n",(0,l.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/treasury/162"},"2"),",\n",(0,l.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/treasury/218"},"3"),",\n",(0,l.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/treasury/272"},"4"),"]."),(0,l.kt)("h2",{id:"talisman"},"Talisman"),(0,l.kt)("p",null,"A better way to explore Web3. Keep your assets safe, manage your portfolio and explore Polkadot and\nEthereum apps with Talisman. Interact with Web3 apps, store your favourite crypto assets and manage\nyour accounts on over 150+ Substrate and EVM networks. NFT Management, ledger Support, fiat On-ramp,\nportfolio tracking. Talisman received funding from Polkadot Treasury\n[",(0,l.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/treasury/148"},"1"),"]."))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f4130007.8735c350.js b/assets/js/f4130007.8735c350.js new file mode 100644 index 000000000000..d6c56f280278 --- /dev/null +++ b/assets/js/f4130007.8735c350.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2665],{3905:(t,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>g});var n=a(67294);function l(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function r(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function o(t){for(var e=1;e=0||(l[a]=t[a]);return l}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(l[a]=t[a])}return l}var i=n.createContext({}),p=function(t){var e=n.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):o(o({},e),t)),a},d=function(t){var e=p(t.components);return n.createElement(i.Provider,{value:e},t.children)},m="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,r=t.originalType,i=t.parentName,d=s(t,["components","mdxType","originalType","parentName"]),m=p(a),k=l,g=m["".concat(i,".").concat(k)]||m[k]||u[k]||r;return a?n.createElement(g,o(o({ref:e},d),{},{components:a})):n.createElement(g,o({ref:e},d))}));function g(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var r=a.length,o=new Array(r);o[0]=k;var s={};for(var i in e)hasOwnProperty.call(e,i)&&(s[i]=e[i]);s.originalType=t,s[m]="string"==typeof t?t:l,o[1]=s;for(var p=2;p{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>g,frontMatter:()=>s,metadata:()=>p,toc:()=>m});var n=a(87462),l=a(63366),r=(a(67294),a(3905)),o=["components"],s={id:"wallets-and-extensions",title:"Wallets and Extensions",sidebar_label:"Wallets and Extensions",description:"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.",keywords:["wallets","account","signer","supported wallets","balance","token"],slug:"../wallets-and-extensions"},i=void 0,p={unversionedId:"general/wallets-and-extensions",id:"general/wallets-and-extensions",title:"Wallets and Extensions",description:"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.",source:"@site/../docs/general/wallets-and-extensions.md",sourceDirName:"general",slug:"/wallets-and-extensions",permalink:"/docs/wallets-and-extensions",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/wallets-and-extensions.md",tags:[],version:"current",lastUpdatedBy:"Leemo",lastUpdatedAt:1711545669,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"wallets-and-extensions",title:"Wallets and Extensions",sidebar_label:"Wallets and Extensions",description:"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.",keywords:["wallets","account","signer","supported wallets","balance","token"],slug:"../wallets-and-extensions"},sidebar:"docs",previous:{title:"Wallets",permalink:"/docs/wallets-index"},next:{title:"Ledger",permalink:"/docs/ledger"}},d={},m=[{value:"Overview",id:"overview",level:2},{value:"Browser Extensions",id:"browser-extensions",level:3},{value:"Mobile Wallets",id:"mobile-wallets",level:3},{value:"Web Wallets",id:"web-wallets",level:3},{value:"Telegram Wallets",id:"telegram-wallets",level:3},{value:"Enkrypt",id:"enkrypt",level:2},{value:"Fearless Wallet",id:"fearless-wallet",level:2},{value:"Nova Wallet",id:"nova-wallet",level:2},{value:"PolkaGate",id:"polkagate",level:2},{value:"Polkawallet",id:"polkawallet",level:2},{value:"SubWallet",id:"subwallet",level:2},{value:"Talisman",id:"talisman",level:2},{value:"Telenova",id:"telenova",level:2}],u={toc:m},k="wrapper";function g(t){var e=t.components,a=(0,l.Z)(t,o);return(0,r.kt)(k,(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Using your due diligence in researching and using the wallets listed below would be best. For any\nissues related to these wallet, reach out to their support teams directly.")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Explore Polkadot with a secure and user-friendly wallets listed on the\n",(0,r.kt)("a",{parentName:"p",href:"https://www.polkadot.network/ecosystem/wallets/"},"Polkadot website"),".")),(0,r.kt)("p",null,"If you are new to blockchain technology, generally a typical blockchain network account is a\npublic-private key pair. Access to a private key gives full access to all the allowed transactions\non that blockchain account. It is essential to keep the private key secure."),(0,r.kt)("p",null,"Typically, the account keys are either stored and accessed through a browser extension or a\nsmartphone app (which are considered as a hot wallets as they are online), or an air-gapped device\nor a hardware wallet (which are considered as cold wallets as they are offline)."),(0,r.kt)("admonition",{title:"Not your keys, not your tokens!",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"With ",(0,r.kt)("strong",{parentName:"p"},"custodial wallets")," (like accounts in centralized exchanges), another party controls your\nprivate keys. Private keys are used to access funds in your account, so you trust the exchange that\nyour key will always be given to you whenever you need it. With ",(0,r.kt)("strong",{parentName:"p"},"non-custodial wallets"),", only you\ncan access your account's private key.")),(0,r.kt)("p",null,"To realize the multichain vision of Polkadot,\nit is important to have non-custodial wallets that make it convenient to interact with multiple\nblockchains in Polkadot ecosystem. Below there\nis a list of all non-custodial treasury-funded wallets developed by the community."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("h3",{id:"browser-extensions"},"Browser Extensions"),(0,r.kt)("p",null,"At a bare minimum, browser extension wallets act as key storage and management solution, allowing\nyou to use your accounts with apps in the Web3 space. The wallets listed below offer functionality\nbeyond that, allowing the featured actions to be performed directly through the extension. Some of\nthem also allow interaction with air-gapped wallets and hardware devices."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Wallet"),(0,r.kt)("th",{parentName:"tr",align:null},"Browsers"),(0,r.kt)("th",{parentName:"tr",align:null},"Staking and Nomination Pools"),(0,r.kt)("th",{parentName:"tr",align:null},"NFTs"),(0,r.kt)("th",{parentName:"tr",align:null},"Crowdloans"),(0,r.kt)("th",{parentName:"tr",align:null},"Ledger support"),(0,r.kt)("th",{parentName:"tr",align:null},"Governance"),(0,r.kt)("th",{parentName:"tr",align:null},"Other features"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.enkrypt.com/?mtm_campaign=Polkadot%20Wiki%20-%20Supported%20Wallets"},"Enkrypt")),(0,r.kt)("td",{parentName:"tr",align:null},"Brave, Chrome, Edge, Firefox, Opera, Safari"),(0,r.kt)("td",{parentName:"tr",align:null},"No, No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#enkrypt"},"Enkrypt Features"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://polkagate.xyz/"},"PolkaGate")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/polkagate-the-gateway-to/ginchbkmljhldofnbjabmeophlhdldgp"},"Brave"),", ",(0,r.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/polkagate-the-gateway-to/ginchbkmljhldofnbjabmeophlhdldgp"},"Chrome"),", ",(0,r.kt)("a",{parentName:"td",href:"https://addons.mozilla.org/en-US/firefox/addon/polkagate"},"Firefox"),", ",(0,r.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/polkagate-the-gateway-to/ginchbkmljhldofnbjabmeophlhdldgp"},"Edge")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes"),", ",(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#polkagate"},"PolkaGate features"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://subwallet.app/"},"SubWallet")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/subwallet-polkadot-extens/onhogfjeacnfoofkfgppdlbmlmnplgbn"},"Brave"),", ",(0,r.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/subwallet-polkadot-extens/onhogfjeacnfoofkfgppdlbmlmnplgbn"},"Chrome"),", ",(0,r.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/subwallet-polkadot-extens/onhogfjeacnfoofkfgppdlbmlmnplgbn"},"Edge"),", ",(0,r.kt)("a",{parentName:"td",href:"https://addons.mozilla.org/en-US/firefox/addon/subwallet/"},"Firefox")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes"),", ",(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#subwallet"},"SubWallet features"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.talisman.xyz/"},"Talisman")),(0,r.kt)("td",{parentName:"tr",align:null},"Brave, Chrome, Edge, Firefox"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes"),", ",(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#talisman"},"Talisman features"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://fearlesswallet.io/"},"Fearless Wallet")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/fearless-wallet/nhlnehondigmgckngjomcpcefcdplmgc"},"Brave"),", ",(0,r.kt)("a",{parentName:"td",href:"https://chrome.google.com/webstore/detail/fearless-wallet/nhlnehondigmgckngjomcpcefcdplmgc"},"Chrome")),(0,r.kt)("td",{parentName:"tr",align:null},"No, No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#fearless-wallet"},"Fearless Wallet Features"))))),(0,r.kt)("admonition",{title:"Ledger support only for chromium-based browsers",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Currently, all browser extensions support Ledger devices only on chromium-based browsers (i.e.\nChrome, Brave, Edge, Opera).")),(0,r.kt)("h3",{id:"mobile-wallets"},"Mobile Wallets"),(0,r.kt)("p",null,"Mobile wallets are fully packaged apps that allow all the featured actions, as well as the storage\nand management of your accounts, through the mobile app. Unlike browser extensions, mobile wallets\nusually can\u2019t connect to third-party web apps. Some mobile wallets provide support for hardware\nwallets through Bluetooth connectivity."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Wallet"),(0,r.kt)("th",{parentName:"tr",align:null},"Platforms"),(0,r.kt)("th",{parentName:"tr",align:null},"Staking and Nomination Pools"),(0,r.kt)("th",{parentName:"tr",align:null},"NFTs"),(0,r.kt)("th",{parentName:"tr",align:null},"Crowdloans"),(0,r.kt)("th",{parentName:"tr",align:null},"Ledger support"),(0,r.kt)("th",{parentName:"tr",align:null},"Governance"),(0,r.kt)("th",{parentName:"tr",align:null},"Proxy Accounts"),(0,r.kt)("th",{parentName:"tr",align:null},"Other features"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://fearlesswallet.io/"},"Fearless Wallet")),(0,r.kt)("td",{parentName:"tr",align:null},"iOS, Android"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes"),", ",(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#fearless-wallet"},"Fearless Wallet Features"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://novawallet.io/"},"Nova Wallet"),"*"),(0,r.kt)("td",{parentName:"tr",align:null},"iOS, Android"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes"),", ",(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#nova-wallet"},"Nova Wallet features"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://polkawallet.io/"},"Polkawallet")),(0,r.kt)("td",{parentName:"tr",align:null},"iOS, Android"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes"),", ",(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#polkawallet"},"Polkawallet features"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://subwallet.app/"},"SubWallet")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://apps.apple.com/us/app/subwallet-polkadot-wallet/id1633050285"},"iOS"),", ",(0,r.kt)("a",{parentName:"td",href:"bit.ly/3DE2Dlg"},"Android")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes"),", ",(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#subwallet"},"SubWallet features"))))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"*","Note about Nova wallet"),(0,r.kt)("p",{parentName:"admonition"},"There's ",(0,r.kt)("strong",{parentName:"p"},"another")," Nova wallet that is ",(0,r.kt)("strong",{parentName:"p"},"unrelated")," to the Polkadot ecosystem. Users are advised\nto ensure that they use the correct Nova wallet by downloading the app from their official website:\n",(0,r.kt)("a",{parentName:"p",href:"https://novawallet.io/"},"https://novawallet.io/"),". Before creating or restoring accounts, it is wise\nto double-check the wallet website URLs through official channels (most projects have it listed on\ntheir official social media handles).")),(0,r.kt)("h3",{id:"web-wallets"},"Web Wallets"),(0,r.kt)("p",null,"Web Wallets are the all-in-one solution to accessing the Web3 space, allowing you to sign\ntransactions on the web without having to download and install any browser extension and mobile app.\nWith all of the features of mobile wallets, you can also connect to and interact with decentralized\nweb apps."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Wallet"),(0,r.kt)("th",{parentName:"tr",align:null},"Platforms"),(0,r.kt)("th",{parentName:"tr",align:null},"Staking and Nomination Pools"),(0,r.kt)("th",{parentName:"tr",align:null},"Liquid Staking"),(0,r.kt)("th",{parentName:"tr",align:null},"NFTs"),(0,r.kt)("th",{parentName:"tr",align:null},"Crowdloans"),(0,r.kt)("th",{parentName:"tr",align:null},"Ledger support"),(0,r.kt)("th",{parentName:"tr",align:null},"Governance"),(0,r.kt)("th",{parentName:"tr",align:null},"Other features"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://web.subwallet.app/"},"SubWallet")),(0,r.kt)("td",{parentName:"tr",align:null},"Any web browsers"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes, Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},"No"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"#subwallet"},"SubWallet features"))))),(0,r.kt)("h3",{id:"telegram-wallets"},"Telegram Wallets"),(0,r.kt)("p",null,"Telegram Wallets are applications running ontop of the Telegram Messenger platform. These wallets typically provide a streamlined user experience and provide an easy way for new users to get started in the Polkadot ecosystem without having to download any new applications."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Wallet"),(0,r.kt)("th",{parentName:"tr",align:null},"Platforms"),(0,r.kt)("th",{parentName:"tr",align:null},"Self-Custodial"),(0,r.kt)("th",{parentName:"tr",align:null},"Send Tokens to Telegram Username"),(0,r.kt)("th",{parentName:"tr",align:null},"Send Tokens to any Address"),(0,r.kt)("th",{parentName:"tr",align:null},"Notifications"),(0,r.kt)("th",{parentName:"tr",align:null},"Other features"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://t.me/telenova_app_bot"},"Telenova")),(0,r.kt)("td",{parentName:"tr",align:null},"Mobile, Desktop, Web"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Yes")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://medium.com/novasama-technologies/meet-telenova-your-newbie-friendly-polkadot-wallet-built-into-telegram-5d9e9570d334"},"Telenova Features"))))),(0,r.kt)("h2",{id:"enkrypt"},"Enkrypt"),(0,r.kt)("p",null,"A multichain crypto wallet - Bitcoin, Ethereum, Polkadot, Kusama and a few parachains.\nNon-custodial, private, hardware wallet support (Ledger and Trezor). Private and open source. Hold,\nsend, and receive tokens and NFTs. Swap tokens and bridge assets between chains. Manage multiple\naccounts on multiple networks. Connect to web3 apps. Recipient of a development grant from Web3\nFoundation."),(0,r.kt)("h2",{id:"fearless-wallet"},"Fearless Wallet"),(0,r.kt)("p",null,"The Fearless DeFi Wallet for the Future. Simply, intuitively, and fearlessly interact with\n",(0,r.kt)("a",{parentName:"p",href:"/docs/web3-and-polkadot"},"Web3"),". Currently supports Staking, Crowdloans, Parachain Accounts,\nNomination Pools Native Staking, dApp Signer on desktop through your mobile phone (experimental),\nChromium-based browser extension. Safety features such as Scam Address Warning and Network Failure\nWarnings help fearlessly navigate ",(0,r.kt)("a",{parentName:"p",href:"/docs/web3-and-polkadot"},"web3"),". Formerly funded and supported by\nKusama Treasury [",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/23"},"1"),",\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/34"},"2"),", ",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/74"},"3"),",\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/102"},"4"),", ",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/178"},"5"),"],\nand the SORA community [",(0,r.kt)("a",{parentName:"p",href:"https://sora.subscan.io/referenda/193?tab=votes"},"1"),"], developed with <3 by\nSORAMITSU. Stay Fearless!"),(0,r.kt)("h2",{id:"nova-wallet"},"Nova Wallet"),(0,r.kt)("p",null,"A user-friendly wallet for the Polkadot & Kusama ecosystems, providing a smooth web3 experience on\nboth iOS and Android. Nova Wallet supports ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov"),"\n(including agile delegations), Governance v1 (including support for parachain governance), Staking,\nNFT management, XCM Transfers, Parity Signer & Ledger Support, DApp Support with Polkadot JS and\nMetamask/EVM Integration and crowdloans. Nova Wallet received funding from Kusama Treasury\n[",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/122"},"1"),",\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/158"},"2"),"], as well as funding from the Polkadot Treasury\n[",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/motion/314"},"1"),"]."),(0,r.kt)("h2",{id:"polkagate"},"PolkaGate"),(0,r.kt)("p",null,"PolkaGate extension is a user-friendly and feature-rich wallet/extension, supported by the Kusama\nTreasury [",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/205"},"1"),",\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/referenda/124"},"2"),"]. It provides a diverse range of functionalities\nto enhance your experience, such as proxy management, open governance, pool staking management, spam\naddress warning, support for address-only accounts, crowdloans, account export/import/derivation,\nledger support, parachain accounts, phishing website detection, QR account import, solo staking,\nremote node selection, fund transfers, balance viewing in both cryptocurrency and USD, transaction\nhistory viewing, and the ability to generate QR codes for addresses."),(0,r.kt)("h2",{id:"polkawallet"},"Polkawallet"),(0,r.kt)("p",null,"Polkawallet provides cross-chain asset one-stop management, convenient staking, governance, and\nmultiple DeFi services; the private key is self-owned. Polkawallet received funding from Kusama\nTreasury [",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/32"},"1"),",\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/treasury/41"},"2"),"]."),(0,r.kt)("h2",{id:"subwallet"},"SubWallet"),(0,r.kt)("p",null,"A non-custodial Polkadot, Substrate & Ethereum wallet. Track, send, receive, and monitor multi-chain\nassets on 150+ networks. Import account with seed phrase, private key, QR code, and JSON file.\nImport token & NFT, attach read-only account. XCM Transfer, NFT Management, Parity Signer & Ledger\nsupport, light clients support, EVM DApp support, MetaMask compatibility, custom endpoints, fiat\non-ramp, phishing detection, transaction history. SubWallet received funding from Polkadot Treasury\n[",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/treasury/138"},"1"),",\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/treasury/162"},"2"),",\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/treasury/218"},"3"),",\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/treasury/272"},"4"),"]."),(0,r.kt)("h2",{id:"talisman"},"Talisman"),(0,r.kt)("p",null,"A better way to explore Web3. Keep your assets safe, manage your portfolio and explore Polkadot and\nEthereum apps with Talisman. Interact with Web3 apps, store your favourite crypto assets and manage\nyour accounts on over 150+ Substrate and EVM networks. NFT Management, ledger Support, fiat On-ramp,\nportfolio tracking. Talisman received funding from Polkadot Treasury\n[",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/treasury/148"},"1"),"]."),(0,r.kt)("h2",{id:"telenova"},"Telenova"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://t.me/telenova_app_bot"},"Telenova")," is a brand new self-custodial Polkadot wallet that runs directly in Telegram providing you with a simple and clean user interface to manage your DOT & KSM tokens. Send crypto to anyone in Telegram, Buy/Sell DOT and KSM tokens, get notified about your balance changes, view your total balance in multiple fiat currencies, secured by your personal Telegram cloud and manual backups."),(0,r.kt)("p",null,"Use ",(0,r.kt)("a",{parentName:"p",href:"https://t.me/telenova_app_bot"},"Telenova")," on any of your devices \u2014 be it mobile or desktop \u2014 within the same Telegram account, and start exploring the Polkadot ecosystem today!"))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f7acb151.65364809.js b/assets/js/f7acb151.65364809.js new file mode 100644 index 000000000000..6b1f0e541f13 --- /dev/null +++ b/assets/js/f7acb151.65364809.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[5483],{47940:(e,t,s)=>{"use strict";s.d(t,{Z:()=>p});var a=s(74165),n=s(15861),o=s(67294),r=s(87152),i=s(14741),l=s(67425);function u(e,t,s){return c.apply(this,arguments)}function c(){return(c=(0,n.Z)((0,a.Z)().mark((function e(t,s,n){var o,l,u,c,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){e.next=18;break}return e.abrupt("return");case 18:return u=new r.U(o),e.next=21,i.G.create({provider:u});case 21:c=e.sent,(d=s.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+s);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,s,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,s,a);break;case"precise":(0,l.Precise)(e,s,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,s);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,s=e.path,r=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,c=(0,o.useState)(""),p=c[0],h=c[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?d(r.toString(),l,t,h):h(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,s,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t="polkadot",s="kusama",a="statemine",n="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,i){var l=void 0;if(r===t||r===n)l=3;else{if(r!==s&&r!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),i((e=Number.isInteger(e/o[r].precision)?e/o[r].precision+" "+o[r].symbol:(e/o[r].precision).toFixed(l)+" "+o[r].symbol).toString())},Precise:function(e,t,s){s(e=(e=parseFloat(e))/o[t].precision+" "+o[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,o,r){var i=void 0;if(r===t||r===n)i=1;else{if(r!==s&&r!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");i=4}o((e/=i).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},49736:(e,t,s)=>{"use strict";s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>b,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var a=s(87462),n=s(63366),o=(s(67294),s(3905)),r=s(47940),i=["components"],l={id:"learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",sidebar_label:"Create Asset Guides",description:"Polkadot-JS Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-create"},u=void 0,c={unversionedId:"learn/learn-guides-assets-create",id:"learn/learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",description:"Polkadot-JS Guides about Creating Assets.",source:"@site/../docs/learn/learn-guides-assets-create.md",sourceDirName:"learn",slug:"/learn-guides-assets-create",permalink:"/docs/learn-guides-assets-create",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets-create.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711551545,formattedLastUpdatedAt:"Mar 27, 2024",frontMatter:{id:"learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",sidebar_label:"Create Asset Guides",description:"Polkadot-JS Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-create"},sidebar:"docs",previous:{title:"Asset Hub Guides",permalink:"/docs/learn-guides-assets"},next:{title:"Asset Hub Ledger Guides",permalink:"/docs/learn-guides-assets-ledger"}},d={},p=[{value:"Creating Assets on the Asset Hub with Polkadot-JS",id:"creating-assets-on-the-asset-hub-with-polkadot-js",level:2}],h={toc:p},k="wrapper";function b(e){var t=e.components,l=(0,n.Z)(e,i);return(0,o.kt)(k,(0,a.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,"Polkadot-JS is for developers and power users only. If you need help using the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS UI"),", you can contact the\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Polkadot Support Team"),". For more user-friendly tools\nsee the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and ",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("p",null,"The Asset Hub is a generic assets system parachain which provides functionality for deploying and\ntransferring assets \u2014 both Fungible and Non-Fungible Tokens (NFTs). The native token of the Asset\nhub is DOT. The Existential Deposit (ED),\ntransaction fees, and the deposits for proxy/multisig operations are about 1/10th of the values on\nthe Relay chains. For example, the Existential Deposit of an Asset Hub account is\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.balances.existentialDeposit",defaultValue:1e8,filter:"humanReadable",mdxType:"RPC"}),",\n","\nwhen compared to\n",(0,o.kt)(r.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"})," on Polkadot\n",".\nApart from the core protocol token DOT, the\nassets held on the Asset Hub can be broadly categorized as"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Assets backed by an on-chain protocol\u2019s utility"),(0,o.kt)("li",{parentName:"ul"},"Assets with off-chain backing"),(0,o.kt)("li",{parentName:"ul"},"Assets without any backing")),(0,o.kt)("p",null,"For additional background on the Asset Hub check out\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-"},"this support article"),"."),(0,o.kt)("h2",{id:"creating-assets-on-the-asset-hub-with-polkadot-js"},"Creating Assets on the Asset Hub with Polkadot-JS"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Before minting assets on the Asset Hub, we recommend that you try out this tutorial on Westmint,\nwhich is a system parachain on Westend test network. The WND tokens (Westies) can be teleported from\nWestend to Westmint, are available for free through a\n",(0,o.kt)("a",{parentName:"p",href:"https://wiki.polkadot.network/docs/learn-DOT#getting-westies"},"faucet"),"."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"The images in the guides below are for Polkadot, but they also apply to Kusama."))),(0,o.kt)("p",null,"To create an asset on the Asset Hub, you would need a deposit of\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.assetDeposit",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand around\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.metadataDepositBase",defaultValue:20068e5,filter:"humanReadable",mdxType:"RPC"}),"\n","\nfor the metadata. Before you create an asset on the Asset Hub, ensure that your Asset Hub account\nbalance is a bit more than the sum of those two deposits, which should seamlessly account for the\nrequired deposits and transaction fees. You can send\nDOT from a\nPolkadot account to a the Asset Hub account\nusing the teleport functionality. For instructions on teleporting\nDOT, check this\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-teleport"},"tutorial on Teleports"),"."),(0,o.kt)("p",null,"Assuming you have the required DOT balance on\nyour Asset Hub account, the following instructions should let you successfully create an asset on\nthe Asset Hub"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Access the Asset Hub through ",(0,o.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),"."),(0,o.kt)("li",{parentName:"ul"},"Navigate to Network > Assets.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Navigate to Assets page",src:s(85353).Z,width:"1710",height:"554"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Click on the create button and you will be presented with a pop-up window. Choose the creator\naccount, name of the asset to be displayed on the Asset Hub, the asset's symbol, number of\ndecimals for the asset, the minimum balance required to hold this asset on an Asset Hub account\nand the most important field of your asset - the unique asset ID. The UI would not let you enter\nan ID that has already been taken. After all the details are entered, click on the next button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Add Asset Metadata",src:s(3910).Z,width:"1510",height:"798"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Choose the admin, issuer and the freezer accounts for your asset and click on the create button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Asset managing accounts",src:s(25965).Z,width:"1518",height:"510"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Sign and submit the transaction (If you like to verify the transaction details before signing, you\ncan click on the dropdown button pointed by the arrow in the snapshot below).")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Sign asset creating transaction",src:s(39764).Z,width:"1520",height:"610"})),(0,o.kt)("p",null,"If the transaction is successful, you should see the asset and its details displayed in the\nNetwork > Assets page on the Asset Hub."))}b.isMDXComponent=!0},85353:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-0-71cbceb69c712729d7920b4575ab8f46.png"},3910:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-1-6f406281abdca9f5c2941ebd4d9479fd.png"},25965:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-2-2fd6118841d0c4e037d5f51c6b1010e1.png"},39764:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-3-3952e84a1b7c80239e8fb1f907af2583.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/f7acb151.8b126346.js b/assets/js/f7acb151.8b126346.js deleted file mode 100644 index ecb75e2f122c..000000000000 --- a/assets/js/f7acb151.8b126346.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[5483],{47940:(e,t,s)=>{"use strict";s.d(t,{Z:()=>p});var a=s(74165),n=s(15861),o=s(67294),r=s(87152),i=s(14741),l=s(67425);function u(e,t,s){return c.apply(this,arguments)}function c(){return(c=(0,n.Z)((0,a.Z)().mark((function e(t,s,n){var o,l,u,c,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=void 0,l=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return o="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return o="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return o="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return o="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==o){e.next=18;break}return e.abrupt("return");case 18:return u=new r.U(o),e.next=21,i.G.create({provider:u});case 21:c=e.sent,(d=s.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+s);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,s,a){switch(t){case"humanReadable":(0,l.HumanReadable)(e,s,a);break;case"precise":(0,l.Precise)(e,s,a);break;case"blocksToDays":(0,l.BlocksToDays)(e,a);break;case"erasToDays":(0,l.ErasToDays)(e,a,s);break;case"percentage":(0,l.Percentage)(e,a);break;case"permillToPercent":(0,l.PermillToPercent)(e,a);break;case"arrayLength":(0,l.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,s=e.path,r=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,c=(0,o.useState)(""),p=c[0],h=c[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?d(r.toString(),l,t,h):h(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://kusama-asset-hub-rpc.polkadot.io/";break;case"statemint":e="wss://polkadot-asset-hub-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(t,s,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(n,l,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t="polkadot",s="kusama",a="statemine",n="statemint",o={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,r,i){var l=void 0;if(r===t||r===n)l=3;else{if(r!==s&&r!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}e=parseFloat(e),i((e=Number.isInteger(e/o[r].precision)?e/o[r].precision+" "+o[r].symbol:(e/o[r].precision).toFixed(l)+" "+o[r].symbol).toString())},Precise:function(e,t,s){s(e=(e=parseFloat(e))/o[t].precision+" "+o[t].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},ErasToDays:function(e,o,r){var i=void 0;if(r===t||r===n)i=1;else{if(r!==s&&r!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");i=4}o((e/=i).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},49736:(e,t,s)=>{"use strict";s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>b,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var a=s(87462),n=s(63366),o=(s(67294),s(3905)),r=s(47940),i=["components"],l={id:"learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",sidebar_label:"Create Asset Guides",description:"Polkadot-JS Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-create"},u=void 0,c={unversionedId:"learn/learn-guides-assets-create",id:"learn/learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",description:"Polkadot-JS Guides about Creating Assets.",source:"@site/../docs/learn/learn-guides-assets-create.md",sourceDirName:"learn",slug:"/learn-guides-assets-create",permalink:"/docs/learn-guides-assets-create",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets-create.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1711019259,formattedLastUpdatedAt:"Mar 21, 2024",frontMatter:{id:"learn-guides-assets-create",title:"Polkadot-JS Guides about Creating Assets",sidebar_label:"Create Asset Guides",description:"Polkadot-JS Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint","polkadot-js"],slug:"../learn-guides-assets-create"},sidebar:"docs",previous:{title:"Asset Hub Guides",permalink:"/docs/learn-guides-assets"},next:{title:"Asset Hub Ledger Guides",permalink:"/docs/learn-guides-assets-ledger"}},d={},p=[{value:"Creating Assets on the Asset Hub with Polkadot-JS",id:"creating-assets-on-the-asset-hub-with-polkadot-js",level:2}],h={toc:p},k="wrapper";function b(e){var t=e.components,l=(0,n.Z)(e,i);return(0,o.kt)(k,(0,a.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"sticky",style:{zIndex:1}},(0,o.kt)("br",null),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/polkadotjs-ui"},"Polkadot-JS")," is for developers and power users only. For more\nuser-friendly tools see the ",(0,o.kt)("a",{parentName:"p",href:"./wallets-index"},"wallets"),", ",(0,o.kt)("a",{parentName:"p",href:"./apps-index"},"apps")," and\n",(0,o.kt)("a",{parentName:"p",href:"./dashboards-index"},"dashboard")," pages.")),(0,o.kt)("p",null,"The Asset Hub is a generic assets system parachain which provides functionality for deploying and\ntransferring assets \u2014 both Fungible and Non-Fungible Tokens (NFTs). The native token of the Asset\nhub is DOT. The Existential Deposit (ED),\ntransaction fees, and the deposits for proxy/multisig operations are about 1/10th of the values on\nthe Relay chains. For example, the Existential Deposit of an Asset Hub account is\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.balances.existentialDeposit",defaultValue:1e8,filter:"humanReadable",mdxType:"RPC"}),",\n","\nwhen compared to\n",(0,o.kt)(r.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"})," on Polkadot\n",".\nApart from the core protocol token DOT, the\nassets held on the Asset Hub can be broadly categorized as"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Assets backed by an on-chain protocol\u2019s utility"),(0,o.kt)("li",{parentName:"ul"},"Assets with off-chain backing"),(0,o.kt)("li",{parentName:"ul"},"Assets without any backing")),(0,o.kt)("p",null,"For additional background on the Asset Hub check out\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-"},"this support article"),"."),(0,o.kt)("h2",{id:"creating-assets-on-the-asset-hub-with-polkadot-js"},"Creating Assets on the Asset Hub with Polkadot-JS"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Before minting assets on the Asset Hub, we recommend that you try out this tutorial on Westmint,\nwhich is a system parachain on Westend test network. The WND tokens (Westies) can be teleported from\nWestend to Westmint, are available for free through a\n",(0,o.kt)("a",{parentName:"p",href:"https://wiki.polkadot.network/docs/learn-DOT#getting-westies"},"faucet"),"."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"The images in the guides below are for Polkadot, but they also apply to Kusama."))),(0,o.kt)("p",null,"To create an asset on the Asset Hub, you would need a deposit of\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.assetDeposit",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand around\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.metadataDepositBase",defaultValue:20068e5,filter:"humanReadable",mdxType:"RPC"}),"\n","\nfor the metadata. Before you create an asset on the Asset Hub, ensure that your Asset Hub account\nbalance is a bit more than the sum of those two deposits, which should seamlessly account for the\nrequired deposits and transaction fees. You can send\nDOT from a\nPolkadot account to a the Asset Hub account\nusing the teleport functionality. For instructions on teleporting\nDOT, check this\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-teleport"},"tutorial on Teleports"),"."),(0,o.kt)("p",null,"Assuming you have the required DOT balance on\nyour Asset Hub account, the following instructions should let you successfully create an asset on\nthe Asset Hub"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Access the Asset Hub through ",(0,o.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),"."),(0,o.kt)("li",{parentName:"ul"},"Navigate to Network > Assets.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Navigate to Assets page",src:s(85353).Z,width:"1710",height:"554"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Click on the create button and you will be presented with a pop-up window. Choose the creator\naccount, name of the asset to be displayed on the Asset Hub, the asset's symbol, number of\ndecimals for the asset, the minimum balance required to hold this asset on an Asset Hub account\nand the most important field of your asset - the unique asset ID. The UI would not let you enter\nan ID that has already been taken. After all the details are entered, click on the next button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Add Asset Metadata",src:s(3910).Z,width:"1510",height:"798"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Choose the admin, issuer and the freezer accounts for your asset and click on the create button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Asset managing accounts",src:s(25965).Z,width:"1518",height:"510"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Sign and submit the transaction (If you like to verify the transaction details before signing, you\ncan click on the dropdown button pointed by the arrow in the snapshot below).")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Sign asset creating transaction",src:s(39764).Z,width:"1520",height:"610"})),(0,o.kt)("p",null,"If the transaction is successful, you should see the asset and its details displayed in the\nNetwork > Assets page on the Asset Hub."))}b.isMDXComponent=!0},85353:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-0-71cbceb69c712729d7920b4575ab8f46.png"},3910:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-1-6f406281abdca9f5c2941ebd4d9479fd.png"},25965:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-2-2fd6118841d0c4e037d5f51c6b1010e1.png"},39764:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-3-3952e84a1b7c80239e8fb1f907af2583.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/main.3e8f395a.js b/assets/js/main.3e8f395a.js deleted file mode 100644 index b1693426af28..000000000000 --- a/assets/js/main.3e8f395a.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.3e8f395a.js.LICENSE.txt */ -(self.webpackChunk=self.webpackChunk||[]).push([[179],{20830:(e,n,t)=>{"use strict";t.d(n,{W:()=>a});var r=t(67294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},11205:(e,n,t)=>{"use strict";t.d(n,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,t={},r={util:{encode:function e(n){return n instanceof a?new a(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=d.reach);E+=w.value.length,w=w.next){var _=w.value;if(n.length>e.length)return;if(!(_ instanceof a)){var S,C=1;if(v){if(!(S=o(k,E,e,b))||S.index>=e.length)break;var T=S.index,P=S.index+S[0].length,A=E;for(A+=w.value.length;T>=A;)A+=(w=w.next).value.length;if(E=A-=w.value.length,w.value instanceof a)continue;for(var O=w;O!==n.tail&&(Ad.reach&&(d.reach=R);var j=w.prev;if(N&&(j=c(n,j,N),E+=N.length),l(n,j,C),w=c(n,j,new a(f,g?r.tokenize(L,g):L,y,L)),I&&c(n,w,I),C>1){var M={cause:f+","+m,reach:R};i(e,n,t,w.prev,E,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function c(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function l(e,n,t){for(var r=n.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,n){var t={};t["language-"+n]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[n]},t.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:t}};r["language-"+n]={pattern:/[\s\S]+/,inside:a.languages[n]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,n){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:a.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var n="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",t={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:t,environment:{pattern:RegExp("\\$"+n),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+n),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+n),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:t}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+n),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},t.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var n=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,t=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return n.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return n.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:n,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return t}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+n.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:n,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var t=e.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(a),function(e){var n,t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:n={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=n,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var n=/#(?!\{).+/,t={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:n,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:t}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:n,interpolation:t}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:t}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var n=/[*&][^\s[\]{},]+/,t=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+t.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+t.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,n){n=(n||"").replace(/m/g,"")+"m";var t=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(t,n)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:t,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var n=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function t(e){return e=e.replace(//g,(function(){return n})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:t(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:t(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:t(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:t(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(n){["url","bold","italic","strike","code-snippet"].forEach((function(t){n!==t&&(e.languages.markdown[n].inside.content.inside[t]=e.languages.markdown[t])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(n){if(n&&"string"!=typeof n)for(var t=0,r=n.length;t",quot:'"'},c=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var n=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),t=0;t0)){var s=f(/^\{$/,/^\}$/);if(-1===s)continue;for(var c=t;c=0&&p(l,"variable-input")}}}}function u(e){return n[t+e]}function d(e,n){n=n||0;for(var t=0;t?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var n=e.languages.javascript["template-string"],t=n.pattern.source,r=n.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(n,r){if(e.languages[n])return{pattern:RegExp("((?:"+r+")\\s*)"+t),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:n}}}}function s(e,n){return"___"+n.toUpperCase()+"_"+e+"___"}function c(n,t,r){var a={code:n,grammar:t,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function l(n){var t={};t["interpolation-punctuation"]=a;var o=e.tokenize(n,t);if(3===o.length){var i=[1,1];i.push.apply(i,c(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,n)}function u(n,t,r){var a=e.tokenize(n,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=c(a.map((function(e){if("string"==typeof e)return e;for(var t,a=e.content;-1!==n.indexOf(t=s(i++,r)););return u[t]=a,t})).join(""),t,r),f=Object.keys(u);return i=0,function e(n){for(var t=0;t=f.length)return;var r=n[t];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,s=o.indexOf(a);if(-1!==s){++i;var c=o.substring(0,s),d=l(u[a]),p=o.substring(s+a.length),m=[];if(c&&m.push(c),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(n.splice.apply(n,[t,1].concat(m)),t+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,n)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),n].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(n){n.language in d&&function n(t){for(var r=0,a=t.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var n=e.languages.extend("typescript",{});delete n["class-name"],e.languages.typescript["class-name"].inside=n,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:n}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function n(e,n){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),n)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:n(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:n(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:n(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,n){return e=e.replace(//g,(function(){return t})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,n)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",n),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=n.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(n){for(var t=[],r=0;r0&&t[t.length-1].tagName===i(a.content[0].content[1])&&t.pop():"/>"===a.content[a.content.length-1].content||t.push({tagName:i(a.content[0].content[1]),openedBraces:0}):t.length>0&&"punctuation"===a.type&&"{"===a.content?t[t.length-1].openedBraces++:t.length>0&&t[t.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?t[t.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&t.length>0&&0===t[t.length-1].openedBraces){var c=i(a);r0&&("string"==typeof n[r-1]||"plain-text"===n[r-1].type)&&(c=i(n[r-1])+c,n.splice(r-1,1),r--),n[r]=new e.Token("plain-text",c,null,c)}a.content&&"string"!=typeof a.content&&s(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var n={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(n).forEach((function(t){var r=n[t],a=[];/^\w+$/.test(t)||a.push(/\w+/.exec(t)[0]),"diff"===t&&a.push("bold"),e.languages.diff[t]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(t)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:n})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function n(e,n){return"___"+e.toUpperCase()+n+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(t,r,a,o){if(t.language===r){var i=t.tokenStack=[];t.code=t.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==t.code.indexOf(a=n(r,s));)++s;return i[s]=e,a})),t.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(t,r){if(t.language===r&&t.tokenStack){t.grammar=e.languages[r];var a=0,o=Object.keys(t.tokenStack);!function i(s){for(var c=0;c=o.length);c++){var l=s[c];if("string"==typeof l||l.content&&"string"==typeof l.content){var u=o[a],d=t.tokenStack[u],f="string"==typeof l?l:l.content,p=n(r,u),m=f.indexOf(p);if(m>-1){++a;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,t.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),b&&v.push.apply(v,i([b])),"string"==typeof l?s.splice.apply(s,[c,1].concat(v)):l.content=v}}else l.content&&i(l.content)}return s}(t.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(n){e.languages["markup-templating"].buildPlaceholders(n,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(n){e.languages["markup-templating"].tokenizePlaceholders(n,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var n=/\$[-\w]+|#\{\$[-\w]+\}/,t=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:n,operator:t}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:n,operator:t,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var n={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},t={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:n,number:t,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:n,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:t,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var n=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",n),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var t=e.languages.tsx.tag;t.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},98934:(e,n,t)=>{"use strict";t.d(n,{_:()=>a,t:()=>o});var r=t(67294),a=r.createContext(!1);function o(e){var n=e.children,t=(0,r.useState)(!1),o=t[0],i=t[1];return(0,r.useEffect)((function(){i(!0)}),[]),r.createElement(a.Provider,{value:o},n)}},94926:(e,n,t)=>{"use strict";var r=t(67294),a=t(73935),o=t(73727),i=t(70405),s=t(10412);const c=[t(32497),t(3310),t(18320),t(39604),t(32104),t(70378)];var l=t(69204),u=t(16550),d=t(18790);function f(e){var n=e.children;return r.createElement(r.Fragment,null,n)}var p=t(87462),m=t(35742),h=t(52263),g=t(44996),b=t(86668),v=t(10833),y=t(94711),x=t(19727),k=t(43320),w=t(18780),E=t(90197);function _(){var e=(0,h.Z)().i18n,n=e.defaultLocale,t=e.localeConfigs,a=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((function(e){var n=e[0],t=e[1].htmlLang;return r.createElement("link",{key:n,rel:"alternate",href:a.createUrl({locale:n,fullyQualified:!0}),hrefLang:t})})),r.createElement("link",{rel:"alternate",href:a.createUrl({locale:n,fullyQualified:!0}),hrefLang:"x-default"}))}function S(e){var n=e.permalink,t=(0,h.Z)().siteConfig.url,a=function(){var e=(0,h.Z)().siteConfig,n=e.url,t=e.baseUrl,r=e.trailingSlash,a=(0,u.TH)().pathname;return n+(0,w.applyTrailingSlash)((0,g.Z)(a),{trailingSlash:r,baseUrl:t})}(),o=n?""+t+n:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){var e=(0,h.Z)().i18n.currentLocale,n=(0,b.L)(),t=n.metadata,a=n.image;return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:x.h})),a&&r.createElement(v.d,{image:a}),r.createElement(S,null),r.createElement(_,null),r.createElement(E.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map((function(e,n){return r.createElement("meta",(0,p.Z)({key:n},e))}))))}var T=new Map;function P(e){if(T.has(e.pathname))return Object.assign({},e,{pathname:T.get(e.pathname)});if((0,d.f)(l.Z,e.pathname).some((function(e){return!0===e.route.exact})))return T.set(e.pathname,e.pathname),e;var n=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,n),Object.assign({},e,{pathname:n})}var A=t(98934),O=t(49633),L=t(94578);function N(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),r=1;r\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = '+e+" "+("/"===e?" (default value)":"")+'

\n

We suggest trying baseUrl =

\n\n'}(e)).replace(/{"use strict";t.d(n,{_:()=>u,M:()=>d});var r=t(67294),a=t(8618);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"general/getting-started","docs":[{"id":"build/build-dapp","path":"/docs/build-dapp","sidebar":"docs"},{"id":"build/build-data","path":"/docs/build-data","sidebar":"docs"},{"id":"build/build-guide","path":"/docs/build-guide","sidebar":"docs"},{"id":"build/build-hackathon","path":"/docs/build-hackathon","sidebar":"docs"},{"id":"build/build-hrmp-channels","path":"/docs/build-hrmp-channels","sidebar":"docs"},{"id":"build/build-index","path":"/docs/build-index"},{"id":"build/build-integrate-assets","path":"/docs/build-integrate-assets","sidebar":"docs"},{"id":"build/build-integration","path":"/docs/build-integration","sidebar":"docs"},{"id":"build/build-light-clients","path":"/docs/build-light-clients","sidebar":"docs"},{"id":"build/build-network-overview","path":"/docs/build-network-overview","sidebar":"docs"},{"id":"build/build-node-interaction","path":"/docs/build-node-interaction","sidebar":"docs"},{"id":"build/build-node-management","path":"/docs/build-node-management","sidebar":"docs"},{"id":"build/build-open-source","path":"/docs/build-open-source","sidebar":"docs"},{"id":"build/build-oracle","path":"/docs/build-oracle","sidebar":"docs"},{"id":"build/build-parachains","path":"/docs/build-pdk","sidebar":"docs"},{"id":"build/build-protocol-info","path":"/docs/build-protocol-info","sidebar":"docs"},{"id":"build/build-smart-contracts","path":"/docs/build-smart-contracts","sidebar":"docs"},{"id":"build/build-storage","path":"/docs/build-storage","sidebar":"docs"},{"id":"build/build-tools-index","path":"/docs/build-tools-index","sidebar":"docs"},{"id":"build/build-transaction-construction","path":"/docs/build-transaction-construction","sidebar":"docs"},{"id":"general/alpha-program","path":"/docs/alpha-program","sidebar":"docs"},{"id":"general/ambassadors","path":"/docs/ambassadors","sidebar":"docs"},{"id":"general/bug-bounty","path":"/docs/bug-bounty","sidebar":"docs"},{"id":"general/community","path":"/docs/community","sidebar":"docs"},{"id":"general/contributing","path":"/docs/contributing","sidebar":"docs"},{"id":"general/contributors","path":"/docs/contributors","sidebar":"docs"},{"id":"general/decentralized-futures","path":"/docs/decentralized-futures","sidebar":"docs"},{"id":"general/decentralized-voices","path":"/docs/decentralized-voices","sidebar":"docs"},{"id":"general/dev-heroes","path":"/docs/dev-heroes","sidebar":"docs"},{"id":"general/doc-thousand-contributors","path":"/docs/thousand-contributors","sidebar":"docs"},{"id":"general/doc-thousand-validators","path":"/docs/thousand-validators","sidebar":"docs"},{"id":"general/faq","path":"/docs/faq","sidebar":"docs"},{"id":"general/getting-started","path":"/docs/getting-started","sidebar":"docs"},{"id":"general/glossary","path":"/docs/glossary","sidebar":"docs"},{"id":"general/governance-apps","path":"/docs/governance-apps","sidebar":"docs"},{"id":"general/grants","path":"/docs/grants","sidebar":"docs"},{"id":"general/how-to-dyor","path":"/docs/how-to-dyor","sidebar":"docs"},{"id":"general/kusama/kusama-adversarial-cheatsheet","path":"/docs/kusama-adversarial-cheatsheet"},{"id":"general/kusama/kusama-bug-bounty","path":"/docs/kusama-bug-bounty"},{"id":"general/kusama/kusama-claims","path":"/docs/kusama-claims"},{"id":"general/kusama/kusama-coc","path":"/docs/kusama-coc"},{"id":"general/kusama/kusama-community","path":"/docs/kusama-community"},{"id":"general/kusama/kusama-getting-started","path":"/docs/kusama-getting-started"},{"id":"general/kusama/kusama-index","path":"/docs/kusama-index"},{"id":"general/kusama/kusama-parameters","path":"/docs/kusama-parameters"},{"id":"general/kusama/kusama-social-recovery","path":"/docs/kusama-social-recovery"},{"id":"general/kusama/kusama-timeline","path":"/docs/kusama-timeline"},{"id":"general/ledger","path":"/docs/ledger","sidebar":"docs"},{"id":"general/metadata","path":"/docs/metadata","sidebar":"docs"},{"id":"general/multisig-apps","path":"/docs/multisig-apps","sidebar":"docs"},{"id":"general/parachains-apps","path":"/docs/parachains-apps","sidebar":"docs"},{"id":"general/polkadot-direction","path":"/docs/polkadot-direction","sidebar":"docs"},{"id":"general/polkadot-v1","path":"/docs/polkadot-v1","sidebar":"docs"},{"id":"general/polkadot-vault","path":"/docs/polkadot-vault","sidebar":"docs"},{"id":"general/polkadotjs","path":"/docs/polkadotjs","sidebar":"docs"},{"id":"general/polkadotjs-ui","path":"/docs/polkadotjs-ui","sidebar":"docs"},{"id":"general/research","path":"/docs/research","sidebar":"docs"},{"id":"general/scams","path":"/docs/learn-scams","sidebar":"docs"},{"id":"general/staking-apps","path":"/docs/staking-apps","sidebar":"docs"},{"id":"general/staking-dashboard","path":"/docs/staking-dashboard","sidebar":"docs"},{"id":"general/start-building","path":"/docs/start-building","sidebar":"docs"},{"id":"general/transaction-attacks","path":"/docs/transaction-attacks","sidebar":"docs"},{"id":"general/wallets-and-extensions","path":"/docs/wallets-and-extensions","sidebar":"docs"},{"id":"general/web3-and-polkadot","path":"/docs/web3-and-polkadot","sidebar":"docs"},{"id":"learn/archive/learn-controller","path":"/docs/learn/learn-controller","sidebar":"docs"},{"id":"learn/archive/learn-governance","path":"/docs/learn/learn-governance","sidebar":"docs"},{"id":"learn/archive/learn-launch","path":"/docs/learn/learn-launch","sidebar":"docs"},{"id":"learn/archive/learn-redenomination","path":"/docs/learn/learn-redenomination","sidebar":"docs"},{"id":"learn/archive/learn-treasury","path":"/docs/learn/learn-treasury","sidebar":"docs"},{"id":"learn/learn-account-abstraction","path":"/docs/learn-account-abstraction","sidebar":"docs"},{"id":"learn/learn-account-advanced","path":"/docs/learn-account-advanced","sidebar":"docs"},{"id":"learn/learn-account-multisig","path":"/docs/learn-account-multisig","sidebar":"docs"},{"id":"learn/learn-accounts","path":"/docs/learn-accounts","sidebar":"docs"},{"id":"learn/learn-agile-coretime","path":"/docs/learn-agile-coretime","sidebar":"docs"},{"id":"learn/learn-architecture","path":"/docs/learn-architecture","sidebar":"docs"},{"id":"learn/learn-archive","path":"/docs/learn-archive","sidebar":"docs"},{"id":"learn/learn-assets","path":"/docs/learn-assets","sidebar":"docs"},{"id":"learn/learn-async-backing","path":"/docs/learn-async-backing","sidebar":"docs"},{"id":"learn/learn-auction","path":"/docs/learn-auction","sidebar":"docs"},{"id":"learn/learn-bridges","path":"/docs/learn-bridges","sidebar":"docs"},{"id":"learn/learn-collator","path":"/docs/learn-collator","sidebar":"docs"},{"id":"learn/learn-comparisons","path":"/docs/learn-comparisons","sidebar":"docs"},{"id":"learn/learn-comparisons-avalanche","path":"/docs/learn-comparisons-avalanche","sidebar":"docs"},{"id":"learn/learn-comparisons-cosmos","path":"/docs/learn-comparisons-cosmos","sidebar":"docs"},{"id":"learn/learn-comparisons-ethereum-2","path":"/docs/learn-comparisons-ethereum-2","sidebar":"docs"},{"id":"learn/learn-comparisons-kusama","path":"/docs/learn-comparisons-kusama","sidebar":"docs"},{"id":"learn/learn-comparisons-rollups","path":"/docs/learn-comparisons-rollups","sidebar":"docs"},{"id":"learn/learn-consensus","path":"/docs/learn-consensus","sidebar":"docs"},{"id":"learn/learn-crowdloans","path":"/docs/learn-crowdloans","sidebar":"docs"},{"id":"learn/learn-cryptography","path":"/docs/learn-cryptography","sidebar":"docs"},{"id":"learn/learn-DOT","path":"/docs/learn-DOT","sidebar":"docs"},{"id":"learn/learn-guides-accounts","path":"/docs/learn-guides-accounts","sidebar":"docs"},{"id":"learn/learn-guides-accounts-multisig","path":"/docs/learn-guides-accounts-multisig","sidebar":"docs"},{"id":"learn/learn-guides-accounts-proxy","path":"/docs/learn-guides-accounts-proxy","sidebar":"docs"},{"id":"learn/learn-guides-accounts-proxy-pure","path":"/docs/learn-guides-accounts-proxy-pure","sidebar":"docs"},{"id":"learn/learn-guides-assets","path":"/docs/learn-guides-assets","sidebar":"docs"},{"id":"learn/learn-guides-assets-create","path":"/docs/learn-guides-assets-create","sidebar":"docs"},{"id":"learn/learn-guides-assets-ledger","path":"/docs/learn-guides-assets-ledger","sidebar":"docs"},{"id":"learn/learn-guides-bounties","path":"/docs/learn-guides-bounties","sidebar":"docs"},{"id":"learn/learn-guides-identity","path":"/docs/learn-guides-identity","sidebar":"docs"},{"id":"learn/learn-guides-ledger","path":"/docs/learn-guides-ledger","sidebar":"docs"},{"id":"learn/learn-guides-nominator","path":"/docs/learn-guides-nominator","sidebar":"docs"},{"id":"learn/learn-guides-polkadot-opengov","path":"/docs/learn-guides-polkadot-opengov","sidebar":"docs"},{"id":"learn/learn-guides-staking","path":"/docs/learn-guides-staking","sidebar":"docs"},{"id":"learn/learn-guides-staking-pools","path":"/docs/learn-guides-staking-pools","sidebar":"docs"},{"id":"learn/learn-guides-transfers","path":"/docs/learn-guides-transfers","sidebar":"docs"},{"id":"learn/learn-guides-treasury","path":"/docs/learn-guides-treasury","sidebar":"docs"},{"id":"learn/learn-guides-vault","path":"/docs/learn-guides-vault","sidebar":"docs"},{"id":"learn/learn-hyperbridge","path":"/docs/learn-hyperbridge","sidebar":"docs"},{"id":"learn/learn-identity","path":"/docs/learn-identity","sidebar":"docs"},{"id":"learn/learn-implementations","path":"/docs/learn-implementations"},{"id":"learn/learn-inflation","path":"/docs/learn-inflation","sidebar":"docs"},{"id":"learn/learn-nft","path":"/docs/learn-nft","sidebar":"docs"},{"id":"learn/learn-nft-pallets","path":"/docs/learn-nft-pallets","sidebar":"docs"},{"id":"learn/learn-nft-projects","path":"/docs/learn-nft-projects","sidebar":"docs"},{"id":"learn/learn-nomination-pools","path":"/docs/learn-nomination-pools","sidebar":"docs"},{"id":"learn/learn-nominator","path":"/docs/learn-nominator","sidebar":"docs"},{"id":"learn/learn-parachains","path":"/docs/learn-parachains","sidebar":"docs"},{"id":"learn/learn-parachains-faq","path":"/docs/learn-parachains-faq","sidebar":"docs"},{"id":"learn/learn-parachains-protocol","path":"/docs/learn-parachains-protocol","sidebar":"docs"},{"id":"learn/learn-parathreads","path":"/docs/learn-parathreads","sidebar":"docs"},{"id":"learn/learn-phragmen","path":"/docs/learn-phragmen","sidebar":"docs"},{"id":"learn/learn-polkadot-host","path":"/docs/learn-polkadot-host","sidebar":"docs"},{"id":"learn/learn-polkadot-js-guides","path":"/docs/learn-polkadot-js-guides","sidebar":"docs"},{"id":"learn/learn-polkadot-opengov","path":"/docs/learn-polkadot-opengov","sidebar":"docs"},{"id":"learn/learn-polkadot-opengov-origins","path":"/docs/learn-polkadot-opengov-origins","sidebar":"docs"},{"id":"learn/learn-polkadot-opengov-treasury","path":"/docs/learn-polkadot-opengov-treasury","sidebar":"docs"},{"id":"learn/learn-polkadot-technical-fellowship","path":"/docs/learn-polkadot-technical-fellowship","sidebar":"docs"},{"id":"learn/learn-proxies","path":"/docs/learn-proxies","sidebar":"docs"},{"id":"learn/learn-proxies-pure","path":"/docs/learn-proxies-pure","sidebar":"docs"},{"id":"learn/learn-runtime-upgrades","path":"/docs/learn-runtime-upgrades","sidebar":"docs"},{"id":"learn/learn-sassafras","path":"/docs/learn-sassafras","sidebar":"docs"},{"id":"learn/learn-spree","path":"/docs/learn-spree","sidebar":"docs"},{"id":"learn/learn-staking","path":"/docs/learn-staking","sidebar":"docs"},{"id":"learn/learn-staking-advanced","path":"/docs/learn-staking-advanced","sidebar":"docs"},{"id":"learn/learn-system-chains","path":"/docs/learn-system-chains","sidebar":"docs"},{"id":"learn/learn-teleport","path":"/docs/learn-teleport","sidebar":"docs"},{"id":"learn/learn-transaction-fees","path":"/docs/learn-transaction-fees","sidebar":"docs"},{"id":"learn/learn-transactions","path":"/docs/learn-transactions","sidebar":"docs"},{"id":"learn/learn-validator","path":"/docs/learn-validator","sidebar":"docs"},{"id":"learn/learn-video-tutorials","path":"/docs/learn-video-tutorials","sidebar":"docs"},{"id":"learn/learn-wasm","path":"/docs/learn-wasm","sidebar":"docs"},{"id":"learn/learn-xcm","path":"/docs/learn-xcm","sidebar":"docs"},{"id":"learn/learn-xcm-instructions","path":"/docs/learn-xcm-instructions","sidebar":"docs"},{"id":"learn/learn-xcm-pallet","path":"/docs/learn-xcm-pallet","sidebar":"docs"},{"id":"learn/learn-xcm-transport","path":"/docs/learn-xcm-transport","sidebar":"docs"},{"id":"learn/learn-xcm-usecases","path":"/docs/learn-xcm-usecases","sidebar":"docs"},{"id":"learn/learn-xcvm","path":"/docs/learn-xcvm","sidebar":"docs"},{"id":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive","path":"/docs/learn/xcm/config-deep-dive","sidebar":"docs"},{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees","path":"/docs/learn/xcm/fundamentals-fees","sidebar":"docs"},{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset","path":"/docs/learn/xcm/fundamentals-multiasset","sidebar":"docs"},{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary","path":"/docs/learn/xcm/fundamentals-summary","sidebar":"docs"},{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm","path":"/docs/learn/xcm/fundamentals-xcvm","sidebar":"docs"},{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example","path":"/docs/learn/xcm/fundamentals/multilocation-example","sidebar":"docs"},{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions","path":"/docs/learn/xcm/fundamentals/multilocation-junctions","sidebar":"docs"},{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary","path":"/docs/learn/xcm/fundamentals/multilocation-summary","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-assets","path":"/docs/learn/xcm/journey-assets","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-channels","path":"/docs/learn/xcm/journey-channels","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-expectations","path":"/docs/learn/xcm/journey-expectations","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-fees","path":"/docs/learn/xcm/journey-fees","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-holding","path":"/docs/learn/xcm/journey-holding","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-origin","path":"/docs/learn/xcm/journey-origin","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-queries","path":"/docs/learn/xcm/journey-queries","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-register","path":"/docs/learn/xcm/journey-register","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-summary","path":"/docs/learn/xcm/journey-summary","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-transact","path":"/docs/learn/xcm/journey-transact","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-version","path":"/docs/learn/xcm/journey-version","sidebar":"docs"},{"id":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks","path":"/docs/learn/xcm/journey-locks","sidebar":"docs"},{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve","path":"/docs/learn/xcm/journey/transfers-reserve","sidebar":"docs"},{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary","path":"/docs/learn/xcm/journey/transfers-summary","sidebar":"docs"},{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport","path":"/docs/learn/xcm/journey/transfers-teleport","sidebar":"docs"},{"id":"learn/xcm/learn-xcm-docs-intro","path":"/docs/learn/xcm/introduction","sidebar":"docs"},{"id":"learn/xcm/learn-xcm-docs-testing","path":"/docs/learn/xcm/testing","sidebar":"docs"},{"id":"learn/xcm/overview/learn-xcm-docs-overview-architecture","path":"/docs/learn/xcm/overview-architecture","sidebar":"docs"},{"id":"learn/xcm/overview/learn-xcm-docs-overview-format","path":"/docs/learn/xcm/overview-format","sidebar":"docs"},{"id":"learn/xcm/overview/learn-xcm-docs-overview-intro","path":"/docs/learn/xcm/overview-intro","sidebar":"docs"},{"id":"learn/xcm/overview/learn-xcm-docs-overview-summary","path":"/docs/learn/xcm/overview-summary","sidebar":"docs"},{"id":"learn/xcm/overview/learn-xcm-docs-overview-xcvm","path":"/docs/learn/xcm/overview-xcvm","sidebar":"docs"},{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look","path":"/docs/learn/xcm/quickstart-first-look","sidebar":"docs"},{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator","path":"/docs/learn/xcm/quickstart-simulator","sidebar":"docs"},{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary","path":"/docs/learn/xcm/quickstart-summary","sidebar":"docs"},{"id":"learn/xcm/reference/learn-xcm-docs-reference-glossary","path":"/docs/learn/xcm/reference-glossary","sidebar":"docs"},{"id":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers","path":"/docs/learn/xcm/reference-xcvm-registers","sidebar":"docs"},{"id":"maintain/archive/maintain-guides-democracy","path":"/docs/maintain/maintain-guides-democracy","sidebar":"docs"},{"id":"maintain/archive/maintain-guides-how-to-join-council","path":"/docs/maintain/maintain-guides-how-to-join-council","sidebar":"docs"},{"id":"maintain/archive/maintain-guides-how-to-vote-councillor","path":"/docs/maintain/maintain-guides-how-to-vote-councillor","sidebar":"docs"},{"id":"maintain/doc-maintain-guides-validator-community","path":"/docs/maintain-guides-validator-community","sidebar":"docs"},{"id":"maintain/kusama/maintain-guides-how-to-validate-kusama","path":"/docs/maintain-guides-how-to-validate-kusama"},{"id":"maintain/kusama/maintain-guides-society-kusama","path":"/docs/maintain-guides-society-kusama"},{"id":"maintain/maintain-archive","path":"/docs/maintain-archive","sidebar":"docs"},{"id":"maintain/maintain-bootnode","path":"/docs/maintain-bootnode","sidebar":"docs"},{"id":"maintain/maintain-endpoints","path":"/docs/maintain-endpoints","sidebar":"docs"},{"id":"maintain/maintain-errors","path":"/docs/maintain-errors","sidebar":"docs"},{"id":"maintain/maintain-guides-async-backing","path":"/docs/maintain-guides-async-backing","sidebar":"docs"},{"id":"maintain/maintain-guides-avoid-slashing","path":"/docs/maintain-guides-avoid-slashing","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-chill","path":"/docs/maintain-guides-how-to-chill","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-monitor-your-node","path":"/docs/maintain-guides-how-to-monitor-your-node","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-stop-validating","path":"/docs/maintain-guides-how-to-stop-validating","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-systemd","path":"/docs/maintain-guides-how-to-systemd","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-upgrade","path":"/docs/maintain-guides-how-to-upgrade","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-validate-polkadot","path":"/docs/maintain-guides-how-to-validate-polkadot","sidebar":"docs"},{"id":"maintain/maintain-guides-secure-validator","path":"/docs/maintain-guides-secure-validator","sidebar":"docs"},{"id":"maintain/maintain-guides-validator-payout","path":"/docs/maintain-guides-validator-payout","sidebar":"docs"},{"id":"maintain/maintain-index","path":"/docs/maintain-index","sidebar":"docs"},{"id":"maintain/maintain-networks","path":"/docs/maintain-networks","sidebar":"docs"},{"id":"maintain/maintain-polkadot-parameters","path":"/docs/maintain-polkadot-parameters","sidebar":"docs"},{"id":"maintain/maintain-rpc","path":"/docs/maintain-rpc","sidebar":"docs"},{"id":"maintain/maintain-sync","path":"/docs/maintain-sync","sidebar":"docs"},{"id":"maintain/maintain-wss","path":"/docs/maintain-wss","sidebar":"docs"},{"id":"/explore-index","path":"/docs/explore-index","sidebar":"docs"},{"id":"/wallets-index","path":"/docs/wallets-index","sidebar":"docs"},{"id":"/apps-index","path":"/docs/apps-index","sidebar":"docs"},{"id":"/dashboards-index","path":"/docs/dashboards-index","sidebar":"docs"},{"id":"/community-index","path":"/docs/community-index","sidebar":"docs"},{"id":"/programs-index","path":"/docs/programs-index","sidebar":"docs"},{"id":"/learn-index","path":"/docs/learn-index","sidebar":"docs"},{"id":"/general-index","path":"/docs/general-index","sidebar":"docs"},{"id":"/polkadot-vision-index","path":"/docs/polkadot-vision-index","sidebar":"docs"},{"id":"/stay-safe-index","path":"/docs/stay-safe-index","sidebar":"docs"},{"id":"/learn-basics-index","path":"/docs/learn-basics-index","sidebar":"docs"},{"id":"/learn-staking-index","path":"/docs/learn-staking-index","sidebar":"docs"},{"id":"/learn-polkadot-opengov-index","path":"/docs/learn-polkadot-opengov-index","sidebar":"docs"},{"id":"/learn-assets-index","path":"/docs/learn-assets-index","sidebar":"docs"},{"id":"/learn-components-index","path":"/docs/learn-components-index","sidebar":"docs"},{"id":"/learn-advanced-index","path":"/docs/learn-advanced-index","sidebar":"docs"},{"id":"/learn-polkadotjs-index","path":"/docs/learn-polkadotjs-index","sidebar":"docs"},{"id":"/learn-architecture-index","path":"/docs/learn-architecture-index","sidebar":"docs"},{"id":"/learn-participants-index","path":"/docs/learn-participants-index","sidebar":"docs"},{"id":"/learn-parachains-index","path":"/docs/learn-parachains-index","sidebar":"docs"},{"id":"/learn-agile-coretime-index","path":"/docs/learn-agile-coretime-index","sidebar":"docs"},{"id":"/learn-xcm-index","path":"/docs/learn-xcm-index","sidebar":"docs"},{"id":"learn/xcm","path":"/docs/learn/xcm","sidebar":"docs"},{"id":"/learn/xcm/overview","path":"/docs/learn/xcm/overview","sidebar":"docs"},{"id":"/learn/xcm/quickstart","path":"/docs/learn/xcm/quickstart","sidebar":"docs"},{"id":"/learn/xcm/fundamentals","path":"/docs/learn/xcm/fundamentals","sidebar":"docs"},{"id":"/learn/xcm/fundamentals/multilocation","path":"/docs/learn/xcm/fundamentals/multilocation","sidebar":"docs"},{"id":"/learn/xcm/journey","path":"/docs/learn/xcm/journey","sidebar":"docs"},{"id":"/learn/xcm/journey/transfers","path":"/docs/learn/xcm/journey/transfers","sidebar":"docs"},{"id":"/learn/xcm/references","path":"/docs/learn/xcm/references","sidebar":"docs"},{"id":"/learn-comparisons-index","path":"/docs/learn-comparisons-index","sidebar":"docs"},{"id":"/learn-future-implementations-index","path":"/docs/learn-future-implementations-index","sidebar":"docs"},{"id":"/build-client-index","path":"/docs/build-client-index","sidebar":"docs"},{"id":"/build-protocol-index","path":"/docs/build-protocol-index","sidebar":"docs"},{"id":"/build-network-index","path":"/docs/build-network-index","sidebar":"docs"},{"id":"/maintain-node-index","path":"/docs/maintain-node-index","sidebar":"docs"},{"id":"/maintain-collator-index","path":"/docs/maintain-collator-index","sidebar":"docs"},{"id":"/maintain-validator-index","path":"/docs/maintain-validator-index","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/explore-index","label":"Explore"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=t(81465);const c=JSON.parse('{"docusaurusVersion":"2.4.3","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.4.3"},"undefined":{"type":"package","name":"remark-docusaurus-tabs","version":"0.2.0"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"2.4.3"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"2.4.3"}}}');var l={siteConfig:a.default,siteMetadata:c,globalData:o,i18n:i,codeTranslations:s},u=r.createContext(l);function d(e){var n=e.children;return r.createElement(u.Provider,{value:l},n)}},44763:(e,n,t)=>{"use strict";t.d(n,{Z:()=>p});var r=t(94578),a=t(67294),o=t(10412),i=t(35742),s=t(18780),c=t(34033);function l(e){var n=e.error,t=e.tryAgain;return a.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},a.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),a.createElement("button",{type:"button",onClick:t,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),a.createElement(u,{error:n}))}function u(e){var n=e.error,t=(0,s.getErrorCausalChain)(n).map((function(e){return e.message})).join("\n\nCause:\n");return a.createElement("p",{style:{whiteSpace:"pre-wrap"}},t)}function d(e){var n=e.error,t=e.tryAgain;return a.createElement(p,{fallback:function(){return a.createElement(l,{error:n,tryAgain:t})}},a.createElement(i.Z,null,a.createElement("title",null,"Page Error")),a.createElement(c.Z,null,a.createElement(l,{error:n,tryAgain:t})))}var f=function(e){return a.createElement(d,e)},p=function(e){function n(n){var t;return(t=e.call(this,n)||this).state={error:null},t}(0,r.Z)(n,e);var t=n.prototype;return t.componentDidCatch=function(e){o.Z.canUseDOM&&this.setState({error:e})},t.render=function(){var e=this,n=this.props.children,t=this.state.error;if(t){var r,a={error:t,tryAgain:function(){return e.setState({error:null})}};return(null!=(r=this.props.fallback)?r:f)(a)}return null!=n?n:null},n}(a.Component)},10412:(e,n,t)=>{"use strict";t.d(n,{Z:()=>a});var r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document;const a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},35742:(e,n,t)=>{"use strict";t.d(n,{Z:()=>o});var r=t(67294),a=t(70405);function o(e){return r.createElement(a.ql,e)}},39960:(e,n,t)=>{"use strict";t.d(n,{Z:()=>h});var r=t(87462),a=t(63366),o=t(67294),i=t(73727),s=t(18780),c=t(52263),l=t(13919),u=t(10412),d=o.createContext({collectLink:function(){}});var f=t(44996),p=["isNavLink","to","href","activeClassName","isActive","data-noBrokenLinkCheck","autoAddBaseUrl"];function m(e,n){var t,m,h=e.isNavLink,g=e.to,b=e.href,v=e.activeClassName,y=e.isActive,x=e["data-noBrokenLinkCheck"],k=e.autoAddBaseUrl,w=void 0===k||k,E=(0,a.Z)(e,p),_=(0,c.Z)().siteConfig,S=_.trailingSlash,C=_.baseUrl,T=(0,f.C)().withBaseUrl,P=(0,o.useContext)(d),A=(0,o.useRef)(null);(0,o.useImperativeHandle)(n,(function(){return A.current}));var O=g||b;var L,N=(0,l.Z)(O),I=null==O?void 0:O.replace("pathname://",""),R=void 0!==I?(L=I,w&&function(e){return e.startsWith("/")}(L)?T(L):L):void 0;R&&N&&(R=(0,s.applyTrailingSlash)(R,{trailingSlash:S,baseUrl:C}));var j=(0,o.useRef)(!1),M=h?i.OL:i.rU,D=u.Z.canUseIntersectionObserver,F=(0,o.useRef)(),B=function(){j.current||null==R||(window.docusaurus.preload(R),j.current=!0)};(0,o.useEffect)((function(){return!D&&N&&null!=R&&window.docusaurus.prefetch(R),function(){D&&F.current&&F.current.disconnect()}}),[F,R,D,N]);var z=null!=(t=null==(m=R)?void 0:m.startsWith("#"))&&t,U=!R||!N||z;return U||x||P.collectLink(R),U?o.createElement("a",(0,r.Z)({ref:A,href:R},O&&!N&&{target:"_blank",rel:"noopener noreferrer"},E)):o.createElement(M,(0,r.Z)({},E,{onMouseEnter:B,onTouchStart:B,innerRef:function(e){A.current=e,D&&e&&N&&(F.current=new window.IntersectionObserver((function(n){n.forEach((function(n){e===n.target&&(n.isIntersecting||n.intersectionRatio>0)&&(F.current.unobserve(e),F.current.disconnect(),null!=R&&window.docusaurus.prefetch(R))}))})),F.current.observe(e))},to:R},h&&{isActive:y,activeClassName:v}))}const h=o.forwardRef(m)},95999:(e,n,t)=>{"use strict";t.d(n,{Z:()=>c,I:()=>s});var r=t(67294);function a(e,n){var t=e.split(/(\{\w+\})/).map((function(e,t){if(t%2==1){var r=null==n?void 0:n[e.slice(1,-1)];if(void 0!==r)return r}return e}));return t.some((function(e){return(0,r.isValidElement)(e)}))?t.map((function(e,n){return(0,r.isValidElement)(e)?r.cloneElement(e,{key:n}):e})).filter((function(e){return""!==e})):t.join("")}var o=t(81465);function i(e){var n,t,r=e.id,a=e.message;if(void 0===r&&void 0===a)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return null!=(n=null!=(t=o[null!=r?r:a])?t:a)?n:r}function s(e,n){return a(i({message:e.message,id:e.id}),n)}function c(e){var n=e.children,t=e.id,o=e.values;if(n&&"string"!=typeof n)throw console.warn("Illegal children",n),new Error("The Docusaurus component only accept simple string values");var s=i({message:n,id:t});return r.createElement(r.Fragment,null,a(s,o))}},29935:(e,n,t)=>{"use strict";t.d(n,{m:()=>r});var r="default"},13919:(e,n,t)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}t.d(n,{Z:()=>a,b:()=>r})},44996:(e,n,t)=>{"use strict";t.d(n,{C:()=>i,Z:()=>s});var r=t(67294),a=t(52263),o=t(13919);function i(){var e=(0,a.Z)().siteConfig,n=e.baseUrl,t=e.url,i=(0,r.useCallback)((function(e,r){return function(e,n,t,r){var a=void 0===r?{}:r,i=a.forcePrependBaseUrl,s=void 0!==i&&i,c=a.absolute,l=void 0!==c&&c;if(!t||t.startsWith("#")||(0,o.b)(t))return t;if(s)return n+t.replace(/^\//,"");if(t===n.replace(/\/$/,""))return n;var u=t.startsWith(n)?t:n+t.replace(/^\//,"");return l?e+u:u}(t,n,e,r)}),[t,n]);return{withBaseUrl:i}}function s(e,n){return void 0===n&&(n={}),(0,i().withBaseUrl)(e,n)}},52263:(e,n,t)=>{"use strict";t.d(n,{Z:()=>o});var r=t(67294),a=t(49633);function o(){return(0,r.useContext)(a._)}},72389:(e,n,t)=>{"use strict";t.d(n,{Z:()=>o});var r=t(67294),a=t(98934);function o(){return(0,r.useContext)(a._)}},99670:(e,n,t)=>{"use strict";t.d(n,{Z:()=>a});var r=function(e){return"object"==typeof e&&!!e&&Object.keys(e).length>0};function a(e){var n={};return function e(t,a){Object.entries(t).forEach((function(t){var o=t[0],i=t[1],s=a?a+"."+o:o;r(i)?e(i,s):n[s]=i}))}(e),n}},30226:(e,n,t)=>{"use strict";t.d(n,{_:()=>a,z:()=>o});var r=t(67294),a=r.createContext(null);function o(e){var n=e.children,t=e.value,o=r.useContext(a),i=(0,r.useMemo)((function(){return function(e){var n=e.parent,t=e.value;if(!n){if(!t)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in t))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return t}var r=Object.assign({},n.data,null==t?void 0:t.data);return{plugin:n.plugin,data:r}}({parent:o,value:t})}),[o,t]);return r.createElement(a.Provider,{value:i},n)}},80143:(e,n,t)=>{"use strict";t.d(n,{Iw:()=>b,gA:()=>p,WS:()=>m,_r:()=>d,Jo:()=>v,zh:()=>f,yW:()=>g,gB:()=>h});var r=t(16550),a=t(52263),o=t(29935);function i(e,n){void 0===n&&(n={});var t=(0,a.Z)().globalData[e];if(!t&&n.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin.');return t}var s=function(e){return e.versions.find((function(e){return e.isLast}))};function c(e,n){var t=s(e);return[].concat(e.versions.filter((function(e){return e!==t})),[t]).find((function(e){return!!(0,r.LX)(n,{path:e.path,exact:!1,strict:!1})}))}function l(e,n){var t,a,o=c(e,n),i=null==o?void 0:o.docs.find((function(e){return!!(0,r.LX)(n,{path:e.path,exact:!0,strict:!1})}));return{activeVersion:o,activeDoc:i,alternateDocVersions:i?(t=i.id,a={},e.versions.forEach((function(e){e.docs.forEach((function(n){n.id===t&&(a[e.name]=n)}))})),a):{}}}var u={},d=function(){var e;return null!=(e=i("docusaurus-plugin-content-docs"))?e:u},f=function(e){return function(e,n,t){void 0===n&&(n=o.m),void 0===t&&(t={});var r=i(e),a=null==r?void 0:r[n];if(!a&&t.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin with id "'+n+'".');return a}("docusaurus-plugin-content-docs",e,{failfast:!0})};function p(e){return void 0===e&&(e={}),function(e,n,t){void 0===t&&(t={});var a=Object.entries(e).sort((function(e,n){return n[1].path.localeCompare(e[1].path)})).find((function(e){var t=e[1];return!!(0,r.LX)(n,{path:t.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&t.failfast)throw new Error("Can't find active docs plugin for \""+n+'" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: '+Object.values(e).map((function(e){return e.path})).join(", "));return o}(d(),(0,r.TH)().pathname,e)}function m(e){void 0===e&&(e={});var n=p(e),t=(0,r.TH)().pathname;if(n)return{activePlugin:n,activeVersion:c(n.pluginData,t)}}function h(e){return f(e).versions}function g(e){var n=f(e);return s(n)}function b(e){return l(f(e),(0,r.TH)().pathname)}function v(e){return function(e,n){var t=s(e);return{latestDocSuggestion:l(e,n).alternateDocVersions[t.name],latestVersionSuggestion:t}}(f(e),(0,r.TH)().pathname)}},18320:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>o});var r=t(74865),a=t.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate:function(e){var n=e.location,t=e.previousLocation;if(t&&n.pathname!==t.pathname){var r=window.setTimeout((function(){a().start()}),200);return function(){return window.clearTimeout(r)}}},onRouteDidUpdate:function(){a().done()}}},3310:(e,n,t)=>{"use strict";t.r(n);var r,a,o=t(11205),i=t(8618);r=o.Z,a=i.default.themeConfig.prism.additionalLanguages,globalThis.Prism=r,a.forEach((function(e){t(54294)("./prism-"+e)})),delete globalThis.Prism},39471:(e,n,t)=>{"use strict";t.d(n,{Z:()=>o});var r=t(67294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){var n=e.width,t=void 0===n?13.5:n,o=e.height,i=void 0===o?13.5:o;return r.createElement("svg",{width:t,height:i,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},34033:(e,n,t)=>{"use strict";t.d(n,{Z:()=>Qn});var r=t(67294),a=t(86010),o=t(44763),i=t(10833),s=t(87462),c=t(16550),l=t(95999),u=t(85936),d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){var e=(0,r.useRef)(null),n=(0,c.k6)().action,t=(0,r.useCallback)((function(e){e.preventDefault();var n,t=null!=(n=document.querySelector("main:first-of-type"))?n:document.getElementById(d);t&&f(t)}),[]);return(0,u.S)((function(t){var r=t.location;e.current&&!r.hash&&"PUSH"===n&&f(e.current)})),{containerRef:e,onClick:t}}var m=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){var n,t=null!=(n=e.children)?n:m,a=p(),o=a.containerRef,i=a.onClick;return r.createElement("div",{ref:o,role:"region","aria-label":m},r.createElement("a",(0,s.Z)({},e,{href:"#"+d,onClick:i}),t))}var g=t(35281),b=t(19727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(h,{className:v.skipToContent})}var x=t(86668),k=t(59689),w=t(63366),E=["width","height","color","strokeWidth","className"];function _(e){var n=e.width,t=void 0===n?21:n,a=e.height,o=void 0===a?21:a,i=e.color,c=void 0===i?"currentColor":i,l=e.strokeWidth,u=void 0===l?1.2:l,d=(e.className,(0,w.Z)(e,E));return r.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:o},d),r.createElement("g",{stroke:c,strokeWidth:u},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function C(e){return r.createElement("button",(0,s.Z)({type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(_,{width:14,height:14,strokeWidth:3.1}))}const T={content:"content_knG7"};function P(e){var n=(0,x.L)().announcementBar.content;return r.createElement("div",(0,s.Z)({},e,{className:(0,a.Z)(T.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function O(){var e=(0,x.L)().announcementBar,n=(0,k.nT)(),t=n.isActive,a=n.close;if(!t)return null;var o=e.backgroundColor,i=e.textColor,s=e.isCloseable;return r.createElement("div",{className:A.announcementBar,style:{backgroundColor:o,color:i},role:"banner"},s&&r.createElement("div",{className:A.announcementBarPlaceholder}),r.createElement(P,{className:A.announcementBarContent}),s&&r.createElement(C,{onClick:a,className:A.announcementBarClose}))}var L=t(93163),N=t(12466);var I=t(69688),R=t(13102),j=r.createContext(null);function M(e){var n,t,a,o,i,s,c,l=e.children,u=(n=(0,L.e)(),t=(0,R.HY)(),a=(0,r.useState)(!1),o=a[0],i=a[1],s=null!==t.component,c=(0,I.D9)(s),(0,r.useEffect)((function(){s&&!c&&i(!0)}),[s,c]),(0,r.useEffect)((function(){s?n.shown||i(!0):i(!1)}),[n.shown,s]),(0,r.useMemo)((function(){return[o,i]}),[o]));return r.createElement(j.Provider,{value:u},l)}function D(e){if(e.component){var n=e.component;return r.createElement(n,e.props)}}function F(){var e=(0,r.useContext)(j);if(!e)throw new I.i6("NavbarSecondaryMenuDisplayProvider");var n=e[0],t=e[1],a=(0,r.useCallback)((function(){return t(!1)}),[t]),o=(0,R.HY)();return(0,r.useMemo)((function(){return{shown:n,hide:a,content:D(o)}}),[a,o,n])}function B(e){var n=e.header,t=e.primaryMenu,o=e.secondaryMenu,i=F().shown;return r.createElement("div",{className:"navbar-sidebar"},n,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},t),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var z=t(92949),U=t(72389);function $(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function Z(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const H={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function G(e){var n=e.className,t=e.buttonClassName,o=e.value,i=e.onChange,s=(0,U.Z)(),c=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(H.toggle,n)},r.createElement("button",{className:(0,a.Z)("clean-btn",H.toggleButton,!s&&H.toggleButtonDisabled,t),type:"button",onClick:function(){return i("dark"===o?"light":"dark")},disabled:!s,title:c,"aria-label":c,"aria-live":"polite"},r.createElement($,{className:(0,a.Z)(H.toggleIcon,H.lightToggleIcon)}),r.createElement(Z,{className:(0,a.Z)(H.toggleIcon,H.darkToggleIcon)})))}const V=r.memo(G),q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){var n=e.className,t=(0,x.L)().navbar.style,a=(0,x.L)().colorMode.disableSwitch,o=(0,z.I)(),i=o.colorMode,s=o.setColorMode;return a?null:r.createElement(V,{className:n,buttonClassName:"dark"===t?q.darkNavbarColorModeToggle:void 0,value:i,onChange:s})}var Y=t(87846);function K(){return r.createElement(Y.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function X(){var e=(0,L.e)();return r.createElement("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:function(){return e.toggle()}},r.createElement(_,{color:"var(--ifm-color-emphasis-600)"}))}function Q(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(K,null),r.createElement(W,{className:"margin-right--md"}),r.createElement(X,null))}var J=t(39960),ee=t(44996),ne=t(13919),te=t(98022),re=t(39471),ae=["activeBasePath","activeBaseRegex","to","href","label","html","isDropdownLink","prependBaseUrlToHref"];function oe(e){var n=e.activeBasePath,t=e.activeBaseRegex,a=e.to,o=e.href,i=e.label,c=e.html,l=e.isDropdownLink,u=e.prependBaseUrlToHref,d=(0,w.Z)(e,ae),f=(0,ee.Z)(a),p=(0,ee.Z)(n),m=(0,ee.Z)(o,{forcePrependBaseUrl:!0}),h=i&&o&&!(0,ne.Z)(o),g=c?{dangerouslySetInnerHTML:{__html:c}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(re.Z,l&&{width:12,height:12}))};return o?r.createElement(J.Z,(0,s.Z)({href:u?m:o},d,g)):r.createElement(J.Z,(0,s.Z)({to:f,isNavLink:!0},(n||t)&&{isActive:function(e,n){return t?(0,te.F)(t,n.pathname):n.pathname.startsWith(p)}},d,g))}var ie=["className","isDropdownItem"],se=["className","isDropdownItem"],ce=["mobile","position"];function le(e){var n=e.className,t=e.isDropdownItem,o=void 0!==t&&t,i=(0,w.Z)(e,ie),c=r.createElement(oe,(0,s.Z)({className:(0,a.Z)(o?"dropdown__link":"navbar__item navbar__link",n),isDropdownLink:o},i));return o?r.createElement("li",null,c):c}function ue(e){var n=e.className,t=(e.isDropdownItem,(0,w.Z)(e,se));return r.createElement("li",{className:"menu__list-item"},r.createElement(oe,(0,s.Z)({className:(0,a.Z)("menu__link",n)},t)))}function de(e){var n,t=e.mobile,a=void 0!==t&&t,o=(e.position,(0,w.Z)(e,ce)),i=a?ue:le;return r.createElement(i,(0,s.Z)({},o,{activeClassName:null!=(n=o.activeClassName)?n:a?"menu__link--active":"navbar__link--active"}))}var fe=t(86043),pe=t(48596),me=t(52263);var he=["items","position","className","onClick"],ge=["items","className","position","onClick"],be=["mobile"];function ve(e,n){return e.some((function(e){return function(e,n){return!!(0,pe.Mg)(e.to,n)||!!(0,te.F)(e.activeBaseRegex,n)||!(!e.activeBasePath||!n.startsWith(e.activeBasePath))}(e,n)}))}function ye(e){var n,t=e.items,o=e.position,i=e.className,c=(e.onClick,(0,w.Z)(e,he)),l=(0,r.useRef)(null),u=(0,r.useState)(!1),d=u[0],f=u[1];return(0,r.useEffect)((function(){var e=function(e){l.current&&!l.current.contains(e.target)&&f(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),function(){document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),r.createElement("div",{ref:l,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===o,"dropdown--show":d})},r.createElement(oe,(0,s.Z)({"aria-haspopup":"true","aria-expanded":d,role:"button",href:c.to?void 0:"#",className:(0,a.Z)("navbar__link",i)},c,{onClick:c.to?void 0:function(e){return e.preventDefault()},onKeyDown:function(e){"Enter"===e.key&&(e.preventDefault(),f(!d))}}),null!=(n=c.children)?n:c.label),r.createElement("ul",{className:"dropdown__menu"},t.map((function(e,n){return r.createElement(sn,(0,s.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:n}))}))))}function xe(e){var n,t,o=e.items,i=e.className,l=(e.position,e.onClick),u=(0,w.Z)(e,ge),d=(t=(0,me.Z)().siteConfig.baseUrl,(0,c.TH)().pathname.replace(t,"/")),f=ve(o,d),p=(0,fe.u)({initialState:function(){return!f}}),m=p.collapsed,h=p.toggleCollapsed,g=p.setCollapsed;return(0,r.useEffect)((function(){f&&g(!f)}),[d,f,g]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":m})},r.createElement(oe,(0,s.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",i)},u,{onClick:function(e){e.preventDefault(),h()}}),null!=(n=u.children)?n:u.label),r.createElement(fe.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:m},o.map((function(e,n){return r.createElement(sn,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:l,activeClassName:"menu__link--active"},e,{key:n}))}))))}function ke(e){var n=e.mobile,t=void 0!==n&&n,a=(0,w.Z)(e,be),o=t?xe:ye;return r.createElement(o,a)}var we=t(94711),Ee=["width","height"];function _e(e){var n=e.width,t=void 0===n?20:n,a=e.height,o=void 0===a?20:a,i=(0,w.Z)(e,Ee);return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:o,"aria-hidden":!0},i),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const Se="iconLanguage_nlXk";var Ce=["mobile","dropdownItemsBefore","dropdownItemsAfter"];function Te(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var Pe=t(20830),Ae=["translations"];function Oe(){return Oe=Object.assign||function(e){for(var n=1;ne.length)&&(n=e.length);for(var t=0,r=new Array(n);t=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var Re="Ctrl";var je=r.forwardRef((function(e,n){var t=e.translations,a=void 0===t?{}:t,o=Ie(e,Ae),i=a.buttonText,s=void 0===i?"Search":i,c=a.buttonAriaLabel,l=void 0===c?"Search":c,u=Le((0,r.useState)(null),2),d=u[0],f=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?f("\u2318"):f(Re))}),[]),r.createElement("button",Oe({type:"button",className:"DocSearch DocSearch-Button","aria-label":l},o,{ref:n}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(Pe.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===Re?r.createElement(Te,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),Me=t(35742),De=t(66177),Fe=t(239),Be=t(43320);var ze=t(73935);const Ue={button:{buttonText:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,l.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,l.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,l.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,l.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,l.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,l.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,l.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,l.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};var $e=["contextualSearch","externalUrlRegex"],Ze=null;function He(e){var n=e.hit,t=e.children;return r.createElement(J.Z,{to:n.url},t)}function Ge(e){var n=e.state,t=e.onClose,a=(0,De.M)();return r.createElement(J.Z,{to:a(n.query),onClick:t},r.createElement(l.Z,{id:"theme.SearchBar.seeAll",values:{count:n.context.nbHits}},"See all {count} results"))}function Ve(e){var n,a,o,i,l,u=e.contextualSearch,d=e.externalUrlRegex,f=(0,w.Z)(e,$e),p=(0,me.Z)().siteMetadata,m=(0,Fe.l)(),h=["language:"+(o=(0,Be._q)()).locale,o.tags.map((function(e){return"docusaurus_tag:"+e}))],g=null!=(n=null==(a=f.searchParameters)?void 0:a.facetFilters)?n:[],b=u?(i=g,[].concat((l=function(e){return"string"==typeof e?[e]:e})(h),l(i))):g,v=Object.assign({},f.searchParameters,{facetFilters:b}),y=(0,c.k6)(),x=(0,r.useRef)(null),k=(0,r.useRef)(null),E=(0,r.useState)(!1),_=E[0],S=E[1],C=(0,r.useState)(void 0),T=C[0],P=C[1],A=(0,r.useCallback)((function(){return Ze?Promise.resolve():Promise.all([t.e(1426).then(t.bind(t,61426)),Promise.all([t.e(532),t.e(6945)]).then(t.bind(t,46945)),Promise.all([t.e(532),t.e(8894)]).then(t.bind(t,18894))]).then((function(e){var n=e[0].DocSearchModal;Ze=n}))}),[]),O=(0,r.useCallback)((function(){A().then((function(){x.current=document.createElement("div"),document.body.insertBefore(x.current,document.body.firstChild),S(!0)}))}),[A,S]),L=(0,r.useCallback)((function(){var e;S(!1),null==(e=x.current)||e.remove()}),[S]),N=(0,r.useCallback)((function(e){A().then((function(){S(!0),P(e.key)}))}),[A,S,P]),I=(0,r.useRef)({navigate:function(e){var n=e.itemUrl;(0,te.F)(d,n)?window.location.href=n:y.push(n)}}).current,R=(0,r.useRef)((function(e){return f.transformItems?f.transformItems(e):e.map((function(e){return Object.assign({},e,{url:m(e.url)})}))})).current,j=(0,r.useMemo)((function(){return function(e){return r.createElement(Ge,(0,s.Z)({},e,{onClose:L}))}}),[L]),M=(0,r.useCallback)((function(e){return e.addAlgoliaAgent("docusaurus",p.docusaurusVersion),e}),[p.docusaurusVersion]);return function(e){var n=e.isOpen,t=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&n||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var n=e.target,t=n.tagName;return n.isContentEditable||"INPUT"===t||"SELECT"===t||"TEXTAREA"===t}(e)&&"/"===e.key&&!n)&&(e.preventDefault(),n?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||t()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[n,t,a,o,i])}({isOpen:_,onOpen:O,onClose:L,onInput:N,searchButtonRef:k}),r.createElement(r.Fragment,null,r.createElement(Me.Z,null,r.createElement("link",{rel:"preconnect",href:"https://"+f.appId+"-dsn.algolia.net",crossOrigin:"anonymous"})),r.createElement(je,{onTouchStart:A,onFocus:A,onMouseOver:A,onClick:O,ref:k,translations:Ue.button}),_&&Ze&&x.current&&(0,ze.createPortal)(r.createElement(Ze,(0,s.Z)({onClose:L,initialScrollY:window.scrollY,initialQuery:T,navigator:I,transformItems:R,hitComponent:He,transformSearchClient:M},f.searchPagePath&&{resultsFooterComponent:j},f,{searchParameters:v,placeholder:Ue.placeholder,translations:Ue.modal})),x.current))}function qe(){var e=(0,me.Z)().siteConfig;return r.createElement(Ve,e.themeConfig.algolia)}const We={searchBox:"searchBox_ZlJk"};function Ye(e){var n=e.children,t=e.className;return r.createElement("div",{className:(0,a.Z)(t,We.searchBox)},n)}var Ke=t(80143),Xe=t(53438),Qe=["docId","label","docsPluginId"];var Je=["sidebarId","label","docsPluginId"];var en=["label","to","docsPluginId"];var nn=t(60373),tn=["mobile","docsPluginId","dropdownActiveClassDisabled","dropdownItemsBefore","dropdownItemsAfter"],rn=function(e){return e.docs.find((function(n){return n.id===e.mainDocId}))};const an={default:de,localeDropdown:function(e){var n=e.mobile,t=e.dropdownItemsBefore,a=e.dropdownItemsAfter,o=(0,w.Z)(e,Ce),i=(0,me.Z)().i18n,u=i.currentLocale,d=i.locales,f=i.localeConfigs,p=(0,we.l)(),m=(0,c.TH)(),h=m.search,g=m.hash,b=d.map((function(e){var t=""+("pathname://"+p.createUrl({locale:e,fullyQualified:!1}))+h+g;return{label:f[e].label,lang:f[e].htmlLang,to:t,target:"_self",autoAddBaseUrl:!1,className:e===u?n?"menu__link--active":"dropdown__link--active":""}})),v=[].concat(t,b,a),y=n?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):f[u].label;return r.createElement(ke,(0,s.Z)({},o,{mobile:n,label:r.createElement(r.Fragment,null,r.createElement(_e,{className:Se}),y),items:v}))},search:function(e){var n=e.mobile,t=e.className;return n?null:r.createElement(Ye,{className:t},r.createElement(qe,null))},dropdown:ke,html:function(e){var n=e.value,t=e.className,o=e.mobile,i=void 0!==o&&o,s=e.isDropdownItem,c=void 0!==s&&s,l=c?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!i&&!c,"menu__list-item":i},t),dangerouslySetInnerHTML:{__html:n}})},doc:function(e){var n=e.docId,t=e.label,a=e.docsPluginId,o=(0,w.Z)(e,Qe),i=(0,Ke.Iw)(a).activeDoc,c=(0,Xe.vY)(n,a);return null===c?null:r.createElement(de,(0,s.Z)({exact:!0},o,{isActive:function(){return(null==i?void 0:i.path)===c.path||!(null==i||!i.sidebar)&&i.sidebar===c.sidebar},label:null!=t?t:c.id,to:c.path}))},docSidebar:function(e){var n=e.sidebarId,t=e.label,a=e.docsPluginId,o=(0,w.Z)(e,Je),i=(0,Ke.Iw)(a).activeDoc,c=(0,Xe.oz)(n,a).link;if(!c)throw new Error('DocSidebarNavbarItem: Sidebar with ID "'+n+"\" doesn't have anything to be linked to.");return r.createElement(de,(0,s.Z)({exact:!0},o,{isActive:function(){return(null==i?void 0:i.sidebar)===n},label:null!=t?t:c.label,to:c.path}))},docsVersion:function(e){var n=e.label,t=e.to,a=e.docsPluginId,o=(0,w.Z)(e,en),i=(0,Xe.lO)(a)[0],c=null!=n?n:i.label,l=null!=t?t:function(e){return e.docs.find((function(n){return n.id===e.mainDocId}))}(i).path;return r.createElement(de,(0,s.Z)({},o,{label:c,to:l}))},docsVersionDropdown:function(e){var n=e.mobile,t=e.docsPluginId,a=e.dropdownActiveClassDisabled,o=e.dropdownItemsBefore,i=e.dropdownItemsAfter,u=(0,w.Z)(e,tn),d=(0,c.TH)(),f=d.search,p=d.hash,m=(0,Ke.Iw)(t),h=(0,Ke.gB)(t),g=(0,nn.J)(t).savePreferredVersionName,b=h.map((function(e){var n,t=null!=(n=m.alternateDocVersions[e.name])?n:rn(e);return{label:e.label,to:""+t.path+f+p,isActive:function(){return e===m.activeVersion},onClick:function(){return g(e.name)}}})),v=[].concat(o,b,i),y=(0,Xe.lO)(t)[0],x=n&&v.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):y.label,k=n&&v.length>1?void 0:rn(y).path;return v.length<=1?r.createElement(de,(0,s.Z)({},u,{mobile:n,label:x,to:k,isActive:a?function(){return!1}:void 0})):r.createElement(ke,(0,s.Z)({},u,{mobile:n,label:x,to:k,items:v,isActive:a?function(){return!1}:void 0}))}};var on=["type"];function sn(e){var n=e.type,t=(0,w.Z)(e,on),a=function(e,n){return e&&"default"!==e?e:"items"in n?"dropdown":"default"}(n,t),o=an[a];if(!o)throw new Error('No NavbarItem component found for type "'+n+'".');return r.createElement(o,t)}function cn(){var e=(0,L.e)(),n=(0,x.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},n.map((function(n,t){return r.createElement(sn,(0,s.Z)({mobile:!0},n,{onClick:function(){return e.toggle()},key:t}))})))}function ln(e){return r.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function un(){var e=0===(0,x.L)().navbar.items.length,n=F();return r.createElement(r.Fragment,null,!e&&r.createElement(ln,{onClick:function(){return n.hide()}}),n.content)}function dn(){var e,n=(0,L.e)();return void 0===(e=n.shown)&&(e=!0),(0,r.useEffect)((function(){return document.body.style.overflow=e?"hidden":"visible",function(){document.body.style.overflow="visible"}}),[e]),n.shouldRender?r.createElement(B,{header:r.createElement(Q,null),primaryMenu:r.createElement(cn,null),secondaryMenu:r.createElement(un,null)}):null}const fn={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function pn(e){return r.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function mn(e){var n=e.children,t=(0,x.L)().navbar,o=t.hideOnScroll,i=t.style,s=(0,L.e)(),c=function(e){var n=(0,r.useState)(e),t=n[0],a=n[1],o=(0,r.useRef)(!1),i=(0,r.useRef)(0),s=(0,r.useCallback)((function(e){null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)((function(n,t){var r=n.scrollY;if(e)if(r=s?a(!1):r+l=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}const Hn=function(e){var n=e.title,t=e.titleId,a=Zn(e,Un);return r.createElement("svg",$n({id:"Content",xmlns:"http://www.w3.org/2000/svg",x:0,y:0,viewBox:"0 0 6593.8 1410.3",style:{enableBackground:"new 0 0 6593.8 1410.3"},xmlSpace:"preserve","aria-labelledby":t},a),n?r.createElement("title",{id:t},n):null,On||(On=r.createElement("style",null,".st0{fill:#fff}")),Ln||(Ln=r.createElement("path",{className:"st0",d:"M2047.8 210.4c-77.2 0-151.6 9.7-181.9 17.9-44.1 12.4-55.1 31.7-63.4 71.7l-175 807.5c-2.8 16.5-5.5 30.3-5.5 44.1 0 40 26.2 66.1 68.9 66.1 46.9 0 66.2-30.3 75.8-77.2l49.6-230.1c34.4 4.1 79.9 8.3 144.7 8.3 285.3 0 463-154.3 463-387.2 0-204-142-321.1-376.2-321.1zm-93.7 576c-44.1 0-78.6-1.4-110.2-5.5l92.3-428.6c28.9-4.1 71.7-9.7 115.8-9.7 151.6 0 228.8 71.7 228.8 190.2-.1 151.6-110.4 253.6-326.7 253.6zM6537.3 951.7c-23.4 0-38.6 13.8-67.5 45.5-51 52.4-82.7 81.3-122.6 81.3-35.8 0-55.1-28.9-55.1-75.8 0-26.2 5.5-57.9 12.4-92.3l51-239.8h153c48.2 0 77.2-27.6 77.2-77.2 0-27.6-17.9-48.2-59.2-48.2H6383l24.8-111.6c2.8-16.5 5.5-31.7 5.5-45.5 0-38.6-26.2-66.2-68.9-66.2-45.5 0-66.1 30.3-75.8 77.2l-31.7 146.1h-64.8c-49.6 0-78.5 27.6-78.5 77.2 0 27.6 19.3 48.2 60.6 48.2h56.5l-51 237c-5.5 26.2-12.4 68.9-12.4 113 0 111.6 57.9 192.9 181.9 192.9 71.7 0 135-35.8 183.3-78.6 46.9-41.3 81.3-92.3 81.3-125.4 0-31.6-24.8-57.8-56.5-57.8zM3367.9 291.7c0-40-27.6-66.2-70.3-66.2-45.5 0-66.1 30.3-75.8 77.2l-172.2 800.6c-4.1 16.5-6.9 30.3-6.9 44.1 0 40 27.6 66.1 68.9 66.1 46.9 0 67.5-30.3 77.2-77.2L3361 335.8c2.8-16.6 6.9-30.3 6.9-44.1zM5827.6 531.4c-220.5 0-370.7 219.1-370.7 427.2 0 3.9.1 7.8.2 11.6-34.6 52.5-78.8 106.9-109.1 106.9-22 0-30.3-20.7-30.3-52.4 0-38.6 11-103.4 23.4-159.9l114.4-529.2c2.8-16.5 5.5-30.3 5.5-44.1 0-40-26.2-66.2-68.9-66.2-46.9 0-66.1 30.3-75.8 77.2l-62 286.6c-33.1-34.4-81.4-57.9-154.4-57.9-146.4 0-293.7 112.7-351.1 285.6-63.2 163.4-119.7 260.1-164.3 260.1-16.5 0-26.2-13.8-26.2-37.2 0-68.9 38.6-237 55.1-318.3 5.5-30.3 8.3-42.7 8.3-60.6 0-60.6-100.6-132.3-231.5-132.3-151.4 0-288.5 95.9-357.2 238.3-102.1 180.4-195.8 310.1-242.2 310.1-20.7 0-27.6-26.2-33.1-51L3723.4 836l210.8-172.2c19.3-16.5 44.1-40 44.1-70.3 0-37.2-24.8-62-62-62-27.6 0-51 16.5-74.4 35.8L3525 829.1l106.1-493.3c2.8-16.5 6.9-30.3 6.9-44.1 0-40-27.6-66.2-70.3-66.2-45.5 0-66.1 30.3-75.8 77.2l-172.2 800.6c-4.1 16.5-6.9 30.3-6.9 44.1 0 40 27.6 66.1 68.9 66.1 46.9 0 67.5-30.3 77.2-77.2L3481 1033l129.5-104.7 31.7 159.8c12.4 63.4 45.5 125.4 130.9 125.4 85 0 151.9-77.6 218.9-182.5 20.3 109.9 98.5 182.5 207 182.5 108.9 0 183.3-64.8 231.5-151.6v2.8c0 89.6 45.5 148.8 125.4 148.8 72.3 0 132.3-43.6 185.9-136.2 30.4 80.7 98.4 136.2 193 136.2 111.6 0 191.5-67.5 242.5-161.2v8.3c0 99.2 49.6 153 130.9 153 71.8 0 132.8-41.7 184.9-109.5 39.6 67.8 110.6 109.5 206.5 109.5 220.5 0 370.7-219.1 370.7-428.6-.1-147.5-89.7-253.6-242.7-253.6zM4453.8 811.2c-40 172.2-125.4 270.1-221.9 270.1-64.8 0-100.6-49.6-100.6-124 0-146.1 106.1-303.2 248-303.2 42.7 0 75.8 12.4 104.7 30.3l-30.2 126.8zm767.5-73c-44.1 202.6-144.7 343.1-254.9 343.1-60.6 0-96.5-46.9-96.5-124 0-147.4 102-300.4 238.4-300.4 52.4 0 92.3 17.9 121.3 41.3l-8.3 40zm494.7 343.1c-79.9 0-113-57.9-113-130.9 0-133.7 92.3-286.6 208.1-286.6 79.9 0 113 57.9 113 130.9 0 135-92.3 286.6-208.1 286.6zM2767.1 531.4c-220.5 0-370.7 219.1-370.7 427.2 0 148.8 89.6 254.9 242.5 254.9 220.5 0 370.7-219.1 370.7-428.6 0-147.4-89.6-253.5-242.5-253.5zm-111.6 549.9c-79.9 0-113-57.9-113-130.9 0-133.7 92.3-286.6 208.1-286.6 79.9 0 113 57.9 113 130.9-.1 135-92.4 286.6-208.1 286.6z"})),Nn||(Nn=r.createElement("ellipse",{className:"st0",cx:663,cy:147.9,rx:254.3,ry:147.9})),In||(In=r.createElement("ellipse",{className:"st0",cx:663,cy:1262.3,rx:254.3,ry:147.9})),Rn||(Rn=r.createElement("ellipse",{transform:"rotate(-60 180.499 426.56)",className:"st0",cx:180.5,cy:426.5,rx:254.3,ry:148})),jn||(jn=r.createElement("ellipse",{transform:"rotate(-60 1145.575 983.768)",className:"st0",cx:1145.6,cy:983.7,rx:254.3,ry:147.9})),Mn||(Mn=r.createElement("ellipse",{transform:"rotate(-30 180.45 983.72)",className:"st0",cx:180.5,cy:983.7,rx:148,ry:254.3})),Dn||(Dn=r.createElement("ellipse",{transform:"rotate(-30 1145.522 426.601)",className:"st0",cx:1145.6,cy:426.6,rx:147.9,ry:254.3})))};function Gn(){var e=function(e){var n=e.href,t=e.className;return r.createElement("li",{className:"text-white mr-2 mr-lg-0 mr-xl-2"},r.createElement("a",{href:n,target:"_blank",rel:"noopener noreferrer"},r.createElement("i",{className:t})))},n=function(){return r.createElement("ul",{className:"list-social-links mt-5 mt-lg-0 justify-content-lg-end"},r.createElement(e,{href:"https://twitter.com/Polkadot",className:"socicon-twitter"}),r.createElement(e,{href:"https://www.reddit.com/r/polkadot",className:"socicon-reddit"}),r.createElement(e,{href:"https://github.com/paritytech/polkadot-sdk",className:"socicon-github"}),r.createElement(e,{href:"https://www.youtube.com/channel/UCB7PbjuZLEba_znc7mEGNgw",className:"socicon-youtube"}),r.createElement(e,{href:"https://dot.li/discord",className:"socicon-discord"}))};return r.createElement(zn.Z,{className:"px-lg-0"},r.createElement(n,null))}function Vn(e){var n=e.href,t=e.content;return r.createElement("li",null,r.createElement("a",{href:n,className:"text-white text-small",target:"_blank",rel:"noopener noreferrer"},t))}function qn(){var e=(0,me.Z)().siteConfig.themeConfig.footer;return r.createElement("footer",{className:"nav-footer spacer-y-4",id:"footer"},r.createElement(Fn.Z,{className:"container-custom"},r.createElement(Bn.Z,{className:"footer-legal align-items-end"},e&&r.createElement(zn.Z,{lg:2,className:"mb-2 mb-lg-0"},r.createElement("a",{className:"navbar-brand",href:"https://polkadot.network/",target:"_blank",rel:"noopener noreferrer"},r.createElement(Hn,{height:31,alt:"Polkadot Network"}))),r.createElement(zn.Z,{lg:6},r.createElement("ul",{className:"list-unstyled d-flex flex-wrap list-pipe-separator mt-2"},r.createElement(Vn,{content:e.copyright,href:"https://web3.foundation"}),r.createElement(Vn,{content:(0,l.I)({message:"Legal Disclosures",id:"footer.footerLegal.legal-diclosures",description:"Legal Disclosures Button Label in Footer Legal"}),href:"https://polkadot.network/legal-disclosures"}),r.createElement(Vn,{content:(0,l.I)({message:"Disclaimer",id:"footer.footerLegal.disclaimer",description:"Disclaimer Button Label in Footer Legal"}),href:"https://polkadot.network/disclaimer"}),r.createElement(Vn,{content:(0,l.I)({message:"Privacy",id:"footer.footerLegal.privacy",description:"Privacy Button Label in Footer Legal"}),href:"https://polkadot.network/privacy"}))),r.createElement(Gn,null))))}var Wn=(0,I.Qc)([z.S,k.pl,N.OC,nn.L5,i.VC,function(e){var n=e.children;return r.createElement(R.n2,null,r.createElement(L.M,null,r.createElement(M,null,n)))}]);function Yn(e){var n=e.children;return r.createElement(Wn,null,n)}function Kn(e){var n=e.error,t=e.tryAgain;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(vn,{onClick:t,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(yn,{error:n})))))}const Xn={mainWrapper:"mainWrapper_z2l0"};function Qn(e){var n=e.children,t=e.noFooter,s=e.wrapperClassName,c=e.title,l=e.description;return(0,b.t)(),r.createElement(Yn,null,r.createElement(i.d,{title:c,description:l}),r.createElement(y,null),r.createElement(O,null),r.createElement(An,null),r.createElement("div",{id:d,className:(0,a.Z)(g.k.wrapper.main,Xn.mainWrapper,s)},r.createElement(o.Z,{fallback:function(e){return r.createElement(Kn,e)}},n)),!t&&r.createElement(qn,null))}},87846:(e,n,t)=>{"use strict";t.d(n,{Z:()=>v});var r=t(87462),a=t(63366),o=t(67294),i=t(39960),s=t(44996),c=t(52263),l=t(86668),u=t(86010),d=t(72389),f=t(92949);const p={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};var m=["sources","className","alt"];function h(e){var n=(0,d.Z)(),t=(0,f.I)().colorMode,i=e.sources,s=e.className,c=e.alt,l=(0,a.Z)(e,m),h=n?"dark"===t?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,h.map((function(e){return o.createElement("img",(0,r.Z)({key:e,src:i[e],alt:c,className:(0,u.Z)(p.themedImage,p["themedImage--"+e],s)},l))})))}var g=["imageClassName","titleClassName"];function b(e){var n=e.logo,t=e.alt,r=e.imageClassName,a={light:(0,s.Z)(n.src),dark:(0,s.Z)(n.srcDark||n.src)},i=o.createElement(h,{className:n.className,sources:a,height:n.height,width:n.width,alt:t,style:n.style});return r?o.createElement("div",{className:r},i):i}function v(e){var n,t=(0,c.Z)().siteConfig.title,u=(0,l.L)().navbar,d=u.title,f=u.logo,p=e.imageClassName,m=e.titleClassName,h=(0,a.Z)(e,g),v=(0,s.Z)((null==f?void 0:f.href)||"/"),y=d?"":t,x=null!=(n=null==f?void 0:f.alt)?n:y;return o.createElement(i.Z,(0,r.Z)({to:v},h,(null==f?void 0:f.target)&&{target:f.target}),f&&o.createElement(b,{logo:f,alt:x,imageClassName:p}),null!=d&&o.createElement("b",{className:m},d))}},90197:(e,n,t)=>{"use strict";t.d(n,{Z:()=>o});var r=t(67294),a=t(35742);function o(e){var n=e.locale,t=e.version,o=e.tag,i=n;return r.createElement(a.Z,null,n&&r.createElement("meta",{name:"docusaurus_locale",content:n}),t&&r.createElement("meta",{name:"docusaurus_version",content:t}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),t&&r.createElement("meta",{name:"docsearch:version",content:t}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},86043:(e,n,t)=>{"use strict";t.d(n,{u:()=>d,z:()=>y});var r=t(87462),a=t(63366),o=t(67294),i=t(10412),s=t(91442),c=["collapsed"],l=["lazy"],u="ease-in-out";function d(e){var n=e.initialState,t=(0,o.useState)(null!=n&&n),r=t[0],a=t[1],i=(0,o.useCallback)((function(){a((function(e){return!e}))}),[]);return{collapsed:r,setCollapsed:a,toggleCollapsed:i}}var f={display:"none",overflow:"hidden",height:"0px"},p={display:"block",overflow:"visible",height:"auto"};function m(e,n){var t=n?f:p;e.style.display=t.display,e.style.overflow=t.overflow,e.style.height=t.height}function h(e){var n=e.collapsibleRef,t=e.collapsed,r=e.animation,a=(0,o.useRef)(!1);(0,o.useEffect)((function(){var e,o=n.current;function i(){var e,n,t=o.scrollHeight,a=null!=(e=null==r?void 0:r.duration)?e:function(e){if((0,s.n)())return 1;var n=e/36;return Math.round(10*(4+15*Math.pow(n,.25)+n/5))}(t);return{transition:"height "+a+"ms "+(null!=(n=null==r?void 0:r.easing)?n:u),height:t+"px"}}function c(){var e=i();o.style.transition=e.transition,o.style.height=e.height}if(!a.current)return m(o,t),void(a.current=!0);return o.style.willChange="height",e=requestAnimationFrame((function(){t?(c(),requestAnimationFrame((function(){o.style.height=f.height,o.style.overflow=f.overflow}))):(o.style.display="block",requestAnimationFrame((function(){c()})))})),function(){return cancelAnimationFrame(e)}}),[n,t,r])}function g(e){if(!i.Z.canUseDOM)return e?f:p}function b(e){var n=e.as,t=void 0===n?"div":n,r=e.collapsed,a=e.children,i=e.animation,s=e.onCollapseTransitionEnd,c=e.className,l=e.disableSSRStyle,u=(0,o.useRef)(null);return h({collapsibleRef:u,collapsed:r,animation:i}),o.createElement(t,{ref:u,style:l?void 0:g(r),onTransitionEnd:function(e){"height"===e.propertyName&&(m(u.current,r),null==s||s(r))},className:c},a)}function v(e){var n=e.collapsed,t=(0,a.Z)(e,c),i=(0,o.useState)(!n),s=i[0],l=i[1],u=(0,o.useState)(n),d=u[0],f=u[1];return(0,o.useLayoutEffect)((function(){n||l(!0)}),[n]),(0,o.useLayoutEffect)((function(){s&&f(n)}),[s,n]),s?o.createElement(b,(0,r.Z)({},t,{collapsed:d})):null}function y(e){var n=e.lazy,t=(0,a.Z)(e,l),r=n?v:b;return o.createElement(r,t)}},59689:(e,n,t)=>{"use strict";t.d(n,{nT:()=>m,pl:()=>p});var r=t(67294),a=t(72389),o=t(50012),i=t(69688),s=t(86668),c=(0,o.WA)("docusaurus.announcement.dismiss"),l=(0,o.WA)("docusaurus.announcement.id"),u=function(){return"true"===c.get()},d=function(e){return c.set(String(e))},f=r.createContext(null);function p(e){var n=e.children,t=function(){var e=(0,s.L)().announcementBar,n=(0,a.Z)(),t=(0,r.useState)((function(){return!!n&&u()})),o=t[0],i=t[1];(0,r.useEffect)((function(){i(u())}),[]);var c=(0,r.useCallback)((function(){d(!0),i(!0)}),[]);return(0,r.useEffect)((function(){if(e){var n=e.id,t=l.get();"annoucement-bar"===t&&(t="announcement-bar");var r=n!==t;l.set(n),r&&d(!1),!r&&u()||i(!1)}}),[e]),(0,r.useMemo)((function(){return{isActive:!!e&&!o,close:c}}),[e,o,c])}();return r.createElement(f.Provider,{value:t},n)}function m(){var e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},92949:(e,n,t)=>{"use strict";t.d(n,{I:()=>g,S:()=>h});var r=t(67294),a=t(10412),o=t(69688),i=t(50012),s=t(86668),c=r.createContext(void 0),l="theme",u=(0,i.WA)(l),d={light:"light",dark:"dark"},f=function(e){return e===d.dark?d.dark:d.light},p=function(e){return a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e)},m=function(e){u.set(f(e))};function h(e){var n=e.children,t=function(){var e=(0,s.L)().colorMode,n=e.defaultMode,t=e.disableSwitch,a=e.respectPrefersColorScheme,o=(0,r.useState)(p(n)),i=o[0],c=o[1];(0,r.useEffect)((function(){t&&u.del()}),[t]);var h=(0,r.useCallback)((function(e,t){void 0===t&&(t={});var r=t.persist,o=void 0===r||r;e?(c(e),o&&m(e)):(c(a?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:n),u.del())}),[a,n]);(0,r.useEffect)((function(){document.documentElement.setAttribute("data-theme",f(i))}),[i]),(0,r.useEffect)((function(){if(!t){var e=function(e){if(e.key===l){var n=u.get();null!==n&&h(f(n))}};return window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}}),[t,h]);var g=(0,r.useRef)(!1);return(0,r.useEffect)((function(){if(!t||a){var e=window.matchMedia("(prefers-color-scheme: dark)"),n=function(){window.matchMedia("print").matches||g.current?g.current=window.matchMedia("print").matches:h(null)};return e.addListener(n),function(){return e.removeListener(n)}}}),[h,t,a]),(0,r.useMemo)((function(){return{colorMode:i,setColorMode:h,get isDarkTheme(){return i===d.dark},setLightTheme:function(){h(d.light)},setDarkTheme:function(){h(d.dark)}}}),[i,h])}();return r.createElement(c.Provider,{value:t},n)}function g(){var e=(0,r.useContext)(c);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,n,t)=>{"use strict";t.d(n,{J:()=>v,L5:()=>g,Oh:()=>y});var r=t(67294),a=t(80143),o=t(29935),i=t(86668),s=t(53438),c=t(69688),l=t(50012),u=function(e){return"docs-preferred-version-"+e},d={save:function(e,n,t){(0,l.WA)(u(e),{persistence:n}).set(t)},read:function(e,n){return(0,l.WA)(u(e),{persistence:n}).get()},clear:function(e,n){(0,l.WA)(u(e),{persistence:n}).del()}},f=function(e){return Object.fromEntries(e.map((function(e){return[e,{preferredVersionName:null}]})))};var p=r.createContext(null);function m(){var e=(0,a._r)(),n=(0,i.L)().docs.versionPersistence,t=(0,r.useMemo)((function(){return Object.keys(e)}),[e]),o=(0,r.useState)((function(){return f(t)})),s=o[0],c=o[1];return(0,r.useEffect)((function(){c(function(e){var n=e.pluginIds,t=e.versionPersistence,r=e.allDocsData;return Object.fromEntries(n.map((function(e){return[e,(n=e,a=d.read(n,t),r[n].versions.some((function(e){return e.name===a}))?{preferredVersionName:a}:(d.clear(n,t),{preferredVersionName:null}))];var n,a})))}({allDocsData:e,versionPersistence:n,pluginIds:t}))}),[e,n,t]),[s,(0,r.useMemo)((function(){return{savePreferredVersion:function(e,t){d.save(e,n,t),c((function(n){var r;return Object.assign({},n,((r={})[e]={preferredVersionName:t},r))}))}}}),[n])]}function h(e){var n=e.children,t=m();return r.createElement(p.Provider,{value:t},n)}function g(e){var n=e.children;return s.cE?r.createElement(h,null,n):r.createElement(r.Fragment,null,n)}function b(){var e=(0,r.useContext)(p);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}function v(e){var n;void 0===e&&(e=o.m);var t=(0,a.zh)(e),i=b(),s=i[0],c=i[1],l=s[e].preferredVersionName;return{preferredVersion:null!=(n=t.versions.find((function(e){return e.name===l})))?n:null,savePreferredVersionName:(0,r.useCallback)((function(n){c.savePreferredVersion(e,n)}),[c,e])}}function y(){var e=(0,a._r)(),n=b()[0];var t=Object.keys(e);return Object.fromEntries(t.map((function(t){return[t,(r=t,o=e[r],i=n[r].preferredVersionName,null!=(a=o.versions.find((function(e){return e.name===i})))?a:null)];var r,a,o,i})))}},1116:(e,n,t)=>{"use strict";t.d(n,{V:()=>c,b:()=>s});var r=t(67294),a=t(69688),o=Symbol("EmptyContext"),i=r.createContext(o);function s(e){var n=e.children,t=e.name,a=e.items,o=(0,r.useMemo)((function(){return t&&a?{name:t,items:a}:null}),[t,a]);return r.createElement(i.Provider,{value:o},n)}function c(){var e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},74477:(e,n,t)=>{"use strict";t.d(n,{E:()=>s,q:()=>i});var r=t(67294),a=t(69688),o=r.createContext(null);function i(e){var n=e.children,t=e.version;return r.createElement(o.Provider,{value:t},n)}function s(){var e=(0,r.useContext)(o);if(null===e)throw new a.i6("DocsVersionProvider");return e}},93163:(e,n,t)=>{"use strict";t.d(n,{M:()=>d,e:()=>f});var r=t(67294),a=t(13102),o=t(87524),i=t(91980),s=t(86668),c=t(69688),l=r.createContext(void 0);function u(){var e,n=(e=(0,a.HY)(),0===(0,s.L)().navbar.items.length&&!e.component),t=(0,o.i)(),c=!n&&"mobile"===t,l=(0,r.useState)(!1),u=l[0],d=l[1];(0,i.Rb)((function(){if(u)return d(!1),!1}));var f=(0,r.useCallback)((function(){d((function(e){return!e}))}),[]);return(0,r.useEffect)((function(){"desktop"===t&&d(!1)}),[t]),(0,r.useMemo)((function(){return{disabled:n,shouldRender:c,toggle:f,shown:u}}),[n,c,f,u])}function d(e){var n=e.children,t=u();return r.createElement(l.Provider,{value:t},n)}function f(){var e=r.useContext(l);if(void 0===e)throw new c.i6("NavbarMobileSidebarProvider");return e}},13102:(e,n,t)=>{"use strict";t.d(n,{HY:()=>s,Zo:()=>c,n2:()=>i});var r=t(67294),a=t(69688),o=r.createContext(null);function i(e){var n=e.children,t=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:t},n)}function s(){var e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){var n=e.component,t=e.props,i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");var s=i[1],c=(0,a.Ql)(t);return(0,r.useEffect)((function(){s({component:n,props:c})}),[s,n,c]),(0,r.useEffect)((function(){return function(){return s({component:null,props:null})}}),[s]),null}},19727:(e,n,t)=>{"use strict";t.d(n,{h:()=>a,t:()=>o});var r=t(67294),a="navigation-with-keyboard";function o(){(0,r.useEffect)((function(){function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),function(){document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},66177:(e,n,t)=>{"use strict";t.d(n,{K:()=>s,M:()=>c});var r=t(67294),a=t(52263),o=t(91980),i="q";function s(){return(0,o.Nc)(i)}function c(){var e=(0,a.Z)().siteConfig,n=e.baseUrl,t=e.themeConfig.algolia.searchPagePath;return(0,r.useCallback)((function(e){return""+n+t+"?"+i+"="+encodeURIComponent(e)}),[n,t])}},87524:(e,n,t)=>{"use strict";t.d(n,{i:()=>l});var r=t(67294),a=t(10412),o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}var c=!1;function l(){var e=(0,r.useState)((function(){return c?"ssr":s()})),n=e[0],t=e[1];return(0,r.useEffect)((function(){function e(){t(s())}var n=c?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),function(){window.removeEventListener("resize",e),clearTimeout(n)}}),[]),n}},35281:(e,n,t)=>{"use strict";t.d(n,{k:()=>r});var r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:function(e){return"theme-admonition-"+e}},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:function(e){return"theme-doc-sidebar-item-category-level-"+e},docSidebarItemLinkLevel:function(e){return"theme-doc-sidebar-item-link-level-"+e}},blog:{}}},91442:(e,n,t)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}t.d(n,{n:()=>r})},53438:(e,n,t)=>{"use strict";t.d(n,{MN:()=>C,Wl:()=>h,_F:()=>y,cE:()=>p,hI:()=>S,jA:()=>g,lO:()=>w,oz:()=>E,s1:()=>k,vY:()=>_,xz:()=>m});var r=t(67855),a=t(67294),o=t(16550),i=t(18790),s=t(80143),c=t(60373),l=t(74477),u=t(1116),d=t(67392),f=t(48596),p=!!s._r;function m(e){var n=(0,l.E)();if(e){var t=n.docs[e];if(!t)throw new Error("no version doc found by id="+e);return t}}function h(e){if(e.href)return e.href;for(var n,t=(0,r.Z)(e.items);!(n=t()).done;){var a=n.value;if("link"===a.type)return a.href;if("category"===a.type){var o=h(a);if(o)return o}}}function g(){var e=(0,o.TH)().pathname,n=(0,u.V)();if(!n)throw new Error("Unexpected: cant find current sidebar in context");var t=x({sidebarItems:n.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!t)throw new Error(e+" is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.");return t}var b=function(e,n){return void 0!==e&&(0,f.Mg)(e,n)},v=function(e,n){return e.some((function(e){return y(e,n)}))};function y(e,n){return"link"===e.type?b(e.href,n):"category"===e.type&&(b(e.href,n)||v(e.items,n))}function x(e){var n=e.sidebarItems,t=e.pathname,a=e.onlyCategories,o=void 0!==a&&a,i=[];return function e(n){for(var a,s=(0,r.Z)(n);!(a=s()).done;){var c=a.value;if("category"===c.type&&((0,f.Mg)(c.href,t)||e(c.items))||"link"===c.type&&(0,f.Mg)(c.href,t))return o&&"category"!==c.type||i.unshift(c),!0}return!1}(n),i}function k(){var e,n=(0,u.V)(),t=(0,o.TH)().pathname;return!1!==(null==(e=(0,s.gA)())?void 0:e.pluginData.breadcrumbs)&&n?x({sidebarItems:n.items,pathname:t}):null}function w(e){var n=(0,s.Iw)(e).activeVersion,t=(0,c.J)(e).preferredVersion,r=(0,s.yW)(e);return(0,a.useMemo)((function(){return(0,d.j)([n,t,r].filter(Boolean))}),[n,t,r])}function E(e,n){var t=w(n);return(0,a.useMemo)((function(){var n=t.flatMap((function(e){return e.sidebars?Object.entries(e.sidebars):[]})),r=n.find((function(n){return n[0]===e}));if(!r)throw new Error("Can't find any sidebar with id \""+e+'" in version'+(t.length>1?"s":"")+" "+t.map((function(e){return e.name})).join(", ")+'".\nAvailable sidebar ids are:\n- '+n.map((function(e){return e[0]})).join("\n- "));return r[1]}),[e,t])}function _(e,n){var t=w(n);return(0,a.useMemo)((function(){var n=t.flatMap((function(e){return e.docs})),r=n.find((function(n){return n.id===e}));if(!r){if(t.flatMap((function(e){return e.draftIds})).includes(e))return null;throw new Error("Couldn't find any doc with id \""+e+'" in version'+(t.length>1?"s":"")+' "'+t.map((function(e){return e.name})).join(", ")+'".\nAvailable doc ids are:\n- '+(0,d.j)(n.map((function(e){return e.id}))).join("\n- "))}return r}),[e,t])}function S(e){var n=e.route,t=e.versionMetadata,r=(0,o.TH)(),a=n.routes,s=a.find((function(e){return(0,o.LX)(r.pathname,e)}));if(!s)return null;var c=s.sidebar,l=c?t.docsSidebars[c]:void 0;return{docElement:(0,i.H)(a),sidebarName:c,sidebarItems:l}}function C(e){return e.filter((function(e){return"category"!==e.type||!!h(e)}))}},82128:(e,n,t)=>{"use strict";t.d(n,{p:()=>a});var r=t(52263);function a(e){var n=(0,r.Z)().siteConfig,t=n.title,a=n.titleDelimiter;return null!=e&&e.trim().length?e.trim()+" "+a+" "+t:t}},91980:(e,n,t)=>{"use strict";t.d(n,{Nc:()=>l,Rb:()=>s,_X:()=>c});var r=t(67294),a=t(16550),o=t(61688),i=t(69688);function s(e){!function(e){var n=(0,a.k6)(),t=(0,i.zX)(e);(0,r.useEffect)((function(){return n.block((function(e,n){return t(e,n)}))}),[n,t])}((function(n,t){if("POP"===t)return e(n,t)}))}function c(e){return n=function(n){return null===e?null:new URLSearchParams(n.location.search).get(e)},t=(0,a.k6)(),(0,o.useSyncExternalStore)(t.listen,(function(){return n(t)}),(function(){return n(t)}));var n,t}function l(e){var n,t,o=null!=(n=c(e))?n:"",i=(t=(0,a.k6)(),(0,r.useCallback)((function(e,n,r){var a=new URLSearchParams(t.location.search);n?a.set(e,n):a.delete(e),(null!=r&&r.push?t.push:t.replace)({search:a.toString()})}),[t]));return[o,(0,r.useCallback)((function(n,t){i(e,n,t)}),[i,e])]}},67392:(e,n,t)=>{"use strict";function r(e,n){return void 0===n&&(n=function(e,n){return e===n}),e.filter((function(t,r){return e.findIndex((function(e){return n(e,t)}))!==r}))}function a(e){return Array.from(new Set(e))}t.d(n,{j:()=>a,l:()=>r})},10833:(e,n,t)=>{"use strict";t.d(n,{FG:()=>f,d:()=>u,VC:()=>p});var r=t(67294),a=t(86010),o=t(35742),i=t(30226);function s(){var e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var c=t(44996),l=t(82128);function u(e){var n=e.title,t=e.description,a=e.keywords,i=e.image,s=e.children,u=(0,l.p)(n),d=(0,c.C)().withBaseUrl,f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,n&&r.createElement("title",null,u),n&&r.createElement("meta",{property:"og:title",content:u}),t&&r.createElement("meta",{name:"description",content:t}),t&&r.createElement("meta",{property:"og:description",content:t}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),s)}var d=r.createContext(void 0);function f(e){var n=e.className,t=e.children,i=r.useContext(d),s=(0,a.Z)(i,n);return r.createElement(d.Provider,{value:s},r.createElement(o.Z,null,r.createElement("html",{className:s})),t)}function p(e){var n=e.children,t=s(),o="plugin-"+t.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,""),i="plugin-id-"+t.plugin.id;return r.createElement(f,{className:(0,a.Z)(o,i)},n)}},69688:(e,n,t)=>{"use strict";t.d(n,{i6:()=>p,Qc:()=>h,zX:()=>d,D9:()=>f,Ql:()=>m});var r=t(87099),a=t(94578);function o(e){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},o(e)}var i=t(89611);function s(e,n,t){return s=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct.bind():function(e,n,t){var r=[null];r.push.apply(r,n);var a=new(Function.bind.apply(e,r));return t&&(0,i.Z)(a,t.prototype),a},s.apply(null,arguments)}function c(e){var n="function"==typeof Map?new Map:void 0;return c=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(n){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(e))return n.get(e);n.set(e,t)}function t(){return s(e,arguments,o(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),(0,i.Z)(t,e)},c(e)}var l=t(67294),u=t(10412).Z.canUseDOM?l.useLayoutEffect:l.useEffect;function d(e){var n=(0,l.useRef)(e);return u((function(){n.current=e}),[e]),(0,l.useCallback)((function(){return n.current.apply(n,arguments)}),[])}function f(e){var n=(0,l.useRef)();return u((function(){n.current=e})),n.current}var p=function(e){function n(n,t){var a,o,i;return(i=e.call(this)||this).name="ReactContextError",i.message="Hook "+(null!=(a=null==(o=i.stack)||null==(o=o.split("\n")[1])||null==(o=o.match((0,r.Z)(/at (?:\w+\.)?(\w+)/,{name:1})))?void 0:o.groups.name)?a:"")+" is called outside the <"+n+">. "+(null!=t?t:""),i}return(0,a.Z)(n,e),n}(c(Error));function m(e){var n=Object.entries(e);return n.sort((function(e,n){return e[0].localeCompare(n[0])})),(0,l.useMemo)((function(){return e}),n.flat())}function h(e){return function(n){var t=n.children;return l.createElement(l.Fragment,null,e.reduceRight((function(e,n){return l.createElement(n,null,e)}),t))}}},98022:(e,n,t)=>{"use strict";function r(e,n){return void 0!==e&&void 0!==n&&new RegExp(e,"gi").test(n)}t.d(n,{F:()=>r})},48596:(e,n,t)=>{"use strict";t.d(n,{Mg:()=>i,Ns:()=>s});var r=t(67294),a=t(69204),o=t(52263);function i(e,n){var t=function(e){var n;return null==(n=!e||e.endsWith("/")?e:e+"/")?void 0:n.toLowerCase()};return t(e)===t(n)}function s(){var e=(0,o.Z)().siteConfig.baseUrl;return(0,r.useMemo)((function(){return function(e){var n=e.baseUrl;function t(e){return e.path===n&&!0===e.exact}function r(e){return e.path===n&&!e.exact}return function e(n){if(0!==n.length)return n.find(t)||e(n.filter(r).flatMap((function(e){var n;return null!=(n=e.routes)?n:[]})))}(e.routes)}({routes:a.Z,baseUrl:e})}),[e])}},12466:(e,n,t)=>{"use strict";t.d(n,{Ct:()=>p,OC:()=>c,RF:()=>d,o5:()=>f});var r=t(67294),a=t(10412),o=t(72389),i=t(69688);var s=r.createContext(void 0);function c(e){var n,t=e.children,a=(n=(0,r.useRef)(!0),(0,r.useMemo)((function(){return{scrollEventsEnabledRef:n,enableScrollEvents:function(){n.current=!0},disableScrollEvents:function(){n.current=!1}}}),[]));return r.createElement(s.Provider,{value:a},t)}function l(){var e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}var u=function(){return a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null};function d(e,n){void 0===n&&(n=[]);var t=l().scrollEventsEnabledRef,a=(0,r.useRef)(u()),o=(0,i.zX)(e);(0,r.useEffect)((function(){var e=function(){if(t.current){var e=u();o(e,a.current),a.current=e}},n={passive:!0};return e(),window.addEventListener("scroll",e,n),function(){return window.removeEventListener("scroll",e,n)}}),[o,t].concat(n))}function f(){var e,n,t,a=l(),o=(e=(0,r.useRef)({elem:null,top:0}),n=(0,r.useCallback)((function(n){e.current={elem:n,top:n.getBoundingClientRect().top}}),[]),t=(0,r.useCallback)((function(){var n=e.current,t=n.elem,r=n.top;if(!t)return{restored:!1};var a=t.getBoundingClientRect().top-r;return a&&window.scrollBy({left:0,top:a}),e.current={elem:null,top:0},{restored:0!==a}}),[]),(0,r.useMemo)((function(){return{save:n,restore:t}}),[t,n])),i=(0,r.useRef)(void 0),s=(0,r.useCallback)((function(e){o.save(e),a.disableScrollEvents(),i.current=function(){var e=o.restore().restored;if(i.current=void 0,e){window.addEventListener("scroll",(function e(){a.enableScrollEvents(),window.removeEventListener("scroll",e)}))}else a.enableScrollEvents()}}),[a,o]);return(0,r.useLayoutEffect)((function(){queueMicrotask((function(){return null==i.current?void 0:i.current()}))})),{blockElementScrollPositionUntilNextRender:s}}function p(){var e=(0,r.useRef)(null),n=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:function(t){e.current=n?function(e){return window.scrollTo({top:e,behavior:"smooth"}),function(){}}(t):function(e){var n=null,t=document.documentElement.scrollTop>e;return function r(){var a=document.documentElement.scrollTop;(t&&a>e||!t&&a{"use strict";t.d(n,{HX:()=>i,_q:()=>c,os:()=>s});var r=t(80143),a=t(52263),o=t(60373),i="default";function s(e,n){return"docs-"+e+"-"+n}function c(){var e=(0,a.Z)().i18n,n=(0,r._r)(),t=(0,r.WS)(),c=(0,o.Oh)();var l=[i].concat(Object.keys(n).map((function(e){var r,a=(null==t?void 0:t.activePlugin.pluginId)===e?t.activeVersion:void 0,o=c[e],i=n[e].versions.find((function(e){return e.isLast}));return s(e,(null!=(r=null!=a?a:o)?r:i).name)})));return{locale:e.currentLocale,tags:l}}},50012:(e,n,t)=>{"use strict";t.d(n,{Nk:()=>d,WA:()=>u});var r=t(67294),a=t(61688),o="localStorage";function i(e){var n=e.key,t=e.oldValue,r=e.newValue,a=e.storage;if(t!==r){var o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,n,t,r,window.location.href,a),window.dispatchEvent(o)}}function s(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(t){return n=t,c||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",n),c=!0),null}var n}var c=!1;var l={get:function(){return null},set:function(){},del:function(){},listen:function(){return function(){}}};function u(e,n){if("undefined"==typeof window)return function(e){function n(){throw new Error('Illegal storage API usage for storage key "'+e+'".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.')}return{get:n,set:n,del:n,listen:n}}(e);var t=s(null==n?void 0:n.persistence);return null===t?l:{get:function(){try{return t.getItem(e)}catch(n){return console.error("Docusaurus storage error, can't get key="+e,n),null}},set:function(n){try{var r=t.getItem(e);t.setItem(e,n),i({key:e,oldValue:r,newValue:n,storage:t})}catch(a){console.error("Docusaurus storage error, can't set "+e+"="+n,a)}},del:function(){try{var n=t.getItem(e);t.removeItem(e),i({key:e,oldValue:n,newValue:null,storage:t})}catch(r){console.error("Docusaurus storage error, can't delete key="+e,r)}},listen:function(n){try{var r=function(r){r.storageArea===t&&r.key===e&&n(r)};return window.addEventListener("storage",r),function(){return window.removeEventListener("storage",r)}}catch(a){return console.error("Docusaurus storage error, can't listen for changes of key="+e,a),function(){}}}}}function d(e,n){var t=(0,r.useRef)((function(){return null===e?l:u(e,n)})).current(),o=(0,r.useCallback)((function(e){return"undefined"==typeof window?function(){}:t.listen(e)}),[t]);return[(0,a.useSyncExternalStore)(o,(function(){return"undefined"==typeof window?null:t.get()}),(function(){return null})),t]}},94711:(e,n,t)=>{"use strict";t.d(n,{l:()=>i});var r=t(52263),a=t(16550),o=t(18780);function i(){var e=(0,r.Z)(),n=e.siteConfig,t=n.baseUrl,i=n.url,s=n.trailingSlash,c=e.i18n,l=c.defaultLocale,u=c.currentLocale,d=(0,a.TH)().pathname,f=(0,o.applyTrailingSlash)(d,{trailingSlash:s,baseUrl:t}),p=u===l?t:t.replace("/"+u+"/","/"),m=f.replace(t,"");return{createUrl:function(e){var n=e.locale;return""+(e.fullyQualified?i:"")+function(e){return e===l?""+p:""+p+e+"/"}(n)+m}}}},85936:(e,n,t)=>{"use strict";t.d(n,{S:()=>i});var r=t(67294),a=t(16550),o=t(69688);function i(e){var n=(0,a.TH)(),t=(0,o.D9)(n),i=(0,o.zX)(e);(0,r.useEffect)((function(){t&&n!==t&&i({location:n,previousLocation:t})}),[i,n,t])}},86668:(e,n,t)=>{"use strict";t.d(n,{L:()=>a});var r=t(52263);function a(){return(0,r.Z)().siteConfig.themeConfig}},6278:(e,n,t)=>{"use strict";t.d(n,{L:()=>a});var r=t(52263);function a(){return(0,r.Z)().siteConfig.themeConfig}},239:(e,n,t)=>{"use strict";t.d(n,{l:()=>s});var r=t(67294),a=t(98022),o=t(44996),i=t(6278);function s(){var e=(0,o.C)().withBaseUrl,n=(0,i.L)().algolia,t=n.externalUrlRegex,s=n.replaceSearchResultPathname;return(0,r.useCallback)((function(n){var r=new URL(n);if((0,a.F)(t,r.href))return n;var o=""+(r.pathname+r.hash);return e(function(e,n){return n?e.replaceAll(new RegExp(n.from,"g"),n.to):e}(o,s))}),[e,t,s])}},8802:(e,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){var t=n.trailingSlash,r=n.baseUrl;if(e.startsWith("#"))return e;if(void 0===t)return e;var a,o=e.split(/[#?]/)[0],i="/"===o||o===r?o:(a=o,t?function(e){return e.endsWith("/")?e:e+"/"}(a):function(e){return e.endsWith("/")?e.slice(0,-1):e}(a));return e.replace(o,i)}},54143:(e,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.getErrorCausalChain=void 0,n.getErrorCausalChain=function e(n){return n.cause?[n].concat(e(n.cause)):[n]}},18780:function(e,n,t){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0}),n.getErrorCausalChain=n.applyTrailingSlash=n.blogPostContainerID=void 0,n.blogPostContainerID="__blog-post-container";var a=t(8802);Object.defineProperty(n,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=t(54143);Object.defineProperty(n,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},69204:(e,n,t)=>{"use strict";t.d(n,{Z:()=>p});var r=t(67294),a=t(87462),o=t(68356),i=t.n(o),s=t(85345);const c={"06597bc8":[function(){return t.e(9856).then(t.bind(t,45401))},"@site/../docs/learn/archive/learn-treasury.md",45401],"06ea9e61":[function(){return t.e(4825).then(t.t.bind(t,82948,19))},"~docs/default/category-docs-docs-category-protocol-parachain-development-a87.json",82948],"078895e8":[function(){return t.e(740).then(t.bind(t,82681))},"@site/../docs/learn/archive/learn-controller.md",82681],"0a3f0c9b":[function(){return t.e(7837).then(t.bind(t,83388))},"@site/../docs/general/ledger.md",83388],"0b632434":[function(){return t.e(2635).then(t.bind(t,68173))},"@site/../docs/general/parachains-apps.md",68173],"0c68fb82":[function(){return t.e(5526).then(t.bind(t,81424))},"@site/../docs/general/kusama/kusama-claims.md",81424],"0cb62240":[function(){return t.e(1979).then(t.t.bind(t,74518,19))},"~docs/default/category-docs-docs-category-fundamentals-60b.json",74518],"0df78d26":[function(){return t.e(1723).then(t.bind(t,13449))},"@site/../docs/maintain/maintain-guides-secure-validator.md",13449],"113faa87":[function(){return Promise.all([t.e(532),t.e(7738)]).then(t.bind(t,30998))},"@site/../docs/learn/learn-guides-assets.md",30998],"12331e8b":[function(){return t.e(8270).then(t.bind(t,67881))},"@site/../docs/general/polkadotjs.md",67881],"131c7f55":[function(){return t.e(9323).then(t.bind(t,93928))},"@site/../docs/learn/learn-architecture.md",93928],"13b7bafa":[function(){return Promise.all([t.e(8493),t.e(6585)]).then(t.bind(t,89501))},"@site/../docs/learn/learn-auction.md",89501],"145746f5":[function(){return Promise.all([t.e(8493),t.e(691)]).then(t.bind(t,30536))},"@site/../docs/maintain/maintain-polkadot-parameters.md",30536],"14eb3368":[function(){return Promise.all([t.e(532),t.e(9817)]).then(t.bind(t,55541))},"@theme/DocCategoryGeneratedIndexPage",55541],15985664:[function(){return t.e(7830).then(t.bind(t,43394))},"@site/../docs/learn/xcm/journey/summary.md",43394],"1646726c":[function(){return Promise.all([t.e(8493),t.e(2169)]).then(t.bind(t,78381))},"@site/../docs/learn/learn-staking.md",78381],17896441:[function(){return Promise.all([t.e(532),t.e(7918)]).then(t.bind(t,91575))},"@theme/DocItem",91575],"1882e65d":[function(){return t.e(5492).then(t.t.bind(t,77274,19))},"/home/runner/work/polkadot-wiki/polkadot-wiki/polkadot-wiki/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",77274],"19ed4d4c":[function(){return t.e(4355).then(t.bind(t,51191))},"@site/../docs/learn/learn-comparisons-cosmos.md",51191],"1a4e3797":[function(){return Promise.all([t.e(532),t.e(7920)]).then(t.bind(t,56675))},"@theme/SearchPage",56675],"1ae2b102":[function(){return Promise.all([t.e(8493),t.e(4537)]).then(t.bind(t,1799))},"@site/../docs/build/build-protocol-info.md",1799],"1be78505":[function(){return Promise.all([t.e(532),t.e(9514)]).then(t.bind(t,19963))},"@theme/DocPage",19963],"1d6d4797":[function(){return t.e(12).then(t.bind(t,35290))},"@site/../docs/learn/xcm/journey/transact.md",35290],"1e15616a":[function(){return t.e(9802).then(t.bind(t,39420))},"@site/../docs/learn/learn-wasm.md",39420],"1ed3671a":[function(){return t.e(1953).then(t.bind(t,63092))},"@site/../docs/learn/xcm/journey/trap-and-claim.md",63092],"21877fa5":[function(){return Promise.all([t.e(8493),t.e(2117)]).then(t.bind(t,4381))},"@site/../docs/learn/learn-system-chains.md",4381],"21899dd2":[function(){return t.e(3599).then(t.bind(t,2741))},"@site/../docs/learn/learn-parachains.md",2741],"23498fd5":[function(){return t.e(810).then(t.bind(t,7551))},"@site/../docs/build/build-integrate-assets.md",7551],"2462cc91":[function(){return t.e(4885).then(t.bind(t,90351))},"@site/../docs/general/multisig-apps.md",90351],"25f2bd2a":[function(){return t.e(1213).then(t.bind(t,16769))},"@site/../docs/maintain/maintain-guides-how-to-stop-validating.md",16769],"279fb1d6":[function(){return Promise.all([t.e(8493),t.e(6827)]).then(t.bind(t,81807))},"@site/../docs/general/kusama/kusama-getting-started.md",81807],"28b84bbb":[function(){return t.e(8444).then(t.bind(t,50310))},"@site/../docs/build/build-network-overview.md",50310],"29a046f3":[function(){return t.e(6918).then(t.t.bind(t,59904,19))},"~docs/default/category-docs-docs-category-polkadot-comparisons-3b4.json",59904],"2be0d940":[function(){return Promise.all([t.e(8493),t.e(2914)]).then(t.bind(t,77078))},"@site/../docs/learn/learn-guides-identity.md",77078],"2d429218":[function(){return t.e(502).then(t.bind(t,20925))},"@site/../docs/learn/learn-consensus.md",20925],"2ea50c63":[function(){return t.e(2949).then(t.bind(t,84941))},"@site/../docs/learn/learn-xcm-usecases.md",84941],"2f3b630e":[function(){return Promise.all([t.e(8493),t.e(9226)]).then(t.bind(t,42569))},"@site/../docs/learn/learn-polkadot-opengov.md",42569],"3002ebf4":[function(){return Promise.all([t.e(532),t.e(6325)]).then(t.bind(t,64280))},"@site/../docs/build/build-dapp.md",64280],"30d868e8":[function(){return t.e(8215).then(t.t.bind(t,8578,19))},"~docs/default/category-docs-docs-category-multilocation-8c6.json",8578],"3104d5d8":[function(){return t.e(9977).then(t.t.bind(t,45050,19))},"~docs/default/category-docs-docs-category-programs-fa8.json",45050],"3184af97":[function(){return t.e(1125).then(t.bind(t,43335))},"@site/../docs/maintain/archive/maintain-guides-how-to-vote-councillor.md",43335],"31bd35e0":[function(){return t.e(5281).then(t.bind(t,35660))},"@site/../docs/learn/xcm/overview/summary.md",35660],"31c99aa1":[function(){return t.e(8876).then(t.t.bind(t,45497,19))},"~docs/default/category-docs-docs-category-references-a4f.json",45497],"320c8a05":[function(){return t.e(5005).then(t.bind(t,76184))},"@site/../docs/maintain/maintain-networks.md",76184],"32c9742a":[function(){return t.e(9626).then(t.bind(t,84639))},"@site/../docs/learn/xcm/fundamentals/summary.md",84639],"32e8da05":[function(){return Promise.all([t.e(8493),t.e(6140)]).then(t.bind(t,65779))},"@site/../docs/learn/learn-crowdloans.md",65779],"333929a0":[function(){return t.e(2261).then(t.t.bind(t,61697,19))},"~docs/default/category-docs-docs-category-staking-on-polkadot-2c0.json",61697],"33b0bcab":[function(){return t.e(1585).then(t.bind(t,27281))},"@site/../docs/learn/xcm/reference/xcvm-registers.md",27281],"33bbe353":[function(){return t.e(7908).then(t.bind(t,46437))},"@site/../docs/maintain/kusama/maintain-guides-society-kusama.md",46437],"3497b7c6":[function(){return t.e(3332).then(t.t.bind(t,73834,19))},"~docs/default/category-docs-docs-category-quickstart-1e9.json",73834],"3829cf1d":[function(){return t.e(537).then(t.bind(t,77778))},"@site/../docs/maintain/maintain-guides-validator-community.md",77778],"386099fc":[function(){return Promise.all([t.e(8493),t.e(8139)]).then(t.bind(t,60283))},"@site/../docs/learn/learn-polkadot-opengov-treasury.md",60283],"386bfe51":[function(){return t.e(657).then(t.bind(t,35810))},"@site/../docs/general/contributing.md",35810],"390ca211":[function(){return t.e(9596).then(t.bind(t,5355))},"@site/../docs/learn/archive/learn-launch.md",5355],"3bd77df4":[function(){return t.e(8831).then(t.bind(t,94752))},"@site/../docs/learn/learn-bridges.md",94752],"3d1bf5db":[function(){return t.e(3452).then(t.bind(t,85453))},"@site/../docs/maintain/maintain-guides-async-backing.md",85453],"3e56470e":[function(){return t.e(4541).then(t.bind(t,80432))},"@site/../docs/maintain/maintain-wss.md",80432],"408829bd":[function(){return t.e(6).then(t.bind(t,11982))},"@site/../docs/learn/learn-transaction-fees.md",11982],"41871d53":[function(){return t.e(7778).then(t.t.bind(t,69713,19))},"/home/runner/work/polkadot-wiki/polkadot-wiki/polkadot-wiki/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",69713],"41b7b3e8":[function(){return Promise.all([t.e(8493),t.e(3513)]).then(t.bind(t,84358))},"@site/../docs/learn/learn-staking-advanced.md",84358],"41f7224c":[function(){return Promise.all([t.e(532),t.e(3274)]).then(t.bind(t,48659))},"@site/../docs/learn/learn-archive.md",48659],"43cda9e8":[function(){return t.e(6357).then(t.bind(t,96736))},"@site/../docs/learn/learn-guides-assets-ledger.md",96736],"43ee4f22":[function(){return Promise.all([t.e(532),t.e(8047),t.e(4672)]).then(t.bind(t,24567))},"@site/../docs/build/build-guide.md",24567],"452ad91d":[function(){return t.e(6255).then(t.bind(t,94100))},"@site/../docs/learn/xcm/overview/intro.md",94100],"4642ab5c":[function(){return t.e(6946).then(t.bind(t,75925))},"@site/../docs/learn/learn-cryptography.md",75925],"48074a08":[function(){return t.e(1825).then(t.t.bind(t,64515,19))},"~docs/default/category-docs-docs-category-advanced-concepts-637.json",64515],"482bfb5c":[function(){return t.e(9993).then(t.t.bind(t,59085,19))},"~docs/default/category-docs-docs-category-dashboards-ddd.json",59085],"48d75399":[function(){return Promise.all([t.e(8493),t.e(4620)]).then(t.bind(t,17384))},"@site/../docs/general/faq.md",17384],"493c7fdf":[function(){return Promise.all([t.e(8493),t.e(2354)]).then(t.bind(t,22703))},"@site/../docs/general/glossary.md",22703],49816380:[function(){return t.e(6482).then(t.t.bind(t,13302,19))},"~docs/default/category-docs-docs-category-polkadot-vision-2bc.json",13302],"4a8eb552":[function(){return Promise.all([t.e(8493),t.e(7202)]).then(t.bind(t,87149))},"@site/../docs/learn/learn-comparisons-kusama.md",87149],"4d76887f":[function(){return t.e(1415).then(t.bind(t,77799))},"@site/../docs/build/build-hackathon.md",77799],"4d9b9869":[function(){return t.e(4445).then(t.bind(t,56136))},"@site/../docs/learn/learn-parachains-protocol.md",56136],"4f031749":[function(){return Promise.all([t.e(8493),t.e(2008)]).then(t.bind(t,44002))},"@site/../docs/learn/learn-guides-staking-pools.md",44002],"5136ee31":[function(){return t.e(1446).then(t.bind(t,57904))},"@site/../docs/learn/xcm/journey/expects.md",57904],"51fbc2c9":[function(){return t.e(9806).then(t.bind(t,68114))},"@site/../docs/learn/learn-comparisons.md",68114],"5355b952":[function(){return Promise.all([t.e(8493),t.e(6495),t.e(4126)]).then(t.bind(t,40799))},"@site/../docs/learn/learn-polkadot-opengov-origins.md",40799],"54338ffb":[function(){return t.e(4634).then(t.bind(t,97765))},"@site/../docs/learn/learn-account-multisig.md",97765],"543610b9":[function(){return t.e(7022).then(t.t.bind(t,50491,19))},"~docs/default/category-docs-docs-category-community-contributors-548.json",50491],"591eca19":[function(){return t.e(7714).then(t.bind(t,32876))},"@site/../docs/general/polkadot-direction.md",32876],"5c90fc9b":[function(){return t.e(3484).then(t.bind(t,11213))},"@site/../docs/learn/xcm/executor_config/config.md",11213],"5d69d9d4":[function(){return t.e(2884).then(t.bind(t,48470))},"@site/../docs/maintain/maintain-guides-how-to-upgrade.md",48470],"5db34cd0":[function(){return t.e(1635).then(t.bind(t,61390))},"@site/../docs/general/decentralized-voices.md",61390],"5e9f5e1a":[function(){return Promise.resolve().then(t.bind(t,8618))},"@generated/docusaurus.config",8618],"60738e36":[function(){return Promise.all([t.e(8493),t.e(9071)]).then(t.bind(t,71345))},"@site/../docs/general/metadata.md",71345],"6151e7ce":[function(){return Promise.all([t.e(8493),t.e(2194)]).then(t.bind(t,8417))},"@site/../docs/general/kusama/kusama-parameters.md",8417],"64c7e1cc":[function(){return t.e(9217).then(t.bind(t,45725))},"@site/../docs/build/build-integration.md",45725],"6544ec02":[function(){return t.e(3029).then(t.bind(t,58619))},"@site/../docs/general/alpha-program.md",58619],"694672cd":[function(){return Promise.all([t.e(532),t.e(8138)]).then(t.bind(t,29576))},"@site/../docs/learn/learn-guides-staking.md",29576],"694e7470":[function(){return t.e(4566).then(t.t.bind(t,6269,19))},"~docs/default/category-docs-docs-category-future-implementations-236.json",6269],"69b97ecd":[function(){return t.e(8067).then(t.bind(t,75217))},"@site/../docs/learn/learn-implementations.md",75217],"6a04f266":[function(){return t.e(4187).then(t.t.bind(t,60641,19))},"~docs/default/category-docs-docs-category-nodes-and-dapps-4fe.json",60641],"6d2ffbf3":[function(){return t.e(9315).then(t.bind(t,91599))},"@site/../docs/learn/xcm/quickstart/first-look.md",91599],"6d5c9a28":[function(){return t.e(2119).then(t.bind(t,94927))},"@site/../docs/general/staking-apps.md",94927],"6f1a81b8":[function(){return Promise.all([t.e(8493),t.e(7288)]).then(t.bind(t,15418))},"@site/../docs/maintain/maintain-guides-how-to-chill.md",15418],"702d5d94":[function(){return t.e(4105).then(t.t.bind(t,54229,19))},"~docs/default/category-docs-docs-category-wallets-bf2.json",54229],"71ed82b9":[function(){return t.e(8648).then(t.bind(t,4401))},"@site/../docs/general/start-building.md",4401],73617284:[function(){return t.e(6730).then(t.bind(t,71298))},"@site/../docs/learn/learn-hyperbridge.md",71298],"73a7060c":[function(){return Promise.all([t.e(8493),t.e(5752)]).then(t.bind(t,72523))},"@site/../docs/learn/learn-polkadot-technical-fellowship.md",72523],"73c3bebc":[function(){return t.e(1211).then(t.t.bind(t,47084,19))},"~docs/default/category-docs-docs-category-stay-safe-1ef.json",47084],"73d1b372":[function(){return t.e(3576).then(t.bind(t,93891))},"@site/../docs/learn/learn-agile-coretime.md",93891],74985360:[function(){return t.e(43).then(t.t.bind(t,62402,19))},"~docs/default/category-docs-docs-category-explore-8dc.json",62402],"74df6a22":[function(){return t.e(1299).then(t.bind(t,50223))},"@site/../docs/maintain/maintain-rpc.md",50223],"766a10e1":[function(){return t.e(8860).then(t.bind(t,83611))},"@site/../docs/learn/learn-comparisons-avalanche.md",83611],"77c23c97":[function(){return Promise.all([t.e(532),t.e(8493),t.e(150)]).then(t.bind(t,32465))},"@site/../docs/learn/learn-transactions.md",32465],"78868b16":[function(){return t.e(2754).then(t.bind(t,17134))},"@site/../docs/general/kusama/kusama-social-recovery.md",17134],"78e1e977":[function(){return t.e(1872).then(t.bind(t,3830))},"@site/../docs/learn/xcm/journey/holding-modifiers.md",3830],"797239df":[function(){return t.e(356).then(t.t.bind(t,13198,19))},"~docs/default/category-docs-docs-category-polkadot-opengov-2e8.json",13198],"7c78c461":[function(){return t.e(2507).then(t.bind(t,41962))},"@site/../docs/general/kusama/kusama-community.md",41962],"7ccc428f":[function(){return t.e(3348).then(t.t.bind(t,56705,19))},"~docs/default/category-docs-docs-category-learn-about-polkadot-534.json",56705],"7e9389ad":[function(){return t.e(5011).then(t.t.bind(t,69074,19))},"~docs/default/category-docs-docs-category-participants-in-the-polkadot-ecosystem-e03.json",69074],"7fbac68a":[function(){return t.e(1598).then(t.bind(t,81475))},"@site/../docs/general/ambassadors.md",81475],"804b1e9f":[function(){return Promise.all([t.e(8493),t.e(230)]).then(t.bind(t,46494))},"@site/../docs/learn/learn-guides-nominator.md",46494],"824749c6":[function(){return t.e(8361).then(t.bind(t,94521))},"@site/../docs/build/build-node-interaction.md",94521],"8247eba8":[function(){return t.e(8115).then(t.bind(t,76785))},"@site/../docs/learn/xcm/journey/transfers/teleports.md",76785],"83d4859f":[function(){return t.e(8757).then(t.bind(t,25310))},"@site/../docs/learn/xcm/journey/transfers/summary.md",25310],"84ede15a":[function(){return Promise.all([t.e(532),t.e(8493),t.e(4338)]).then(t.bind(t,6555))},"@site/../docs/learn/learn-guides-transfers.md",6555],"84f79495":[function(){return t.e(2078).then(t.bind(t,96709))},"@site/../docs/learn/learn-parathreads.md",96709],"85afe03a":[function(){return t.e(3132).then(t.bind(t,31714))},"@site/../docs/maintain/maintain-errors.md",31714],"863c4753":[function(){return t.e(2552).then(t.bind(t,15719))},"@site/../docs/learn/xcm/journey/register-modifiers.md",15719],"899aadcc":[function(){return t.e(1083).then(t.bind(t,11422))},"@site/../docs/learn/xcm/overview/architecture.md",11422],"89a76fd2":[function(){return t.e(9771).then(t.bind(t,31703))},"@site/../docs/learn/archive/learn-redenomination.md",31703],"8a8a7d05":[function(){return t.e(3262).then(t.bind(t,34204))},"@site/../docs/build/build-parachains.md",34204],"8b670b2b":[function(){return t.e(7799).then(t.bind(t,12897))},"@site/../docs/build/build-index.md",12897],"8d3a1bf8":[function(){return Promise.all([t.e(8493),t.e(2399)]).then(t.bind(t,10209))},"@site/../docs/learn/learn-inflation.md",10209],"8dd7cee0":[function(){return t.e(1486).then(t.bind(t,63349))},"@site/../docs/general/thousand-validators.md",63349],"918b38b6":[function(){return Promise.all([t.e(8493),t.e(2508)]).then(t.bind(t,90594))},"@site/../docs/learn/learn-async-backing.md",90594],"935f2afb":[function(){return t.e(53).then(t.t.bind(t,22624,19))},"~docs/default/version-current-metadata-prop-751.json",22624],"9528ac88":[function(){return t.e(315).then(t.bind(t,85517))},"@site/../docs/learn/learn-xcm-transport.md",85517],"9662c81e":[function(){return t.e(2664).then(t.bind(t,52269))},"@site/../docs/maintain/archive/maintain-guides-how-to-join-council.md",52269],"967fa6d4":[function(){return Promise.all([t.e(8493),t.e(2581)]).then(t.bind(t,91430))},"@site/../docs/learn/learn-guides-accounts-multisig.md",91430],"987d08ef":[function(){return t.e(1748).then(t.bind(t,11732))},"@site/../docs/build/build-smart-contracts.md",11732],"98a30fd8":[function(){return t.e(8866).then(t.bind(t,94062))},"@site/../docs/learn/xcm/fundamentals/multiasset.md",94062],"98a431f4":[function(){return t.e(7584).then(t.bind(t,51240))},"@site/../docs/general/transaction-attacks.md",51240],"9913464d":[function(){return t.e(5341).then(t.bind(t,63009))},"@site/../docs/learn/archive/learn-governance.md",63009],"9a679a70":[function(){return t.e(8178).then(t.t.bind(t,92189,19))},"~docs/default/category-docs-docs-category-overview-c3c.json",92189],"9e2042f5":[function(){return t.e(5651).then(t.bind(t,99476))},"@site/../docs/learn/learn-collator.md",99476],"9e3f6a8a":[function(){return t.e(2758).then(t.bind(t,14865))},"@site/../docs/learn/learn-comparison-ethereum-2.md",14865],"9e6341e5":[function(){return t.e(1774).then(t.bind(t,61601))},"@site/../docs/learn/xcm/journey/transfers/reserve.md",61601],"9e76b49d":[function(){return t.e(7823).then(t.bind(t,85268))},"@site/../docs/learn/xcm/testing.md",85268],"9f319605":[function(){return t.e(63).then(t.bind(t,48442))},"@site/../docs/learn/xcm/journey/fees.md",48442],"9f804621":[function(){return Promise.all([t.e(532),t.e(8493),t.e(4143)]).then(t.bind(t,35426))},"@site/../docs/learn/learn-guides-accounts.md",35426],a2800a5b:[function(){return t.e(7961).then(t.bind(t,69595))},"@site/../docs/build/build-transaction-construction.md",69595],a29dc56e:[function(){return t.e(6253).then(t.bind(t,16898))},"@site/../docs/maintain/maintain-guides-how-to-monitor-your-node.md",16898],a4b71220:[function(){return t.e(9112).then(t.t.bind(t,68388,19))},"/home/runner/work/polkadot-wiki/polkadot-wiki/polkadot-wiki/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",68388],a5002e4a:[function(){return t.e(1703).then(t.bind(t,53714))},"@site/../docs/build/build-oracle.md",53714],a5b3561d:[function(){return t.e(7466).then(t.bind(t,75007))},"@site/../docs/general/kusama/kusama-coc.md",75007],a74a59a0:[function(){return Promise.all([t.e(8493),t.e(8702)]).then(t.bind(t,11300))},"@site/../docs/maintain/maintain-guides-how-to-validate-polkadot.md",11300],a7b37b86:[function(){return t.e(4507).then(t.bind(t,588))},"@site/../docs/general/scams.md",588],a7c27f4d:[function(){return t.e(4174).then(t.t.bind(t,39220,19))},"~docs/default/category-docs-docs-category-basic-concepts-about-polkadot-793.json",39220],ab138bf8:[function(){return Promise.all([t.e(8493),t.e(8791)]).then(t.bind(t,83433))},"@site/../docs/learn/learn-proxies.md",83433],ad762f86:[function(){return Promise.all([t.e(8493),t.e(7940)]).then(t.bind(t,79569))},"@site/../docs/learn/learn-account-advanced.md",79569],af3013e9:[function(){return t.e(6673).then(t.t.bind(t,70918,19))},"~docs/default/category-docs-docs-category-apps-8f2.json",70918],af40287e:[function(){return t.e(3066).then(t.t.bind(t,48292,19))},"~docs/default/category-docs-docs-category-transfers-b84.json",48292],b0a48d97:[function(){return t.e(3091).then(t.bind(t,74789))},"@site/../docs/learn/learn-guides-ledger.md",74789],b0cb055f:[function(){return t.e(9905).then(t.bind(t,65959))},"@site/../docs/learn/xcm/fundamentals/xcvm.md",65959],b0cbc1d4:[function(){return Promise.all([t.e(8493),t.e(3667)]).then(t.bind(t,14374))},"@site/../docs/general/staking-dashboard.md",14374],b133b626:[function(){return t.e(8086).then(t.t.bind(t,45153,19))},"~docs/default/category-docs-docs-category-collator-guides-d67.json",45153],b21dd8a7:[function(){return t.e(1494).then(t.bind(t,7788))},"@site/../docs/learn/learn-comparison-rollups.md",7788],b225a2ce:[function(){return t.e(3668).then(t.bind(t,63021))},"@site/../docs/learn/xcm/fundamentals/multilocation/summary.md",63021],b3719d54:[function(){return t.e(5422).then(t.bind(t,64633))},"@site/../docs/general/polkadot-v1.md",64633],b38833d4:[function(){return Promise.all([t.e(8493),t.e(9062)]).then(t.bind(t,2774))},"@site/../docs/learn/learn-phragmen.md",2774],b48c599b:[function(){return t.e(8901).then(t.bind(t,99098))},"@site/../docs/general/kusama/kusama-bug-bounty.md",99098],b61f6dc7:[function(){return t.e(1372).then(t.bind(t,7678))},"@site/../docs/general/research.md",7678],b906f375:[function(){return t.e(2749).then(t.bind(t,61104))},"@site/../docs/build/build-light-clients.md",61104],b940de31:[function(){return Promise.all([t.e(8493),t.e(7633)]).then(t.bind(t,11427))},"@site/../docs/learn/learn-assets.md",11427],b9b4ec9e:[function(){return t.e(5704).then(t.bind(t,15137))},"@site/../docs/learn/xcm/reference/glossary.md",15137],b9c2850c:[function(){return t.e(6110).then(t.t.bind(t,52468,19))},"~docs/default/category-docs-docs-category-polkadot-js-98b.json",52468],bb8b1738:[function(){return Promise.all([t.e(8493),t.e(7368)]).then(t.bind(t,49175))},"@site/../docs/learn/learn-validator.md",49175],bbba852d:[function(){return t.e(6294).then(t.bind(t,33736))},"@site/../docs/general/kusama/kusama-adverserial-cheatsheet.md",33736],bd701914:[function(){return t.e(7388).then(t.bind(t,55965))},"@site/../docs/learn/learn-parachains-faq.md",55965],bea375d6:[function(){return t.e(3757).then(t.bind(t,86676))},"@site/../docs/general/grants.md",86676],beb5436b:[function(){return t.e(3837).then(t.t.bind(t,18255,19))},"~docs/default/category-docs-docs-category-development-networks-node-management-5d2.json",18255],c07c2447:[function(){return Promise.all([t.e(8493),t.e(7654)]).then(t.bind(t,40569))},"@site/../docs/learn/learn-guides-polkadot-opengov.md",40569],c1bbdb2a:[function(){return t.e(4916).then(t.bind(t,27122))},"@site/../docs/learn/learn-polkadot-host.md",27122],c2c6a3a6:[function(){return t.e(2712).then(t.bind(t,5812))},"@site/../docs/learn/learn-nft-projects.md",5812],c41801b5:[function(){return Promise.all([t.e(8493),t.e(5013)]).then(t.bind(t,63801))},"@site/../docs/maintain/kusama/maintain-guides-how-to-validate-kusama.md",63801],c4f5d8e4:[function(){return t.e(4195).then(t.bind(t,75844))},"@site/src/pages/index.js",75844],c5d9e474:[function(){return t.e(6779).then(t.t.bind(t,40076,19))},"~docs/default/category-docs-docs-category-client-side-development-690.json",40076],c662f00a:[function(){return t.e(4379).then(t.bind(t,56021))},"@site/../docs/learn/xcm/journey/queries.md",56021],c7a044bb:[function(){return t.e(217).then(t.bind(t,47223))},"@site/../docs/learn/xcm/journey/channels-and-bridges.md",47223],c7a2145e:[function(){return t.e(9478).then(t.bind(t,25690))},"@site/../docs/general/how-to-dyor.md",25690],c7c5ba1a:[function(){return Promise.all([t.e(532),t.e(8493),t.e(6104)]).then(t.bind(t,63706))},"@site/../docs/learn/learn-accounts.md",63706],c8dd560b:[function(){return Promise.all([t.e(8493),t.e(3978)]).then(t.bind(t,82651))},"@site/../docs/learn/learn-guides-accounts-proxy-pure.md",82651],c91a9c06:[function(){return Promise.all([t.e(8493),t.e(8355)]).then(t.bind(t,48693))},"@site/../docs/learn/learn-identity.md",48693],c977dfe8:[function(){return Promise.all([t.e(8493),t.e(1506)]).then(t.bind(t,38948))},"@site/../docs/learn/learn-teleport.md",38948],ca9fe671:[function(){return t.e(6598).then(t.bind(t,37579))},"@site/../docs/learn/xcm/overview/xcvm.md",37579],cb9afd28:[function(){return Promise.all([t.e(532),t.e(8493),t.e(3643)]).then(t.bind(t,46301))},"@site/../docs/learn/learn-polkadot-js-guides.md",46301],cc44e8fd:[function(){return t.e(7683).then(t.bind(t,6005))},"@site/../docs/build/build-node-management.md",6005],ccc1222e:[function(){return t.e(6920).then(t.bind(t,60147))},"@site/../docs/build/build-open-source.md",60147],cd144357:[function(){return t.e(9779).then(t.t.bind(t,14423,19))},"~docs/default/category-docs-docs-category-polkadots-parachains-4b5.json",14423],cda87995:[function(){return t.e(3933).then(t.bind(t,27023))},"@site/../docs/build/build-tools-index.md",27023],ceaa29cb:[function(){return t.e(6373).then(t.bind(t,41230))},"@site/../docs/learn/xcm/journey/locks/locks.md",41230],cfd53ea4:[function(){return t.e(1090).then(t.bind(t,7007))},"@site/../docs/general/kusama/kusama-timeline.md",7007],d01f45b7:[function(){return t.e(6220).then(t.t.bind(t,73443,19))},"~docs/default/category-docs-docs-category-polkadots-xcm-416.json",73443],d27ae88d:[function(){return t.e(5157).then(t.bind(t,19994))},"@site/../docs/learn/learn-video-tutorials.md",19994],d3a753cf:[function(){return t.e(8855).then(t.bind(t,8032))},"@site/../docs/learn/xcm/fundamentals/multilocation/example.md",8032],d569989b:[function(){return t.e(609).then(t.bind(t,17340))},"@site/../docs/general/bug-bounty.md",17340],d5909206:[function(){return t.e(3554).then(t.bind(t,43543))},"@site/../docs/learn/xcm/fundamentals/multilocation/junction.md",43543],d6a97e7e:[function(){return t.e(7858).then(t.bind(t,55984))},"@site/../docs/learn/xcm/quickstart/xcm-simulator.md",55984],d6b0148d:[function(){return t.e(5548).then(t.bind(t,7926))},"@site/../docs/learn/xcm/journey/origins.md",7926],d9ef69a7:[function(){return t.e(1786).then(t.bind(t,4245))},"@site/../docs/general/contributors.md",4245],da9f79cb:[function(){return Promise.all([t.e(8493),t.e(2248)]).then(t.bind(t,92916))},"@site/../docs/learn/learn-nomination-pools.md",92916],db039c7f:[function(){return t.e(5103).then(t.bind(t,50740))},"@site/../docs/learn/xcm/overview/format.md",50740],db0b42b0:[function(){return t.e(2609).then(t.bind(t,64271))},"@site/../docs/learn/learn-sassafras.md",64271],db3d6c4d:[function(){return t.e(7313).then(t.bind(t,1171))},"@site/../docs/learn/learn-account-abstraction.md",1171],dbbd9e76:[function(){return t.e(3669).then(t.bind(t,69156))},"@site/../docs/learn/learn-guides-vault.md",69156],dbc4065c:[function(){return t.e(6312).then(t.t.bind(t,8654,19))},"~docs/default/category-docs-docs-category-tokens-and-assets-d90.json",8654],dc36d550:[function(){return Promise.all([t.e(532),t.e(4359)]).then(t.bind(t,62252))},"@site/../docs/maintain/maintain-archive.md",62252],dc776cbc:[function(){return t.e(9764).then(t.bind(t,8117))},"@site/../docs/general/thousand-contributors.md",8117],dd32e389:[function(){return t.e(2042).then(t.bind(t,63689))},"@site/../docs/general/polkadot-vault.md",63689],df154d69:[function(){return t.e(1957).then(t.bind(t,15474))},"@site/../docs/learn/learn-xcm.md",15474],e2e89062:[function(){return t.e(2633).then(t.bind(t,81843))},"@site/../docs/learn/learn-proxies-pure.md",81843],e31fc461:[function(){return t.e(3330).then(t.bind(t,60682))},"@site/../docs/learn/xcm/learn-xcm-docs-intro.md",60682],e344dd79:[function(){return t.e(9276).then(t.t.bind(t,71462,19))},"~docs/default/category-docs-docs-category-polkadots-architecture-348.json",71462],e3d2722f:[function(){return t.e(5049).then(t.t.bind(t,7864,19))},"~docs/default/category-docs-docs-category-agile-coretime-69e.json",7864],e495ca4d:[function(){return t.e(8951).then(t.bind(t,14943))},"@site/../docs/maintain/archive/maintain-guides-democracy.md",14943],e5615b18:[function(){return t.e(3828).then(t.t.bind(t,97723,19))},"~docs/default/category-docs-docs-category-validator-guides-2eb.json",97723],ec3b6a32:[function(){return t.e(4004).then(t.bind(t,56794))},"@site/../docs/learn/learn-nft.md",56794],ecb495b7:[function(){return t.e(2136).then(t.bind(t,82956))},"@site/../docs/maintain/maintain-guides-how-to-systemd.md",82956],ece9fdae:[function(){return t.e(2677).then(t.bind(t,81862))},"@site/../docs/general/community.md",81862],ed3409b3:[function(){return Promise.all([t.e(8493),t.e(8609)]).then(t.bind(t,64539))},"@site/../docs/learn/learn-guides-bounties.md",64539],eef3f1dd:[function(){return Promise.all([t.e(8493),t.e(4097)]).then(t.bind(t,7522))},"@site/../docs/learn/learn-guides-treasury.md",7522],f0855ff9:[function(){return t.e(4909).then(t.bind(t,9012))},"@site/../docs/general/kusama/kusama-index.md",9012],f0ff685a:[function(){return Promise.all([t.e(8493),t.e(8191)]).then(t.bind(t,56870))},"@site/../docs/learn/learn-guides-accounts-proxy.md",56870],f137ce68:[function(){return Promise.all([t.e(532),t.e(3620)]).then(t.bind(t,2137))},"@site/../docs/learn/learn-xcm-instructions.md",2137],f14351c1:[function(){return t.e(3356).then(t.t.bind(t,2551,19))},"~docs/default/category-docs-docs-category-components-a98.json",2551],f1585bfb:[function(){return t.e(3665).then(t.bind(t,43507))},"@site/../docs/learn/xcm/quickstart/summary.md",43507],f189ca9f:[function(){return t.e(192).then(t.bind(t,20458))},"@site/../docs/learn/learn-spree.md",20458],f2521980:[function(){return Promise.all([t.e(8493),t.e(6689)]).then(t.bind(t,24595))},"@site/../docs/general/getting-started.md",24595],f2c21b54:[function(){return t.e(4363).then(t.bind(t,3011))},"@site/../docs/build/build-storage.md",3011],f3027c84:[function(){return t.e(2242).then(t.bind(t,3361))},"@site/../docs/general/polkadotjs-ui.md",3361],f359a251:[function(){return t.e(1239).then(t.bind(t,15759))},"@site/../docs/maintain/maintain-endpoints.md",15759],f3bde756:[function(){return t.e(2704).then(t.bind(t,84741))},"@site/../docs/maintain/maintain-bootnode.md",84741],f4130007:[function(){return t.e(2665).then(t.bind(t,86975))},"@site/../docs/general/wallets-and-extensions.md",86975],f41c4e9d:[function(){return t.e(4666).then(t.bind(t,32036))},"@site/../docs/learn/learn-xcm-pallet.md",32036],f4200fe5:[function(){return Promise.all([t.e(532),t.e(2909)]).then(t.bind(t,31101))},"@site/../docs/maintain/maintain-sync.md",31101],f44679e7:[function(){return t.e(1451).then(t.bind(t,70602))},"@site/../docs/general/governance-apps.md",70602],f44ed8f8:[function(){return t.e(7211).then(t.bind(t,71294))},"@site/../docs/build/build-hrmp-channels.md",71294],f47489cd:[function(){return t.e(1966).then(t.bind(t,11611))},"@site/../docs/learn/learn-runtime-upgrades.md",11611],f4fb6e9c:[function(){return t.e(1).then(t.t.bind(t,40132,19))},"~docs/default/category-docs-docs-category-a-journey-through-xcm-9f8.json",40132],f52abf29:[function(){return t.e(576).then(t.bind(t,20969))},"@site/../docs/general/decentralized-futures.md",20969],f7191335:[function(){return t.e(1686).then(t.t.bind(t,1691,19))},"~docs/default/category-docs-docs-category-general-cbc.json",1691],f750c690:[function(){return t.e(1419).then(t.bind(t,91251))},"@site/../docs/learn/learn-nft-pallets.md",91251],f7acb151:[function(){return Promise.all([t.e(8493),t.e(5483)]).then(t.bind(t,49736))},"@site/../docs/learn/learn-guides-assets-create.md",49736],f8518919:[function(){return t.e(3945).then(t.bind(t,51094))},"@site/../docs/general/web3-and-polkadot.md",51094],f90fa732:[function(){return t.e(1062).then(t.bind(t,71358))},"@site/../docs/build/build-data.md",71358],f95cee6f:[function(){return t.e(9548).then(t.bind(t,24195))},"@site/../docs/maintain/maintain-guides-best-practices-to-avoid-slashes.md",24195],fa343ad1:[function(){return t.e(1678).then(t.bind(t,42352))},"@site/../docs/learn/xcm/fundamentals/weight_and_fees.md",42352],fabebe44:[function(){return t.e(1288).then(t.bind(t,38993))},"@site/../docs/general/dev-heroes.md",38993],fbf58567:[function(){return t.e(5989).then(t.t.bind(t,46599,19))},"~docs/default/category-docs-docs-category-xcm-documentation-30c.json",46599],fea93377:[function(){return Promise.all([t.e(8493),t.e(4674)]).then(t.bind(t,26029))},"@site/../docs/maintain/maintain-guides-validator-payout.md",26029],fecdcc34:[function(){return t.e(8034).then(t.bind(t,26269))},"@site/../docs/learn/xcm/journey/version.md",26269],feea648c:[function(){return t.e(7061).then(t.bind(t,39966))},"@site/../docs/learn/learn-xcvm.md",39966],ff6596ea:[function(){return Promise.all([t.e(8493),t.e(3842)]).then(t.bind(t,25398))},"@site/../docs/learn/learn-nominator.md",25398],ffd76171:[function(){return Promise.all([t.e(532),t.e(8236)]).then(t.bind(t,88559))},"@site/../docs/maintain/maintain-index.md",88559],ffe9c3c9:[function(){return Promise.all([t.e(8493),t.e(1529)]).then(t.bind(t,64204))},"@site/../docs/learn/learn-DOT.md",64204]};function l(e){var n=e.error,t=e.retry,a=e.pastDelay;return n?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(n)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:t},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=t(99670),d=t(30226);function f(e,n){if("*"===e)return i()({loading:l,loader:function(){return t.e(4972).then(t.bind(t,4972))},modules:["@theme/NotFound"],webpack:function(){return[4972]},render:function(e,n){var t=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(t,n))}});var o=s[e+"-"+n],f={},p=[],m=[],h=(0,u.Z)(o);return Object.entries(h).forEach((function(e){var n=e[0],t=e[1],r=c[t];r&&(f[n]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:l,loader:f,modules:p,webpack:function(){return m},render:function(n,t){var i=JSON.parse(JSON.stringify(o));Object.entries(n).forEach((function(n){var t=n[0],r=n[1],a=r.default;if(!a)throw new Error("The page component at "+e+" doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.");"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((function(e){return"default"!==e})).forEach((function(e){a[e]=r[e]}));var o=i,s=t.split(".");s.slice(0,-1).forEach((function(e){o=o[e]})),o[s[s.length-1]]=a}));var s=i.__comp;delete i.__comp;var c=i.__context;return delete i.__context,r.createElement(d.z,{value:c},r.createElement(s,(0,a.Z)({},i,t)))}})}const p=[{path:"/search",component:f("/search","740"),exact:!0},{path:"/docs",component:f("/docs","9c6"),routes:[{path:"/docs/alpha-program",component:f("/docs/alpha-program","34d"),exact:!0,sidebar:"docs"},{path:"/docs/ambassadors",component:f("/docs/ambassadors","afd"),exact:!0,sidebar:"docs"},{path:"/docs/apps-index",component:f("/docs/apps-index","f93"),exact:!0,sidebar:"docs"},{path:"/docs/bug-bounty",component:f("/docs/bug-bounty","bab"),exact:!0,sidebar:"docs"},{path:"/docs/build-client-index",component:f("/docs/build-client-index","150"),exact:!0,sidebar:"docs"},{path:"/docs/build-dapp",component:f("/docs/build-dapp","90c"),exact:!0,sidebar:"docs"},{path:"/docs/build-data",component:f("/docs/build-data","c63"),exact:!0,sidebar:"docs"},{path:"/docs/build-guide",component:f("/docs/build-guide","4c0"),exact:!0,sidebar:"docs"},{path:"/docs/build-hackathon",component:f("/docs/build-hackathon","170"),exact:!0,sidebar:"docs"},{path:"/docs/build-hrmp-channels",component:f("/docs/build-hrmp-channels","9d7"),exact:!0,sidebar:"docs"},{path:"/docs/build-index",component:f("/docs/build-index","fd5"),exact:!0},{path:"/docs/build-integrate-assets",component:f("/docs/build-integrate-assets","521"),exact:!0,sidebar:"docs"},{path:"/docs/build-integration",component:f("/docs/build-integration","0e9"),exact:!0,sidebar:"docs"},{path:"/docs/build-light-clients",component:f("/docs/build-light-clients","522"),exact:!0,sidebar:"docs"},{path:"/docs/build-network-index",component:f("/docs/build-network-index","3a3"),exact:!0,sidebar:"docs"},{path:"/docs/build-network-overview",component:f("/docs/build-network-overview","92c"),exact:!0,sidebar:"docs"},{path:"/docs/build-node-interaction",component:f("/docs/build-node-interaction","26d"),exact:!0,sidebar:"docs"},{path:"/docs/build-node-management",component:f("/docs/build-node-management","033"),exact:!0,sidebar:"docs"},{path:"/docs/build-open-source",component:f("/docs/build-open-source","d93"),exact:!0,sidebar:"docs"},{path:"/docs/build-oracle",component:f("/docs/build-oracle","66f"),exact:!0,sidebar:"docs"},{path:"/docs/build-pdk",component:f("/docs/build-pdk","841"),exact:!0,sidebar:"docs"},{path:"/docs/build-protocol-index",component:f("/docs/build-protocol-index","267"),exact:!0,sidebar:"docs"},{path:"/docs/build-protocol-info",component:f("/docs/build-protocol-info","d4a"),exact:!0,sidebar:"docs"},{path:"/docs/build-smart-contracts",component:f("/docs/build-smart-contracts","4b8"),exact:!0,sidebar:"docs"},{path:"/docs/build-storage",component:f("/docs/build-storage","47b"),exact:!0,sidebar:"docs"},{path:"/docs/build-tools-index",component:f("/docs/build-tools-index","410"),exact:!0,sidebar:"docs"},{path:"/docs/build-transaction-construction",component:f("/docs/build-transaction-construction","d68"),exact:!0,sidebar:"docs"},{path:"/docs/community",component:f("/docs/community","b89"),exact:!0,sidebar:"docs"},{path:"/docs/community-index",component:f("/docs/community-index","c5c"),exact:!0,sidebar:"docs"},{path:"/docs/contributing",component:f("/docs/contributing","677"),exact:!0,sidebar:"docs"},{path:"/docs/contributors",component:f("/docs/contributors","1e6"),exact:!0,sidebar:"docs"},{path:"/docs/dashboards-index",component:f("/docs/dashboards-index","d3f"),exact:!0,sidebar:"docs"},{path:"/docs/decentralized-futures",component:f("/docs/decentralized-futures","db1"),exact:!0,sidebar:"docs"},{path:"/docs/decentralized-voices",component:f("/docs/decentralized-voices","07a"),exact:!0,sidebar:"docs"},{path:"/docs/dev-heroes",component:f("/docs/dev-heroes","4e8"),exact:!0,sidebar:"docs"},{path:"/docs/explore-index",component:f("/docs/explore-index","37d"),exact:!0,sidebar:"docs"},{path:"/docs/faq",component:f("/docs/faq","e21"),exact:!0,sidebar:"docs"},{path:"/docs/general-index",component:f("/docs/general-index","84d"),exact:!0,sidebar:"docs"},{path:"/docs/getting-started",component:f("/docs/getting-started","6f8"),exact:!0,sidebar:"docs"},{path:"/docs/glossary",component:f("/docs/glossary","5f2"),exact:!0,sidebar:"docs"},{path:"/docs/governance-apps",component:f("/docs/governance-apps","cc0"),exact:!0,sidebar:"docs"},{path:"/docs/grants",component:f("/docs/grants","240"),exact:!0,sidebar:"docs"},{path:"/docs/how-to-dyor",component:f("/docs/how-to-dyor","3d9"),exact:!0,sidebar:"docs"},{path:"/docs/kusama-adversarial-cheatsheet",component:f("/docs/kusama-adversarial-cheatsheet","ff3"),exact:!0},{path:"/docs/kusama-bug-bounty",component:f("/docs/kusama-bug-bounty","c07"),exact:!0},{path:"/docs/kusama-claims",component:f("/docs/kusama-claims","b28"),exact:!0},{path:"/docs/kusama-coc",component:f("/docs/kusama-coc","302"),exact:!0},{path:"/docs/kusama-community",component:f("/docs/kusama-community","c98"),exact:!0},{path:"/docs/kusama-getting-started",component:f("/docs/kusama-getting-started","bd7"),exact:!0},{path:"/docs/kusama-index",component:f("/docs/kusama-index","eeb"),exact:!0},{path:"/docs/kusama-parameters",component:f("/docs/kusama-parameters","a62"),exact:!0},{path:"/docs/kusama-social-recovery",component:f("/docs/kusama-social-recovery","62f"),exact:!0},{path:"/docs/kusama-timeline",component:f("/docs/kusama-timeline","288"),exact:!0},{path:"/docs/learn-account-abstraction",component:f("/docs/learn-account-abstraction","962"),exact:!0,sidebar:"docs"},{path:"/docs/learn-account-advanced",component:f("/docs/learn-account-advanced","c5d"),exact:!0,sidebar:"docs"},{path:"/docs/learn-account-multisig",component:f("/docs/learn-account-multisig","f7c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-accounts",component:f("/docs/learn-accounts","9c2"),exact:!0,sidebar:"docs"},{path:"/docs/learn-advanced-index",component:f("/docs/learn-advanced-index","66f"),exact:!0,sidebar:"docs"},{path:"/docs/learn-agile-coretime",component:f("/docs/learn-agile-coretime","c36"),exact:!0,sidebar:"docs"},{path:"/docs/learn-agile-coretime-index",component:f("/docs/learn-agile-coretime-index","de8"),exact:!0,sidebar:"docs"},{path:"/docs/learn-architecture",component:f("/docs/learn-architecture","fa2"),exact:!0,sidebar:"docs"},{path:"/docs/learn-architecture-index",component:f("/docs/learn-architecture-index","f6c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-archive",component:f("/docs/learn-archive","668"),exact:!0,sidebar:"docs"},{path:"/docs/learn-assets",component:f("/docs/learn-assets","71c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-assets-index",component:f("/docs/learn-assets-index","980"),exact:!0,sidebar:"docs"},{path:"/docs/learn-async-backing",component:f("/docs/learn-async-backing","8d8"),exact:!0,sidebar:"docs"},{path:"/docs/learn-auction",component:f("/docs/learn-auction","5f7"),exact:!0,sidebar:"docs"},{path:"/docs/learn-basics-index",component:f("/docs/learn-basics-index","90b"),exact:!0,sidebar:"docs"},{path:"/docs/learn-bridges",component:f("/docs/learn-bridges","fc1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-collator",component:f("/docs/learn-collator","8d9"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons",component:f("/docs/learn-comparisons","ef1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-avalanche",component:f("/docs/learn-comparisons-avalanche","6f0"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-cosmos",component:f("/docs/learn-comparisons-cosmos","72c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-ethereum-2",component:f("/docs/learn-comparisons-ethereum-2","af0"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-index",component:f("/docs/learn-comparisons-index","3a8"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-kusama",component:f("/docs/learn-comparisons-kusama","de0"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-rollups",component:f("/docs/learn-comparisons-rollups","656"),exact:!0,sidebar:"docs"},{path:"/docs/learn-components-index",component:f("/docs/learn-components-index","565"),exact:!0,sidebar:"docs"},{path:"/docs/learn-consensus",component:f("/docs/learn-consensus","c72"),exact:!0,sidebar:"docs"},{path:"/docs/learn-crowdloans",component:f("/docs/learn-crowdloans","98f"),exact:!0,sidebar:"docs"},{path:"/docs/learn-cryptography",component:f("/docs/learn-cryptography","3de"),exact:!0,sidebar:"docs"},{path:"/docs/learn-DOT",component:f("/docs/learn-DOT","913"),exact:!0,sidebar:"docs"},{path:"/docs/learn-future-implementations-index",component:f("/docs/learn-future-implementations-index","d18"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-accounts",component:f("/docs/learn-guides-accounts","e6d"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-accounts-multisig",component:f("/docs/learn-guides-accounts-multisig","701"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-accounts-proxy",component:f("/docs/learn-guides-accounts-proxy","49c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-accounts-proxy-pure",component:f("/docs/learn-guides-accounts-proxy-pure","295"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-assets",component:f("/docs/learn-guides-assets","193"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-assets-create",component:f("/docs/learn-guides-assets-create","dd9"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-assets-ledger",component:f("/docs/learn-guides-assets-ledger","1f0"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-bounties",component:f("/docs/learn-guides-bounties","2dc"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-identity",component:f("/docs/learn-guides-identity","9f1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-ledger",component:f("/docs/learn-guides-ledger","a52"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-nominator",component:f("/docs/learn-guides-nominator","292"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-polkadot-opengov",component:f("/docs/learn-guides-polkadot-opengov","097"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-staking",component:f("/docs/learn-guides-staking","e1a"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-staking-pools",component:f("/docs/learn-guides-staking-pools","8e8"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-transfers",component:f("/docs/learn-guides-transfers","d83"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-treasury",component:f("/docs/learn-guides-treasury","45a"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-vault",component:f("/docs/learn-guides-vault","407"),exact:!0,sidebar:"docs"},{path:"/docs/learn-hyperbridge",component:f("/docs/learn-hyperbridge","315"),exact:!0,sidebar:"docs"},{path:"/docs/learn-identity",component:f("/docs/learn-identity","414"),exact:!0,sidebar:"docs"},{path:"/docs/learn-implementations",component:f("/docs/learn-implementations","a5b"),exact:!0},{path:"/docs/learn-index",component:f("/docs/learn-index","706"),exact:!0,sidebar:"docs"},{path:"/docs/learn-inflation",component:f("/docs/learn-inflation","5ea"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nft",component:f("/docs/learn-nft","4b1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nft-pallets",component:f("/docs/learn-nft-pallets","8ea"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nft-projects",component:f("/docs/learn-nft-projects","18f"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nomination-pools",component:f("/docs/learn-nomination-pools","964"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nominator",component:f("/docs/learn-nominator","5fc"),exact:!0,sidebar:"docs"},{path:"/docs/learn-parachains",component:f("/docs/learn-parachains","0d1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-parachains-faq",component:f("/docs/learn-parachains-faq","eed"),exact:!0,sidebar:"docs"},{path:"/docs/learn-parachains-index",component:f("/docs/learn-parachains-index","4e5"),exact:!0,sidebar:"docs"},{path:"/docs/learn-parachains-protocol",component:f("/docs/learn-parachains-protocol","f2b"),exact:!0,sidebar:"docs"},{path:"/docs/learn-parathreads",component:f("/docs/learn-parathreads","03d"),exact:!0,sidebar:"docs"},{path:"/docs/learn-participants-index",component:f("/docs/learn-participants-index","b1a"),exact:!0,sidebar:"docs"},{path:"/docs/learn-phragmen",component:f("/docs/learn-phragmen","c5c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadot-host",component:f("/docs/learn-polkadot-host","48e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadot-js-guides",component:f("/docs/learn-polkadot-js-guides","69c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadot-opengov",component:f("/docs/learn-polkadot-opengov","ecc"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadot-opengov-index",component:f("/docs/learn-polkadot-opengov-index","2be"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadot-opengov-origins",component:f("/docs/learn-polkadot-opengov-origins","3dc"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadot-opengov-treasury",component:f("/docs/learn-polkadot-opengov-treasury","582"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadot-technical-fellowship",component:f("/docs/learn-polkadot-technical-fellowship","7b7"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadotjs-index",component:f("/docs/learn-polkadotjs-index","1d9"),exact:!0,sidebar:"docs"},{path:"/docs/learn-proxies",component:f("/docs/learn-proxies","92e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-proxies-pure",component:f("/docs/learn-proxies-pure","b02"),exact:!0,sidebar:"docs"},{path:"/docs/learn-runtime-upgrades",component:f("/docs/learn-runtime-upgrades","8e7"),exact:!0,sidebar:"docs"},{path:"/docs/learn-sassafras",component:f("/docs/learn-sassafras","11d"),exact:!0,sidebar:"docs"},{path:"/docs/learn-scams",component:f("/docs/learn-scams","f1c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-spree",component:f("/docs/learn-spree","14e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-staking",component:f("/docs/learn-staking","183"),exact:!0,sidebar:"docs"},{path:"/docs/learn-staking-advanced",component:f("/docs/learn-staking-advanced","089"),exact:!0,sidebar:"docs"},{path:"/docs/learn-staking-index",component:f("/docs/learn-staking-index","5df"),exact:!0,sidebar:"docs"},{path:"/docs/learn-system-chains",component:f("/docs/learn-system-chains","29d"),exact:!0,sidebar:"docs"},{path:"/docs/learn-teleport",component:f("/docs/learn-teleport","814"),exact:!0,sidebar:"docs"},{path:"/docs/learn-transaction-fees",component:f("/docs/learn-transaction-fees","42e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-transactions",component:f("/docs/learn-transactions","1f1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-validator",component:f("/docs/learn-validator","cae"),exact:!0,sidebar:"docs"},{path:"/docs/learn-video-tutorials",component:f("/docs/learn-video-tutorials","a9e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-wasm",component:f("/docs/learn-wasm","16e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm",component:f("/docs/learn-xcm","f30"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm-index",component:f("/docs/learn-xcm-index","90a"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm-instructions",component:f("/docs/learn-xcm-instructions","82b"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm-pallet",component:f("/docs/learn-xcm-pallet","c28"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm-transport",component:f("/docs/learn-xcm-transport","b2a"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm-usecases",component:f("/docs/learn-xcm-usecases","4fd"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcvm",component:f("/docs/learn-xcvm","db4"),exact:!0,sidebar:"docs"},{path:"/docs/learn/learn-controller",component:f("/docs/learn/learn-controller","67e"),exact:!0,sidebar:"docs"},{path:"/docs/learn/learn-governance",component:f("/docs/learn/learn-governance","1cb"),exact:!0,sidebar:"docs"},{path:"/docs/learn/learn-launch",component:f("/docs/learn/learn-launch","6ec"),exact:!0,sidebar:"docs"},{path:"/docs/learn/learn-redenomination",component:f("/docs/learn/learn-redenomination","136"),exact:!0,sidebar:"docs"},{path:"/docs/learn/learn-treasury",component:f("/docs/learn/learn-treasury","3dc"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm",component:f("/docs/learn/xcm","b7a"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/config-deep-dive",component:f("/docs/learn/xcm/config-deep-dive","e68"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals",component:f("/docs/learn/xcm/fundamentals","e35"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals-fees",component:f("/docs/learn/xcm/fundamentals-fees","80a"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals-multiasset",component:f("/docs/learn/xcm/fundamentals-multiasset","ead"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals-summary",component:f("/docs/learn/xcm/fundamentals-summary","1e3"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals-xcvm",component:f("/docs/learn/xcm/fundamentals-xcvm","752"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals/multilocation",component:f("/docs/learn/xcm/fundamentals/multilocation","f7c"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals/multilocation-example",component:f("/docs/learn/xcm/fundamentals/multilocation-example","9c5"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals/multilocation-junctions",component:f("/docs/learn/xcm/fundamentals/multilocation-junctions","776"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals/multilocation-summary",component:f("/docs/learn/xcm/fundamentals/multilocation-summary","6f7"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/introduction",component:f("/docs/learn/xcm/introduction","e34"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey",component:f("/docs/learn/xcm/journey","ac5"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-assets",component:f("/docs/learn/xcm/journey-assets","f26"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-channels",component:f("/docs/learn/xcm/journey-channels","ae8"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-expectations",component:f("/docs/learn/xcm/journey-expectations","a11"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-fees",component:f("/docs/learn/xcm/journey-fees","1e0"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-holding",component:f("/docs/learn/xcm/journey-holding","914"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-locks",component:f("/docs/learn/xcm/journey-locks","f94"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-origin",component:f("/docs/learn/xcm/journey-origin","4f3"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-queries",component:f("/docs/learn/xcm/journey-queries","3fb"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-register",component:f("/docs/learn/xcm/journey-register","e9c"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-summary",component:f("/docs/learn/xcm/journey-summary","2a4"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-transact",component:f("/docs/learn/xcm/journey-transact","283"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-version",component:f("/docs/learn/xcm/journey-version","c0d"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey/transfers",component:f("/docs/learn/xcm/journey/transfers","454"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey/transfers-reserve",component:f("/docs/learn/xcm/journey/transfers-reserve","5ce"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey/transfers-summary",component:f("/docs/learn/xcm/journey/transfers-summary","e08"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey/transfers-teleport",component:f("/docs/learn/xcm/journey/transfers-teleport","85b"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview",component:f("/docs/learn/xcm/overview","c0f"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview-architecture",component:f("/docs/learn/xcm/overview-architecture","7ec"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview-format",component:f("/docs/learn/xcm/overview-format","d5c"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview-intro",component:f("/docs/learn/xcm/overview-intro","529"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview-summary",component:f("/docs/learn/xcm/overview-summary","ffd"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview-xcvm",component:f("/docs/learn/xcm/overview-xcvm","9ad"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/quickstart",component:f("/docs/learn/xcm/quickstart","c96"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/quickstart-first-look",component:f("/docs/learn/xcm/quickstart-first-look","c89"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/quickstart-simulator",component:f("/docs/learn/xcm/quickstart-simulator","d3a"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/quickstart-summary",component:f("/docs/learn/xcm/quickstart-summary","e79"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/reference-glossary",component:f("/docs/learn/xcm/reference-glossary","e83"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/reference-xcvm-registers",component:f("/docs/learn/xcm/reference-xcvm-registers","ceb"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/references",component:f("/docs/learn/xcm/references","103"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/testing",component:f("/docs/learn/xcm/testing","0a7"),exact:!0,sidebar:"docs"},{path:"/docs/ledger",component:f("/docs/ledger","50e"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-archive",component:f("/docs/maintain-archive","779"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-bootnode",component:f("/docs/maintain-bootnode","294"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-collator-index",component:f("/docs/maintain-collator-index","5ad"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-endpoints",component:f("/docs/maintain-endpoints","31b"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-errors",component:f("/docs/maintain-errors","92e"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-async-backing",component:f("/docs/maintain-guides-async-backing","232"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-avoid-slashing",component:f("/docs/maintain-guides-avoid-slashing","578"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-chill",component:f("/docs/maintain-guides-how-to-chill","668"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-monitor-your-node",component:f("/docs/maintain-guides-how-to-monitor-your-node","bdd"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-stop-validating",component:f("/docs/maintain-guides-how-to-stop-validating","993"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-systemd",component:f("/docs/maintain-guides-how-to-systemd","3e8"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-upgrade",component:f("/docs/maintain-guides-how-to-upgrade","f9d"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-validate-kusama",component:f("/docs/maintain-guides-how-to-validate-kusama","eb0"),exact:!0},{path:"/docs/maintain-guides-how-to-validate-polkadot",component:f("/docs/maintain-guides-how-to-validate-polkadot","e43"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-secure-validator",component:f("/docs/maintain-guides-secure-validator","310"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-society-kusama",component:f("/docs/maintain-guides-society-kusama","6d3"),exact:!0},{path:"/docs/maintain-guides-validator-community",component:f("/docs/maintain-guides-validator-community","18d"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-validator-payout",component:f("/docs/maintain-guides-validator-payout","712"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-index",component:f("/docs/maintain-index","d6e"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-networks",component:f("/docs/maintain-networks","234"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-node-index",component:f("/docs/maintain-node-index","5c6"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-polkadot-parameters",component:f("/docs/maintain-polkadot-parameters","5d7"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-rpc",component:f("/docs/maintain-rpc","f10"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-sync",component:f("/docs/maintain-sync","fd0"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-validator-index",component:f("/docs/maintain-validator-index","ae9"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-wss",component:f("/docs/maintain-wss","7f4"),exact:!0,sidebar:"docs"},{path:"/docs/maintain/maintain-guides-democracy",component:f("/docs/maintain/maintain-guides-democracy","806"),exact:!0,sidebar:"docs"},{path:"/docs/maintain/maintain-guides-how-to-join-council",component:f("/docs/maintain/maintain-guides-how-to-join-council","590"),exact:!0,sidebar:"docs"},{path:"/docs/maintain/maintain-guides-how-to-vote-councillor",component:f("/docs/maintain/maintain-guides-how-to-vote-councillor","ebd"),exact:!0,sidebar:"docs"},{path:"/docs/metadata",component:f("/docs/metadata","ba9"),exact:!0,sidebar:"docs"},{path:"/docs/multisig-apps",component:f("/docs/multisig-apps","72e"),exact:!0,sidebar:"docs"},{path:"/docs/parachains-apps",component:f("/docs/parachains-apps","196"),exact:!0,sidebar:"docs"},{path:"/docs/polkadot-direction",component:f("/docs/polkadot-direction","2f6"),exact:!0,sidebar:"docs"},{path:"/docs/polkadot-v1",component:f("/docs/polkadot-v1","770"),exact:!0,sidebar:"docs"},{path:"/docs/polkadot-vault",component:f("/docs/polkadot-vault","d52"),exact:!0,sidebar:"docs"},{path:"/docs/polkadot-vision-index",component:f("/docs/polkadot-vision-index","3c3"),exact:!0,sidebar:"docs"},{path:"/docs/polkadotjs",component:f("/docs/polkadotjs","516"),exact:!0,sidebar:"docs"},{path:"/docs/polkadotjs-ui",component:f("/docs/polkadotjs-ui","884"),exact:!0,sidebar:"docs"},{path:"/docs/programs-index",component:f("/docs/programs-index","98f"),exact:!0,sidebar:"docs"},{path:"/docs/research",component:f("/docs/research","5f7"),exact:!0,sidebar:"docs"},{path:"/docs/staking-apps",component:f("/docs/staking-apps","ca0"),exact:!0,sidebar:"docs"},{path:"/docs/staking-dashboard",component:f("/docs/staking-dashboard","a9a"),exact:!0,sidebar:"docs"},{path:"/docs/start-building",component:f("/docs/start-building","16a"),exact:!0,sidebar:"docs"},{path:"/docs/stay-safe-index",component:f("/docs/stay-safe-index","580"),exact:!0,sidebar:"docs"},{path:"/docs/thousand-contributors",component:f("/docs/thousand-contributors","9ba"),exact:!0,sidebar:"docs"},{path:"/docs/thousand-validators",component:f("/docs/thousand-validators","053"),exact:!0,sidebar:"docs"},{path:"/docs/transaction-attacks",component:f("/docs/transaction-attacks","937"),exact:!0,sidebar:"docs"},{path:"/docs/wallets-and-extensions",component:f("/docs/wallets-and-extensions","e5f"),exact:!0,sidebar:"docs"},{path:"/docs/wallets-index",component:f("/docs/wallets-index","656"),exact:!0,sidebar:"docs"},{path:"/docs/web3-and-polkadot",component:f("/docs/web3-and-polkadot","85e"),exact:!0,sidebar:"docs"}]},{path:"/",component:f("/","7cb"),exact:!0},{path:"*",component:f("*")}]},94184:(e,n)=>{var t;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],n=0;n{"use strict";function r(e){var n,t,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(n=0;na});const a=function(){for(var e,n,t=0,a="";t{"use strict";t.d(n,{lX:()=>x,q_:()=>C,ob:()=>p,PP:()=>P,Ep:()=>f});var r=t(87462);function a(e){return"/"===e.charAt(0)}function o(e,n){for(var t=n,r=t+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!l)for(;d--;d)i.unshift("..");!l||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return t&&"/"!==m.substr(-1)&&(m+="/"),m};var s=t(38776);function c(e){return"/"===e.charAt(0)?e:"/"+e}function l(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,n){return function(e,n){return 0===e.toLowerCase().indexOf(n.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(n.length))}(e,n)?e.substr(n.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var n=e.pathname,t=e.search,r=e.hash,a=n||"/";return t&&"?"!==t&&(a+="?"===t.charAt(0)?t:"?"+t),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,n,t,a){var o;"string"==typeof e?(o=function(e){var n=e||"/",t="",r="",a=n.indexOf("#");-1!==a&&(r=n.substr(a),n=n.substr(0,a));var o=n.indexOf("?");return-1!==o&&(t=n.substr(o),n=n.substr(0,o)),{pathname:n,search:"?"===t?"":t,hash:"#"===r?"":r}}(e),o.state=n):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==n&&void 0===o.state&&(o.state=n));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return t&&(o.key=t),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var n=[];return{setPrompt:function(n){return e=n,function(){e===n&&(e=null)}},confirmTransitionTo:function(n,t,r,a){if(null!=e){var o="function"==typeof e?e(n,t):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var t=!0;function r(){t&&e.apply(void 0,arguments)}return n.push(r),function(){t=!1,n=n.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,t=new Array(e),r=0;rn?t.splice(n,t.length-n,a):t.push(a),d({action:r,location:a,index:n,entries:t})}}))},replace:function(e,n){var r="REPLACE",a=p(e,n,h(),x.location);u.confirmTransitionTo(a,r,t,(function(e){e&&(x.entries[x.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var n=x.index+e;return n>=0&&n{"use strict";var r=t(59864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var l=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(n,t,r){if("string"!=typeof t){if(m){var a=p(t);a&&a!==m&&e(n,a,r)}var i=u(t);d&&(i=i.concat(d(t)));for(var s=c(n),h=c(t),g=0;g{"use strict";e.exports=function(e,n,t,r,a,o,i,s){if(!e){var c;if(void 0===n)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[t,r,a,o,i,s],u=0;(c=new Error(n.replace(/%s/g,(function(){return l[u++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},32497:(e,n,t)=>{"use strict";t.r(n)},32104:(e,n,t)=>{"use strict";t.r(n)},39604:(e,n,t)=>{"use strict";t.r(n)},70378:(e,n,t)=>{"use strict";t.r(n)},74865:function(e,n,t){var r,a;r=function(){var e,n,t={version:"0.2.0"},r=t.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,n,t){return et?t:e}function o(e){return 100*(-1+e)}function i(e,n,t){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+n+"ms "+t,a}t.configure=function(e){var n,t;for(n in e)void 0!==(t=e[n])&&e.hasOwnProperty(n)&&(r[n]=t);return this},t.status=null,t.set=function(e){var n=t.isStarted();e=a(e,r.minimum,1),t.status=1===e?null:e;var o=t.render(!n),l=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(n){""===r.positionUsing&&(r.positionUsing=t.getPositioningCSS()),c(l,i(e,u,d)),1===e?(c(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){c(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){t.remove(),n()}),u)}),u)):setTimeout(n,u)})),this},t.isStarted=function(){return"number"==typeof t.status},t.start=function(){t.status||t.set(0);var e=function(){setTimeout((function(){t.status&&(t.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},t.done=function(e){return e||t.status?t.inc(.3+.5*Math.random()).set(1):this},t.inc=function(e){var n=t.status;return n?("number"!=typeof e&&(e=(1-n)*a(Math.random()*n,.1,.95)),n=a(n+e,0,.994),t.set(n)):t.start()},t.trickle=function(){return t.inc(Math.random()*r.trickleRate)},e=0,n=0,t.promise=function(r){return r&&"resolved"!==r.state()?(0===n&&t.start(),e++,n++,r.always((function(){0==--n?(e=0,t.done()):t.set((e-n)/e)})),this):this},t.render=function(e){if(t.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var n=document.createElement("div");n.id="nprogress",n.innerHTML=r.template;var a,i=n.querySelector(r.barSelector),s=e?"-100":o(t.status||0),l=document.querySelector(r.parent);return c(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=n.querySelector(r.spinnerSelector))&&p(a),l!=document.body&&u(l,"nprogress-custom-parent"),l.appendChild(n),n},t.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},t.isRendered=function(){return!!document.getElementById("nprogress")},t.getPositioningCSS=function(){var e=document.body.style,n="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return n+"Perspective"in e?"translate3d":n+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function n(){var t=e.shift();t&&t(n)}return function(t){e.push(t),1==e.length&&n()}}(),c=function(){var e=["Webkit","O","Moz","ms"],n={};function t(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,n){return n.toUpperCase()}))}function r(n){var t=document.body.style;if(n in t)return n;for(var r,a=e.length,o=n.charAt(0).toUpperCase()+n.slice(1);a--;)if((r=e[a]+o)in t)return r;return n}function a(e){return e=t(e),n[e]||(n[e]=r(e))}function o(e,n,t){n=a(n),e.style[n]=t}return function(e,n){var t,r,a=arguments;if(2==a.length)for(t in n)void 0!==(r=n[t])&&n.hasOwnProperty(t)&&o(e,t,r);else o(e,a[1],a[2])}}();function l(e,n){return("string"==typeof e?e:f(e)).indexOf(" "+n+" ")>=0}function u(e,n){var t=f(e),r=t+n;l(t,n)||(e.className=r.substring(1))}function d(e,n){var t,r=f(e);l(e,n)&&(t=r.replace(" "+n+" "," "),e.className=t.substring(1,t.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return t},void 0===(a="function"==typeof r?r.call(n,t,n,e):r)||(e.exports=a)},27418:e=>{"use strict";var n=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var n={},t=0;t<10;t++)n["_"+String.fromCharCode(t)]=t;if("0123456789"!==Object.getOwnPropertyNames(n).map((function(e){return n[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c{!function(e){for(var n=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|)*\*\//.source,t=0;t<2;t++)n=n.replace(//g,(function(){return n}));n=n.replace(//g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+n),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism)},54294:(e,n,t)=>{var r={"./prism-rust":70767};function a(e){var n=o(e);return t(n)}function o(e){if(!t.o(r,e)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=54294},92703:(e,n,t)=>{"use strict";var r=t(50414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,n,t,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function n(){return e}e.isRequired=e;var t={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:n,element:e,elementType:e,instanceOf:n,node:e,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:o,resetWarningCache:a};return t.PropTypes=t,t}},45697:(e,n,t)=>{e.exports=t(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},31555:(e,n,t)=>{"use strict";t.d(n,{Z:()=>l});var r=t(94184),a=t.n(r),o=t(67294),i=t(76792),s=t(85893);const c=o.forwardRef(((e,n)=>{const[{className:t,...r},{as:o="div",bsPrefix:c,spans:l}]=function({as:e,bsPrefix:n,className:t,...r}){n=(0,i.vE)(n,"col");const o=(0,i.pi)(),s=(0,i.zG)(),c=[],l=[];return o.forEach((e=>{const t=r[e];let a,o,i;delete r[e],"object"==typeof t&&null!=t?({span:a,offset:o,order:i}=t):a=t;const u=e!==s?`-${e}`:"";a&&c.push(!0===a?`${n}${u}`:`${n}${u}-${a}`),null!=i&&l.push(`order${u}-${i}`),null!=o&&l.push(`offset${u}-${o}`)})),[{...r,className:a()(t,...c,...l)},{as:e,bsPrefix:n,spans:c}]}(e);return(0,s.jsx)(o,{...r,ref:n,className:a()(t,!l.length&&c)})}));c.displayName="Col";const l=c},10682:(e,n,t)=>{"use strict";t.d(n,{Z:()=>l});var r=t(94184),a=t.n(r),o=t(67294),i=t(76792),s=t(85893);const c=o.forwardRef((({bsPrefix:e,fluid:n=!1,as:t="div",className:r,...o},c)=>{const l=(0,i.vE)(e,"container"),u="string"==typeof n?`-${n}`:"-fluid";return(0,s.jsx)(t,{ref:c,...o,className:a()(r,n?`${l}${u}`:l)})}));c.displayName="Container";const l=c},34051:(e,n,t)=>{"use strict";t.d(n,{Z:()=>l});var r=t(94184),a=t.n(r),o=t(67294),i=t(76792),s=t(85893);const c=o.forwardRef((({bsPrefix:e,className:n,as:t="div",...r},o)=>{const c=(0,i.vE)(e,"row"),l=(0,i.pi)(),u=(0,i.zG)(),d=`${c}-cols`,f=[];return l.forEach((e=>{const n=r[e];let t;delete r[e],null!=n&&"object"==typeof n?({cols:t}=n):t=n;const a=e!==u?`-${e}`:"";null!=t&&f.push(`${d}${a}-${t}`)})),(0,s.jsx)(t,{ref:o,...r,className:a()(n,c,...f)})}));c.displayName="Row";const l=c},76792:(e,n,t)=>{"use strict";t.d(n,{pi:()=>l,vE:()=>c,zG:()=>u});var r=t(67294);t(85893);const a=["xxl","xl","lg","md","sm","xs"],o=r.createContext({prefixes:{},breakpoints:a,minBreakpoint:"xs"}),{Consumer:i,Provider:s}=o;function c(e,n){const{prefixes:t}=(0,r.useContext)(o);return e||t[n]||n}function l(){const{breakpoints:e}=(0,r.useContext)(o);return e}function u(){const{minBreakpoint:e}=(0,r.useContext)(o);return e}},64448:(e,n,t)=>{"use strict";var r=t(67294),a=t(27418),o=t(63840);function i(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t