From a36e90f686819d9afade3cd22af96a067a9f2cd1 Mon Sep 17 00:00:00 2001 From: Polkadot Wiki CI Date: Wed, 26 Jun 2024 14:59:01 +0000 Subject: [PATCH] Deploy website - based on a862f402a5ea0892e94f144f5d5710b6f6c8f1d4 --- 404.html | 4 ++-- assets/js/12331e8b.4e1881d4.js | 1 + assets/js/12331e8b.f30c3f90.js | 1 - assets/js/1646726c.a29d1e22.js | 1 + assets/js/1646726c.b7063abf.js | 1 - assets/js/386099fc.2b231c32.js | 1 + assets/js/386099fc.5c4f2962.js | 1 - assets/js/41b7b3e8.0499e4ef.js | 1 - assets/js/41b7b3e8.164ce82d.js | 1 + assets/js/6d5c9a28.1b52fa22.js | 1 + assets/js/6d5c9a28.39f85d55.js | 1 - ...8d3a1bf8.883fda68.js => 8d3a1bf8.065e7f7b.js} | 2 +- assets/js/a74a59a0.50f0f645.js | 1 + assets/js/a74a59a0.fae2510e.js | 1 - assets/js/b0cbc1d4.2355700b.js | 1 + assets/js/b0cbc1d4.87ba95d0.js | 1 - assets/js/ff6596ea.9803ce8e.js | 1 + assets/js/ff6596ea.fc33edf9.js | 1 - ...main.0860cc54.js => runtime~main.124ed29b.js} | 2 +- docs/alpha-program.html | 4 ++-- docs/ambassadors.html | 4 ++-- docs/apps-index.html | 4 ++-- docs/bug-bounty.html | 4 ++-- docs/build-archive-index.html | 4 ++-- docs/build-client-index.html | 4 ++-- docs/build-client-side.html | 4 ++-- docs/build-dapp.html | 4 ++-- docs/build-data.html | 4 ++-- docs/build-guide.html | 4 ++-- docs/build-guides-coretime-start.html | 4 ++-- docs/build-guides-coretime-troubleshoot.html | 4 ++-- docs/build-guides-install-deps.html | 4 ++-- docs/build-guides-template-basic.html | 4 ++-- docs/build-hackathon.html | 4 ++-- docs/build-hrmp-channels.html | 4 ++-- docs/build-index.html | 4 ++-- docs/build-integrate-assets.html | 4 ++-- docs/build-integration.html | 4 ++-- docs/build-light-clients.html | 4 ++-- docs/build-network-overview.html | 4 ++-- docs/build-node-interaction.html | 4 ++-- docs/build-node-management.html | 4 ++-- docs/build-open-source.html | 4 ++-- docs/build-oracle.html | 4 ++-- docs/build-pdk.html | 4 ++-- docs/build-protocol-index.html | 4 ++-- docs/build-protocol-info.html | 4 ++-- docs/build-smart-contracts.html | 4 ++-- docs/build-storage.html | 4 ++-- docs/build-tools-index.html | 4 ++-- docs/build-transaction-construction.html | 4 ++-- docs/community-index.html | 4 ++-- docs/community.html | 4 ++-- docs/contributing.html | 4 ++-- docs/contributors.html | 4 ++-- docs/dashboards-index.html | 4 ++-- docs/decentralized-futures.html | 4 ++-- docs/decentralized-voices.html | 4 ++-- docs/dev-heroes.html | 4 ++-- docs/explore-index.html | 4 ++-- docs/faq.html | 4 ++-- docs/general-index.html | 4 ++-- docs/general/dune-analytics.html | 4 ++-- .../general/dune-analytics/acala-dashboards.html | 4 ++-- .../dune-analytics/assethub-dashboards.html | 4 ++-- .../general/dune-analytics/astar-dashboards.html | 4 ++-- .../dune-analytics/bifrost-dashboards.html | 4 ++-- .../dune-analytics/bridgehub-dashboards.html | 4 ++-- .../dune-analytics/centrifuge-dashboards.html | 4 ++-- .../dune-analytics/collectives-dashboards.html | 4 ++-- .../dune-analytics/coretime-dashboards.html | 4 ++-- .../dune-analytics/energywebx-dashboards.html | 4 ++-- .../dune-analytics/frequency-dashboards.html | 4 ++-- .../dune-analytics/hydration-dashboards.html | 4 ++-- .../dune-analytics/interlay-dashboards.html | 4 ++-- .../dune-analytics/invarch-dashboards.html | 4 ++-- .../dune-analytics/litentry-dashboards.html | 4 ++-- .../general/dune-analytics/manta-dashboards.html | 4 ++-- .../dune-analytics/moonbeam-dashboards.html | 4 ++-- .../dune-analytics/neuroweb-dashboards.html | 4 ++-- .../general/dune-analytics/nodle-dashboards.html | 4 ++-- .../dune-analytics/parachain-dashboards.html | 4 ++-- .../dune-analytics/pendulum-dashboards.html | 4 ++-- .../dune-analytics/people-dashboards.html | 4 ++-- .../general/dune-analytics/phala-dashboards.html | 4 ++-- .../dune-analytics/polimec-dashboards.html | 4 ++-- .../dune-analytics/polkadex-dashboards.html | 4 ++-- .../polkadot-dashboards-governance.html | 4 ++-- .../polkadot-dashboards-network.html | 4 ++-- .../polkadot-dashboards-overview.html | 4 ++-- .../polkadot-dashboards-staking.html | 4 ++-- .../dune-analytics/polkadot-dashboards.html | 4 ++-- .../polkadot-dot-ordinals.html | 4 ++-- .../polkadot-governance-dashboard.html | 4 ++-- .../polkadot-opengov-referenda-home.html | 4 ++-- ...kadot-opengov-referendum-voting-analysis.html | 4 ++-- ...lkadot-staking-dashboard-nomination-pool.html | 4 ++-- .../polkadot-staking-dashboard-nominators.html | 4 ++-- .../polkadot-staking-dashboard-pool-member.html | 4 ++-- .../polkadot-staking-dashboard-validators.html | 4 ++-- .../polkadot-staking-dashboard.html | 4 ++-- .../dune-analytics/snowbridge-dashboards.html | 4 ++-- .../dune-analytics/stellaswap-dashboards.html | 4 ++-- .../dune-analytics/unique-dashboards.html | 4 ++-- docs/general/dunesql-cheatsheet.html | 4 ++-- .../onboarding-status-and-key-dashboards.html | 4 ++-- docs/general/polkadot-ecosystem-overview.html | 4 ++-- docs/general/project-dashboards.html | 4 ++-- docs/getting-started.html | 4 ++-- docs/glossary.html | 4 ++-- docs/governance-apps.html | 4 ++-- docs/grants.html | 4 ++-- docs/how-to-dyor.html | 4 ++-- docs/kusama-adversarial-cheatsheet.html | 4 ++-- docs/kusama-bug-bounty.html | 4 ++-- docs/kusama-claims.html | 4 ++-- docs/kusama-coc.html | 4 ++-- docs/kusama-community.html | 4 ++-- docs/kusama-getting-started.html | 4 ++-- docs/kusama-index.html | 4 ++-- docs/kusama-parameters.html | 4 ++-- docs/kusama-social-recovery.html | 4 ++-- docs/kusama-timeline.html | 4 ++-- docs/learn-DOT.html | 4 ++-- docs/learn-account-abstraction.html | 4 ++-- docs/learn-account-advanced.html | 4 ++-- docs/learn-account-balances.html | 4 ++-- docs/learn-account-multisig.html | 4 ++-- docs/learn-accounts.html | 4 ++-- docs/learn-advanced-index.html | 4 ++-- docs/learn-agile-coretime-index.html | 4 ++-- docs/learn-agile-coretime.html | 4 ++-- docs/learn-architecture.html | 4 ++-- docs/learn-archive.html | 4 ++-- docs/learn-asset-conversion-assethub.html | 4 ++-- docs/learn-assets-index.html | 4 ++-- docs/learn-assets.html | 4 ++-- docs/learn-async-backing.html | 4 ++-- docs/learn-auction.html | 4 ++-- docs/learn-basics-index.html | 4 ++-- docs/learn-bridge-hub.html | 4 ++-- docs/learn-bridges.html | 4 ++-- docs/learn-collator.html | 4 ++-- docs/learn-comparisons-avalanche.html | 4 ++-- docs/learn-comparisons-cosmos.html | 4 ++-- docs/learn-comparisons-ethereum-2.html | 4 ++-- docs/learn-comparisons-index.html | 4 ++-- docs/learn-comparisons-kusama.html | 4 ++-- docs/learn-comparisons-rollups.html | 4 ++-- docs/learn-comparisons.html | 4 ++-- docs/learn-components-index.html | 4 ++-- docs/learn-consensus.html | 4 ++-- docs/learn-crowdloans.html | 4 ++-- docs/learn-cryptography.html | 4 ++-- docs/learn-dot-ksm-bridge.html | 4 ++-- docs/learn-elastic-scaling.html | 4 ++-- docs/learn-future-implementations-index.html | 4 ++-- docs/learn-guides-accounts-multisig.html | 4 ++-- docs/learn-guides-accounts-proxy-pure.html | 4 ++-- docs/learn-guides-accounts-proxy.html | 4 ++-- docs/learn-guides-accounts.html | 4 ++-- docs/learn-guides-asset-conversion.html | 4 ++-- docs/learn-guides-assets-create.html | 4 ++-- docs/learn-guides-assets-ledger.html | 4 ++-- docs/learn-guides-assets.html | 4 ++-- docs/learn-guides-bounties.html | 4 ++-- docs/learn-guides-bridges.html | 4 ++-- docs/learn-guides-coretime-marketplaces.html | 4 ++-- docs/learn-guides-coretime-parachains.html | 4 ++-- docs/learn-guides-dot-ksm-bridge.html | 4 ++-- docs/learn-guides-identity.html | 4 ++-- docs/learn-guides-ledger.html | 4 ++-- docs/learn-guides-nominator.html | 4 ++-- docs/learn-guides-polkadot-opengov.html | 4 ++-- docs/learn-guides-staking-pools.html | 4 ++-- docs/learn-guides-staking.html | 4 ++-- docs/learn-guides-transfers.html | 4 ++-- docs/learn-guides-treasury.html | 4 ++-- docs/learn-guides-vault.html | 4 ++-- docs/learn-hyperbridge.html | 4 ++-- docs/learn-identity.html | 4 ++-- docs/learn-implementations.html | 4 ++-- docs/learn-index.html | 4 ++-- docs/learn-inflation.html | 8 ++++---- docs/learn-jam-chain.html | 4 ++-- docs/learn-jam-faq.html | 4 ++-- docs/learn-jam.html | 4 ++-- docs/learn-nft-pallets.html | 4 ++-- docs/learn-nft-projects.html | 4 ++-- docs/learn-nft.html | 4 ++-- docs/learn-nomination-pools.html | 4 ++-- docs/learn-nominator.html | 16 ++++++++-------- docs/learn-offenses.html | 4 ++-- docs/learn-parachains-faq.html | 4 ++-- docs/learn-parachains-index.html | 4 ++-- docs/learn-parachains-protocol.html | 4 ++-- docs/learn-parachains.html | 4 ++-- docs/learn-participants-index.html | 4 ++-- docs/learn-phragmen.html | 4 ++-- docs/learn-polkadot-host.html | 4 ++-- docs/learn-polkadot-js-guides.html | 4 ++-- docs/learn-polkadot-opengov-index.html | 4 ++-- docs/learn-polkadot-opengov-origins.html | 4 ++-- docs/learn-polkadot-opengov-treasury.html | 6 +++--- docs/learn-polkadot-opengov.html | 4 ++-- docs/learn-polkadot-technical-fellowship.html | 4 ++-- docs/learn-polkadotjs.html | 4 ++-- docs/learn-proxies-pure.html | 4 ++-- docs/learn-proxies.html | 4 ++-- docs/learn-runtime-upgrades.html | 4 ++-- docs/learn-safrole.html | 4 ++-- docs/learn-scams.html | 4 ++-- docs/learn-spree.html | 4 ++-- docs/learn-staking-advanced.html | 8 ++++---- docs/learn-staking-index.html | 4 ++-- docs/learn-staking.html | 12 ++++++------ docs/learn-system-chains.html | 4 ++-- docs/learn-teleport.html | 4 ++-- docs/learn-transaction-fees.html | 4 ++-- docs/learn-transactions.html | 4 ++-- docs/learn-validator.html | 4 ++-- docs/learn-video-tutorials.html | 4 ++-- docs/learn-wasm.html | 4 ++-- docs/learn-xcm-index.html | 4 ++-- docs/learn-xcm-instructions.html | 4 ++-- docs/learn-xcm-pallet.html | 4 ++-- docs/learn-xcm-transport.html | 4 ++-- docs/learn-xcm-usecases.html | 4 ++-- docs/learn-xcm.html | 4 ++-- docs/learn-xcvm.html | 4 ++-- docs/learn/learn-controller.html | 4 ++-- docs/learn/learn-governance.html | 4 ++-- docs/learn/learn-launch.html | 4 ++-- docs/learn/learn-redenomination.html | 4 ++-- docs/learn/learn-treasury.html | 4 ++-- docs/learn/xcm.html | 4 ++-- docs/learn/xcm/config-deep-dive.html | 4 ++-- docs/learn/xcm/fundamentals-fees.html | 4 ++-- docs/learn/xcm/fundamentals-multiasset.html | 4 ++-- docs/learn/xcm/fundamentals-summary.html | 4 ++-- docs/learn/xcm/fundamentals-xcvm.html | 4 ++-- docs/learn/xcm/fundamentals.html | 4 ++-- .../xcm/fundamentals/multilocation-example.html | 4 ++-- .../fundamentals/multilocation-junctions.html | 4 ++-- .../xcm/fundamentals/multilocation-summary.html | 4 ++-- docs/learn/xcm/fundamentals/multilocation.html | 4 ++-- docs/learn/xcm/introduction.html | 4 ++-- docs/learn/xcm/journey-assets.html | 4 ++-- docs/learn/xcm/journey-channels.html | 4 ++-- docs/learn/xcm/journey-expectations.html | 4 ++-- docs/learn/xcm/journey-fees.html | 4 ++-- docs/learn/xcm/journey-holding.html | 4 ++-- docs/learn/xcm/journey-locks.html | 4 ++-- docs/learn/xcm/journey-origin.html | 4 ++-- docs/learn/xcm/journey-queries.html | 4 ++-- docs/learn/xcm/journey-register.html | 4 ++-- docs/learn/xcm/journey-summary.html | 4 ++-- docs/learn/xcm/journey-transact.html | 4 ++-- docs/learn/xcm/journey-version.html | 4 ++-- docs/learn/xcm/journey.html | 4 ++-- docs/learn/xcm/journey/transfers-reserve.html | 4 ++-- docs/learn/xcm/journey/transfers-summary.html | 4 ++-- docs/learn/xcm/journey/transfers-teleport.html | 4 ++-- docs/learn/xcm/journey/transfers.html | 4 ++-- docs/learn/xcm/overview-architecture.html | 4 ++-- docs/learn/xcm/overview-format.html | 4 ++-- docs/learn/xcm/overview-intro.html | 4 ++-- docs/learn/xcm/overview-summary.html | 4 ++-- docs/learn/xcm/overview-xcvm.html | 4 ++-- docs/learn/xcm/overview.html | 4 ++-- docs/learn/xcm/quickstart-first-look.html | 4 ++-- docs/learn/xcm/quickstart-simulator.html | 4 ++-- docs/learn/xcm/quickstart-summary.html | 4 ++-- docs/learn/xcm/quickstart.html | 4 ++-- docs/learn/xcm/reference-glossary.html | 4 ++-- docs/learn/xcm/reference-xcvm-registers.html | 4 ++-- docs/learn/xcm/references.html | 4 ++-- docs/learn/xcm/testing.html | 4 ++-- docs/ledger.html | 4 ++-- docs/maintain-archive.html | 4 ++-- docs/maintain-bootnode.html | 4 ++-- docs/maintain-collator-index.html | 4 ++-- docs/maintain-endpoints.html | 4 ++-- docs/maintain-errors.html | 4 ++-- docs/maintain-guides-async-backing.html | 4 ++-- docs/maintain-guides-how-to-chill.html | 4 ++-- ...maintain-guides-how-to-monitor-your-node.html | 4 ++-- docs/maintain-guides-how-to-stop-validating.html | 4 ++-- docs/maintain-guides-how-to-systemd.html | 4 ++-- docs/maintain-guides-how-to-upgrade.html | 4 ++-- docs/maintain-guides-how-to-validate-kusama.html | 4 ++-- ...maintain-guides-how-to-validate-polkadot.html | 8 ++++---- docs/maintain-guides-secure-validator.html | 4 ++-- docs/maintain-guides-society-kusama.html | 4 ++-- docs/maintain-guides-validator-community.html | 4 ++-- docs/maintain-guides-validator-payout.html | 4 ++-- docs/maintain-index.html | 4 ++-- docs/maintain-networks.html | 4 ++-- docs/maintain-node-index.html | 4 ++-- docs/maintain-polkadot-parameters.html | 4 ++-- docs/maintain-rpc.html | 4 ++-- docs/maintain-sync.html | 4 ++-- docs/maintain-validator-index.html | 4 ++-- docs/maintain-wss.html | 4 ++-- docs/maintain/maintain-guides-democracy.html | 4 ++-- .../maintain-guides-how-to-join-council.html | 4 ++-- .../maintain-guides-how-to-vote-councillor.html | 4 ++-- docs/metadata.html | 4 ++-- docs/multisig-apps.html | 4 ++-- docs/parachains-apps.html | 4 ++-- docs/parity-data-dashboards.html | 4 ++-- docs/polkadot-direction.html | 4 ++-- docs/polkadot-v1.html | 4 ++-- docs/polkadot-vault.html | 4 ++-- docs/polkadot-vision-index.html | 4 ++-- docs/polkadotjs-ui.html | 4 ++-- docs/polkadotjs.html | 8 ++++---- docs/programs-index.html | 4 ++-- docs/research.html | 4 ++-- docs/staking-apps.html | 8 ++++---- docs/staking-dashboard.html | 16 ++++++++-------- docs/start-building.html | 4 ++-- docs/stay-safe-index.html | 4 ++-- docs/thousand-contributors.html | 4 ++-- docs/thousand-validators.html | 4 ++-- docs/transaction-attacks.html | 4 ++-- docs/wallets-and-extensions.html | 4 ++-- docs/wallets-index.html | 4 ++-- docs/web3-and-polkadot.html | 4 ++-- index.html | 4 ++-- search.html | 4 ++-- 331 files changed, 663 insertions(+), 663 deletions(-) create mode 100644 assets/js/12331e8b.4e1881d4.js delete mode 100644 assets/js/12331e8b.f30c3f90.js create mode 100644 assets/js/1646726c.a29d1e22.js delete mode 100644 assets/js/1646726c.b7063abf.js create mode 100644 assets/js/386099fc.2b231c32.js delete mode 100644 assets/js/386099fc.5c4f2962.js delete mode 100644 assets/js/41b7b3e8.0499e4ef.js create mode 100644 assets/js/41b7b3e8.164ce82d.js create mode 100644 assets/js/6d5c9a28.1b52fa22.js delete mode 100644 assets/js/6d5c9a28.39f85d55.js rename assets/js/{8d3a1bf8.883fda68.js => 8d3a1bf8.065e7f7b.js} (77%) create mode 100644 assets/js/a74a59a0.50f0f645.js delete mode 100644 assets/js/a74a59a0.fae2510e.js create mode 100644 assets/js/b0cbc1d4.2355700b.js delete mode 100644 assets/js/b0cbc1d4.87ba95d0.js create mode 100644 assets/js/ff6596ea.9803ce8e.js delete mode 100644 assets/js/ff6596ea.fc33edf9.js rename assets/js/{runtime~main.0860cc54.js => runtime~main.124ed29b.js} (85%) diff --git a/404.html b/404.html index 0c587a53b27a..3f886d565838 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/js/12331e8b.4e1881d4.js b/assets/js/12331e8b.4e1881d4.js new file mode 100644 index 000000000000..025700d48c56 --- /dev/null +++ b/assets/js/12331e8b.4e1881d4.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 i(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):i(i({},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=r(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,i(i({ref:t},d),{},{components:a})):n.createElement(k,i({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=a.length,i=new Array(s);i[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,i[1]=r;for(var p=2;p{a.d(t,{Z:()=>o});var n=a(67294);const o=function(e){var t,a=e.message,o=(0,n.useState)(!0),s=o[0],i=o[1];return n.createElement(n.Fragment,null,s&&n.createElement("div",{className:"message-box"},n.createElement("button",{className:"close-button",onClick:function(){i(!1)}},"\u2716 "),n.createElement("div",{className:"message-content",dangerouslySetInnerHTML:{__html:(t=a,t.replace(/\[(.*?)\]\((.*?)\)/g,'$1'))}})))}},67881:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>m,frontMatter:()=>l,metadata:()=>d,toc:()=>h});var n=a(87462),o=a(63366),s=(a(67294),a(3905)),i=a(35703),r=["components"],l={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"},p=void 0,d={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:1719391505,formattedLastUpdatedAt:"Jun 26, 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"}},c={},h=[{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}],u={toc:h},k="wrapper";function m(e){var t=e.components,l=(0,o.Z)(e,r);return(0,s.kt)(k,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,s.kt)(i.Z,{message:"Polkadot-JS is for developers and power users only. If you need help using the\n[Polkadot-JS UI](/docs/polkadotjs-ui), you can contact the\n[Polkadot Support Team](https://support.polkadot.network/support/home). For more user-friendly tools\nsee the [wallets](./wallets-index), [apps](./apps-index) and [dashboard](./dashboards-index) pages.",mdxType:"MessageBox"}),(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.cloud/#/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."))}m.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.f30c3f90.js b/assets/js/12331e8b.f30c3f90.js deleted file mode 100644 index c6e5575cfc3d..000000000000 --- a/assets/js/12331e8b.f30c3f90.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 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.d(t,{Z:()=>o});var n=a(67294);const o=function(e){var t,a=e.message,o=(0,n.useState)(!0),s=o[0],r=o[1];return n.createElement(n.Fragment,null,s&&n.createElement("div",{className:"message-box"},n.createElement("button",{className:"close-button",onClick:function(){r(!1)}},"\u2716 "),n.createElement("div",{className:"message-content",dangerouslySetInnerHTML:{__html:(t=a,t.replace(/\[(.*?)\]\((.*?)\)/g,'$1'))}})))}},67881:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>m,frontMatter:()=>l,metadata:()=>d,toc:()=>h});var n=a(87462),o=a(63366),s=(a(67294),a(3905)),r=a(35703),i=["components"],l={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"},p=void 0,d={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:1714545713,formattedLastUpdatedAt:"May 1, 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"}},c={},h=[{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}],u={toc:h},k="wrapper";function m(e){var t=e.components,l=(0,o.Z)(e,i);return(0,s.kt)(k,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,s.kt)(r.Z,{message:"Polkadot-JS is for developers and power users only. If you need help using the\n[Polkadot-JS UI](/docs/polkadotjs-ui), you can contact the\n[Polkadot Support Team](https://support.polkadot.network/support/home). For more user-friendly tools\nsee the [wallets](./wallets-index), [apps](./apps-index) and [dashboard](./dashboards-index) pages.",mdxType:"MessageBox"}),(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."))}m.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/1646726c.a29d1e22.js b/assets/js/1646726c.a29d1e22.js new file mode 100644 index 000000000000..7b9e40d18abd --- /dev/null +++ b/assets/js/1646726c.a29d1e22.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[2169],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(9712),l=a(67425);function d(e,t,a){return h.apply(this,arguments)}function h(){return(h=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var i,l,d,h,c;return(0,n.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 d=new r.U(i),e.next=21,s.G.create({provider:d});case 21:h=e.sent,(c=a.split(".")).forEach((function(e){e in h&&(h=h[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=h.toString(),e.abrupt("break",35);case 29:return e.next=31,h();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(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,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,h=(0,i.useState)(""),p=h[0],u=h[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?c(r.toString(),l,t,u):u(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;case"kusama-people":e="wss://kusama-people-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,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,d(t,a,u);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(o,l,t,u):u(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="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 l=void 0;if(r===t||r===o)l=3;else{if(r!==a&&r!==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/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===o)s=1;else{if(r!==a&&r!==n)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())}}},78381:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>m,frontMatter:()=>l,metadata:()=>h,toc:()=>p});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-staking",title:"Introduction to Staking",sidebar_label:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","faq"],slug:"../learn-staking"},d=void 0,h={unversionedId:"learn/learn-staking",id:"learn/learn-staking",title:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",source:"@site/../docs/learn/learn-staking.md",sourceDirName:"learn",slug:"/learn-staking",permalink:"/docs/learn-staking",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-staking.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1719391505,formattedLastUpdatedAt:"Jun 26, 2024",frontMatter:{id:"learn-staking",title:"Introduction to Staking",sidebar_label:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","faq"],slug:"../learn-staking"},sidebar:"docs",previous:{title:"Staking",permalink:"/docs/learn-staking-index"},next:{title:"Nomination Pools",permalink:"/docs/learn-nomination-pools"}},c={},p=[{value:"Proof-of-Stake (PoS)",id:"proof-of-stake-pos",level:2},{value:"Nominated Proof-of-Stake (NPoS)",id:"nominated-proof-of-stake-npos",level:2},{value:"Nominating Validators",id:"nominating-validators",level:3},{value:"Eras and Sessions",id:"eras-and-sessions",level:3},{value:"Staking Rewards",id:"staking-rewards",level:3},{value:"Skin in the game when Staking",id:"skin-in-the-game-when-staking",level:3},{value:"Being a Nominator",id:"being-a-nominator",level:2},{value:"Tasks and Responsibilities of a Nominator",id:"tasks-and-responsibilities-of-a-nominator",level:3},{value:"Selection of Validators",id:"selection-of-validators",level:3},{value:"Validator Selection Criteria",id:"validator-selection-criteria",level:4},{value:"Network Providers",id:"network-providers",level:4},{value:"Keeping Track of Nominated Validators",id:"keeping-track-of-nominated-validators",level:4},{value:"Stash Account and Staking Proxy",id:"stash-account-and-staking-proxy",level:3},{value:"Claiming Staking Rewards",id:"claiming-staking-rewards",level:3},{value:"Chilling",id:"chilling",level:3},{value:"Fast Unstake",id:"fast-unstake",level:3},{value:"Why and Why not to Stake?",id:"why-and-why-not-to-stake",level:2},{value:"Pros of Staking",id:"pros-of-staking",level:3},{value:"Cons of Staking",id:"cons-of-staking",level:3},{value:"Unbonding Period Length",id:"unbonding-period-length",level:4},{value:"How many Validators?",id:"how-many-validators",level:2},{value:"Why am I not receiving rewards?",id:"why-am-i-not-receiving-rewards",level:2},{value:"Staking FAQ",id:"staking-faq",level:2},{value:"Resources",id:"resources",level:2}],u={toc:p},k="wrapper";function m(e){var t=e.components,l=(0,o.Z)(e,s);return(0,i.kt)(k,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Explore Polkadot with a secure and user-friendly wallets listed on the\n",(0,i.kt)("a",{parentName:"p",href:"https://www.polkadot.network/ecosystem/wallets/"},"Polkadot website")," and start your staking journey\nor explore more information about staking on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Staking Page"),". Discover the new\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/#/overview"},"Staking Dashboard")," that makes staking much easier and\ncheck this\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started. The dashboard supports ",(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger")," devices natively and\ndoes not require an extension or wallet as an interface.")),(0,i.kt)("admonition",{title:"Stake through Nomination Pools",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum amount required to become an active nominator and earn rewards may change from era to\nera.\nIt is currently ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minimumActiveStake",defaultValue:502e10,filter:"humanReadable",mdxType:"RPC"})),".\n","\nIf you have less DOT than the minimum active\nnomination and still want to participate in staking, you can join the nomination pools. You can now\nstake on Polkadot natively with just\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"})),"\n","\nin the nomination pools and earn staking rewards. For additional information, check out\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".\nCheck the wiki doc on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools")," for more information.")),(0,i.kt)("p",null,"Here you will learn about what staking is, why it is important and how it works on\nPolkadot."),(0,i.kt)("h2",{id:"proof-of-stake-pos"},"Proof-of-Stake (PoS)"),(0,i.kt)("p",null,"Blockchain networks use ",(0,i.kt)("a",{parentName:"p",href:"/docs/faq#why-do-we-need-consensus"},"consensus")," mechanisms to\nfinalize blocks on the chain. Consensus is the process of agreeing on something, in this case, the\nprogression of the blockchain or how blocks are added to the chain. Consensus consists of two\nactions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Block production"),", i.e. the way multiple blocks candidates are produced, and"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Block finality"),", i.e. the way only one block out of many candidates is selected and added to\nthe canonical chain (see ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-consensus/#probabilistic-vs-provable-finality"},"this")," article\nfor more information about finality).")),(0,i.kt)("p",null,"Proof-of-Work (PoW) and Proof-of-Stake (PoS) are well-known mechanisms used to reach consensus in a\nsecure and trustless way on public blockchains, where there are many participants who do not know\neach other (and probably never will). In PoW, network security relies on the fact that the miners\nwho are responsible for adding blocks to the chain must compete to solve difficult mathematic\npuzzles to add blocks - a solution that has been criticized for the wastage of energy. For doing\nthis work, miners are typically rewarded with tokens."),(0,i.kt)("p",null,"In PoS networks like Polkadot the security of\nthe network depends on the amount of capital locked on the chain: the more the capital locked, the\nlower the chance of an attack on the network, as the attacker needs to incur a heavy loss to\norchestrate a successful attack (more on this later on). The process of locking tokens on the chain\nis called ",(0,i.kt)("strong",{parentName:"p"},"staking"),"."),(0,i.kt)("p",null,"Similar to the miners in PoW networks, PoS networks have ",(0,i.kt)("strong",{parentName:"p"},"validators"),", but they do not have to\ncompete with each other to solve mathematical puzzles. They are instead pre-selected to produce the\nblocks based on the stake backing them. Token holders can lock funds on the chain and for doing so,\nthey are getting ",(0,i.kt)("strong",{parentName:"p"},"staking rewards"),". There is thus an economic incentive for token holders to\nbecome active participants who contribute to the economic security and stability of the network. PoS\nnetworks in general are therefore more inclusive than PoW networks, as participants do not need to\nhave either technical knowledge about blockchain technology or experience in running mining\nequipment."),(0,i.kt)("p",null,'PoS ensures that everybody participating in the staking process has "skin in the game" and thus can\nbe held accountable. In case of misbehavior, participants in the staking process can be punished or\n',(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},(0,i.kt)("strong",{parentName:"a"},"slashed")),", and depending on the gravity of the situation, their stake can\nbe partly or fully confiscated by the network. It is not in a staker's economic interest to\norchestrate an attack and risk losing tokens. Any rational actor staking on the network would want\nto get rewarded, and the PoS network rewards good behavior and punishes bad behavior."),(0,i.kt)("h2",{id:"nominated-proof-of-stake-npos"},"Nominated Proof-of-Stake (NPoS)"),(0,i.kt)("p",null,"Polkadot implements\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#nominated-proof-of-stake"},"Nominated Proof-of-Stake (NPoS)"),", a relatively novel\nand sophisticated mechanism to select the validators who are allowed to participate in its\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus"},"consensus")," protocol. NPoS encourages\nDOT holders to participate as ",(0,i.kt)("strong",{parentName:"p"},"nominators"),"."),(0,i.kt)("p",null,"Any potential validators can indicate their intention to be a validator candidate. Their candidacies\nare made public to all nominators, and a nominator, in turn, submits a list of up to\n16 candidates that it supports, and the network\nwill automatically distribute the stake among validators in an even manner so that the economic\nsecurity is maximized. In the next era, a certain number of validators having the most\nDOT backing get elected and become active. For\nmore information about the election algorithm go to ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"this")," page on the wiki or\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Paper"},"this")," research article. As a\nnominator, a minimum of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nis required to submit an intention to nominate, which can be thought of as registering to be a\nnominator. Note that in NPoS the stake of both nominators and validators can be\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashed"),". For an in-depth review of NPoS see\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Overview"},"this")," research article."),(0,i.kt)("admonition",{title:"Minimum Nomination to Receive Staking Rewards",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Although the minimum nomination intent is\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),",\n","\nit does not guarantee staking rewards. The nominated amount has to be greater than\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator#minimum-active-nomination-to-receive-staking-rewards"},"minimum active nomination"),",\nwhich is a dynamic value that can be much higher than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),".\n","\nThis dynamic value depends on the amount of DOT\nbeing staked, in addition to the selected nominations.")),(0,i.kt)("h3",{id:"nominating-validators"},"Nominating Validators"),(0,i.kt)("p",null,"Nominating on Polkadot requires 2 actions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Locking tokens on-chain."),(0,i.kt)("li",{parentName:"ul"},"Selecting a set of validators, to whom these locked tokens will automatically be allocated to.")),(0,i.kt)("p",null,"How many tokens you lock up is completely up to you - as are the validators you wish to select. The\naction of locking tokens is also known as ",(0,i.kt)("strong",{parentName:"p"},"bonding"),". You can also refer to your locked tokens as\nyour bonded tokens, or staked tokens. Likewise, selecting validators is also known as backing or\nnominating validators. These terms are used interchangeably by the community. From now on locked\ntokens will be referred to as bonded tokens."),(0,i.kt)("p",null,"Once the previous 2 steps are completed and you are nominating, your bonded tokens could be\nallocated to one or more of your selected validators, and this happens every time the active\nvalidator set changes. This validator set is updated every era on\nPolkadot."),(0,i.kt)("p",null,"Unlike other staking systems, Polkadot\nautomatically chooses which of your selected validators will be backed by your bonded tokens.\nSelecting a group of validators increases your chances of consistently backing at least one who is\nactive. This results in your bonded tokens being allocated to validators more often, which means\nmore network security and more rewards. This is in strong contrast to other staking systems that\nonly allow you to back one validator; if that validator is not active, you as a staker will also not\nbe. Polkadot's nomination model solves this."),(0,i.kt)("p",null,"Polkadot uses tools ranging from election\ntheory to game theory to discrete optimization, to develop an efficient validator selection process\nthat offers fair representation and security, thus avoiding uneven power and influence among\nvalidators. The election algorithms used by\nPolkadot are based on the Proportional\nJustified Representation (PJR) methods like ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragmen"),". For more information\nabout PJR methods visit ",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Overview"},"this"),"\nresearch article."),(0,i.kt)("h3",{id:"eras-and-sessions"},"Eras and Sessions"),(0,i.kt)("p",null,"The stake from nominators is used to increase the number of tokens held by such candidates,\nincreasing their chance of being selected by the election algorithm for block production during a\nspecific ",(0,i.kt)("strong",{parentName:"p"},"era"),". An era is a period of 24 hours\nduring which an ",(0,i.kt)("strong",{parentName:"p"},"active set")," of validators is producing blocks and performing other actions on the\nchain. This means that not all validators are in the active set and such set changes between eras.\nEach era is divided into 6 epochs or ",(0,i.kt)("strong",{parentName:"p"},"sessions")," during which validators are assigned as block\nproducers to specific time frames or ",(0,i.kt)("strong",{parentName:"p"},"slots"),". This means that validators know the slots when they\nwill be required to produce a block within a specific session, but they do not know all the slots\nwithin a specific era. Having sessions adds a layer of security because it decreases the chance of\nhaving multiple validators assigned to a slot colluding to harm the network."),(0,i.kt)("h3",{id:"staking-rewards"},"Staking Rewards"),(0,i.kt)("p",null,"Validators who produce a block are rewarded with tokens, and they can share rewards with their\nnominators. Both validators and nominators can stake their tokens on chain and receive staking\nrewards at the end of each era. The staking system pays out rewards equally to all validators\nregardless of stake. Thus, having more stake in a validator does not influence the amount of block\nrewards it receives. This avoids the centralization of power to a few validators. There is a\nprobabilistic component in the calculation of rewards, so they may not be exactly equal for all\nvalidators. In fact, during each era validators can earn ",(0,i.kt)("strong",{parentName:"p"},"era points")," by doing different tasks on\nchain. The more the points, the higher the reward for a specific era. This promotes validators'\nactivity on chain. To know more about era points, and how and on which basis they are distributed\nvisit the ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"dedicated page"),". Distribution of the\nrewards is pro-rata to all stakers after the validator's commission is deducted."),(0,i.kt)("h3",{id:"skin-in-the-game-when-staking"},"Skin in the game when Staking"),(0,i.kt)("p",null,"The security of PoS networks depends on the amount of staked tokens. To successfully attack the\nnetwork, a malicious actor would need to accrue a large number of tokens or would need different\nparticipants to collude and act maliciously. If there is an attack in the case of NPoS, both the\nvalidator(s) and nominators will be slashed resulting in their stake being partially or fully\nconfiscated by the network and then deposited to the treasury. There is little interest for a\nrational network participant to act in a harmful way because NPoS ensures that all participants can\nbe held accountable for their bad actions. In NPoS, validators are paid equal rewards regardless of\nthe amount of stake backing them, thus avoiding large payouts to few large validators which might\nlead to centralization."),(0,i.kt)("h2",{id:"being-a-nominator"},"Being a Nominator"),(0,i.kt)("h3",{id:"tasks-and-responsibilities-of-a-nominator"},"Tasks and Responsibilities of a Nominator"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Validators.")," Since validator slots are limited, most of those who wish to stake their\nDOT and contribute to the economic security of\nthe network will be nominators, thus here we focus on the role of nominators. However, it is worth\nmentioning that validators do most of the heavy lifting: they run the validator nodes and manage\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/keys/session"},"session keys"),", produce new block\ncandidates in ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#block-production-babe"},"BABE"),", vote and come to consensus in\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#finality-gadget-grandpa"},"GRANDPA"),", validate the state transition function of\nparachains, and possibly some other responsibilities regarding data availability and\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCM"),". For more information, you can take a look at the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-validator"},"validator docs")," to understand what you need to do as a validator. If you want\nto become a validator you can consult\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot"},"this")," guide."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Nominators.")," Nominators have far fewer responsibilities than validators. These include selecting\nvalidators and monitoring their performance, keeping an eye on changing commission rates (a\nvalidator can change commission at any time), and general health monitoring of their validators'\naccounts. Thus, while not being completely set-it-and-forget-it, a nominator's experience is\nrelatively hands-off compared to that of a validator, and even more with\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools"),". For more information, you can take a look at the\nnominator ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"guide")," to understanding your responsibilities as a nominator."),(0,i.kt)("p",null,"If you want to become a nominator, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"this")," guide. If you are a\nbeginner and would like to securely stake your tokens using the Polkadot-JS UI, refer to\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-how-do-i-stake-nominate-on-polkadot-"},"this"),"\nsupport article.\n"),(0,i.kt)("admonition",{title:"Polkadot Staking Dashboard",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/dashboard/#/overview"},"Staking Dashboard")," provides a more\nuser-friendly alternative to staking. See the instructions in\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182133-how-to-use-the-staking-dashboard-staking-your-dot"},"this"),"\nsupport article to learn how to stake with the dashboard.")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Pools."),' Pools are "built" on top of NPoS to provide a very low barrier to entry to staking,\nwithout sacrificing Polkadot\'s strict security model.'),(0,i.kt)("h3",{id:"selection-of-validators"},"Selection of Validators"),(0,i.kt)("p",null,"The task of choosing validators is not simple, as it should take into account nominator reward and\nrisk preferences. Ideally one aims to maximize the reward-to-risk ratio by maximizing rewards and\nminimizing risks, with sometimes having to compromise between the two, as minimizing risks might\ndecrease rewards as well. Nominators should pay attention, especially to six criteria when\nnominating validators (not in order of importance):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"recent history of the era points earned across eras"),(0,i.kt)("li",{parentName:"ul"},"validator's self stake (shows skin in the game)"),(0,i.kt)("li",{parentName:"ul"},"total stake backing the validator (which is the sum of self stake and the stake coming from\nnominators)"),(0,i.kt)("li",{parentName:"ul"},"commission fees (i.e. how much validators charge nominators)"),(0,i.kt)("li",{parentName:"ul"},"verified identity"),(0,i.kt)("li",{parentName:"ul"},"previous slashes")),(0,i.kt)("p",null,"The diagram below shows how the selection of those criteria affects the reward-to-risk ratio."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rewards and risks diagram",src:a(89303).Z,width:"1920",height:"800"})),(0,i.kt)("h4",{id:"validator-selection-criteria"},"Validator Selection Criteria"),(0,i.kt)("p",null,"To maximize rewards and minimize risk, one could select those validators that:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"have era points above average (because they will get more rewards for being active),"),(0,i.kt)("li",{parentName:"ul"},"have the total stake backing the validator below the average active validator stake (because they\nwill pay out more rewards per staked DOT),"),(0,i.kt)("li",{parentName:"ul"},"have high own stake (because if slashed they have something to lose),"),(0,i.kt)("li",{parentName:"ul"},"have low commission fees but not 0% (because it makes sense that for doing the heavy lifting,\nvalidators ask for a small commission),"),(0,i.kt)("li",{parentName:"ul"},"have on-chain registered identity (because it adds a layer of trust and possibly provides access\nto their website and contact details),"),(0,i.kt)("li",{parentName:"ul"},"and have not been slashed (meaning that their on-chain behavior is genuine).")),(0,i.kt)("h4",{id:"network-providers"},"Network Providers"),(0,i.kt)("p",null,"For successful operation, a Validator node should always be ensured to meet the required\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot#reference-hardware"},"software, hardware, and network bandwidth specifications"),".\nUnderstandably, most of the validator nodes run on cloud service providers that guarantee high\nhardware specifications and high levels of availability and connectivity. Keep in mind that a\nvalidator in the active set is supposed to be fully online and available for producing blocks. If\nthe active validator node goes offline due to network interruptions or a power outage, that\nvalidator will get fewer rewards."),(0,i.kt)("admonition",{title:"Checking Validators using Network Providers",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"You can connect your stash account to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkawatch.app/"},"Polkawatch app"),". The app will\nshow your rewards earned in the past 60 eras divided by network provider and country. You will be\nable to see networks used by each validator and verify if your validators are using providers who\nsupport PoS. This is also a great tool to explore how decentralized your nominations are and act\naccordingly.")),(0,i.kt)("h4",{id:"keeping-track-of-nominated-validators"},"Keeping Track of Nominated Validators"),(0,i.kt)("admonition",{title:"Nominators must periodically check their validators",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Nominating is ",(0,i.kt)("em",{parentName:"p"},"not"),' a "set and forget" operation. The whole NPoS system is dynamic and nominators\nshould periodically monitor the performance and reputation of their validators. Failing to do so\ncould result in applied slashes and/or rewards not being paid out, possibly for a prolonged period.')),(0,i.kt)("p",null,"Although the theory can be used as a general guideline, in practice it is more complicated and\nfollowing the theory might not necessarily lead to the desired result. Validators might have the\ntotal stake backing them below average, low commission and above average era points in one era and\nthen have a different profile in the next one. Selection based on the criteria like on-chain\nidentity, slash history and low commission make the staking rewards deterministic. But some criteria\nvary more than others, with era points being the most variable and thus one of the key probabilistic\ncomponents of staking rewards. Part of this probability is directly related to the fact that a\nvalidator can produce blocks for a parachain (i.e. para-validators) or the relay chain, with\npara-validators earning more era points per unit time (see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout#era-points"},"this")," page for more information). The\nrole can switch between sessions, and you can look at\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"the staking tab on the Polkadot-JS UI")," to know which\nvalidator is producing blocks for the relay chain or parachains."),(0,i.kt)("p",null,"It is not recommended to change nominations because of the low era points of a validator in a single\nera. Variability in rewards due to the era points should level out over time. If a validator\nconsistently gets era points below average, it makes sense to nominate a better-performing validator\nfor the health of the network and increased staking rewards. See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000150130-how-do-i-know-which-validators-to-choose-"},"this"),"\nsupport article to understand in detail how to select the set of validators to nominate."),(0,i.kt)("h3",{id:"stash-account-and-staking-proxy"},"Stash Account and Staking Proxy"),(0,i.kt)("p",null,"Two different accounts can be used to securely manage your funds while staking."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Stash:")," This account holds funds bonded for staking, but delegates all staking functions to a\nstaking proxy account. You may actively participate in staking with a stash private key kept in a\ncold wallet like Ledger, meaning it stays offline all the time. Having a staking proxy will allow\nyou to sign all staking-related transactions with the proxy instead of using your Ledger device.\nThis will allow you:"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"to avoid carrying around your Ledger device just to sign staking-related transactions, and"),(0,i.kt)("li",{parentName:"ul"},"to and to keep the transaction history of your stash clean"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Staking Proxy:")," This account acts on behalf of the stash account, signalling decisions about\nnominating and validating. It can set preferences like commission (for validators) and the staking\nrewards payout account. The earned rewards can be bonded (locked) immediately for bonding on your\nstash account, which would effectively compound the rewards you receive over time. You could also\nchoose to have them deposited to a different account as a free (transferable) balance. If you are\na validator, it can also be used to set your ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography"},"session keys"),". Staking\nproxies only need sufficient funds to pay for the transaction fees."))),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},'Never leave a high balance on a proxy account which are usually "hot" as their private key is stored\non the device (PC, phone) and it is always exposed to the internet for potential hacks and scams. It\nis good practice to deposit rewards on the stash account or to send them to another account on a\ncold wallet.')),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"staking",src:a(4080).Z,width:"1920",height:"800"})),(0,i.kt)("p",null,"This hierarchy of separate keys for stash and staking accounts was designed to add a layer of\nprotection to nominators and validator operators. The more often one exposes and uses a private key,\nthe higher its vulnerability for hacks or scams. So, if one uses a key for multiple roles on a\nblockchain network, it is likely that the account can get compromised. Note that the damage linked\nto stolen private keys is different depending on the type of account derivation. In the case of soft\nderivation, all derived accounts are compromised. More information about account derivation can be\nfound ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts/#derivation-paths"},"here"),"."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For Ledger users staking directly on Ledger Live, currently, there is no option to use separate\nstash and staking proxy accounts."),(0,i.kt)("p",{parentName:"admonition"},"Ledger devices are now supported in ",(0,i.kt)("a",{parentName:"p",href:"https://www.subwallet.app/download.html"},"SubWallet")," and\n",(0,i.kt)("a",{parentName:"p",href:"https://talisman.xyz/"},"Talisman")," extension. Users can import their Ledger accounts in the extension\nand use them as a stash in staking. You can find more information about SubWallet, Talisman and\nother wallets that officially secured funding from the treasury\n",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"here"),".")),(0,i.kt)("h3",{id:"claiming-staking-rewards"},"Claiming Staking Rewards"),(0,i.kt)("p",null,""),(0,i.kt)("p",null,"Rewards are calculated per era (approximately six hours on Kusama and twenty-four hours on\nPolkadot). These rewards are calculated based on era points, which have a probabilistic component.\nIn other words, there may be slight differences in your rewards from era to era, and even amongst\nvalidators in the active set at the same time. These variations should cancel out over a long enough\ntimeline. See the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"Validator Payout Guide"),"."),(0,i.kt)("p",null,"The distribution of staking rewards to the nominators is not automatic and needs to be triggered by\nsomeone. Typically the validators take care of this, but anyone can permissionlessly trigger rewards\npayout for all the nominators whose stake has backed a specific validator in the active set of that\nera. Staking rewards are kept available for 84 eras. The following calculation can be used to\napproximate this length in days on Polkadot:"),(0,i.kt)("p",null,"",(0,i.kt)("inlineCode",{parentName:"p"},"84 eras")," \xd7 ",(0,i.kt)("inlineCode",{parentName:"p"},"24 hours in a single era")," \xf7 ",(0,i.kt)("inlineCode",{parentName:"p"},"24 hours in a day")," = ",(0,i.kt)("inlineCode",{parentName:"p"},"84 days"),"\n","","","",""),(0,i.kt)("p",null,"For more information on why this is so, see the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"simple payouts"),"."),(0,i.kt)("admonition",{title:"Payouts",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Payouts are unclaimed rewards waiting to be paid out to both validators and nominators. If you go to\nthe Staking payouts page on ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"Polkadot-JS"),", you will see a\nlist of all validators that you have nominated in the past 84 eras and for which you have not yet\nreceived a payout. The payout page is visible only to stakers."),(0,i.kt)("p",{parentName:"admonition"},"Each validator as well as their nominators have the option to trigger the payout for all unclaimed\neras. Note that this will pay everyone who was nominating that validator during those eras.\nTherefore, you may not see anything in this tab, yet still have received a payout if somebody\n(generally, but not necessarily, another nominator or the validator operator) has triggered the\npayout for that validator for that era.")),(0,i.kt)("admonition",{title:"Time limit to claim staking rewards",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"If nobody claims your staking rewards within 84 eras, then you will not be able to claim them and\nthey will be lost. Additionally, if the validator unbonds all their own stake, any pending payouts\nwill also be lost. Since unbonding takes\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"\n","\ndays, nominators should check if they have pending payouts at least this often.")),(0,i.kt)("p",null,"Rewards can be directed to the same account used to sign the payout or to a completely unrelated\naccount. It is also possible to top-up / withdraw some bonded tokens without having to un-stake all\nstaked tokens."),(0,i.kt)("p",null,"If you wish to know if you received a payout, you will have to check via a block explorer. See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168954-how-can-i-see-my-staking-rewards-"},"the relevant Support page"),"\nfor details. For specific details about validator payouts, please see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"this guide"),"."),(0,i.kt)("h3",{id:"chilling"},"Chilling"),(0,i.kt)("p",null,"Chilling is the act of stepping back from any nominating or validating. It can be done by a\nvalidator or nominator at any time, taking effect in the next era."),(0,i.kt)("p",null,"Chilling can be validator-initiated, e.g. if there is a planned outage in the validator's\nsurroundings or hosting provider, and the validator wants to exit to protect themselves against\nslashing. Chilling will keep the validator active in the current era, but will move them to the\ninactive set in the next. The validator will not lose their nominators."),(0,i.kt)("p",null,'For more on chilling, see the "',(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-chill"},"How to Chill"),'" page on\nthis wiki.'),(0,i.kt)("h3",{id:"fast-unstake"},"Fast Unstake"),(0,i.kt)("admonition",{title:"Fast Unstaking feature is live!",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you accidentally bonded your DOT or your\nbonded DOT never backed any active validator, you\ncan now unbond them immediately.")),(0,i.kt)("p",null,"If your bonded balance did not back any validators in the last\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays, you are eligible to perform fast unstaking. The\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/#/overview"},"staking dashboard")," will automatically check if you\nqualify. For more information, visit the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169433-can-i-transfer-dot-without-unbonding-and-waiting-28-days-"},'"Fast Unstake" section in this support article'),"."),(0,i.kt)("h2",{id:"why-and-why-not-to-stake"},"Why and Why not to Stake?"),(0,i.kt)("h3",{id:"pros-of-staking"},"Pros of Staking"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Earn rewards for contributing to the network's security through staking."),(0,i.kt)("li",{parentName:"ul"},"Low barrier of entry through ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools"},"Nomination Pools"),"."),(0,i.kt)("li",{parentName:"ul"},"Can choose up-to 16 validators which can help\nto decentralize the network through the sophisticated\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-consensus/#nominated-proof-of-stake"},"NPoS system")),(0,i.kt)("li",{parentName:"ul"},"10% inflation/year of the tokens is primarily intended for staking rewards.")),(0,i.kt)("p",null,"When the system staking rate matches with the ideal staking rate, the entire inflation of the\nnetwork is given away as the staking rewards.\nUp until now, the network has been following an inflation model that excludes the metric of active parachains.\nThe ideal staking rate is a dynamic value - as the number of active parachains influences the\navailable liquidity that is available to secure the network."),(0,i.kt)("p",null,"Any divergence from the ideal staking rate will result in the distribution of a proportion of the\nnewly minted tokens through inflation to go to the treasury. Keep in mind that when the system's\nstaking rate is lower than the ideal staking rate, the annual nominal return rate will be higher,\nencouraging more users to use their tokens for staking. On the contrary, when the system staking\nrate is higher than the ideal staking rate, the annual nominal return will be less, encouraging some\nusers to withdraw. For in-depth understanding, check the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#inflation"},"inflation")," section on the Wiki."),(0,i.kt)("h3",{id:"cons-of-staking"},"Cons of Staking"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Tokens will be locked for about\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays on Polkadot. No rewards will be earned\nduring the unbonding period."),(0,i.kt)("li",{parentName:"ul"},"Possible punishment in case of the active validator found to be misbehaving (see\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-offenses"},"slashing"),")."),(0,i.kt)("li",{parentName:"ul"},"Lack of liquidity i.e. You would not be able to use the tokens for participating in crowdloans or\ntransfer them to different account etc.")),(0,i.kt)("h4",{id:"unbonding-period-length"},"Unbonding Period Length"),(0,i.kt)("p",null,"The unbonding period provides a safety net for slashing offenses identified in\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/slashing/npos#slashing-in-past-eras"},"past eras"),",\nwhich can hold the respective validators and their nominators accountable. The\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","-day\nunbonding period is crucial in mitigating ex post facto slashing, particularly in guarding against\nlong-range attacks. When a client encounters a chain finalized by\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus#finality-gadget-grandpa"},"GRANDPA")," that originates more than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays in the past, it lacks the security of slashing protection."),(0,i.kt)("p",null,"Essentially, this period establishes a cadence for synchronizing with the chain or acquiring a\ncheckpoint within a timeframe that engenders trust. It's worth noting that while the choice of a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","-day\nperiod is somewhat arbitrary, it unquestionably provides a higher level of security compared to a\nshorter period."),(0,i.kt)("h2",{id:"how-many-validators"},"How many Validators?"),(0,i.kt)("p",null,"Polkadot currently has\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.validatorCount",defaultValue:297,mdxType:"RPC"}),"\n","\nvalidators. The top bound on the number of validators has not been determined yet, but should only\nbe limited by the bandwidth strain of the network due to peer-to-peer message passing."),(0,i.kt)("p",null,"The estimate of the number of validators that Polkadot will have at maturity is around 1000.\nKusama is already operating at this threshold."),(0,i.kt)("h2",{id:"why-am-i-not-receiving-rewards"},"Why am I not receiving rewards?"),(0,i.kt)("p",null,"Nominating on Polkadot is not a set-and-forget\naction. Nominators need to monitor their nominations and ensure they are eligible to receive staking\nrewards. Otherwise, they would be risking their funds to secure the chain with no reward. If you are\nbonding significantly more than the Minimum Active Bond and yet not receiving rewards, your\nnominations are all waiting, or your active validator has 100% commission. However, if you bond\nfunds close to the Minimum Active Bond, there could be several possibilities for not receiving\nstaking rewards. The table below can be used to troubleshoot why you might not be receiving staking\nrewards using Polkadot-JS UI."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Nomination Status"),(0,i.kt)("th",{parentName:"tr",align:"center"},"What's happening?"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Causes"),(0,i.kt)("th",{parentName:"tr",align:"center"},"What to do?"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Nominated validators are all in waiting status."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Your stake has not been assigned to any of the nominated validators. You cannot earn rewards, nor be slashed in that era."),(0,i.kt)("td",{parentName:"tr",align:"center"},'Waiting validators are not in the active set in the current era and the stake backing them is not used to secure the network. In simple words, NPoS "does not see them".'),(0,i.kt)("td",{parentName:"tr",align:"center"},"Change your nominations. Try to select validators (with reasonable commission) that have high chances to end up in the active set.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"You have some inactive, and some waiting nominations."),(0,i.kt)("td",{parentName:"tr",align:"center"},'Validators shown as "Inactive" in your staking dashboard are still in the active set and are producing blocks in the current era, but your stake has not been assigned to any of them. You will not earn rewards if your stake is not backing an active validator. In this case, you cannot be slashed either.'),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("strong",{parentName:"td"},"Scenario 1:")," You have bonded less than the Minimum Active Bond. ",(0,i.kt)("strong",{parentName:"td"},"Scenario 2:")," You have more than the Minimum Active Bond, but your account is at the tail end of the ",(0,i.kt)("a",{parentName:"td",href:"/docs/learn-staking-advanced#bags-list"},"bags list")," and within your bag there are accounts with less stake than you, in front of you."),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("strong",{parentName:"td"},"Scenario 1:")," Try bonding more funds. ",(0,i.kt)("strong",{parentName:"td"},"Scenario 2:")," Try to put your account in front of the accounts with less stake than you. Instructions available ",(0,i.kt)("a",{parentName:"td",href:"https://support.polkadot.network/support/solutions/articles/65000181018-i-have-more-than-the-minimum-bonded-but-i-m-not-getting-rewards"},"here"))))),(0,i.kt)("admonition",{title:"Join a Nomination Pool",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"By joining a ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," that is active and earning rewards, you\ncan start earning staking rewards with as low as 1 DOT. The nomination pools typically have a\ndedicated pool operator who ensures that the pool's stake is always backing an active validator and\nis receiving rewards.")),(0,i.kt)("admonition",{title:"Bags List & Minimum Active Bond",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"You can find information about why you might not receive staking rewards on\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170805-why-am-i-not-getting-staking-rewards-"},"this support page"),"\nand ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/hIIZRJLrBZA"},"this video tutorial"),".")),(0,i.kt)("h2",{id:"staking-faq"},"Staking FAQ"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181959-staking-faq-s"},"this support page"),"\nfor the FAQs about staking.")),(0,i.kt)("h2",{id:"resources"},"Resources"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://medium.com/web3foundation/how-nominated-proof-of-stake-will-work-in-polkadot-377d70c6bd43"},"How Nominated Proof of Stake will work in Polkadot")," -\nBlog post by Web3 Foundation researcher Alfonso Cevallos covering NPoS in Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-secure-validator"},"Validator setup")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://decentradot.com/polkadot-validator-selector/"},"Polkadot validator selector tool")," - A tool\nthat helps nominators find reliable validators that meet quality-control criteria, including\ncommission rates, verified identity, etc.")),(0,i.kt)("hr",null),(0,i.kt)("admonition",{title:"Polkadot-JS Guides",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you are an advanced user, see the ",(0,i.kt)("a",{parentName:"p",href:"./learn-guides-staking"},"Polkadot-JS guides about staking"),".")))}m.isMDXComponent=!0},89303:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/reward-risk-fee9f991186d4097ca3d3f0a713f4ad4.png"},4080:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/stash-and-staking-proxy-ea4d09387a4b56d1349ee896427d9f1d.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/1646726c.b7063abf.js b/assets/js/1646726c.b7063abf.js deleted file mode 100644 index a4d6913ec190..000000000000 --- a/assets/js/1646726c.b7063abf.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2169],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(9712),l=a(67425);function d(e,t,a){return h.apply(this,arguments)}function h(){return(h=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var i,l,d,h,c;return(0,n.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 d=new r.U(i),e.next=21,s.G.create({provider:d});case 21:h=e.sent,(c=a.split(".")).forEach((function(e){e in h&&(h=h[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=h.toString(),e.abrupt("break",35);case 29:return e.next=31,h();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(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,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,h=(0,i.useState)(""),p=h[0],u=h[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?c(r.toString(),l,t,u):u(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;case"kusama-people":e="wss://kusama-people-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,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,d(t,a,u);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(o,l,t,u):u(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="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 l=void 0;if(r===t||r===o)l=3;else{if(r!==a&&r!==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/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===o)s=1;else{if(r!==a&&r!==n)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())}}},78381:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>m,frontMatter:()=>l,metadata:()=>h,toc:()=>p});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-staking",title:"Introduction to Staking",sidebar_label:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","faq"],slug:"../learn-staking"},d=void 0,h={unversionedId:"learn/learn-staking",id:"learn/learn-staking",title:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",source:"@site/../docs/learn/learn-staking.md",sourceDirName:"learn",slug:"/learn-staking",permalink:"/docs/learn-staking",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-staking.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1718028821,formattedLastUpdatedAt:"Jun 10, 2024",frontMatter:{id:"learn-staking",title:"Introduction to Staking",sidebar_label:"Introduction to Staking",description:"Overview of Staking and NPoS on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","faq"],slug:"../learn-staking"},sidebar:"docs",previous:{title:"Staking",permalink:"/docs/learn-staking-index"},next:{title:"Nomination Pools",permalink:"/docs/learn-nomination-pools"}},c={},p=[{value:"Proof-of-Stake (PoS)",id:"proof-of-stake-pos",level:2},{value:"Nominated Proof-of-Stake (NPoS)",id:"nominated-proof-of-stake-npos",level:2},{value:"Nominating Validators",id:"nominating-validators",level:3},{value:"Eras and Sessions",id:"eras-and-sessions",level:3},{value:"Staking Rewards",id:"staking-rewards",level:3},{value:"Skin in the game when Staking",id:"skin-in-the-game-when-staking",level:3},{value:"Being a Nominator",id:"being-a-nominator",level:2},{value:"Tasks and Responsibilities of a Nominator",id:"tasks-and-responsibilities-of-a-nominator",level:3},{value:"Selection of Validators",id:"selection-of-validators",level:3},{value:"Validator Selection Criteria",id:"validator-selection-criteria",level:4},{value:"Network Providers",id:"network-providers",level:4},{value:"Keeping Track of Nominated Validators",id:"keeping-track-of-nominated-validators",level:4},{value:"Stash Account and Staking Proxy",id:"stash-account-and-staking-proxy",level:3},{value:"Claiming Staking Rewards",id:"claiming-staking-rewards",level:3},{value:"Chilling",id:"chilling",level:3},{value:"Fast Unstake",id:"fast-unstake",level:3},{value:"Why and Why not to Stake?",id:"why-and-why-not-to-stake",level:2},{value:"Pros of Staking",id:"pros-of-staking",level:3},{value:"Cons of Staking",id:"cons-of-staking",level:3},{value:"Unbonding Period Length",id:"unbonding-period-length",level:4},{value:"How many Validators?",id:"how-many-validators",level:2},{value:"Why am I not receiving rewards?",id:"why-am-i-not-receiving-rewards",level:2},{value:"Staking FAQ",id:"staking-faq",level:2},{value:"Resources",id:"resources",level:2}],u={toc:p},k="wrapper";function m(e){var t=e.components,l=(0,o.Z)(e,s);return(0,i.kt)(k,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Explore Polkadot with a secure and user-friendly wallets listed on the\n",(0,i.kt)("a",{parentName:"p",href:"https://www.polkadot.network/ecosystem/wallets/"},"Polkadot website")," and start your staking journey\nor explore more information about staking on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Staking Page"),". Discover the new\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Staking Dashboard")," that makes staking much easier and\ncheck this\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started. The dashboard supports ",(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger")," devices natively and\ndoes not require an extension or wallet as an interface.")),(0,i.kt)("admonition",{title:"Stake through Nomination Pools",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum amount required to become an active nominator and earn rewards may change from era to\nera.\nIt is currently ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minimumActiveStake",defaultValue:502e10,filter:"humanReadable",mdxType:"RPC"})),".\n","\nIf you have less DOT than the minimum active\nnomination and still want to participate in staking, you can join the nomination pools. You can now\nstake on Polkadot natively with just\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"})),"\n","\nin the nomination pools and earn staking rewards. For additional information, check out\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".\nCheck the wiki doc on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools")," for more information.")),(0,i.kt)("p",null,"Here you will learn about what staking is, why it is important and how it works on\nPolkadot."),(0,i.kt)("h2",{id:"proof-of-stake-pos"},"Proof-of-Stake (PoS)"),(0,i.kt)("p",null,"Blockchain networks use ",(0,i.kt)("a",{parentName:"p",href:"/docs/faq#why-do-we-need-consensus"},"consensus")," mechanisms to\nfinalize blocks on the chain. Consensus is the process of agreeing on something, in this case, the\nprogression of the blockchain or how blocks are added to the chain. Consensus consists of two\nactions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Block production"),", i.e. the way multiple blocks candidates are produced, and"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Block finality"),", i.e. the way only one block out of many candidates is selected and added to\nthe canonical chain (see ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-consensus/#probabilistic-vs-provable-finality"},"this")," article\nfor more information about finality).")),(0,i.kt)("p",null,"Proof-of-Work (PoW) and Proof-of-Stake (PoS) are well-known mechanisms used to reach consensus in a\nsecure and trustless way on public blockchains, where there are many participants who do not know\neach other (and probably never will). In PoW, network security relies on the fact that the miners\nwho are responsible for adding blocks to the chain must compete to solve difficult mathematic\npuzzles to add blocks - a solution that has been criticized for the wastage of energy. For doing\nthis work, miners are typically rewarded with tokens."),(0,i.kt)("p",null,"In PoS networks like Polkadot the security of\nthe network depends on the amount of capital locked on the chain: the more the capital locked, the\nlower the chance of an attack on the network, as the attacker needs to incur a heavy loss to\norchestrate a successful attack (more on this later on). The process of locking tokens on the chain\nis called ",(0,i.kt)("strong",{parentName:"p"},"staking"),"."),(0,i.kt)("p",null,"Similar to the miners in PoW networks, PoS networks have ",(0,i.kt)("strong",{parentName:"p"},"validators"),", but they do not have to\ncompete with each other to solve mathematical puzzles. They are instead pre-selected to produce the\nblocks based on the stake backing them. Token holders can lock funds on the chain and for doing so,\nthey are getting ",(0,i.kt)("strong",{parentName:"p"},"staking rewards"),". There is thus an economic incentive for token holders to\nbecome active participants who contribute to the economic security and stability of the network. PoS\nnetworks in general are therefore more inclusive than PoW networks, as participants do not need to\nhave either technical knowledge about blockchain technology or experience in running mining\nequipment."),(0,i.kt)("p",null,'PoS ensures that everybody participating in the staking process has "skin in the game" and thus can\nbe held accountable. In case of misbehavior, participants in the staking process can be punished or\n',(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},(0,i.kt)("strong",{parentName:"a"},"slashed")),", and depending on the gravity of the situation, their stake can\nbe partly or fully confiscated by the network. It is not in a staker's economic interest to\norchestrate an attack and risk losing tokens. Any rational actor staking on the network would want\nto get rewarded, and the PoS network rewards good behavior and punishes bad behavior."),(0,i.kt)("h2",{id:"nominated-proof-of-stake-npos"},"Nominated Proof-of-Stake (NPoS)"),(0,i.kt)("p",null,"Polkadot implements\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#nominated-proof-of-stake"},"Nominated Proof-of-Stake (NPoS)"),", a relatively novel\nand sophisticated mechanism to select the validators who are allowed to participate in its\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus"},"consensus")," protocol. NPoS encourages\nDOT holders to participate as ",(0,i.kt)("strong",{parentName:"p"},"nominators"),"."),(0,i.kt)("p",null,"Any potential validators can indicate their intention to be a validator candidate. Their candidacies\nare made public to all nominators, and a nominator, in turn, submits a list of up to\n16 candidates that it supports, and the network\nwill automatically distribute the stake among validators in an even manner so that the economic\nsecurity is maximized. In the next era, a certain number of validators having the most\nDOT backing get elected and become active. For\nmore information about the election algorithm go to ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"this")," page on the wiki or\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Paper"},"this")," research article. As a\nnominator, a minimum of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nis required to submit an intention to nominate, which can be thought of as registering to be a\nnominator. Note that in NPoS the stake of both nominators and validators can be\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashed"),". For an in-depth review of NPoS see\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Overview"},"this")," research article."),(0,i.kt)("admonition",{title:"Minimum Nomination to Receive Staking Rewards",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Although the minimum nomination intent is\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),",\n","\nit does not guarantee staking rewards. The nominated amount has to be greater than\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator#minimum-active-nomination-to-receive-staking-rewards"},"minimum active nomination"),",\nwhich is a dynamic value that can be much higher than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"}),".\n","\nThis dynamic value depends on the amount of DOT\nbeing staked, in addition to the selected nominations.")),(0,i.kt)("h3",{id:"nominating-validators"},"Nominating Validators"),(0,i.kt)("p",null,"Nominating on Polkadot requires 2 actions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Locking tokens on-chain."),(0,i.kt)("li",{parentName:"ul"},"Selecting a set of validators, to whom these locked tokens will automatically be allocated to.")),(0,i.kt)("p",null,"How many tokens you lock up is completely up to you - as are the validators you wish to select. The\naction of locking tokens is also known as ",(0,i.kt)("strong",{parentName:"p"},"bonding"),". You can also refer to your locked tokens as\nyour bonded tokens, or staked tokens. Likewise, selecting validators is also known as backing or\nnominating validators. These terms are used interchangeably by the community. From now on locked\ntokens will be referred to as bonded tokens."),(0,i.kt)("p",null,"Once the previous 2 steps are completed and you are nominating, your bonded tokens could be\nallocated to one or more of your selected validators, and this happens every time the active\nvalidator set changes. This validator set is updated every era on\nPolkadot."),(0,i.kt)("p",null,"Unlike other staking systems, Polkadot\nautomatically chooses which of your selected validators will be backed by your bonded tokens.\nSelecting a group of validators increases your chances of consistently backing at least one who is\nactive. This results in your bonded tokens being allocated to validators more often, which means\nmore network security and more rewards. This is in strong contrast to other staking systems that\nonly allow you to back one validator; if that validator is not active, you as a staker will also not\nbe. Polkadot's nomination model solves this."),(0,i.kt)("p",null,"Polkadot uses tools ranging from election\ntheory to game theory to discrete optimization, to develop an efficient validator selection process\nthat offers fair representation and security, thus avoiding uneven power and influence among\nvalidators. The election algorithms used by\nPolkadot are based on the Proportional\nJustified Representation (PJR) methods like ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragmen"),". For more information\nabout PJR methods visit ",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS/Overview"},"this"),"\nresearch article."),(0,i.kt)("h3",{id:"eras-and-sessions"},"Eras and Sessions"),(0,i.kt)("p",null,"The stake from nominators is used to increase the number of tokens held by such candidates,\nincreasing their chance of being selected by the election algorithm for block production during a\nspecific ",(0,i.kt)("strong",{parentName:"p"},"era"),". An era is a period of 24 hours\nduring which an ",(0,i.kt)("strong",{parentName:"p"},"active set")," of validators is producing blocks and performing other actions on the\nchain. This means that not all validators are in the active set and such set changes between eras.\nEach era is divided into 6 epochs or ",(0,i.kt)("strong",{parentName:"p"},"sessions")," during which validators are assigned as block\nproducers to specific time frames or ",(0,i.kt)("strong",{parentName:"p"},"slots"),". This means that validators know the slots when they\nwill be required to produce a block within a specific session, but they do not know all the slots\nwithin a specific era. Having sessions adds a layer of security because it decreases the chance of\nhaving multiple validators assigned to a slot colluding to harm the network."),(0,i.kt)("h3",{id:"staking-rewards"},"Staking Rewards"),(0,i.kt)("p",null,"Validators who produce a block are rewarded with tokens, and they can share rewards with their\nnominators. Both validators and nominators can stake their tokens on chain and receive staking\nrewards at the end of each era. The staking system pays out rewards equally to all validators\nregardless of stake. Thus, having more stake in a validator does not influence the amount of block\nrewards it receives. This avoids the centralization of power to a few validators. There is a\nprobabilistic component in the calculation of rewards, so they may not be exactly equal for all\nvalidators. In fact, during each era validators can earn ",(0,i.kt)("strong",{parentName:"p"},"era points")," by doing different tasks on\nchain. The more the points, the higher the reward for a specific era. This promotes validators'\nactivity on chain. To know more about era points, and how and on which basis they are distributed\nvisit the ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"dedicated page"),". Distribution of the\nrewards is pro-rata to all stakers after the validator's commission is deducted."),(0,i.kt)("h3",{id:"skin-in-the-game-when-staking"},"Skin in the game when Staking"),(0,i.kt)("p",null,"The security of PoS networks depends on the amount of staked tokens. To successfully attack the\nnetwork, a malicious actor would need to accrue a large number of tokens or would need different\nparticipants to collude and act maliciously. If there is an attack in the case of NPoS, both the\nvalidator(s) and nominators will be slashed resulting in their stake being partially or fully\nconfiscated by the network and then deposited to the treasury. There is little interest for a\nrational network participant to act in a harmful way because NPoS ensures that all participants can\nbe held accountable for their bad actions. In NPoS, validators are paid equal rewards regardless of\nthe amount of stake backing them, thus avoiding large payouts to few large validators which might\nlead to centralization."),(0,i.kt)("h2",{id:"being-a-nominator"},"Being a Nominator"),(0,i.kt)("h3",{id:"tasks-and-responsibilities-of-a-nominator"},"Tasks and Responsibilities of a Nominator"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Validators.")," Since validator slots are limited, most of those who wish to stake their\nDOT and contribute to the economic security of\nthe network will be nominators, thus here we focus on the role of nominators. However, it is worth\nmentioning that validators do most of the heavy lifting: they run the validator nodes and manage\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/keys/session"},"session keys"),", produce new block\ncandidates in ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#block-production-babe"},"BABE"),", vote and come to consensus in\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus/#finality-gadget-grandpa"},"GRANDPA"),", validate the state transition function of\nparachains, and possibly some other responsibilities regarding data availability and\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"XCM"),". For more information, you can take a look at the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-validator"},"validator docs")," to understand what you need to do as a validator. If you want\nto become a validator you can consult\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot"},"this")," guide."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Nominators.")," Nominators have far fewer responsibilities than validators. These include selecting\nvalidators and monitoring their performance, keeping an eye on changing commission rates (a\nvalidator can change commission at any time), and general health monitoring of their validators'\naccounts. Thus, while not being completely set-it-and-forget-it, a nominator's experience is\nrelatively hands-off compared to that of a validator, and even more with\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools"),". For more information, you can take a look at the\nnominator ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"guide")," to understanding your responsibilities as a nominator."),(0,i.kt)("p",null,"If you want to become a nominator, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"this")," guide. If you are a\nbeginner and would like to securely stake your tokens using the Polkadot-JS UI, refer to\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168057-how-do-i-stake-nominate-on-polkadot-"},"this"),"\nsupport article.\n"),(0,i.kt)("admonition",{title:"Polkadot Staking Dashboard",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/dashboard/#/overview"},"Staking Dashboard")," provides a more\nuser-friendly alternative to staking. See the instructions in\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182133-how-to-use-the-staking-dashboard-staking-your-dot"},"this"),"\nsupport article to learn how to stake with the dashboard.")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Pools."),' Pools are "built" on top of NPoS to provide a very low barrier to entry to staking,\nwithout sacrificing Polkadot\'s strict security model.'),(0,i.kt)("h3",{id:"selection-of-validators"},"Selection of Validators"),(0,i.kt)("p",null,"The task of choosing validators is not simple, as it should take into account nominator reward and\nrisk preferences. Ideally one aims to maximize the reward-to-risk ratio by maximizing rewards and\nminimizing risks, with sometimes having to compromise between the two, as minimizing risks might\ndecrease rewards as well. Nominators should pay attention, especially to six criteria when\nnominating validators (not in order of importance):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"recent history of the era points earned across eras"),(0,i.kt)("li",{parentName:"ul"},"validator's self stake (shows skin in the game)"),(0,i.kt)("li",{parentName:"ul"},"total stake backing the validator (which is the sum of self stake and the stake coming from\nnominators)"),(0,i.kt)("li",{parentName:"ul"},"commission fees (i.e. how much validators charge nominators)"),(0,i.kt)("li",{parentName:"ul"},"verified identity"),(0,i.kt)("li",{parentName:"ul"},"previous slashes")),(0,i.kt)("p",null,"The diagram below shows how the selection of those criteria affects the reward-to-risk ratio."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"rewards and risks diagram",src:a(89303).Z,width:"1920",height:"800"})),(0,i.kt)("h4",{id:"validator-selection-criteria"},"Validator Selection Criteria"),(0,i.kt)("p",null,"To maximize rewards and minimize risk, one could select those validators that:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"have era points above average (because they will get more rewards for being active),"),(0,i.kt)("li",{parentName:"ul"},"have the total stake backing the validator below the average active validator stake (because they\nwill pay out more rewards per staked DOT),"),(0,i.kt)("li",{parentName:"ul"},"have high own stake (because if slashed they have something to lose),"),(0,i.kt)("li",{parentName:"ul"},"have low commission fees but not 0% (because it makes sense that for doing the heavy lifting,\nvalidators ask for a small commission),"),(0,i.kt)("li",{parentName:"ul"},"have on-chain registered identity (because it adds a layer of trust and possibly provides access\nto their website and contact details),"),(0,i.kt)("li",{parentName:"ul"},"and have not been slashed (meaning that their on-chain behavior is genuine).")),(0,i.kt)("h4",{id:"network-providers"},"Network Providers"),(0,i.kt)("p",null,"For successful operation, a Validator node should always be ensured to meet the required\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot#reference-hardware"},"software, hardware, and network bandwidth specifications"),".\nUnderstandably, most of the validator nodes run on cloud service providers that guarantee high\nhardware specifications and high levels of availability and connectivity. Keep in mind that a\nvalidator in the active set is supposed to be fully online and available for producing blocks. If\nthe active validator node goes offline due to network interruptions or a power outage, that\nvalidator will get fewer rewards."),(0,i.kt)("admonition",{title:"Checking Validators using Network Providers",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"You can connect your stash account to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkawatch.app/"},"Polkawatch app"),". The app will\nshow your rewards earned in the past 60 eras divided by network provider and country. You will be\nable to see networks used by each validator and verify if your validators are using providers who\nsupport PoS. This is also a great tool to explore how decentralized your nominations are and act\naccordingly.")),(0,i.kt)("h4",{id:"keeping-track-of-nominated-validators"},"Keeping Track of Nominated Validators"),(0,i.kt)("admonition",{title:"Nominators must periodically check their validators",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Nominating is ",(0,i.kt)("em",{parentName:"p"},"not"),' a "set and forget" operation. The whole NPoS system is dynamic and nominators\nshould periodically monitor the performance and reputation of their validators. Failing to do so\ncould result in applied slashes and/or rewards not being paid out, possibly for a prolonged period.')),(0,i.kt)("p",null,"Although the theory can be used as a general guideline, in practice it is more complicated and\nfollowing the theory might not necessarily lead to the desired result. Validators might have the\ntotal stake backing them below average, low commission and above average era points in one era and\nthen have a different profile in the next one. Selection based on the criteria like on-chain\nidentity, slash history and low commission make the staking rewards deterministic. But some criteria\nvary more than others, with era points being the most variable and thus one of the key probabilistic\ncomponents of staking rewards. Part of this probability is directly related to the fact that a\nvalidator can produce blocks for a parachain (i.e. para-validators) or the relay chain, with\npara-validators earning more era points per unit time (see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout#era-points"},"this")," page for more information). The\nrole can switch between sessions, and you can look at\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"the staking tab on the Polkadot-JS UI")," to know which\nvalidator is producing blocks for the relay chain or parachains."),(0,i.kt)("p",null,"It is not recommended to change nominations because of the low era points of a validator in a single\nera. Variability in rewards due to the era points should level out over time. If a validator\nconsistently gets era points below average, it makes sense to nominate a better-performing validator\nfor the health of the network and increased staking rewards. See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000150130-how-do-i-know-which-validators-to-choose-"},"this"),"\nsupport article to understand in detail how to select the set of validators to nominate."),(0,i.kt)("h3",{id:"stash-account-and-staking-proxy"},"Stash Account and Staking Proxy"),(0,i.kt)("p",null,"Two different accounts can be used to securely manage your funds while staking."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Stash:")," This account holds funds bonded for staking, but delegates all staking functions to a\nstaking proxy account. You may actively participate in staking with a stash private key kept in a\ncold wallet like Ledger, meaning it stays offline all the time. Having a staking proxy will allow\nyou to sign all staking-related transactions with the proxy instead of using your Ledger device.\nThis will allow you:"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"to avoid carrying around your Ledger device just to sign staking-related transactions, and"),(0,i.kt)("li",{parentName:"ul"},"to and to keep the transaction history of your stash clean"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Staking Proxy:")," This account acts on behalf of the stash account, signalling decisions about\nnominating and validating. It can set preferences like commission (for validators) and the staking\nrewards payout account. The earned rewards can be bonded (locked) immediately for bonding on your\nstash account, which would effectively compound the rewards you receive over time. You could also\nchoose to have them deposited to a different account as a free (transferable) balance. If you are\na validator, it can also be used to set your ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography"},"session keys"),". Staking\nproxies only need sufficient funds to pay for the transaction fees."))),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},'Never leave a high balance on a proxy account which are usually "hot" as their private key is stored\non the device (PC, phone) and it is always exposed to the internet for potential hacks and scams. It\nis good practice to deposit rewards on the stash account or to send them to another account on a\ncold wallet.')),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"staking",src:a(4080).Z,width:"1920",height:"800"})),(0,i.kt)("p",null,"This hierarchy of separate keys for stash and staking accounts was designed to add a layer of\nprotection to nominators and validator operators. The more often one exposes and uses a private key,\nthe higher its vulnerability for hacks or scams. So, if one uses a key for multiple roles on a\nblockchain network, it is likely that the account can get compromised. Note that the damage linked\nto stolen private keys is different depending on the type of account derivation. In the case of soft\nderivation, all derived accounts are compromised. More information about account derivation can be\nfound ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts/#derivation-paths"},"here"),"."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For Ledger users staking directly on Ledger Live, currently, there is no option to use separate\nstash and staking proxy accounts."),(0,i.kt)("p",{parentName:"admonition"},"Ledger devices are now supported in ",(0,i.kt)("a",{parentName:"p",href:"https://www.subwallet.app/download.html"},"SubWallet")," and\n",(0,i.kt)("a",{parentName:"p",href:"https://talisman.xyz/"},"Talisman")," extension. Users can import their Ledger accounts in the extension\nand use them as a stash in staking. You can find more information about SubWallet, Talisman and\nother wallets that officially secured funding from the treasury\n",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"here"),".")),(0,i.kt)("h3",{id:"claiming-staking-rewards"},"Claiming Staking Rewards"),(0,i.kt)("p",null,""),(0,i.kt)("p",null,"Rewards are calculated per era (approximately six hours on Kusama and twenty-four hours on\nPolkadot). These rewards are calculated based on era points, which have a probabilistic component.\nIn other words, there may be slight differences in your rewards from era to era, and even amongst\nvalidators in the active set at the same time. These variations should cancel out over a long enough\ntimeline. See the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"Validator Payout Guide"),"."),(0,i.kt)("p",null,"The distribution of staking rewards to the nominators is not automatic and needs to be triggered by\nsomeone. Typically the validators take care of this, but anyone can permissionlessly trigger rewards\npayout for all the nominators whose stake has backed a specific validator in the active set of that\nera. Staking rewards are kept available for 84 eras. The following calculation can be used to\napproximate this length in days on Polkadot:"),(0,i.kt)("p",null,"",(0,i.kt)("inlineCode",{parentName:"p"},"84 eras")," \xd7 ",(0,i.kt)("inlineCode",{parentName:"p"},"24 hours in a single era")," \xf7 ",(0,i.kt)("inlineCode",{parentName:"p"},"24 hours in a day")," = ",(0,i.kt)("inlineCode",{parentName:"p"},"84 days"),"\n","","","",""),(0,i.kt)("p",null,"For more information on why this is so, see the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"simple payouts"),"."),(0,i.kt)("admonition",{title:"Payouts",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Payouts are unclaimed rewards waiting to be paid out to both validators and nominators. If you go to\nthe Staking payouts page on ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking"},"Polkadot-JS"),", you will see a\nlist of all validators that you have nominated in the past 84 eras and for which you have not yet\nreceived a payout. The payout page is visible only to stakers."),(0,i.kt)("p",{parentName:"admonition"},"Each validator as well as their nominators have the option to trigger the payout for all unclaimed\neras. Note that this will pay everyone who was nominating that validator during those eras.\nTherefore, you may not see anything in this tab, yet still have received a payout if somebody\n(generally, but not necessarily, another nominator or the validator operator) has triggered the\npayout for that validator for that era.")),(0,i.kt)("admonition",{title:"Time limit to claim staking rewards",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"If nobody claims your staking rewards within 84 eras, then you will not be able to claim them and\nthey will be lost. Additionally, if the validator unbonds all their own stake, any pending payouts\nwill also be lost. Since unbonding takes\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"\n","\ndays, nominators should check if they have pending payouts at least this often.")),(0,i.kt)("p",null,"Rewards can be directed to the same account used to sign the payout or to a completely unrelated\naccount. It is also possible to top-up / withdraw some bonded tokens without having to un-stake all\nstaked tokens."),(0,i.kt)("p",null,"If you wish to know if you received a payout, you will have to check via a block explorer. See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000168954-how-can-i-see-my-staking-rewards-"},"the relevant Support page"),"\nfor details. For specific details about validator payouts, please see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"this guide"),"."),(0,i.kt)("h3",{id:"chilling"},"Chilling"),(0,i.kt)("p",null,"Chilling is the act of stepping back from any nominating or validating. It can be done by a\nvalidator or nominator at any time, taking effect in the next era."),(0,i.kt)("p",null,"Chilling can be validator-initiated, e.g. if there is a planned outage in the validator's\nsurroundings or hosting provider, and the validator wants to exit to protect themselves against\nslashing. Chilling will keep the validator active in the current era, but will move them to the\ninactive set in the next. The validator will not lose their nominators."),(0,i.kt)("p",null,'For more on chilling, see the "',(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-chill"},"How to Chill"),'" page on\nthis wiki.'),(0,i.kt)("h3",{id:"fast-unstake"},"Fast Unstake"),(0,i.kt)("admonition",{title:"Fast Unstaking feature is live!",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you accidentally bonded your DOT or your\nbonded DOT never backed any active validator, you\ncan now unbond them immediately.")),(0,i.kt)("p",null,"If your bonded balance did not back any validators in the last\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays, you are eligible to perform fast unstaking. The\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"staking dashboard")," will automatically check if you\nqualify. For more information, visit the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169433-can-i-transfer-dot-without-unbonding-and-waiting-28-days-"},'"Fast Unstake" section in this support article'),"."),(0,i.kt)("h2",{id:"why-and-why-not-to-stake"},"Why and Why not to Stake?"),(0,i.kt)("h3",{id:"pros-of-staking"},"Pros of Staking"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Earn rewards for contributing to the network's security through staking."),(0,i.kt)("li",{parentName:"ul"},"Low barrier of entry through ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools"},"Nomination Pools"),"."),(0,i.kt)("li",{parentName:"ul"},"Can choose up-to 16 validators which can help\nto decentralize the network through the sophisticated\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-consensus/#nominated-proof-of-stake"},"NPoS system")),(0,i.kt)("li",{parentName:"ul"},"10% inflation/year of the tokens is primarily intended for staking rewards.")),(0,i.kt)("p",null,"When the system staking rate matches with the ideal staking rate, the entire inflation of the\nnetwork is given away as the staking rewards.\nUp until now, the network has been following an inflation model that excludes the metric of active parachains.\nThe ideal staking rate is a dynamic value - as the number of active parachains influences the\navailable liquidity that is available to secure the network."),(0,i.kt)("p",null,"Any divergence from the ideal staking rate will result in the distribution of a proportion of the\nnewly minted tokens through inflation to go to the treasury. Keep in mind that when the system's\nstaking rate is lower than the ideal staking rate, the annual nominal return rate will be higher,\nencouraging more users to use their tokens for staking. On the contrary, when the system staking\nrate is higher than the ideal staking rate, the annual nominal return will be less, encouraging some\nusers to withdraw. For in-depth understanding, check the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#inflation"},"inflation")," section on the Wiki."),(0,i.kt)("h3",{id:"cons-of-staking"},"Cons of Staking"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Tokens will be locked for about\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays on Polkadot. No rewards will be earned\nduring the unbonding period."),(0,i.kt)("li",{parentName:"ul"},"Possible punishment in case of the active validator found to be misbehaving (see\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-offenses"},"slashing"),")."),(0,i.kt)("li",{parentName:"ul"},"Lack of liquidity i.e. You would not be able to use the tokens for participating in crowdloans or\ntransfer them to different account etc.")),(0,i.kt)("h4",{id:"unbonding-period-length"},"Unbonding Period Length"),(0,i.kt)("p",null,"The unbonding period provides a safety net for slashing offenses identified in\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/security/slashing/npos#slashing-in-past-eras"},"past eras"),",\nwhich can hold the respective validators and their nominators accountable. The\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","-day\nunbonding period is crucial in mitigating ex post facto slashing, particularly in guarding against\nlong-range attacks. When a client encounters a chain finalized by\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus#finality-gadget-grandpa"},"GRANDPA")," that originates more than\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","\ndays in the past, it lacks the security of slashing protection."),(0,i.kt)("p",null,"Essentially, this period establishes a cadence for synchronizing with the chain or acquiring a\ncheckpoint within a timeframe that engenders trust. It's worth noting that while the choice of a\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,filter:"erasToDays",mdxType:"RPC"}),"","-day\nperiod is somewhat arbitrary, it unquestionably provides a higher level of security compared to a\nshorter period."),(0,i.kt)("h2",{id:"how-many-validators"},"How many Validators?"),(0,i.kt)("p",null,"Polkadot currently has\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.validatorCount",defaultValue:297,mdxType:"RPC"}),"\n","\nvalidators. The top bound on the number of validators has not been determined yet, but should only\nbe limited by the bandwidth strain of the network due to peer-to-peer message passing."),(0,i.kt)("p",null,"The estimate of the number of validators that Polkadot will have at maturity is around 1000.\nKusama is already operating at this threshold."),(0,i.kt)("h2",{id:"why-am-i-not-receiving-rewards"},"Why am I not receiving rewards?"),(0,i.kt)("p",null,"Nominating on Polkadot is not a set-and-forget\naction. Nominators need to monitor their nominations and ensure they are eligible to receive staking\nrewards. Otherwise, they would be risking their funds to secure the chain with no reward. If you are\nbonding significantly more than the Minimum Active Bond and yet not receiving rewards, your\nnominations are all waiting, or your active validator has 100% commission. However, if you bond\nfunds close to the Minimum Active Bond, there could be several possibilities for not receiving\nstaking rewards. The table below can be used to troubleshoot why you might not be receiving staking\nrewards using Polkadot-JS UI."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Nomination Status"),(0,i.kt)("th",{parentName:"tr",align:"center"},"What's happening?"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Causes"),(0,i.kt)("th",{parentName:"tr",align:"center"},"What to do?"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Nominated validators are all in waiting status."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Your stake has not been assigned to any of the nominated validators. You cannot earn rewards, nor be slashed in that era."),(0,i.kt)("td",{parentName:"tr",align:"center"},'Waiting validators are not in the active set in the current era and the stake backing them is not used to secure the network. In simple words, NPoS "does not see them".'),(0,i.kt)("td",{parentName:"tr",align:"center"},"Change your nominations. Try to select validators (with reasonable commission) that have high chances to end up in the active set.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"You have some inactive, and some waiting nominations."),(0,i.kt)("td",{parentName:"tr",align:"center"},'Validators shown as "Inactive" in your staking dashboard are still in the active set and are producing blocks in the current era, but your stake has not been assigned to any of them. You will not earn rewards if your stake is not backing an active validator. In this case, you cannot be slashed either.'),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("strong",{parentName:"td"},"Scenario 1:")," You have bonded less than the Minimum Active Bond. ",(0,i.kt)("strong",{parentName:"td"},"Scenario 2:")," You have more than the Minimum Active Bond, but your account is at the tail end of the ",(0,i.kt)("a",{parentName:"td",href:"/docs/learn-staking-advanced#bags-list"},"bags list")," and within your bag there are accounts with less stake than you, in front of you."),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("strong",{parentName:"td"},"Scenario 1:")," Try bonding more funds. ",(0,i.kt)("strong",{parentName:"td"},"Scenario 2:")," Try to put your account in front of the accounts with less stake than you. Instructions available ",(0,i.kt)("a",{parentName:"td",href:"https://support.polkadot.network/support/solutions/articles/65000181018-i-have-more-than-the-minimum-bonded-but-i-m-not-getting-rewards"},"here"))))),(0,i.kt)("admonition",{title:"Join a Nomination Pool",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"By joining a ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," that is active and earning rewards, you\ncan start earning staking rewards with as low as 1 DOT. The nomination pools typically have a\ndedicated pool operator who ensures that the pool's stake is always backing an active validator and\nis receiving rewards.")),(0,i.kt)("admonition",{title:"Bags List & Minimum Active Bond",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"You can find information about why you might not receive staking rewards on\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000170805-why-am-i-not-getting-staking-rewards-"},"this support page"),"\nand ",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/hIIZRJLrBZA"},"this video tutorial"),".")),(0,i.kt)("h2",{id:"staking-faq"},"Staking FAQ"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181959-staking-faq-s"},"this support page"),"\nfor the FAQs about staking.")),(0,i.kt)("h2",{id:"resources"},"Resources"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://medium.com/web3foundation/how-nominated-proof-of-stake-will-work-in-polkadot-377d70c6bd43"},"How Nominated Proof of Stake will work in Polkadot")," -\nBlog post by Web3 Foundation researcher Alfonso Cevallos covering NPoS in Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/maintain-guides-secure-validator"},"Validator setup")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://decentradot.com/polkadot-validator-selector/"},"Polkadot validator selector tool")," - A tool\nthat helps nominators find reliable validators that meet quality-control criteria, including\ncommission rates, verified identity, etc.")),(0,i.kt)("hr",null),(0,i.kt)("admonition",{title:"Polkadot-JS Guides",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you are an advanced user, see the ",(0,i.kt)("a",{parentName:"p",href:"./learn-guides-staking"},"Polkadot-JS guides about staking"),".")))}m.isMDXComponent=!0},89303:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/reward-risk-fee9f991186d4097ca3d3f0a713f4ad4.png"},4080:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/stash-and-staking-proxy-ea4d09387a4b56d1349ee896427d9f1d.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/386099fc.2b231c32.js b/assets/js/386099fc.2b231c32.js new file mode 100644 index 000000000000..6c15fe56db38 --- /dev/null +++ b/assets/js/386099fc.2b231c32.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[8139],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var n=a(74165),r=a(15861),o=a(67294),s=a(87152),i=a(9712),l=a(67425);function p(e,t,a){return u.apply(this,arguments)}function u(){return(u=(0,r.Z)((0,n.Z)().mark((function e(t,a,r){var o,l,p,u,d;return(0,n.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 p=new s.U(o),e.next=21,i.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,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 c=function(e){var t=e.network,a=e.path,s=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,u=(0,o.useState)(""),c=u[0],h=u[1];return t=t.toLowerCase(),(0,o.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;case"kusama-people":e="wss://kusama-people-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,r.Z)((0,n.Z)().mark((function e(){var r;return(0,n.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!==(r=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(r,l,t,h):h(r);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(i){console.log(i)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",n="statemine",r="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===r)l=3;else{if(s!==a&&s!==n)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===r)i=1;else{if(s!==a&&s!==n)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())}}},60283:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>m,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var n=a(87462),r=a(63366),o=(a(67294),a(3905)),s=a(47940),i=["components"],l={id:"learn-polkadot-opengov-treasury",title:"Treasury",sidebar_label:"Treasury",description:"Polkadot's On-chain Treasury.",keywords:["treasury","funds","funding","tips","tipping"],slug:"../learn-polkadot-opengov-treasury"},p=void 0,u={unversionedId:"learn/learn-polkadot-opengov-treasury",id:"learn/learn-polkadot-opengov-treasury",title:"Treasury",description:"Polkadot's On-chain Treasury.",source:"@site/../docs/learn/learn-polkadot-opengov-treasury.md",sourceDirName:"learn",slug:"/learn-polkadot-opengov-treasury",permalink:"/docs/learn-polkadot-opengov-treasury",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-polkadot-opengov-treasury.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1719413538,formattedLastUpdatedAt:"Jun 26, 2024",frontMatter:{id:"learn-polkadot-opengov-treasury",title:"Treasury",sidebar_label:"Treasury",description:"Polkadot's On-chain Treasury.",keywords:["treasury","funds","funding","tips","tipping"],slug:"../learn-polkadot-opengov-treasury"},sidebar:"docs",previous:{title:"Technical Fellowship",permalink:"/docs/learn-polkadot-technical-fellowship"},next:{title:"Tokens and Assets",permalink:"/docs/learn-assets-index"}},d={},c=[{value:"Treasury Inflow and Outflow",id:"treasury-inflow-and-outflow",level:2},{value:"Treasury Tracks",id:"treasury-tracks",level:2},{value:"Submit Treasury Proposal via Polkassembly",id:"submit-treasury-proposal-via-polkassembly",level:2},{value:"Sub-treasuries",id:"sub-treasuries",level:2},{value:"Multi-Asset Treasury Support",id:"multi-asset-treasury-support",level:2},{value:"Bounties",id:"bounties",level:2},{value:"Parent Bounties",id:"parent-bounties",level:3},{value:"Child Bounties",id:"child-bounties",level:3}],h={toc:c},k="wrapper";function m(e){var t=e.components,l=(0,r.Z)(e,i);return(0,o.kt)(k,(0,n.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The Treasury is a pot of funds collected through a portion of block production rewards,\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-transaction-fees"},"transaction fees"),", ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashing"),", and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-inflation"},"staking inefficiencies"),". Treasury funds are held in a\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-account-advanced#system-accounts"},"system account")," that cannot be controlled by any\nexternal account; only the system internal logic can access it."),(0,o.kt)("admonition",{title:"Creating a Treasury Proposal on Polkadot OpenGov",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you would like to create a treasury proposal on Polkadot OpenGov, follow the instructions\noutlined on ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-treasury#creating-a-treasury-proposal"},"this how-to guide"),".")),(0,o.kt)("h2",{id:"treasury-inflow-and-outflow"},"Treasury Inflow and Outflow"),(0,o.kt)("p",null,"Tokens that are deposited into the Treasury (i.e. the inflow) is determined by the following\nmechanisms:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Transaction fees:")," 80% of the transaction fees of every submitted extrinsic is diverted to the\nTreasury, while 20% is given to the block producers."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Staking inefficiencies:")," the network knows an exogenously determined parameter called ideal\nstaking rate. The APY for stakers (nominators & validators) decreases whenever the actual staking\nrate is not equal to the ideal staking rate. To keep inflation constant at 10%, the system does\nnot creates less tokens, rather some share of the overall reward for stakers is diverted to the\nTreasury (more information\n",(0,o.kt)("a",{parentName:"li",href:"https://research.web3.foundation/Polkadot/overview/token-economics"},"here"),")."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Slashes:")," whenever validators and nominators are ",(0,o.kt)("a",{parentName:"li",href:"/docs/learn-offenses"},"slashed"),", a share of the\nslashed tokens are diverted to Treasury. They are typically rare and unpredictable events."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Transfers:")," everyone can send funds to the Treasury directly. This is a rare event and\ntypically due to grantees reimbursing some of the amount they got allocated for various reasons.")),(0,o.kt)("p",null,"The outflow is determined by the following mechanisms:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Burned tokens:")," at the end of each spend period\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.treasury.burn",defaultValue:1e4,filter:"permillToPercent",mdxType:"RPC"}),"","%\nof the available funds are burned."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Treasury proposals & Bounties:")," they make up the largest share of outflow tokens to the\ncommunity and need to be approved by governance. Then, payouts occur at the end of a\n",(0,o.kt)("a",{parentName:"li",href:"/docs/glossary#spend-period"},"spend period"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Tips:")," smaller payouts directly to grantees that can happen within a\n",(0,o.kt)("a",{parentName:"li",href:"/docs/glossary#spend-period"},"spend period"),".")),(0,o.kt)("admonition",{title:"Spend Period Schedule",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"On Polkadot-JS UI, navigate to Governance > Treasury to view the status of current\n",(0,o.kt)("a",{parentName:"p",href:"/docs/glossary#spend-period"},"spend period"),"."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("img",{alt:"preimage-whitelist",src:a(29620).Z,width:"2508",height:"413"}))),(0,o.kt)("h2",{id:"treasury-tracks"},"Treasury Tracks"),(0,o.kt)("p",null,"OpenGov allows for managing funds through six tracks, each with its own\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#origins-and-tracks-info"},"origin and track parameters"),"."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#treasurer"},"Treasurer")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#big-spender"},"Big Spender")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#medium-spender"},"Medium Spender")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#small-spender"},"Small Spender")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#big-tipper"},"Big Tipper")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#small-tipper"},"Small Tipper"))),(0,o.kt)("h2",{id:"submit-treasury-proposal-via-polkassembly"},"Submit Treasury Proposal via Polkassembly"),(0,o.kt)("p",null,"Access to Treasury funds requires successful enactment of referendum in the respective treasury\ntrack on-chain. Learn how to submit a treasury proposal for referendum using\n",(0,o.kt)("a",{parentName:"p",href:"/docs/governance-apps"},"Polkassembly"),"."),(0,o.kt)("p",null,"Go to ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/opengov"},"Polkassembly")," and click on the FAB button in the\nbottom right corner. Then,"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},'Click on "Create Treasury Proposal" and choose an address for the proposer')),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"After choosing an address, you will enter a three-stage guideline:"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Write a proposal: you can add a detailed description for the proposal, which will be stored on\nPolkassembly. Alternatively, you can link an existing discussion post.")),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"polkassembly-write-proposal",src:a(90348).Z,width:"2130",height:"1596"})),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Create a preimage: an existing preimage can be linked, or a new one can be created. To create a\npreimage, add the beneficiary address and the\nDOT amount. The track will be auto-selected\nand the user can proceed with the creation of a preimage.")),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"polkassembly-create-preimage",src:a(76869).Z,width:"2154",height:"1598"})),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Create a proposal: final confirmation about the proposal creation. The description of the\nproposal and the preimage are automatically linked to the proposal.")))),(0,o.kt)("h2",{id:"sub-treasuries"},"Sub-treasuries"),(0,o.kt)("p",null,"The Polkadot treasury currently operates on a\nsingle account on-chain. The above tracks manage the outflow of the treasury on the network. With\n",(0,o.kt)("em",{parentName:"p"},"sub"),"-treasuries, having treasury accounts that correspond to each\n",(0,o.kt)("a",{parentName:"p",href:"./learn-system-chains#collectives"},"collective")," is also possible."),(0,o.kt)("p",null,"Rather than have many referenda through OpenGov, the\nPolkadot Treasury can allocate funds to each\nsub-treasury (through ",(0,o.kt)("a",{parentName:"p",href:"./learn-polkadot-opengov"},"governance"),"), from which each respective collective\ncan spend funds (depending on their specific rule set)."),(0,o.kt)("p",null,"New treasuries could be added to respective\n",(0,o.kt)("a",{parentName:"p",href:"./learn-system-chains#existing-system-chains"},"system chains")," through governance by adding more\ninstances of this pallet."),(0,o.kt)("h2",{id:"multi-asset-treasury-support"},"Multi-Asset Treasury Support"),(0,o.kt)("p",null,"The treasuries can support multiple asset types and thus can spend assets other than\nDOT held within the treasury, and their transfers\nand interactions across the chains facilitated by ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"cross-consensus messaging"),". These\nassets have a few requirements:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"The asset is listed on the ",(0,o.kt)("a",{parentName:"li",href:"https://assethub-polkadot.subscan.io/"},"AssetHub system parachain"),"."),(0,o.kt)("li",{parentName:"ol"},"The asset is active and has sufficient liquidity to be utilized for payouts."),(0,o.kt)("li",{parentName:"ol"},"The asset has a set conversion rate, as per OpenGov referenda on the Treasurer track (set via the\nasset rate pallet). This conversion rate defines a fixed-point representation for converting from\nthat asset to DOT."),(0,o.kt)("li",{parentName:"ol"},"The asset must be approved and onboarded via OpenGov to become spendable via the treasury as a\nvalid spend method.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"For example,\n",(0,o.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/multi-asset-treasury-and-milestone-based-spends/6780"},"see how USDT became approved as an asset on AssetHub"),",\nwhich can be used in the treasury.")),(0,o.kt)("h2",{id:"bounties"},"Bounties"),(0,o.kt)("h3",{id:"parent-bounties"},"Parent Bounties"),(0,o.kt)("p",null,"Getting treasury funding through OpenGov, depending on which treasury track you submit your\nreferendum, can be a long and uncertain process. This is not always a suitable option, for example,\nfor event organizers who need to pay costs upfront or close to the event's date. Bounties solve this\nproblem by procuring access to treasury funds in a single shot and using them to fund multiple\nevents later on through ",(0,o.kt)("a",{parentName:"p",href:"#child-bounties"},"child bounties"),". This is why bounties are also called\n",(0,o.kt)("em",{parentName:"p"},"parent")," bounties."),(0,o.kt)("p",null,"Parent bounty proposals aim to reserve a portion of treasury funds once, which will be used later.\nThey save proponents the time needed to create and obtain approval for several OpenGov referenda.\nBounties are managed by curators, where the curator is usually a\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-account-multisig"},"multi-signature account"),". Bounties can access a large amount of funds,\nso managing those funds with a multisig is a good practice to enhance security. Essentially,\ncurators are multisig addresses with agency over a portion of the treasury to promote events, fix a\nbug or vulnerability, develop a strategy, or monitor a set of tasks related to a specific topic, all\nfor the benefit of the Polkadot ecosystem."),(0,o.kt)("p",null,"A proposer can ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-bounties#submit-a-bounty-proposal"},"submit a bounty proposal")," to\nOpenGov,\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-bounties#assign-a-curator-to-a-bounty"},"with a curator to be defined later"),", whose\nbackground and expertise is such that they can determine when the task is complete."),(0,o.kt)("p",null,"When submitting the value of the bounty, the proposer can specify a fee that will be paid to\ncurators willing to invest their time and expertise in the task; this amount will be included in the\ntotal value of the bounty. In this sense, the curator's fee can be defined as the difference between\nthe amounts paid to child bounty awardees and the total value of the bounty."),(0,o.kt)("p",null,"Curators are selected through OpenGov referendum after the bounty proposal passes; and they need to\npay an upfront deposit to take the position. The deposit is calculated by multiplying the curator\nfee by\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.bounties.curatorDepositMultiplier",defaultValue:5e5,filter:"permillToPercent",mdxType:"RPC"}),"","%,\nand it can range between a minimum of\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.bounties.curatorDepositMin",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"","\nand a maximum of\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.bounties.curatorDepositMax",defaultValue:2e12,filter:"humanReadable",mdxType:"RPC"}),"",".\nThis deposit can be used to punish curators if they act maliciously. However, if they are successful\nin managing the bounty to completion, they will receive their deposit back, and part of the bounty\nfunding as a payment for their efforts."),(0,o.kt)("p",null,"Curators are expected to have a decent track record in addressing the issues the bounty wants to\nsolve. They should be very knowledgeable on the topics covered by the bounty and have proven project\nmanagement skills or experience. These recommendations help ensure an effective use of the bounty\nmechanism. A Bounty is a reward for a specified body of work or set of objectives that needs to be\nexecuted for a predefined treasury amount designated to be paid out. The responsibility of assigning\na payout address once the specified set of objectives is completed is delegated to the curator."),(0,o.kt)("p",null,"The bounty has a predetermined duration of\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.bounties.bountyUpdatePeriod",defaultValue:1296e3,filter:"blocksToDays",mdxType:"RPC"}),"","\ndays, with possible extension(s) to be requested by the curator. To maintain flexibility during the\ntasks\u2019 curation, the curator will also be able to create child bounties for more granularity in the\nallocation of funds and as part of a nested iteration of the bounty mechanism."),(0,o.kt)("h3",{id:"child-bounties"},"Child Bounties"),(0,o.kt)("p",null,"Child bounties are spawned from ",(0,o.kt)("a",{parentName:"p",href:"#parent-bounties"},"parent bounties"),". Child bounties are used to\naccess funds directly from the parent bounty without going through an OpenGov referendum."),(0,o.kt)("hr",null),(0,o.kt)("admonition",{title:"Polkadot-JS Guides",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If you are an advanced user, see the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-bounties"},"Polkadot-JS guides about bounties"),"\nand ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-treasury"},"treasury"),".")))}m.isMDXComponent=!0},76869:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkassembly-create-preimage-7396a8ce796d0f0dcad30d3edced8618.png"},90348:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkassembly-write-proposal-a3ce8ab9303111f6003ac8103ba29507.png"},29620:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/treasury-spend-period-a4883f21d69a6f05ca497b9893cc89a5.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/386099fc.5c4f2962.js b/assets/js/386099fc.5c4f2962.js deleted file mode 100644 index 5f92b00b2bbc..000000000000 --- a/assets/js/386099fc.5c4f2962.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[8139],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var n=a(74165),r=a(15861),o=a(67294),s=a(87152),i=a(9712),l=a(67425);function p(e,t,a){return u.apply(this,arguments)}function u(){return(u=(0,r.Z)((0,n.Z)().mark((function e(t,a,r){var o,l,p,u,d;return(0,n.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 p=new s.U(o),e.next=21,i.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,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 c=function(e){var t=e.network,a=e.path,s=e.defaultValue,i=e.filter,l=void 0===i?void 0:i,u=(0,o.useState)(""),c=u[0],h=u[1];return t=t.toLowerCase(),(0,o.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;case"kusama-people":e="wss://kusama-people-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,r.Z)((0,n.Z)().mark((function e(){var r;return(0,n.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!==(r=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?d(r,l,t,h):h(r);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(i){console.log(i)}}}),[]),c}},67425:e=>{var t="polkadot",a="kusama",n="statemine",r="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===r)l=3;else{if(s!==a&&s!==n)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===r)i=1;else{if(s!==a&&s!==n)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())}}},60283:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>m,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var n=a(87462),r=a(63366),o=(a(67294),a(3905)),s=a(47940),i=["components"],l={id:"learn-polkadot-opengov-treasury",title:"Treasury",sidebar_label:"Treasury",description:"Polkadot's On-chain Treasury.",keywords:["treasury","funds","funding","tips","tipping"],slug:"../learn-polkadot-opengov-treasury"},p=void 0,u={unversionedId:"learn/learn-polkadot-opengov-treasury",id:"learn/learn-polkadot-opengov-treasury",title:"Treasury",description:"Polkadot's On-chain Treasury.",source:"@site/../docs/learn/learn-polkadot-opengov-treasury.md",sourceDirName:"learn",slug:"/learn-polkadot-opengov-treasury",permalink:"/docs/learn-polkadot-opengov-treasury",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-polkadot-opengov-treasury.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1718028821,formattedLastUpdatedAt:"Jun 10, 2024",frontMatter:{id:"learn-polkadot-opengov-treasury",title:"Treasury",sidebar_label:"Treasury",description:"Polkadot's On-chain Treasury.",keywords:["treasury","funds","funding","tips","tipping"],slug:"../learn-polkadot-opengov-treasury"},sidebar:"docs",previous:{title:"Technical Fellowship",permalink:"/docs/learn-polkadot-technical-fellowship"},next:{title:"Tokens and Assets",permalink:"/docs/learn-assets-index"}},d={},c=[{value:"Treasury Inflow and Outflow",id:"treasury-inflow-and-outflow",level:2},{value:"Treasury Tracks",id:"treasury-tracks",level:2},{value:"Submit Treasury Proposal via Polkassembly",id:"submit-treasury-proposal-via-polkassembly",level:2},{value:"Sub-treasuries",id:"sub-treasuries",level:2},{value:"Multi-Asset Treasury Support",id:"multi-asset-treasury-support",level:2},{value:"Bounties",id:"bounties",level:2},{value:"Parent Bounties",id:"parent-bounties",level:3},{value:"Child Bounties",id:"child-bounties",level:3}],h={toc:c},k="wrapper";function m(e){var t=e.components,l=(0,r.Z)(e,i);return(0,o.kt)(k,(0,n.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The Treasury is a pot of funds collected through a portion of block production rewards,\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-transaction-fees"},"transaction fees"),", ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashing"),", and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-inflation"},"staking inefficiencies"),". Treasury funds are held in a\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-account-advanced#system-accounts"},"system account")," that cannot be controlled by any\nexternal account; only the system internal logic can access it."),(0,o.kt)("admonition",{title:"Creating a Treasury Proposal on Polkadot OpenGov",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you would like to create a treasury proposal on Polkadot OpenGov, follow the instructions\noutlined on ",(0,o.kt)("a",{parentName:"p",href:"./learn-guides-treasury#creating-a-treasury-proposal"},"this how-to guide"),".")),(0,o.kt)("h2",{id:"treasury-inflow-and-outflow"},"Treasury Inflow and Outflow"),(0,o.kt)("p",null,"Tokens that are deposited into the Treasury (i.e. the inflow) is determined by the following\nmechanisms:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Transaction fees:")," 80% of the transaction fees of every submitted extrinsic is diverted to the\nTreasury, while 20% is given to the block producers."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Staking inefficiencies:")," the network knows an exogenously determined parameter called ideal\nstaking rate. The APY for stakers (nominators & validators) decreases whenever the actual staking\nrate is not equal to the ideal staking rate. To keep inflation constant at 10%, the system does\nnot creates less tokens, rather some share of the overall reward for stakers is diverted to the\nTreasury (more information\n",(0,o.kt)("a",{parentName:"li",href:"https://research.web3.foundation/Polkadot/overview/token-economics"},"here"),")."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Slashes:")," whenever validators and nominators are ",(0,o.kt)("a",{parentName:"li",href:"/docs/learn-offenses"},"slashed"),", a share of the\nslashed tokens are diverted to Treasury. They are typically rare and unpredictable events."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Transfers:")," everyone can send funds to the Treasury directly. This is a rare event and\ntypically due to grantees reimbursing some of the amount they got allocated for various reasons.")),(0,o.kt)("p",null,"The outflow is determined by the following mechanisms:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Burned tokens:")," at the end of each spend period\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.treasury.burn",defaultValue:1e4,filter:"permillToPercent",mdxType:"RPC"}),"","%\nof the available funds are burned."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Treasury proposals & Bounties:")," they make up the largest share of outflow tokens to the\ncommunity and need to be approved by governance. Then, payouts occur at the end of a\n",(0,o.kt)("a",{parentName:"li",href:"/docs/glossary#spend-period"},"spend period"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Tips:")," smaller payouts directly to grantees that can happen within a\n",(0,o.kt)("a",{parentName:"li",href:"/docs/glossary#spend-period"},"spend period"),".")),(0,o.kt)("admonition",{title:"Spend Period Schedule",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"On Polkadot-JS UI, navigate to Governance > Treasury to view the status of current\n",(0,o.kt)("a",{parentName:"p",href:"/docs/glossary#spend-period"},"spend period"),"."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("img",{alt:"preimage-whitelist",src:a(29620).Z,width:"2508",height:"413"}))),(0,o.kt)("h2",{id:"treasury-tracks"},"Treasury Tracks"),(0,o.kt)("p",null,"OpenGov allows for managing funds through six tracks, each with its own\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-origins#origins-and-tracks-info"},"origin and track parameters"),"."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#treasurer"},"Treasurer")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#big-spender"},"Big Spender")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#medium-spender"},"Medium Spender")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#small-spender"},"Small Spender")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#big-tipper"},"Big Tipper")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov-origins#small-tipper"},"Small Tipper"))),(0,o.kt)("h2",{id:"submit-treasury-proposal-via-polkassembly"},"Submit Treasury Proposal via Polkassembly"),(0,o.kt)("p",null,"Access to Treasury funds requires successful enactment of referendum in the respective treasury\ntrack on-chain. Learn how to submit a treasury proposal for referendum using\n",(0,o.kt)("a",{parentName:"p",href:"/docs/governance-apps"},"Polkassembly"),"."),(0,o.kt)("p",null,"Go to ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.polkassembly.io/opengov"},"Polkassembly")," and click on the FAB button in the\nbottom right corner. Then,"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},'Click on "Create Treasury Proposal" and choose an address for the proposer')),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"After choosing an address, you will enter a three-stage guideline:"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Write a proposal: you can add a detailed description for the proposal, which will be stored on\nPolkassembly. Alternatively, you can link an existing discussion post.")),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"polkassembly-write-proposal",src:a(90348).Z,width:"2130",height:"1596"})),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Create a preimage: an existing preimage can be linked, or a new one can be created. To create a\npreimage, add the beneficiary address and the\nDOT amount. The track will be auto-selected\nand the user can proceed with the creation of a preimage.")),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"polkassembly-create-preimage",src:a(76869).Z,width:"2154",height:"1598"})),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Create a proposal: final confirmation about the proposal creation. The description of the\nproposal and the preimage are automatically linked to the proposal.")))),(0,o.kt)("h2",{id:"sub-treasuries"},"Sub-treasuries"),(0,o.kt)("p",null,"The Polkadot treasury currently operates on a\nsingle account on-chain. The above tracks manage the outflow of the treasury on the network. With\n",(0,o.kt)("em",{parentName:"p"},"sub"),"-treasuries, having treasury accounts that correspond to each\n",(0,o.kt)("a",{parentName:"p",href:"./learn-system-chains#collectives"},"collective")," is also possible."),(0,o.kt)("p",null,"Rather than have many referenda through OpenGov, the\nPolkadot Treasury can allocate funds to each\nsub-treasury (through ",(0,o.kt)("a",{parentName:"p",href:"./learn-polkadot-opengov"},"governance"),"), from which each respective collective\ncan spend funds (depending on their specific rule set)."),(0,o.kt)("p",null,"New treasuries could be added to respective\n",(0,o.kt)("a",{parentName:"p",href:"./learn-system-chains#existing-system-chains"},"system chains")," through governance by adding more\ninstances of this pallet."),(0,o.kt)("h2",{id:"multi-asset-treasury-support"},"Multi-Asset Treasury Support"),(0,o.kt)("p",null,"The treasuries can support multiple asset types and thus can spend assets other than\nDOT held within the treasury, and their transfers\nand interactions across the chains facilitated by ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-xcm"},"cross-consensus messaging"),". These\nassets have a few requirements:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"The asset is listed on the ",(0,o.kt)("a",{parentName:"li",href:"https://assethub-polkadot.subscan.io/"},"AssetHub system parachain"),"."),(0,o.kt)("li",{parentName:"ol"},"The asset is active and has sufficient liquidity to be utilized for payouts."),(0,o.kt)("li",{parentName:"ol"},"The asset has a set conversion rate, as per OpenGov referenda on the Treasurer track (set via the\nasset rate pallet). This conversion rate defines a fixed-point representation for converting from\nthat asset to DOT."),(0,o.kt)("li",{parentName:"ol"},"The asset must be approved and onboarded via OpenGov to become spendable via the treasury as a\nvalid spend method.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"For example,\n",(0,o.kt)("a",{parentName:"p",href:"https://forum.polkadot.network/t/multi-asset-treasury-and-milestone-based-spends/6780"},"see how USDT became approved as an asset on AssetHub"),",\nwhich can be used in the treasury.")),(0,o.kt)("h2",{id:"bounties"},"Bounties"),(0,o.kt)("h3",{id:"parent-bounties"},"Parent Bounties"),(0,o.kt)("p",null,"Getting treasury funding through OpenGov, depending on which treasury track you submit your\nreferendum, can be a long and uncertain process. This is not always a suitable option, for example,\nfor event organizers who need to pay costs upfront or close to the event's date. Bounties solve this\nproblem by procuring access to treasury funds in a single shot and using them to fund multiple\nevents later on through ",(0,o.kt)("a",{parentName:"p",href:"#child-bounties"},"child bounties"),". This is why bounties are also called\n",(0,o.kt)("em",{parentName:"p"},"parent")," bounties."),(0,o.kt)("p",null,"Parent bounty proposals aim to reserve a portion of treasury funds once, which will be used later.\nThey save proponents the time needed to create and obtain approval for several OpenGov referenda.\nBounties are managed by curators, where the curator is usually a\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-account-multisig"},"multi-signature account"),". Bounties can access a large amount of funds,\nso managing those funds with a multisig is a good practice to enhance security. Essentially,\ncurators are multisig addresses with agency over a portion of the treasury to promote events, fix a\nbug or vulnerability, develop a strategy, or monitor a set of tasks related to a specific topic, all\nfor the benefit of the Polkadot ecosystem."),(0,o.kt)("p",null,"A proposer can ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-bounties#submit-a-bounty-proposal"},"submit a bounty proposal")," to\nOpenGov,\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-bounties#assign-a-curator-to-a-bounty"},"with a curator to be defined later"),", whose\nbackground and expertise is such that they can determine when the task is complete."),(0,o.kt)("p",null,"When submitting the value of the bounty, the proposer can specify a fee that will be paid to\ncurators willing to invest their time and expertise in the task; this amount will be included in the\ntotal value of the bounty. In this sense, the curator's fee can be defined as the difference between\nthe amounts paid to child bounty awardees and the total value of the bounty."),(0,o.kt)("p",null,"Curators are selected through OpenGov referendum after the bounty proposal passes; and they need to\npay an upfront deposit to take the position. The deposit is calculated by multiplying the curator\nfee by\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.bounties.curatorDepositMultiplier",defaultValue:5e5,filter:"permillToPercent",mdxType:"RPC"}),"","%,\nand it can range between a minimum of\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.bounties.curatorDepositMin",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"","\nand a maximum of\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.bounties.curatorDepositMax",defaultValue:2e12,filter:"humanReadable",mdxType:"RPC"}),"",".\nThis deposit can be used to punish curators if they act maliciously. However, if they are successful\nin managing the bounty to completion, they will receive their deposit back, and part of the bounty\nfunding as a payment for their efforts."),(0,o.kt)("p",null,"Curators are expected to have a decent track record in addressing the issues the bounty wants to\nsolve. They should be very knowledgeable on the topics covered by the bounty and have proven project\nmanagement skills or experience. These recommendations help ensure an effective use of the bounty\nmechanism. A Bounty is a reward for a specified body of work or set of objectives that needs to be\nexecuted for a predefined treasury amount designated to be paid out. The responsibility of assigning\na payout address once the specified set of objectives is completed is delegated to the curator."),(0,o.kt)("p",null,"The bounty has a predetermined duration of\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.bounties.bountyUpdatePeriod",defaultValue:1296e3,filter:"blocksToDays",mdxType:"RPC"}),"","\ndays, with possible extension(s) to be requested by the curator. To maintain flexibility during the\ntasks\u2019 curation, the curator will also be able to create child bounties for more granularity in the\nallocation of funds and as part of a nested iteration of the bounty mechanism."),(0,o.kt)("h3",{id:"child-bounties"},"Child Bounties"),(0,o.kt)("p",null,"Child bounties are spawned from ",(0,o.kt)("a",{parentName:"p",href:"#parent-bounties"},"parent bounties"),". Child bounties are used to\naccess funds directly from the parent bounty without going through an OpenGov referendum."),(0,o.kt)("hr",null),(0,o.kt)("admonition",{title:"Polkadot-JS Guides",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If you are an advanced user, see the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-bounties"},"Polkadot-JS guides about bounties"),"\nand ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-treasury"},"treasury"),".")))}m.isMDXComponent=!0},76869:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkassembly-create-preimage-7396a8ce796d0f0dcad30d3edced8618.png"},90348:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkassembly-write-proposal-a3ce8ab9303111f6003ac8103ba29507.png"},29620:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/treasury-spend-period-a4883f21d69a6f05ca497b9893cc89a5.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/41b7b3e8.0499e4ef.js b/assets/js/41b7b3e8.0499e4ef.js deleted file mode 100644 index 07344051a276..000000000000 --- a/assets/js/41b7b3e8.0499e4ef.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[3513],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),i=a(15861),o=a(67294),s=a(87152),r=a(9712),l=a(67425);function d(e,t,a){return h.apply(this,arguments)}function h(){return(h=(0,i.Z)((0,n.Z)().mark((function e(t,a,i){var o,l,d,h,c;return(0,n.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 d=new s.U(o),e.next=21,r.G.create({provider:d});case 21:h=e.sent,(c=a.split(".")).forEach((function(e){e in h&&(h=h[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=h.toString(),e.abrupt("break",35);case 29:return e.next=31,h();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(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,s=e.defaultValue,r=e.filter,l=void 0===r?void 0:r,h=(0,o.useState)(""),p=h[0],m=h[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?c(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;case"kusama-people":e="wss://kusama-people-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,i.Z)((0,n.Z)().mark((function e(){var i;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d(t,a,m);case 2:if(void 0!==(i=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(i,l,t,m):m(i);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="statemine",i="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,r){var l=void 0;if(s===t||s===i)l=3;else{if(s!==a&&s!==n)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/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 r=void 0;if(s===t||s===i)r=1;else{if(s!==a&&s!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((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())}}},84358:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>h,toc:()=>p});var n=a(87462),i=a(63366),o=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-staking-advanced",title:"Advanced Staking Concepts",sidebar_label:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","proxies","payouts","simple payouts","rewards","staking miner","phragm\xe9n"],slug:"../learn-staking-advanced"},d=void 0,h={unversionedId:"learn/learn-staking-advanced",id:"learn/learn-staking-advanced",title:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",source:"@site/../docs/learn/learn-staking-advanced.md",sourceDirName:"learn",slug:"/learn-staking-advanced",permalink:"/docs/learn-staking-advanced",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-staking-advanced.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1718028821,formattedLastUpdatedAt:"Jun 10, 2024",frontMatter:{id:"learn-staking-advanced",title:"Advanced Staking Concepts",sidebar_label:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","proxies","payouts","simple payouts","rewards","staking miner","phragm\xe9n"],slug:"../learn-staking-advanced"},sidebar:"docs",previous:{title:"Accounts",permalink:"/docs/learn-account-advanced"},next:{title:"NFT Pallets",permalink:"/docs/learn-nft-pallets"}},c={},p=[{value:"Staking Proxies",id:"staking-proxies",level:2},{value:"Bags List",id:"bags-list",level:2},{value:"Rewards Distribution",id:"rewards-distribution",level:2},{value:"Commission Fees & Slashes",id:"commission-fees--slashes",level:4},{value:"Simple Payouts",id:"simple-payouts",level:2},{value:"Claiming Rewards",id:"claiming-rewards",level:3},{value:"FAQ and Cautionary Notes",id:"faq-and-cautionary-notes",level:3},{value:"Staking Miner",id:"staking-miner",level:2},{value:"NPoS election optimization",id:"npos-election-optimization",level:3},{value:"Signed Phase of the election pallet",id:"signed-phase-of-the-election-pallet",level:3},{value:"Deposit and reward mechanics",id:"deposit-and-reward-mechanics",level:3},{value:"Deposit",id:"deposit",level:4},{value:"Reward",id:"reward",level:4},{value:"Further Resources",id:"further-resources",level:3}],m={toc:p},u="wrapper";function k(e){var t=e.components,l=(0,i.Z)(e,r);return(0,o.kt)(u,(0,n.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Start your staking journey or explore more information about staking on\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Home Page"),". Discover the new\n",(0,o.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Staking Dashboard")," that makes staking much easier and\ncheck this\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started. You can now stake on\nPolkadot natively with just\n",(0,o.kt)(s.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"}),"\n","\nand earn staking rewards. For additional information, check out\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".")),(0,o.kt)("p",null,"This page is meant to be an advanced guide to staking with\nPolkadot. For a more general introduction,\ncheckout the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"Introduction to Staking")," page."),(0,o.kt)("h2",{id:"staking-proxies"},"Staking Proxies"),(0,o.kt)("p",null,"Polkadot makes it possible to create accounts\nhaving special permissions also called ",(0,o.kt)("strong",{parentName:"p"},"proxy accounts"),". For more details about proxy accounts\nvisit the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"dedicated page")," on this wiki."),(0,o.kt)("p",null,"Proxy accounts are special accounts which can sign\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-transactions#pallets-and-extrinsics"},(0,o.kt)("strong",{parentName:"a"},"extrinsic calls"))," made to specific ",(0,o.kt)("strong",{parentName:"p"},"pallets"),"\non behalf of the proxied account. There is thus the possibility to create staking proxy accounts\nthat can be used to sign extrinsic calls specific to the staking, session and utility pallets."),(0,o.kt)("p",null,"Staking on Polkadot is not a set-and-forget\naction, as a nominator you will need to monitor the performance of your validators and make changes\nif needed. There will be this transactions such as nominating that will be needed to regularly\nsigned. Each time you sign with an account, in the case of hot accounts, you expose the private key\nof that account to the internet with consequent risk of attack. A hot stash will be exposed all the\ntime a transaction is signed. Even in the case of a cold stash created with a Ledger device, signing\nwith the stash will build a transaction history that might tell something about your habits and\npreferences, or even your location."),(0,o.kt)("p",null,"Ideally, accounts with high economic power like the stash must be and remain as isolated as\npossible. With a staking proxy, the stash account is fully isolated when signing for staking-related\ntransactions. The proxy private key will be used to sign staking-related transactions, the stash\nprivate key will stay isolated and the staking transaction history will be built by the proxy."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"stash-stakingProxy",src:a(56789).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"For a practical perspective we need to use only one account and remember one password to sign for\nall staking-related transactions. From a security perspective who controls the staking proxy\ncontrols our staking actions."),(0,o.kt)("p",null,"It is important to remember that actions that can be performed by the proxy accounts are limited,\nand in the case of staking proxy, extrinsic calls to the balances pallet cannot be signed. This\nmeans it is not possible to do balance transfers on the proxied account through a staking proxy."),(0,o.kt)("p",null,"Note that to change the staking proxy you will need to sign with the stash or an ",(0,o.kt)("em",{parentName:"p"},"any")," proxy."),(0,o.kt)("h2",{id:"bags-list"},"Bags List"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"On Polkadot and Kusama, the instance of the pallet\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_bags_list/"},"Bags-List")," is named as\n'voterList'."),(0,o.kt)("p",{parentName:"admonition"},"For a demo about bags list see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/hIIZRJLrBZA"},"this video tutorial"),".")),(0,o.kt)("p",null,"In Polkadot's NPoS nomination intents are\nplaced in a semi-sorted list called ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/pull/9507"},"bags-list"),".\nThe\nBags-List substrate pallet is designed to be self-maintaining, with minimal effort from the\nblockchain, making it extremely scalable. The bags list has two primary components, bags and nodes\n(or nominators' accounts), with bags containing the nodes with bonded balance within a specific\nrange. In the figure below the 1st empty bag will contain nominators whose bonded balance is in the\nrange of 21 - 30 DOT, the 2nd bag 11 - 20 DOT, and the 3rd bag 0-10 DOT. The nomination intents are\nthe nominators' accounts with bonded tokens (in the example shown below, there are eight nomination\nintents) that will be put inside each of those three bags depending on their stake."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 0",src:a(71842).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The bags list is semi-sorted, meaning that sorting is only partially done. When the nomination\nintents are submitted to the network, they are automatically put into each bag based on the number\nof bonded tokens, but within each bag, those nodes are arranged based on the time they are inserted\nand not based on their stake (see figure below). When the nomination intent of 19 DOT is submitted,\nit gets placed at the last spot in the 2nd bag (shown in the yellow circle). The same scenario\napplies for the node with 8 DOT (green circle) in the 3rd bag. Placing the node above all nodes with\na lesser stake requires an additional step (more on this later)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 1",src:a(79098).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The mentioned two nodes (19 DOT and 8 DOT) have the option to move up in their respective bags,\nwhich can put them in front of the nodes with less stake than them (see figure below). This action\nmust be done manually by submitting the ",(0,o.kt)("inlineCode",{parentName:"p"},"putInFrontOf")," extrinsic within the ",(0,o.kt)("inlineCode",{parentName:"p"},"voterList")," pallet\ninstance. Moreover, if the node with 19 DOT bonds an additional 2 DOT, that node will be put\nautomatically in the 1st bag (i.e. automatic ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag"),') because the total number of bonded tokens will\nnow be within the range of the 1st bag. That node with now 21 DOT will be put at the tail end of the\n1st bag with the possibility to manually put itself in front of "older" nodes with less than 21 DOT\n(if there are any).'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 2",src:a(86983).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"If one decides to send staking rewards to the stash account and automatically bond them (i.e.\ncompounding the staking rewards), the position within a bag does not change automatically. The same\nscenario applies to a slashing event, i.e., when a nominator gets slashed, their position within a\nbag does not change. This might result in a scenario where the node is in the wrong bag and needs to\nbe placed in the right bag. To address this issue, any account on-chain can submit the\npermissionless extrinsic ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag")," within the ",(0,o.kt)("inlineCode",{parentName:"p"},"voterList")," pallet instance to update the positions of\nthe nodes that do not belong to their bag and place them in the correct one. To reiterate, actions\nlike bonding/unbonding tokens automatically rebag the nominator node, but events like staking\nrewards/slashing do not. See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator#bags-list"},"bags-list")," section for more\ninformation."),(0,o.kt)("p",null,"The bags-list is capable of including an unlimited number of nodes, subject to the chain's runtime\nstorage. In the current staking system configuration, the bags list keeps\n",(0,o.kt)(s.Z,{network:"polkadot",path:"query.staking.maxNominatorsCount",defaultValue:5e4,mdxType:"RPC"}),"\n","\nnomination intents, of which, at most 22500\ncome out as the electing nominators. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator#staking-election-stages"},"Staking Election Stages")," section for more info."),(0,o.kt)("p",null,"This means that only a portion of the nomination intents is kept. Once the nomination period ends,\nthe NPoS election system takes all nomination intents and their associated votes as input, and it\noutputs a set of validators. The bags are iterated from the most staked to the least staked. If the\naccounts are not appropriately sorted, this could leave the last touched bag to only be partially\niterated. Thus, in some edge cases, the order of the members within a bag is important. Continuing\nwith the example used in the previous figures, there are 8 nomination intents of which only 7 will\nbe kept. If the bags list stays semi-sorted (i.e. no accounts call the ",(0,o.kt)("inlineCode",{parentName:"p"},"putInFrontOf")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag"),"\nextrinsics), the nomination of the node with 8 DOT in the 3rd bag will not be considered while that\nof the preceding node with 5 DOT will be. Nomination of the node with 8 DOT will be kept only if it\nputs itself in front of the one with 5 DOT. Note how the nomination of the node with 19 DOT in the\n2nd bag will be considered regardless of changing its position inside the bag. The sorting\nfunctionality of nomination intents using bags is extremely important for the\n",(0,o.kt)("a",{parentName:"p",href:"https://gist.github.com/kianenigma/aa835946455b9a3f167821b9d05ba376"},"long-term improvements")," of the\nstaking/election system."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 3",src:a(54258).Z,width:"1920",height:"800"})),(0,o.kt)("admonition",{title:"Minimum active nomination threshold to earn rewards is dynamic",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Submitting a nomination intent does not guarantee staking rewards. The stake of the top\n22500 nominators is applied to the validators\nin the active set. To avail of staking rewards, ensure that the number of tokens bonded is higher\nthan the minimum active bond. For more information, see the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"nominator guide"),".")),(0,o.kt)("p",null,'The "election solution" which is a connected graph between nominators and validators with the stake\nas edge weights, has to meet certain requirements, such as maximizing the amount of stake to\nnominate validators and distributing the stake backing validators as evenly as possible. The\nobjectives of this election mechanism are to maximize the security of the network, and achieve fair\nrepresentation of the nominators. If you want to know more about how NPoS works (e.g. election,\nrunning time complexity, etc.), please read\n',(0,o.kt)("a",{parentName:"p",href:"http://research.web3.foundation/en/latest/polkadot/NPoS.html"},"here"),"."),(0,o.kt)("h2",{id:"rewards-distribution"},"Rewards Distribution"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The general rule for rewards across validators is that two validators get paid essentially the same\namount of tokens for equal work, i.e. they are not paid proportional to their total stakes. There is\na probabilistic component to staking rewards in the form of\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout##era-points"},"era points")," and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-transaction-fees#fee-calculation"},"tips")," but these should average out over time.")),(0,o.kt)("p",null,"Validators are paid the same regardless of stake backing them. Validators with less stake will\ngenerally pay more to nominators per-token than the ones with more stake. This gives nominators an\neconomic incentive to gradually shift their preferences to lower-staked validators that gain a\nsufficient amount of reputation. A consequence of this is that the stake across validators will be\nas evenly distributed as possible which avoids concentration of power among a few validators. In the\nlong term, validators will have similar levels of stake, with the stake being higher for validators\nwith higher reputation. A nominator who is willing to risk more by backing a validator with a lower\nreputation will get paid more, provided there are no slashing events."),(0,o.kt)("p",null,"Before distributing rewards to nominators, validators can create a cut of the reward (a commission)\nthat is not shared with the nominators. This cut is a percentage of the block reward, not an\nabsolute value. After the commission gets deducted, the remaining portion is distributed pro-rata\nbased on their staked value and split between the validator and all of the nominators whose stake\nhas backed this validator."),(0,o.kt)("p",null,"For example, assume the block reward for a validator is 10 DOT. A validator may specify\n",(0,o.kt)("inlineCode",{parentName:"p"},"validator_commission = 50%"),", in which case the validator would receive 5 DOT. The remaining 5 DOT\nwould then be split between the validator and their nominators based on the proportion of stake each\nnominator had. Note that for this calculation, validator's self-stake acts just as if they were\nanother nominator."),(0,o.kt)("p",null,"Thus, a percentage of the reward goes thus to pay the validator's commission fees and the remainder\nis paid pro-rata (i.e. proportional to stake) to the nominators and validator. If a validator's\ncommission is set to 100%, no tokens will be paid out to any of the nominators. Notice in particular\nthat the validator is rewarded twice: once in commission fees for validating (if their commission\nrate is above 0%), and once for nominating itself with own stake."),(0,o.kt)("p",null,"The following example should clarify the above. For simplicity, we have the following assumptions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"These validators do not have a stake of their own."),(0,o.kt)("li",{parentName:"ul"},"They each receive the same number of era points."),(0,o.kt)("li",{parentName:"ul"},"There are no tips for any transactions processed."),(0,o.kt)("li",{parentName:"ul"},"They do NOT charge any commission fees."),(0,o.kt)("li",{parentName:"ul"},"Total reward amount is 100 DOT tokens."),(0,o.kt)("li",{parentName:"ul"},"The current minimum amount of DOT to be a validator is 350 (note that this is ",(0,o.kt)("em",{parentName:"li"},"not")," the actual\nvalue, which fluctuates, but merely an assumption for purposes of this example; to understand how\nthe actual minimal stake is calculated, see\n",(0,o.kt)("a",{parentName:"li",href:"/docs/faq#what-is-the-minimum-stake-necessary-to-be-elected-as-an-active-validator"},"here"),").")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Validator A")),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Nominator (4)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Stake (600)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Fraction of the Total Stake"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Rewards")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Jin"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.167"),(0,o.kt)("td",{parentName:"tr",align:"center"},"16.7")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Sam")),(0,o.kt)("td",{parentName:"tr",align:"center"},"50"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.083"),(0,o.kt)("td",{parentName:"tr",align:"center"},"8.3")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Anson"),(0,o.kt)("td",{parentName:"tr",align:"center"},"250"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.417"),(0,o.kt)("td",{parentName:"tr",align:"center"},"41.7")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Bobby"),(0,o.kt)("td",{parentName:"tr",align:"center"},"200"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.333"),(0,o.kt)("td",{parentName:"tr",align:"center"},"33.3")))),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Validator B")),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Nominator (4)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Stake (400)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Fraction of the Total Stake"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Rewards")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Alice"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.25"),(0,o.kt)("td",{parentName:"tr",align:"center"},"25")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Peter"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.25"),(0,o.kt)("td",{parentName:"tr",align:"center"},"25")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"John"),(0,o.kt)("td",{parentName:"tr",align:"center"},"150"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.375"),(0,o.kt)("td",{parentName:"tr",align:"center"},"37.5")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Kitty")),(0,o.kt)("td",{parentName:"tr",align:"center"},"50"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.125"),(0,o.kt)("td",{parentName:"tr",align:"center"},"12.5")))),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Both validators A & B have 4 nominators with a total stake 600 and 400 respectively.")),(0,o.kt)("p",null,"Based on the above rewards distribution, nominators of validator B get more rewards per DOT than\nthose of validator A because A has more overall stake. Sam has staked 50 DOT with validator A, but\nhe only gets 8.3 in return, whereas Kitty gets 12.5 with the same amount of stake."),(0,o.kt)("p",null,"To estimate how many tokens you can get each month as a nominator or validator, you can use this\n",(0,o.kt)("a",{parentName:"p",href:"https://www.stakingrewards.com/earn/polkadot/calculate"},"tool")," as a reference and play around with\nit by changing some parameters (e.g. how many days you would like to stake with your DOT, provider\nfees, compound rewards, etc.) to have a better estimate. Even though it may not be entirely accurate\nsince staking participation is changing dynamically, it works well as an indicator."),(0,o.kt)("h4",{id:"commission-fees--slashes"},"Commission Fees & Slashes"),(0,o.kt)("p",null,"The network ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashes")," a validator for a misbehavior. The slashed amount is a\nfixed percentage (and not a fixed amount), which means that validators with more stake get slashed\nmore DOT. Again, this is done to provide nominators with an economic incentive to shift their\npreferences and back less popular validators whom they consider to be trustworthy."),(0,o.kt)("p",null,"Also, note that each validator candidate is free to name their desired commission fee (as a\npercentage of rewards) to cover operational costs. Since validators are paid the same, validators\nwith lower commission fees pay more to nominators than validators with higher fees. Thus, each\nvalidator can choose between increasing their fees to earn more, or decreasing their fees to attract\nmore nominators and increase their chances of being elected. In the long term, we expect that all\nvalidators will need to be cost-efficient to remain competitive, and that validators with higher\nreputation will be able to charge slightly higher commission fees (which is fair)."),(0,o.kt)("h2",{id:"simple-payouts"},"Simple Payouts"),(0,o.kt)("p",null,"Polkadot makes stakers claim their rewards for\npast eras by submitting a transaction. This naturally leads to spreading out reward distribution, as\npeople make transactions at disparate times, rather than updating the accounts of all stakers in a\nsingle block."),(0,o.kt)("p",null,"Even if everyone submitted a reward claim at the same time, the fact that they are individual\ntransactions would allow the block construction algorithm to process only a limited number per block\nand ensure that the network maintains a constant block time. If all rewards were sent out in one\nblock, this could cause serious issues with the stability of the network."),(0,o.kt)("p",null,"Simple payouts require one transaction per validator, per ",(0,o.kt)("a",{parentName:"p",href:"/docs/glossary##era"},"era"),", to\nclaim rewards. The reason Polkadot requires\nthis is to avoid an attack where someone has several thousand accounts nominating a single\nvalidator. The major cost in reward distribution is mutating the accounts in storage, and\nPolkadot cannot pay out several thousand\naccounts in a single transaction."),(0,o.kt)("h3",{id:"claiming-rewards"},"Claiming Rewards"),(0,o.kt)("p",null,"Polkadot stores the last 84 eras of reward\ninformation (e.g. maps of era number to validator points, staking rewards, nomination exposure,\netc.). Rewards will not be claimable more than 84 eras after they were earned. This means that all\nrewards must be claimed within a maximum of 84 eras, although under certain circumstances (described\nbelow) this may be as low as 28 eras."),(0,o.kt)("p",null,"If a validator kills their stash, any remaining rewards will no longer be claimable. Before doing\nthis, however, they would need to first stop validating and then unbond the funds in their stash,\nwhich takes 28 eras. If a validator were to immediately chill and start unbonding after rewards are\ncalculated, and nobody issued a payout for that era from that validator in the next 28 eras, the\nreward would no longer be claimable."),(0,o.kt)("admonition",{title:"Advanced How-to Guides",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"In order to be absolutely sure that staking rewards can be claimed, users should trigger a payout\nbefore 28 eras have passed. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#claiming-rewards-with-the-polkadot-js-ui"},"this page")," for more\ninformation about how to claim rewards using the Polkadot-JS UI.")),(0,o.kt)("h3",{id:"faq-and-cautionary-notes"},"FAQ and Cautionary Notes"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Rewards expire after 84 eras. On Polkadot, that's about 84 days. On Kusama, it is approximately\n21 days. Validators should claim all pending rewards before killing their stash in the event the\nvalidator decides to ",(0,o.kt)("inlineCode",{parentName:"li"},"chill")," -> ",(0,o.kt)("inlineCode",{parentName:"li"},"unbonds all")," -> ",(0,o.kt)("inlineCode",{parentName:"li"},"withdraws unbonded"),". Nominators will not miss\nout on rewards if they claim the pending rewards for a validator within 28 days. Essentially, the\ndeadline to ensure you get staking rewards is 28 eras. If the validator verifies its intent and\ndoes not unbond and withdraw, the 84 era timeline holds."),(0,o.kt)("li",{parentName:"ol"},"Claiming rewards (or neglecting to claim rewards) does not affect nominations in any way.\nNominations will persist after claiming rewards or after the rewards expire."),(0,o.kt)("li",{parentName:"ol"},'Rewards are not minted until they are claimed. Therefore, if your reward destination is "stash,\nincreasing amount at stake", then your staked amount does not reflect your rewards until you\nclaim them. If you want to maximize compounding, then you will need to claim often or nominate\nvalidators which regularly claim for you.'),(0,o.kt)("li",{parentName:"ol"},"Staking operations at the end of an era are closed to allow the off-chain validator election to\ntake place. See ",(0,o.kt)("a",{parentName:"li",href:"/docs/learn-phragmen#off-chain-phragmen"},"Off-chain Phragm\xe9n")," for more information.")),(0,o.kt)("h2",{id:"staking-miner"},"Staking Miner"),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The staking-miner code is experimental and it is still in the development phase. Use is at your own\ndiscretion, as there is a risk of losing some funds.")),(0,o.kt)("p",null,"At the end of each era on Polkadot and Kusama, using ",(0,o.kt)("a",{parentName:"p",href:"learn-phragmen"},"NPoS"),', a new set of validators\nmust be elected based on the nominator preferences. This is a computationally intensive process,\nhence the usage of the term "mining" for computing the solution. The validators use\n',(0,o.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/how-to-guides/offchain-workers/"},"off-chain workers")," to compute\nthe result and submit a transaction to propose the set of winners. This can also be delegated to\nstand-alone programs, whose task is to mine the optimal solution. Staking miners compete with each\nother to produce election solutions which consist of a validator set, stake distribution across that\nset, and a score indicating how optimal the solution is. Staking miners run any given staking\nalgorithms (as of now, sequential Phragm\xe9n or PhragMMS, subject to change if improved algorithms are\nintroduced) to produce results, which are then sent as a transaction to the relay chain via a normal\nsigned extrinsic. The transaction requires a bond and a transaction fee. The best solution is\nrewarded, which the least covers the transaction fee, and the bond is returned to the account.\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#deposit-and-reward-mechanics"},"The bond and the fee")," are lost if the\nsolution is invalid."),(0,o.kt)("p",null,"Staking miner uses a pallet called ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet_election_provider_multi_phase")," and can only produce\nsolutions during the\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html#signed-phase"},(0,o.kt)("inlineCode",{parentName:"a"},"SignedPhase")),"\nof the pallet's life cycle. Once the ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedPhase")," is over and the\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html#unsigned-phase"},(0,o.kt)("inlineCode",{parentName:"a"},"UnsignedPhase")),"\nstarts, only the off-chain workers can provide election results."),(0,o.kt)("p",null,"Running the staking miner requires passing the seed of a funded account in order to pay the fees for\nthe transactions that will be sent. The same account's balance is used to reserve deposits as well.\nThe best solution in each round is rewarded. All correct solutions will get their deposit back and\nthe ones that submit invalid solutions will lose their deposit."),(0,o.kt)("h3",{id:"npos-election-optimization"},"NPoS election optimization"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"NPoS election optimization",src:a(83471).Z,width:"1868",height:"804"})),(0,o.kt)("p",null,"A basic election solution is a simple distribution of stake across validators, but this can be\noptimized for better distribution equaling a higher security score. The staking miner does not act\nas a validator and focuses solely on the election result and optimization of the solution. It\nconnects to a specified chain and keeps listening to new signed phase of the election pallet in\norder to submit solutions to the NPoS election. When the correct time comes, it computes its\nsolution and submits it to the chain. The default miner algorithm is sequential Phragm\xe9n with a\nconfigurable number of balancing iterations that improve the score."),(0,o.kt)("h3",{id:"signed-phase-of-the-election-pallet"},"Signed Phase of the election pallet"),(0,o.kt)("p",null,"The election provider pallet ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet_election_provider_multi_phase")," is divided into two phases,\n",(0,o.kt)("strong",{parentName:"p"},"signed")," and ",(0,o.kt)("strong",{parentName:"p"},"unsigned"),". At the end of the pallet's timeline, the function ",(0,o.kt)("inlineCode",{parentName:"p"},"elect()")," is called."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," elect()\n + <--T::SignedPhase--\x3e + <--T::UnsignedPhase--\x3e +\n +-------------------------------------------------------------------+\n Phase::Off + Phase::Signed + Phase::Unsigned +\n")),(0,o.kt)("p",null,"Solutions provided by the staking miner can only be submitted during the signed phase. Solutions are\nsubmitted and queued on the chain as a ",(0,o.kt)("inlineCode",{parentName:"p"},"RawSolution"),". Once submitted, a solution cannot be retracted\nby the originating account."),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"RawSolution")," struct definition:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"pub struct RawSolution {\n pub solution: S, // The solution itself\n pub score: ElectionScore, // The claimed score of the solution.\n pub round: u32, // The round at which this solution should be submitted.\n}\n")),(0,o.kt)("p",null,"A maximum of ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet::Config::SignedMaxSubmissions")," will be stored on-chain and they will be sorted\nbased on score. Higher the score the more optimal the election solution is. On both Polkadot and\nKusama the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f610ffc05876d4b98a14cee245b4cc27bd3c0c15/runtime/polkadot/src/lib.rs#L390"},"'SignedMaxSubmissions'"),"\nis set to\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedMaxSubmissions",defaultValue:16,mdxType:"RPC"}),"\n","\nsubmissions. This variable can be modified if needed through governance."),(0,o.kt)("p",null,"Upon arrival of a new solution:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"If the queue is not full, it is stored in the appropriate sorted index."),(0,o.kt)("li",{parentName:"ol"},"If the queue is full but the submitted solution is better than one of the queued ones, the worse\nsolution is discarded, the deposit of the outgoing solution is returned, and the new solution is\nstored in the correct index."),(0,o.kt)("li",{parentName:"ol"},"If the queue is full and the solution is not an improvement compared to any of the queued ones,\nit is instantly rejected and no deposit is reserved.")),(0,o.kt)("p",null,"Upon the end of the ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedPhase"),", no more solutions can be submitted and the solutions in the queue\nwill be checked using\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_election_provider_multi_phase/pallet/struct.Pallet.html#method.feasibility_check"},(0,o.kt)("inlineCode",{parentName:"a"},"Pallet::feasibility_check")),"\nwhich ensures the score is indeed correct, and marks them as valid or invalid. By checking each\nsolution in the queue, the queue will be reorganized by score. The highest valid score will be\nrewarded. Invalid solutions with higher score than the winning solution will be slashed. The rest of\nthe solutions will be discarded and their deposit will be returned. Once the staking miner with a\nwinning solution is ready to be rewarded the runtime will automatically execute\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/f2bc08a3071a91b71fec63cf2b22c707411cec0e/frame/election-provider-multi-phase/src/signed.rs#L453-L474"},(0,o.kt)("inlineCode",{parentName:"a"},"finalize_signed_phase_accept_solution")),"\nwhich reward account associated with the winning solution."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Queue\n+-------------------------------+\n|Solution(score=20, valid=false)| +--\x3e Slashed\n+-------------------------------+\n|Solution(score=15, valid=true )| +--\x3e Rewarded, Saved\n+-------------------------------+\n|Solution(score=10, valid=true )| +--\x3e Discarded\n+-------------------------------+\n|Solution(score=05, valid=false)| +--\x3e Discarded\n+-------------------------------+\n| None |\n+-------------------------------+\n")),(0,o.kt)("h3",{id:"deposit-and-reward-mechanics"},"Deposit and reward mechanics"),(0,o.kt)("p",null,"The staking miners are required to pay a deposit to post their solutions. Deposit amount is the sum\nof ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositBase")," +",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositByte")," + ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositWeight"),". All good solutions are subject\nto receiving a ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedRewardBase"),"."),(0,o.kt)("h4",{id:"deposit"},"Deposit"),(0,o.kt)("p",null,"Current deposit(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositBase"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedDepositBase",defaultValue:4e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nwhich is a fixed amount."),(0,o.kt)("p",null,"Current deposit per byte(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositByte"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedDepositByte",defaultValue:97656,filter:"precise",mdxType:"RPC"}),"\n","\nand the total is variable depending on the size of the solution data. For example, a solution\nweighing 200KB would yield 200 x 0.0000097656 = ",(0,o.kt)("strong",{parentName:"p"},"0.00195312 DOT"),".\n",""),(0,o.kt)("p",null,"And the weight deposit(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositWeight"),") is currently set to ",(0,o.kt)("inlineCode",{parentName:"p"},"0")," and has no effect."),(0,o.kt)("h4",{id:"reward"},"Reward"),(0,o.kt)("p",null,"Current reward(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedRewardBase"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedRewardBase",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"\n","\nwhich is a fixed amount."),(0,o.kt)("h3",{id:"further-resources"},"Further Resources"),(0,o.kt)("p",null,"If you want to run a staking miner on your validator, refer to the repository provided in the\nresources section below."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/staking-miner-v2"},"Staking Miner repository")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html"},"Election Pallet definition")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot-sdk/blob/f610ffc05876d4b98a14cee245b4cc27bd3c0c15/runtime/polkadot/src/lib.rs#L389:L397"},"Signed phase parameter configuration on Polkadot"))))}k.isMDXComponent=!0},71842:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-0-6836e3658c32484103ffcd06d6372427.png"},79098:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-1-6aeffdb212b7af723f00e38b40780dcc.png"},86983:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-2-aec08a8679a23e697f416374cbcdf735.png"},54258:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-3-08c2b290f95e036e026f667fca527704.png"},83471:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/NPoS-election-optimization-3ef1b7bd0a99f64c4198511b4216989d.png"},56789:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/stash-vs-stash-and-staking-proxy-2104e1a23d5c29821cec15fb9b67eba5.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/41b7b3e8.164ce82d.js b/assets/js/41b7b3e8.164ce82d.js new file mode 100644 index 000000000000..fb265b573e38 --- /dev/null +++ b/assets/js/41b7b3e8.164ce82d.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[3513],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var n=a(74165),i=a(15861),o=a(67294),s=a(87152),r=a(9712),l=a(67425);function d(e,t,a){return h.apply(this,arguments)}function h(){return(h=(0,i.Z)((0,n.Z)().mark((function e(t,a,i){var o,l,d,h,c;return(0,n.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 d=new s.U(o),e.next=21,r.G.create({provider:d});case 21:h=e.sent,(c=a.split(".")).forEach((function(e){e in h&&(h=h[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=h.toString(),e.abrupt("break",35);case 29:return e.next=31,h();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(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,s=e.defaultValue,r=e.filter,l=void 0===r?void 0:r,h=(0,o.useState)(""),p=h[0],m=h[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==l?c(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;case"kusama-people":e="wss://kusama-people-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,i.Z)((0,n.Z)().mark((function e(){var i;return(0,n.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d(t,a,m);case 2:if(void 0!==(i=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(i,l,t,m):m(i);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(r){console.log(r)}}}),[]),p}},67425:e=>{var t="polkadot",a="kusama",n="statemine",i="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,r){var l=void 0;if(s===t||s===i)l=3;else{if(s!==a&&s!==n)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/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 r=void 0;if(s===t||s===i)r=1;else{if(s!==a&&s!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");r=4}o((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())}}},84358:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>h,toc:()=>p});var n=a(87462),i=a(63366),o=(a(67294),a(3905)),s=a(47940),r=["components"],l={id:"learn-staking-advanced",title:"Advanced Staking Concepts",sidebar_label:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","proxies","payouts","simple payouts","rewards","staking miner","phragm\xe9n"],slug:"../learn-staking-advanced"},d=void 0,h={unversionedId:"learn/learn-staking-advanced",id:"learn/learn-staking-advanced",title:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",source:"@site/../docs/learn/learn-staking-advanced.md",sourceDirName:"learn",slug:"/learn-staking-advanced",permalink:"/docs/learn-staking-advanced",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-staking-advanced.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1719391505,formattedLastUpdatedAt:"Jun 26, 2024",frontMatter:{id:"learn-staking-advanced",title:"Advanced Staking Concepts",sidebar_label:"Advanced Staking Concepts",description:"Advanced Concepts about Staking on Polkadot.",keywords:["staking","stake","nominate","nominating","NPoS","proxies","payouts","simple payouts","rewards","staking miner","phragm\xe9n"],slug:"../learn-staking-advanced"},sidebar:"docs",previous:{title:"Accounts",permalink:"/docs/learn-account-advanced"},next:{title:"NFT Pallets",permalink:"/docs/learn-nft-pallets"}},c={},p=[{value:"Staking Proxies",id:"staking-proxies",level:2},{value:"Bags List",id:"bags-list",level:2},{value:"Rewards Distribution",id:"rewards-distribution",level:2},{value:"Commission Fees & Slashes",id:"commission-fees--slashes",level:4},{value:"Simple Payouts",id:"simple-payouts",level:2},{value:"Claiming Rewards",id:"claiming-rewards",level:3},{value:"FAQ and Cautionary Notes",id:"faq-and-cautionary-notes",level:3},{value:"Staking Miner",id:"staking-miner",level:2},{value:"NPoS election optimization",id:"npos-election-optimization",level:3},{value:"Signed Phase of the election pallet",id:"signed-phase-of-the-election-pallet",level:3},{value:"Deposit and reward mechanics",id:"deposit-and-reward-mechanics",level:3},{value:"Deposit",id:"deposit",level:4},{value:"Reward",id:"reward",level:4},{value:"Further Resources",id:"further-resources",level:3}],m={toc:p},u="wrapper";function k(e){var t=e.components,l=(0,i.Z)(e,r);return(0,o.kt)(u,(0,n.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Start your staking journey or explore more information about staking on\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Home Page"),". Discover the new\n",(0,o.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/#/overview"},"Staking Dashboard")," that makes staking much easier and\ncheck this\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started. You can now stake on\nPolkadot natively with just\n",(0,o.kt)(s.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"}),"\n","\nand earn staking rewards. For additional information, check out\n",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".")),(0,o.kt)("p",null,"This page is meant to be an advanced guide to staking with\nPolkadot. For a more general introduction,\ncheckout the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"Introduction to Staking")," page."),(0,o.kt)("h2",{id:"staking-proxies"},"Staking Proxies"),(0,o.kt)("p",null,"Polkadot makes it possible to create accounts\nhaving special permissions also called ",(0,o.kt)("strong",{parentName:"p"},"proxy accounts"),". For more details about proxy accounts\nvisit the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"dedicated page")," on this wiki."),(0,o.kt)("p",null,"Proxy accounts are special accounts which can sign\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-transactions#pallets-and-extrinsics"},(0,o.kt)("strong",{parentName:"a"},"extrinsic calls"))," made to specific ",(0,o.kt)("strong",{parentName:"p"},"pallets"),"\non behalf of the proxied account. There is thus the possibility to create staking proxy accounts\nthat can be used to sign extrinsic calls specific to the staking, session and utility pallets."),(0,o.kt)("p",null,"Staking on Polkadot is not a set-and-forget\naction, as a nominator you will need to monitor the performance of your validators and make changes\nif needed. There will be this transactions such as nominating that will be needed to regularly\nsigned. Each time you sign with an account, in the case of hot accounts, you expose the private key\nof that account to the internet with consequent risk of attack. A hot stash will be exposed all the\ntime a transaction is signed. Even in the case of a cold stash created with a Ledger device, signing\nwith the stash will build a transaction history that might tell something about your habits and\npreferences, or even your location."),(0,o.kt)("p",null,"Ideally, accounts with high economic power like the stash must be and remain as isolated as\npossible. With a staking proxy, the stash account is fully isolated when signing for staking-related\ntransactions. The proxy private key will be used to sign staking-related transactions, the stash\nprivate key will stay isolated and the staking transaction history will be built by the proxy."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"stash-stakingProxy",src:a(56789).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"For a practical perspective we need to use only one account and remember one password to sign for\nall staking-related transactions. From a security perspective who controls the staking proxy\ncontrols our staking actions."),(0,o.kt)("p",null,"It is important to remember that actions that can be performed by the proxy accounts are limited,\nand in the case of staking proxy, extrinsic calls to the balances pallet cannot be signed. This\nmeans it is not possible to do balance transfers on the proxied account through a staking proxy."),(0,o.kt)("p",null,"Note that to change the staking proxy you will need to sign with the stash or an ",(0,o.kt)("em",{parentName:"p"},"any")," proxy."),(0,o.kt)("h2",{id:"bags-list"},"Bags List"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"On Polkadot and Kusama, the instance of the pallet\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_bags_list/"},"Bags-List")," is named as\n'voterList'."),(0,o.kt)("p",{parentName:"admonition"},"For a demo about bags list see ",(0,o.kt)("a",{parentName:"p",href:"https://youtu.be/hIIZRJLrBZA"},"this video tutorial"),".")),(0,o.kt)("p",null,"In Polkadot's NPoS nomination intents are\nplaced in a semi-sorted list called ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/pull/9507"},"bags-list"),".\nThe\nBags-List substrate pallet is designed to be self-maintaining, with minimal effort from the\nblockchain, making it extremely scalable. The bags list has two primary components, bags and nodes\n(or nominators' accounts), with bags containing the nodes with bonded balance within a specific\nrange. In the figure below the 1st empty bag will contain nominators whose bonded balance is in the\nrange of 21 - 30 DOT, the 2nd bag 11 - 20 DOT, and the 3rd bag 0-10 DOT. The nomination intents are\nthe nominators' accounts with bonded tokens (in the example shown below, there are eight nomination\nintents) that will be put inside each of those three bags depending on their stake."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 0",src:a(71842).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The bags list is semi-sorted, meaning that sorting is only partially done. When the nomination\nintents are submitted to the network, they are automatically put into each bag based on the number\nof bonded tokens, but within each bag, those nodes are arranged based on the time they are inserted\nand not based on their stake (see figure below). When the nomination intent of 19 DOT is submitted,\nit gets placed at the last spot in the 2nd bag (shown in the yellow circle). The same scenario\napplies for the node with 8 DOT (green circle) in the 3rd bag. Placing the node above all nodes with\na lesser stake requires an additional step (more on this later)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 1",src:a(79098).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"The mentioned two nodes (19 DOT and 8 DOT) have the option to move up in their respective bags,\nwhich can put them in front of the nodes with less stake than them (see figure below). This action\nmust be done manually by submitting the ",(0,o.kt)("inlineCode",{parentName:"p"},"putInFrontOf")," extrinsic within the ",(0,o.kt)("inlineCode",{parentName:"p"},"voterList")," pallet\ninstance. Moreover, if the node with 19 DOT bonds an additional 2 DOT, that node will be put\nautomatically in the 1st bag (i.e. automatic ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag"),') because the total number of bonded tokens will\nnow be within the range of the 1st bag. That node with now 21 DOT will be put at the tail end of the\n1st bag with the possibility to manually put itself in front of "older" nodes with less than 21 DOT\n(if there are any).'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 2",src:a(86983).Z,width:"1920",height:"800"})),(0,o.kt)("p",null,"If one decides to send staking rewards to the stash account and automatically bond them (i.e.\ncompounding the staking rewards), the position within a bag does not change automatically. The same\nscenario applies to a slashing event, i.e., when a nominator gets slashed, their position within a\nbag does not change. This might result in a scenario where the node is in the wrong bag and needs to\nbe placed in the right bag. To address this issue, any account on-chain can submit the\npermissionless extrinsic ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag")," within the ",(0,o.kt)("inlineCode",{parentName:"p"},"voterList")," pallet instance to update the positions of\nthe nodes that do not belong to their bag and place them in the correct one. To reiterate, actions\nlike bonding/unbonding tokens automatically rebag the nominator node, but events like staking\nrewards/slashing do not. See the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator#bags-list"},"bags-list")," section for more\ninformation."),(0,o.kt)("p",null,"The bags-list is capable of including an unlimited number of nodes, subject to the chain's runtime\nstorage. In the current staking system configuration, the bags list keeps\n",(0,o.kt)(s.Z,{network:"polkadot",path:"query.staking.maxNominatorsCount",defaultValue:5e4,mdxType:"RPC"}),"\n","\nnomination intents, of which, at most 22500\ncome out as the electing nominators. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator#staking-election-stages"},"Staking Election Stages")," section for more info."),(0,o.kt)("p",null,"This means that only a portion of the nomination intents is kept. Once the nomination period ends,\nthe NPoS election system takes all nomination intents and their associated votes as input, and it\noutputs a set of validators. The bags are iterated from the most staked to the least staked. If the\naccounts are not appropriately sorted, this could leave the last touched bag to only be partially\niterated. Thus, in some edge cases, the order of the members within a bag is important. Continuing\nwith the example used in the previous figures, there are 8 nomination intents of which only 7 will\nbe kept. If the bags list stays semi-sorted (i.e. no accounts call the ",(0,o.kt)("inlineCode",{parentName:"p"},"putInFrontOf")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"rebag"),"\nextrinsics), the nomination of the node with 8 DOT in the 3rd bag will not be considered while that\nof the preceding node with 5 DOT will be. Nomination of the node with 8 DOT will be kept only if it\nputs itself in front of the one with 5 DOT. Note how the nomination of the node with 19 DOT in the\n2nd bag will be considered regardless of changing its position inside the bag. The sorting\nfunctionality of nomination intents using bags is extremely important for the\n",(0,o.kt)("a",{parentName:"p",href:"https://gist.github.com/kianenigma/aa835946455b9a3f167821b9d05ba376"},"long-term improvements")," of the\nstaking/election system."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"bags list example 3",src:a(54258).Z,width:"1920",height:"800"})),(0,o.kt)("admonition",{title:"Minimum active nomination threshold to earn rewards is dynamic",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Submitting a nomination intent does not guarantee staking rewards. The stake of the top\n22500 nominators is applied to the validators\nin the active set. To avail of staking rewards, ensure that the number of tokens bonded is higher\nthan the minimum active bond. For more information, see the ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"nominator guide"),".")),(0,o.kt)("p",null,'The "election solution" which is a connected graph between nominators and validators with the stake\nas edge weights, has to meet certain requirements, such as maximizing the amount of stake to\nnominate validators and distributing the stake backing validators as evenly as possible. The\nobjectives of this election mechanism are to maximize the security of the network, and achieve fair\nrepresentation of the nominators. If you want to know more about how NPoS works (e.g. election,\nrunning time complexity, etc.), please read\n',(0,o.kt)("a",{parentName:"p",href:"http://research.web3.foundation/en/latest/polkadot/NPoS.html"},"here"),"."),(0,o.kt)("h2",{id:"rewards-distribution"},"Rewards Distribution"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The general rule for rewards across validators is that two validators get paid essentially the same\namount of tokens for equal work, i.e. they are not paid proportional to their total stakes. There is\na probabilistic component to staking rewards in the form of\n",(0,o.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout##era-points"},"era points")," and\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-transaction-fees#fee-calculation"},"tips")," but these should average out over time.")),(0,o.kt)("p",null,"Validators are paid the same regardless of stake backing them. Validators with less stake will\ngenerally pay more to nominators per-token than the ones with more stake. This gives nominators an\neconomic incentive to gradually shift their preferences to lower-staked validators that gain a\nsufficient amount of reputation. A consequence of this is that the stake across validators will be\nas evenly distributed as possible which avoids concentration of power among a few validators. In the\nlong term, validators will have similar levels of stake, with the stake being higher for validators\nwith higher reputation. A nominator who is willing to risk more by backing a validator with a lower\nreputation will get paid more, provided there are no slashing events."),(0,o.kt)("p",null,"Before distributing rewards to nominators, validators can create a cut of the reward (a commission)\nthat is not shared with the nominators. This cut is a percentage of the block reward, not an\nabsolute value. After the commission gets deducted, the remaining portion is distributed pro-rata\nbased on their staked value and split between the validator and all of the nominators whose stake\nhas backed this validator."),(0,o.kt)("p",null,"For example, assume the block reward for a validator is 10 DOT. A validator may specify\n",(0,o.kt)("inlineCode",{parentName:"p"},"validator_commission = 50%"),", in which case the validator would receive 5 DOT. The remaining 5 DOT\nwould then be split between the validator and their nominators based on the proportion of stake each\nnominator had. Note that for this calculation, validator's self-stake acts just as if they were\nanother nominator."),(0,o.kt)("p",null,"Thus, a percentage of the reward goes thus to pay the validator's commission fees and the remainder\nis paid pro-rata (i.e. proportional to stake) to the nominators and validator. If a validator's\ncommission is set to 100%, no tokens will be paid out to any of the nominators. Notice in particular\nthat the validator is rewarded twice: once in commission fees for validating (if their commission\nrate is above 0%), and once for nominating itself with own stake."),(0,o.kt)("p",null,"The following example should clarify the above. For simplicity, we have the following assumptions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"These validators do not have a stake of their own."),(0,o.kt)("li",{parentName:"ul"},"They each receive the same number of era points."),(0,o.kt)("li",{parentName:"ul"},"There are no tips for any transactions processed."),(0,o.kt)("li",{parentName:"ul"},"They do NOT charge any commission fees."),(0,o.kt)("li",{parentName:"ul"},"Total reward amount is 100 DOT tokens."),(0,o.kt)("li",{parentName:"ul"},"The current minimum amount of DOT to be a validator is 350 (note that this is ",(0,o.kt)("em",{parentName:"li"},"not")," the actual\nvalue, which fluctuates, but merely an assumption for purposes of this example; to understand how\nthe actual minimal stake is calculated, see\n",(0,o.kt)("a",{parentName:"li",href:"/docs/faq#what-is-the-minimum-stake-necessary-to-be-elected-as-an-active-validator"},"here"),").")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Validator A")),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Nominator (4)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Stake (600)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Fraction of the Total Stake"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Rewards")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Jin"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.167"),(0,o.kt)("td",{parentName:"tr",align:"center"},"16.7")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Sam")),(0,o.kt)("td",{parentName:"tr",align:"center"},"50"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.083"),(0,o.kt)("td",{parentName:"tr",align:"center"},"8.3")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Anson"),(0,o.kt)("td",{parentName:"tr",align:"center"},"250"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.417"),(0,o.kt)("td",{parentName:"tr",align:"center"},"41.7")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Bobby"),(0,o.kt)("td",{parentName:"tr",align:"center"},"200"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.333"),(0,o.kt)("td",{parentName:"tr",align:"center"},"33.3")))),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"th"},"Validator B")),(0,o.kt)("th",{parentName:"tr",align:"center"}),(0,o.kt)("th",{parentName:"tr",align:"center"}))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Nominator (4)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Stake (400)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Fraction of the Total Stake"),(0,o.kt)("td",{parentName:"tr",align:"center"},"Rewards")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Alice"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.25"),(0,o.kt)("td",{parentName:"tr",align:"center"},"25")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"Peter"),(0,o.kt)("td",{parentName:"tr",align:"center"},"100"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.25"),(0,o.kt)("td",{parentName:"tr",align:"center"},"25")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"John"),(0,o.kt)("td",{parentName:"tr",align:"center"},"150"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.375"),(0,o.kt)("td",{parentName:"tr",align:"center"},"37.5")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("strong",{parentName:"td"},"Kitty")),(0,o.kt)("td",{parentName:"tr",align:"center"},"50"),(0,o.kt)("td",{parentName:"tr",align:"center"},"0.125"),(0,o.kt)("td",{parentName:"tr",align:"center"},"12.5")))),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Both validators A & B have 4 nominators with a total stake 600 and 400 respectively.")),(0,o.kt)("p",null,"Based on the above rewards distribution, nominators of validator B get more rewards per DOT than\nthose of validator A because A has more overall stake. Sam has staked 50 DOT with validator A, but\nhe only gets 8.3 in return, whereas Kitty gets 12.5 with the same amount of stake."),(0,o.kt)("p",null,"To estimate how many tokens you can get each month as a nominator or validator, you can use this\n",(0,o.kt)("a",{parentName:"p",href:"https://www.stakingrewards.com/earn/polkadot/calculate"},"tool")," as a reference and play around with\nit by changing some parameters (e.g. how many days you would like to stake with your DOT, provider\nfees, compound rewards, etc.) to have a better estimate. Even though it may not be entirely accurate\nsince staking participation is changing dynamically, it works well as an indicator."),(0,o.kt)("h4",{id:"commission-fees--slashes"},"Commission Fees & Slashes"),(0,o.kt)("p",null,"The network ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashes")," a validator for a misbehavior. The slashed amount is a\nfixed percentage (and not a fixed amount), which means that validators with more stake get slashed\nmore DOT. Again, this is done to provide nominators with an economic incentive to shift their\npreferences and back less popular validators whom they consider to be trustworthy."),(0,o.kt)("p",null,"Also, note that each validator candidate is free to name their desired commission fee (as a\npercentage of rewards) to cover operational costs. Since validators are paid the same, validators\nwith lower commission fees pay more to nominators than validators with higher fees. Thus, each\nvalidator can choose between increasing their fees to earn more, or decreasing their fees to attract\nmore nominators and increase their chances of being elected. In the long term, we expect that all\nvalidators will need to be cost-efficient to remain competitive, and that validators with higher\nreputation will be able to charge slightly higher commission fees (which is fair)."),(0,o.kt)("h2",{id:"simple-payouts"},"Simple Payouts"),(0,o.kt)("p",null,"Polkadot makes stakers claim their rewards for\npast eras by submitting a transaction. This naturally leads to spreading out reward distribution, as\npeople make transactions at disparate times, rather than updating the accounts of all stakers in a\nsingle block."),(0,o.kt)("p",null,"Even if everyone submitted a reward claim at the same time, the fact that they are individual\ntransactions would allow the block construction algorithm to process only a limited number per block\nand ensure that the network maintains a constant block time. If all rewards were sent out in one\nblock, this could cause serious issues with the stability of the network."),(0,o.kt)("p",null,"Simple payouts require one transaction per validator, per ",(0,o.kt)("a",{parentName:"p",href:"/docs/glossary##era"},"era"),", to\nclaim rewards. The reason Polkadot requires\nthis is to avoid an attack where someone has several thousand accounts nominating a single\nvalidator. The major cost in reward distribution is mutating the accounts in storage, and\nPolkadot cannot pay out several thousand\naccounts in a single transaction."),(0,o.kt)("h3",{id:"claiming-rewards"},"Claiming Rewards"),(0,o.kt)("p",null,"Polkadot stores the last 84 eras of reward\ninformation (e.g. maps of era number to validator points, staking rewards, nomination exposure,\netc.). Rewards will not be claimable more than 84 eras after they were earned. This means that all\nrewards must be claimed within a maximum of 84 eras, although under certain circumstances (described\nbelow) this may be as low as 28 eras."),(0,o.kt)("p",null,"If a validator kills their stash, any remaining rewards will no longer be claimable. Before doing\nthis, however, they would need to first stop validating and then unbond the funds in their stash,\nwhich takes 28 eras. If a validator were to immediately chill and start unbonding after rewards are\ncalculated, and nobody issued a payout for that era from that validator in the next 28 eras, the\nreward would no longer be claimable."),(0,o.kt)("admonition",{title:"Advanced How-to Guides",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"In order to be absolutely sure that staking rewards can be claimed, users should trigger a payout\nbefore 28 eras have passed. See\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#claiming-rewards-with-the-polkadot-js-ui"},"this page")," for more\ninformation about how to claim rewards using the Polkadot-JS UI.")),(0,o.kt)("h3",{id:"faq-and-cautionary-notes"},"FAQ and Cautionary Notes"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Rewards expire after 84 eras. On Polkadot, that's about 84 days. On Kusama, it is approximately\n21 days. Validators should claim all pending rewards before killing their stash in the event the\nvalidator decides to ",(0,o.kt)("inlineCode",{parentName:"li"},"chill")," -> ",(0,o.kt)("inlineCode",{parentName:"li"},"unbonds all")," -> ",(0,o.kt)("inlineCode",{parentName:"li"},"withdraws unbonded"),". Nominators will not miss\nout on rewards if they claim the pending rewards for a validator within 28 days. Essentially, the\ndeadline to ensure you get staking rewards is 28 eras. If the validator verifies its intent and\ndoes not unbond and withdraw, the 84 era timeline holds."),(0,o.kt)("li",{parentName:"ol"},"Claiming rewards (or neglecting to claim rewards) does not affect nominations in any way.\nNominations will persist after claiming rewards or after the rewards expire."),(0,o.kt)("li",{parentName:"ol"},'Rewards are not minted until they are claimed. Therefore, if your reward destination is "stash,\nincreasing amount at stake", then your staked amount does not reflect your rewards until you\nclaim them. If you want to maximize compounding, then you will need to claim often or nominate\nvalidators which regularly claim for you.'),(0,o.kt)("li",{parentName:"ol"},"Staking operations at the end of an era are closed to allow the off-chain validator election to\ntake place. See ",(0,o.kt)("a",{parentName:"li",href:"/docs/learn-phragmen#off-chain-phragmen"},"Off-chain Phragm\xe9n")," for more information.")),(0,o.kt)("h2",{id:"staking-miner"},"Staking Miner"),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The staking-miner code is experimental and it is still in the development phase. Use is at your own\ndiscretion, as there is a risk of losing some funds.")),(0,o.kt)("p",null,"At the end of each era on Polkadot and Kusama, using ",(0,o.kt)("a",{parentName:"p",href:"learn-phragmen"},"NPoS"),', a new set of validators\nmust be elected based on the nominator preferences. This is a computationally intensive process,\nhence the usage of the term "mining" for computing the solution. The validators use\n',(0,o.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/how-to-guides/offchain-workers/"},"off-chain workers")," to compute\nthe result and submit a transaction to propose the set of winners. This can also be delegated to\nstand-alone programs, whose task is to mine the optimal solution. Staking miners compete with each\nother to produce election solutions which consist of a validator set, stake distribution across that\nset, and a score indicating how optimal the solution is. Staking miners run any given staking\nalgorithms (as of now, sequential Phragm\xe9n or PhragMMS, subject to change if improved algorithms are\nintroduced) to produce results, which are then sent as a transaction to the relay chain via a normal\nsigned extrinsic. The transaction requires a bond and a transaction fee. The best solution is\nrewarded, which the least covers the transaction fee, and the bond is returned to the account.\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#deposit-and-reward-mechanics"},"The bond and the fee")," are lost if the\nsolution is invalid."),(0,o.kt)("p",null,"Staking miner uses a pallet called ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet_election_provider_multi_phase")," and can only produce\nsolutions during the\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html#signed-phase"},(0,o.kt)("inlineCode",{parentName:"a"},"SignedPhase")),"\nof the pallet's life cycle. Once the ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedPhase")," is over and the\n",(0,o.kt)("a",{parentName:"p",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html#unsigned-phase"},(0,o.kt)("inlineCode",{parentName:"a"},"UnsignedPhase")),"\nstarts, only the off-chain workers can provide election results."),(0,o.kt)("p",null,"Running the staking miner requires passing the seed of a funded account in order to pay the fees for\nthe transactions that will be sent. The same account's balance is used to reserve deposits as well.\nThe best solution in each round is rewarded. All correct solutions will get their deposit back and\nthe ones that submit invalid solutions will lose their deposit."),(0,o.kt)("h3",{id:"npos-election-optimization"},"NPoS election optimization"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"NPoS election optimization",src:a(83471).Z,width:"1868",height:"804"})),(0,o.kt)("p",null,"A basic election solution is a simple distribution of stake across validators, but this can be\noptimized for better distribution equaling a higher security score. The staking miner does not act\nas a validator and focuses solely on the election result and optimization of the solution. It\nconnects to a specified chain and keeps listening to new signed phase of the election pallet in\norder to submit solutions to the NPoS election. When the correct time comes, it computes its\nsolution and submits it to the chain. The default miner algorithm is sequential Phragm\xe9n with a\nconfigurable number of balancing iterations that improve the score."),(0,o.kt)("h3",{id:"signed-phase-of-the-election-pallet"},"Signed Phase of the election pallet"),(0,o.kt)("p",null,"The election provider pallet ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet_election_provider_multi_phase")," is divided into two phases,\n",(0,o.kt)("strong",{parentName:"p"},"signed")," and ",(0,o.kt)("strong",{parentName:"p"},"unsigned"),". At the end of the pallet's timeline, the function ",(0,o.kt)("inlineCode",{parentName:"p"},"elect()")," is called."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," elect()\n + <--T::SignedPhase--\x3e + <--T::UnsignedPhase--\x3e +\n +-------------------------------------------------------------------+\n Phase::Off + Phase::Signed + Phase::Unsigned +\n")),(0,o.kt)("p",null,"Solutions provided by the staking miner can only be submitted during the signed phase. Solutions are\nsubmitted and queued on the chain as a ",(0,o.kt)("inlineCode",{parentName:"p"},"RawSolution"),". Once submitted, a solution cannot be retracted\nby the originating account."),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"RawSolution")," struct definition:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"pub struct RawSolution {\n pub solution: S, // The solution itself\n pub score: ElectionScore, // The claimed score of the solution.\n pub round: u32, // The round at which this solution should be submitted.\n}\n")),(0,o.kt)("p",null,"A maximum of ",(0,o.kt)("inlineCode",{parentName:"p"},"pallet::Config::SignedMaxSubmissions")," will be stored on-chain and they will be sorted\nbased on score. Higher the score the more optimal the election solution is. On both Polkadot and\nKusama the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/f610ffc05876d4b98a14cee245b4cc27bd3c0c15/runtime/polkadot/src/lib.rs#L390"},"'SignedMaxSubmissions'"),"\nis set to\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedMaxSubmissions",defaultValue:16,mdxType:"RPC"}),"\n","\nsubmissions. This variable can be modified if needed through governance."),(0,o.kt)("p",null,"Upon arrival of a new solution:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"If the queue is not full, it is stored in the appropriate sorted index."),(0,o.kt)("li",{parentName:"ol"},"If the queue is full but the submitted solution is better than one of the queued ones, the worse\nsolution is discarded, the deposit of the outgoing solution is returned, and the new solution is\nstored in the correct index."),(0,o.kt)("li",{parentName:"ol"},"If the queue is full and the solution is not an improvement compared to any of the queued ones,\nit is instantly rejected and no deposit is reserved.")),(0,o.kt)("p",null,"Upon the end of the ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedPhase"),", no more solutions can be submitted and the solutions in the queue\nwill be checked using\n",(0,o.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_election_provider_multi_phase/pallet/struct.Pallet.html#method.feasibility_check"},(0,o.kt)("inlineCode",{parentName:"a"},"Pallet::feasibility_check")),"\nwhich ensures the score is indeed correct, and marks them as valid or invalid. By checking each\nsolution in the queue, the queue will be reorganized by score. The highest valid score will be\nrewarded. Invalid solutions with higher score than the winning solution will be slashed. The rest of\nthe solutions will be discarded and their deposit will be returned. Once the staking miner with a\nwinning solution is ready to be rewarded the runtime will automatically execute\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/blob/f2bc08a3071a91b71fec63cf2b22c707411cec0e/frame/election-provider-multi-phase/src/signed.rs#L453-L474"},(0,o.kt)("inlineCode",{parentName:"a"},"finalize_signed_phase_accept_solution")),"\nwhich reward account associated with the winning solution."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Queue\n+-------------------------------+\n|Solution(score=20, valid=false)| +--\x3e Slashed\n+-------------------------------+\n|Solution(score=15, valid=true )| +--\x3e Rewarded, Saved\n+-------------------------------+\n|Solution(score=10, valid=true )| +--\x3e Discarded\n+-------------------------------+\n|Solution(score=05, valid=false)| +--\x3e Discarded\n+-------------------------------+\n| None |\n+-------------------------------+\n")),(0,o.kt)("h3",{id:"deposit-and-reward-mechanics"},"Deposit and reward mechanics"),(0,o.kt)("p",null,"The staking miners are required to pay a deposit to post their solutions. Deposit amount is the sum\nof ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositBase")," +",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositByte")," + ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositWeight"),". All good solutions are subject\nto receiving a ",(0,o.kt)("inlineCode",{parentName:"p"},"SignedRewardBase"),"."),(0,o.kt)("h4",{id:"deposit"},"Deposit"),(0,o.kt)("p",null,"Current deposit(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositBase"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedDepositBase",defaultValue:4e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nwhich is a fixed amount."),(0,o.kt)("p",null,"Current deposit per byte(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositByte"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedDepositByte",defaultValue:97656,filter:"precise",mdxType:"RPC"}),"\n","\nand the total is variable depending on the size of the solution data. For example, a solution\nweighing 200KB would yield 200 x 0.0000097656 = ",(0,o.kt)("strong",{parentName:"p"},"0.00195312 DOT"),".\n",""),(0,o.kt)("p",null,"And the weight deposit(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedDepositWeight"),") is currently set to ",(0,o.kt)("inlineCode",{parentName:"p"},"0")," and has no effect."),(0,o.kt)("h4",{id:"reward"},"Reward"),(0,o.kt)("p",null,"Current reward(",(0,o.kt)("inlineCode",{parentName:"p"},"SignedRewardBase"),") is\n",(0,o.kt)(s.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.signedRewardBase",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"\n","\nwhich is a fixed amount."),(0,o.kt)("h3",{id:"further-resources"},"Further Resources"),(0,o.kt)("p",null,"If you want to run a staking miner on your validator, refer to the repository provided in the\nresources section below."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/staking-miner-v2"},"Staking Miner repository")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://crates.parity.io/pallet_election_provider_multi_phase/index.html"},"Election Pallet definition")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot-sdk/blob/f610ffc05876d4b98a14cee245b4cc27bd3c0c15/runtime/polkadot/src/lib.rs#L389:L397"},"Signed phase parameter configuration on Polkadot"))))}k.isMDXComponent=!0},71842:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-0-6836e3658c32484103ffcd06d6372427.png"},79098:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-1-6aeffdb212b7af723f00e38b40780dcc.png"},86983:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-2-aec08a8679a23e697f416374cbcdf735.png"},54258:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/bags-list-example-3-08c2b290f95e036e026f667fca527704.png"},83471:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/NPoS-election-optimization-3ef1b7bd0a99f64c4198511b4216989d.png"},56789:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/stash-vs-stash-and-staking-proxy-2104e1a23d5c29821cec15fb9b67eba5.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/6d5c9a28.1b52fa22.js b/assets/js/6d5c9a28.1b52fa22.js new file mode 100644 index 000000000000..f01f8263f236 --- /dev/null +++ b/assets/js/6d5c9a28.1b52fa22.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2119],{3905:(t,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>h});var n=a(67294);function o(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 s(t){for(var e=1;e=0||(o[a]=t[a]);return o}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(o[a]=t[a])}return o}var l=n.createContext({}),p=function(t){var e=n.useContext(l),a=e;return t&&(a="function"==typeof t?t(e):s(s({},e),t)),a},d=function(t){var e=p(t.components);return n.createElement(l.Provider,{value:e},t.children)},u="mdxType",k={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},c=n.forwardRef((function(t,e){var a=t.components,o=t.mdxType,r=t.originalType,l=t.parentName,d=i(t,["components","mdxType","originalType","parentName"]),u=p(a),c=o,h=u["".concat(l,".").concat(c)]||u[c]||k[c]||r;return a?n.createElement(h,s(s({ref:e},d),{},{components:a})):n.createElement(h,s({ref:e},d))}));function h(t,e){var a=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var r=a.length,s=new Array(r);s[0]=c;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i[u]="string"==typeof t?t:o,s[1]=i;for(var p=2;p{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>p,toc:()=>u});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),s=["components"],i={id:"staking-apps",title:"Polkadot Staking Apps",sidebar_label:"Staking Apps",description:"Staking Apps in the Polkadot Ecosystem.",keywords:["staking","stake","nominate","nominating","NPoS","staking dashboard"],slug:"../staking-apps"},l=void 0,p={unversionedId:"general/staking-apps",id:"general/staking-apps",title:"Polkadot Staking Apps",description:"Staking Apps in the Polkadot Ecosystem.",source:"@site/../docs/general/staking-apps.md",sourceDirName:"general",slug:"/staking-apps",permalink:"/docs/staking-apps",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/staking-apps.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1719391505,formattedLastUpdatedAt:"Jun 26, 2024",frontMatter:{id:"staking-apps",title:"Polkadot Staking Apps",sidebar_label:"Staking Apps",description:"Staking Apps in the Polkadot Ecosystem.",keywords:["staking","stake","nominate","nominating","NPoS","staking dashboard"],slug:"../staking-apps"},sidebar:"docs",previous:{title:"Apps",permalink:"/docs/apps-index"},next:{title:"Governance Apps",permalink:"/docs/governance-apps"}},d={},u=[{value:"Polkadot Staking Dashboard",id:"polkadot-staking-dashboard",level:2},{value:"Sub.ID",id:"subid",level:2},{value:"NOMI",id:"nomi",level:2},{value:"SubWallet Earning",id:"subwallet-earning",level:2}],k={toc:u},c="wrapper";function h(t){var e=t.components,a=(0,o.Z)(t,s);return(0,r.kt)(c,(0,n.Z)({},k,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"Community Page",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This page is open to contributions from the community. Please follow the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/w3f/polkadot-wiki#contributing-to-documentation"},"Wiki contribution guidelines"),"\nand add your protocol native, permissionless, non-custodial NPoS Staking app to this page.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#polkadot-staking-dashboard"},"Polkadot Staking Dashboard")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#subid"},"Sub.ID")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#nomi"},"NOMI")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#subwallet-earning"},"SubWallet Earning"))),(0,r.kt)("h2",{id:"polkadot-staking-dashboard"},"Polkadot Staking Dashboard"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/#/overview"},"Polkadot Staking Dashboard")," is a web3 application\ndedicated to native non-custodial ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"staking")," on the\nPolkadot relay chain. The dashboard allows to\nstake as a solo nominator or as a ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," member.\nUsers can also create their nomination pools. The dashboard supports ",(0,r.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger"),",\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadot-vault"},"Polkadot Vault"),",\n",(0,r.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions#subwallet"},"SubWallet"),",\n",(0,r.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions#talisman"},"Talisman"),", WalletConnect, Fearless Wallet,\nPolkaGate, and Enkrypt. The dashboard also supports\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies#staking-proxy"},"staking proxies"),"."),(0,r.kt)("p",null,"You can find more information about the Polkadot staking dashboard on the dedicated\n",(0,r.kt)("a",{parentName:"p",href:"/docs/staking-dashboard"},"wiki page")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/folders/65000157523"},"support articles"),"."),(0,r.kt)("p",null,"Below a list of video tutorial about the Polkadot Staking Dashboard."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://youtu.be/F59N3YKYCRs?feature=shared"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/F59N3YKYCRs/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://youtu.be/F59N3YKYCRs?feature=shared"},"Stake your DOT"))),(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://youtu.be/dDIG7QAApig?feature=shared"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/dDIG7QAApig/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://youtu.be/dDIG7QAApig?feature=shared"},"Join a Nomination Pool"))),(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://youtu.be/hvXLc4H7rA4?feature=shared"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/hvXLc4H7rA4/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://youtu.be/hvXLc4H7rA4?feature=shared"},"Staking Dashboard Walkthrough")))),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://youtu.be/58pIe8tt2o4?feature=shared"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/58pIe8tt2o4/0.jpg",width:"300",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://youtu.be/58pIe8tt2o4?feature=shared"},"After Staking"))),(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://youtu.be/aTFWhwy_Mxg?feature=shared"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/aTFWhwy_Mxg/0.jpg",width:"300",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://youtu.be/aTFWhwy_Mxg?feature=shared"},"Create, Manage & Destroy Pools")))),(0,r.kt)("h2",{id:"subid"},"Sub.ID"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://sub.id/"},"Sub.ID")," is a one-stop-shop for managing your Polkadot accounts, viewing your\naddresses and balances, and looking at other accounts. It features a Polkadot\n",(0,r.kt)("a",{parentName:"p",href:"https://sub.id/validator/polkadot"},"staking page"),", where you can easily start staking\nDOT. Stakers can choose their preferred\nvalidators or stake with the recommended validator set."),(0,r.kt)("h2",{id:"nomi"},"NOMI"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://apps.turboflakes.io/?app=nomi"},"NOMI")," is designed to actively involve Nominators in Native\nStaking within the Polkadot networks. It aims\nto offer a unique and enhanced nomination experience, using\n",(0,r.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Multiple-criteria_decision_analysis"},"Multiple-Criteria Decision Analysis"),"\n(MCDA) as a base for the analytical research. MCDA is an open and transparent approach for\nevaluating numerous conflicting traits in the decision-making process. For the analysis, validator\ndata is collected at the last block of every session."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://turboflakes.io/"},(0,r.kt)("img",{parentName:"a",src:"https://github.com/turboflakes/apps/blob/main/src/assets/nomi_dashboard.webp?raw=true",alt:null}))),(0,r.kt)("p",null,"source: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/turboflakes/apps"},"https://github.com/turboflakes/apps")),(0,r.kt)("h2",{id:"subwallet-earning"},"SubWallet Earning"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://web.subwallet.app/"},"SubWallet Web Dashboard")," is the all-in-one solution to manage assets\nand stake on multiple networks in the Polkadot, Kusama and Polkadot SDK (Substrate) ecosystems."),(0,r.kt)("p",null,"The Web Dashboard features an Earning tab which allows users to stake DOT easily via native\nnomination pools, as well as in liquid staking and lending protocols, without having to manage\nmultiple applications with different interfaces and experiences."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6d5c9a28.39f85d55.js b/assets/js/6d5c9a28.39f85d55.js deleted file mode 100644 index bfe4c7bea773..000000000000 --- a/assets/js/6d5c9a28.39f85d55.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2119],{3905:(t,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>h});var n=a(67294);function o(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 s(t){for(var e=1;e=0||(o[a]=t[a]);return o}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(o[a]=t[a])}return o}var l=n.createContext({}),p=function(t){var e=n.useContext(l),a=e;return t&&(a="function"==typeof t?t(e):s(s({},e),t)),a},d=function(t){var e=p(t.components);return n.createElement(l.Provider,{value:e},t.children)},u="mdxType",k={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},c=n.forwardRef((function(t,e){var a=t.components,o=t.mdxType,r=t.originalType,l=t.parentName,d=i(t,["components","mdxType","originalType","parentName"]),u=p(a),c=o,h=u["".concat(l,".").concat(c)]||u[c]||k[c]||r;return a?n.createElement(h,s(s({ref:e},d),{},{components:a})):n.createElement(h,s({ref:e},d))}));function h(t,e){var a=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var r=a.length,s=new Array(r);s[0]=c;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i[u]="string"==typeof t?t:o,s[1]=i;for(var p=2;p{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>p,toc:()=>u});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),s=["components"],i={id:"staking-apps",title:"Polkadot Staking Apps",sidebar_label:"Staking Apps",description:"Staking Apps in the Polkadot Ecosystem.",keywords:["staking","stake","nominate","nominating","NPoS","staking dashboard"],slug:"../staking-apps"},l=void 0,p={unversionedId:"general/staking-apps",id:"general/staking-apps",title:"Polkadot Staking Apps",description:"Staking Apps in the Polkadot Ecosystem.",source:"@site/../docs/general/staking-apps.md",sourceDirName:"general",slug:"/staking-apps",permalink:"/docs/staking-apps",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/staking-apps.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1712131508,formattedLastUpdatedAt:"Apr 3, 2024",frontMatter:{id:"staking-apps",title:"Polkadot Staking Apps",sidebar_label:"Staking Apps",description:"Staking Apps in the Polkadot Ecosystem.",keywords:["staking","stake","nominate","nominating","NPoS","staking dashboard"],slug:"../staking-apps"},sidebar:"docs",previous:{title:"Apps",permalink:"/docs/apps-index"},next:{title:"Governance Apps",permalink:"/docs/governance-apps"}},d={},u=[{value:"Polkadot Staking Dashboard",id:"polkadot-staking-dashboard",level:2},{value:"Sub.ID",id:"subid",level:2},{value:"NOMI",id:"nomi",level:2},{value:"SubWallet Earning",id:"subwallet-earning",level:2}],k={toc:u},c="wrapper";function h(t){var e=t.components,a=(0,o.Z)(t,s);return(0,r.kt)(c,(0,n.Z)({},k,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"Community Page",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This page is open to contributions from the community. Please follow the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/w3f/polkadot-wiki#contributing-to-documentation"},"Wiki contribution guidelines"),"\nand add your protocol native, permissionless, non-custodial NPoS Staking app to this page.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#polkadot-staking-dashboard"},"Polkadot Staking Dashboard")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#subid"},"Sub.ID")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#nomi"},"NOMI")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#subwallet-earning"},"SubWallet Earning"))),(0,r.kt)("h2",{id:"polkadot-staking-dashboard"},"Polkadot Staking Dashboard"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Polkadot Staking Dashboard")," is a web3 application\ndedicated to native non-custodial ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"staking")," on the\nPolkadot relay chain. The dashboard allows to\nstake as a solo nominator or as a ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," member.\nUsers can also create their nomination pools. The dashboard supports ",(0,r.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger"),",\n",(0,r.kt)("a",{parentName:"p",href:"/docs/polkadot-vault"},"Polkadot Vault"),",\n",(0,r.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions#subwallet"},"SubWallet"),",\n",(0,r.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions#talisman"},"Talisman"),", WalletConnect, Fearless Wallet,\nPolkaGate, and Enkrypt. The dashboard also supports\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-proxies#staking-proxy"},"staking proxies"),"."),(0,r.kt)("p",null,"You can find more information about the Polkadot staking dashboard on the dedicated\n",(0,r.kt)("a",{parentName:"p",href:"/docs/staking-dashboard"},"wiki page")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/folders/65000157523"},"support articles"),"."),(0,r.kt)("p",null,"Below a list of video tutorial about the Polkadot Staking Dashboard."),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://youtu.be/F59N3YKYCRs?feature=shared"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/F59N3YKYCRs/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://youtu.be/F59N3YKYCRs?feature=shared"},"Stake your DOT"))),(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://youtu.be/dDIG7QAApig?feature=shared"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/dDIG7QAApig/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://youtu.be/dDIG7QAApig?feature=shared"},"Join a Nomination Pool"))),(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://youtu.be/hvXLc4H7rA4?feature=shared"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/hvXLc4H7rA4/0.jpg",width:"350",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://youtu.be/hvXLc4H7rA4?feature=shared"},"Staking Dashboard Walkthrough")))),(0,r.kt)("div",{className:"row"},(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://youtu.be/58pIe8tt2o4?feature=shared"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/58pIe8tt2o4/0.jpg",width:"300",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://youtu.be/58pIe8tt2o4?feature=shared"},"After Staking"))),(0,r.kt)("div",{className:"col text--center"},(0,r.kt)("a",{href:"https://youtu.be/aTFWhwy_Mxg?feature=shared"},(0,r.kt)("img",{src:"https://img.youtube.com/vi/aTFWhwy_Mxg/0.jpg",width:"300",style:{borderRadius:10,border:"1px solid slategrey"}})),(0,r.kt)("p",null,(0,r.kt)("a",{href:"https://youtu.be/aTFWhwy_Mxg?feature=shared"},"Create, Manage & Destroy Pools")))),(0,r.kt)("h2",{id:"subid"},"Sub.ID"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://sub.id/"},"Sub.ID")," is a one-stop-shop for managing your Polkadot accounts, viewing your\naddresses and balances, and looking at other accounts. It features a Polkadot\n",(0,r.kt)("a",{parentName:"p",href:"https://sub.id/validator/polkadot"},"staking page"),", where you can easily start staking\nDOT. Stakers can choose their preferred\nvalidators or stake with the recommended validator set."),(0,r.kt)("h2",{id:"nomi"},"NOMI"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://apps.turboflakes.io/?app=nomi"},"NOMI")," is designed to actively involve Nominators in Native\nStaking within the Polkadot networks. It aims\nto offer a unique and enhanced nomination experience, using\n",(0,r.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Multiple-criteria_decision_analysis"},"Multiple-Criteria Decision Analysis"),"\n(MCDA) as a base for the analytical research. MCDA is an open and transparent approach for\nevaluating numerous conflicting traits in the decision-making process. For the analysis, validator\ndata is collected at the last block of every session."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://turboflakes.io/"},(0,r.kt)("img",{parentName:"a",src:"https://github.com/turboflakes/apps/blob/main/src/assets/nomi_dashboard.webp?raw=true",alt:null}))),(0,r.kt)("p",null,"source: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/turboflakes/apps"},"https://github.com/turboflakes/apps")),(0,r.kt)("h2",{id:"subwallet-earning"},"SubWallet Earning"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://web.subwallet.app/"},"SubWallet Web Dashboard")," is the all-in-one solution to manage assets\nand stake on multiple networks in the Polkadot, Kusama and Polkadot SDK (Substrate) ecosystems."),(0,r.kt)("p",null,"The Web Dashboard features an Earning tab which allows users to stake DOT easily via native\nnomination pools, as well as in liquid staking and lending protocols, without having to manage\nmultiple applications with different interfaces and experiences."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8d3a1bf8.883fda68.js b/assets/js/8d3a1bf8.065e7f7b.js similarity index 77% rename from assets/js/8d3a1bf8.883fda68.js rename to assets/js/8d3a1bf8.065e7f7b.js index b0a8c647a37d..cf0f9e004f7c 100644 --- a/assets/js/8d3a1bf8.883fda68.js +++ b/assets/js/8d3a1bf8.065e7f7b.js @@ -1 +1 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2399],{47940:(e,t,n)=>{"use strict";n.d(t,{Z:()=>k});var a=n(74165),o=n(15861),i=n(67294),r=n(87152),s=n(9712),l=n(67425);function d(e,t,n){return p.apply(this,arguments)}function p(){return(p=(0,o.Z)((0,a.Z)().mark((function e(t,n,o){var i,l,d,p,c;return(0,a.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 d=new r.U(i),e.next=21,s.G.create({provider:d});case 21:p=e.sent,(c=n.split(".")).forEach((function(e){e in p&&(p=p[e])})),e.t1=c[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 ("+c[0]+") in "+n);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(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 k=function(e){var t=e.network,n=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,p=(0,i.useState)(""),k=p[0],u=p[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?c(r.toString(),l,t,u):u(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;case"kusama-people":e="wss://kusama-people-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,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,d(t,n,u);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(o,l,t,u):u(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),k}},67425:e=>{var t="polkadot",n="kusama",a="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 l=void 0;if(r===t||r===o)l=3;else{if(r!==n&&r!==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/i[r].precision)?e/i[r].precision+" "+i[r].symbol:(e/i[r].precision).toFixed(l)+" "+i[r].symbol).toString())},Precise:function(e,t,n){n(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===o)s=1;else{if(r!==n&&r!==a)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())}}},10209:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>f,frontMatter:()=>l,metadata:()=>p,toc:()=>k});var a=n(87462),o=n(63366),i=(n(67294),n(3905)),r=n(47940),s=["components"],l={id:"learn-inflation",title:"Token Inflation",sidebar_label:"Token Inflation",description:"Explanation of Token's Inflation in the Polkadot Ecosystem.",keywords:["token","DOT","KSM","inflation"],slug:"../learn-inflation"},d=void 0,p={unversionedId:"learn/learn-inflation",id:"learn/learn-inflation",title:"Token Inflation",description:"Explanation of Token's Inflation in the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-inflation.md",sourceDirName:"learn",slug:"/learn-inflation",permalink:"/docs/learn-inflation",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-inflation.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1710167319,formattedLastUpdatedAt:"Mar 11, 2024",frontMatter:{id:"learn-inflation",title:"Token Inflation",sidebar_label:"Token Inflation",description:"Explanation of Token's Inflation in the Polkadot Ecosystem.",keywords:["token","DOT","KSM","inflation"],slug:"../learn-inflation"},sidebar:"docs",previous:{title:"DOT",permalink:"/docs/learn-DOT"},next:{title:"Asset Hub",permalink:"/docs/learn-assets"}},c={},k=[{value:"Inflation Model",id:"inflation-model",level:2},{value:"Ideal Staking Rate",id:"ideal-staking-rate",level:2}],u={toc:k},h="wrapper";function f(e){var t=e.components,l=(0,o.Z)(e,s);return(0,i.kt)(h,(0,a.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"DOT is an inflationary token. On the\nPolkadot network, inflation is\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/756ccc35e93d1a78e3c71a0e67ae4da5f1d09f69/runtime/polkadot/src/lib.rs#L576"},"set to be 10% annually"),".\n","Depending\non the DOT supply staked and the ideal staking\nrate (more about this below), part of the DOT\ninflation is distributed to the stakers and part to the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury"},"treasury"),"."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"DOT went through ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn/learn-redenomination"},"redenomination")," in 2020 that saw the DOT token\nsupply increase by 100 times."),(0,i.kt)("p",{parentName:"admonition"},"The current token supply on Polkadot is\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.balances.totalIssuance",defaultValue:0xa9bc0e330b775000,filter:"humanReadable",mdxType:"RPC"})," (1.4 Billion DOT).\n","")),(0,i.kt)("p",null,"It is essential to understand that the primary objective of\nDOT inflation is to incentivize network\nparticipants through\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus#nominated-proof-of-stake"},"Nominated Proof of Stake (NPoS)")," and to grow the\nnetwork through funding the on-chain treasury. There is an opportunity cost of keeping the\nDOT tokens idle with the current inflation model\nas the tokens get diluted over time. Economics and game theory suggest that setting an ideal\ninflation rate is essential for incentivizing the network participants as well as the growth of the\nnetwork, and any deviation from it can have adverse effects. Reducing the inflation rate could limit\ngrowth, while increasing the inflation rate could break the incentive model of the token. Hence,\n",(0,i.kt)("strong",{parentName:"p"},"token inflation rate is not a forever fixed value, and inflation can be updated in the future\nthrough ",(0,i.kt)("a",{parentName:"strong",href:"/docs/learn-polkadot-opengov"},"on-chain governance"))," based on thorough tokenomics research."),(0,i.kt)("h2",{id:"inflation-model"},"Inflation Model"),(0,i.kt)("p",null,"The chart below shows the inflation model of the network. Depending on the number of staked tokens,\nthe distribution of the inflation to validators and nominators versus the treasury will change\ndynamically to provide incentives to participate (or not participate) in staking."),(0,i.kt)("p",null,"There is a ",(0,i.kt)("a",{parentName:"p",href:"#ideal-staking-rate"},"dynamic ",(0,i.kt)("em",{parentName:"a"},"ideal staking rate"))," (in the figure set to 0.6 or 60%)\nthat the network tries to maintain. The inflation model will incentivize network participants to\nstake when the ",(0,i.kt)("em",{parentName:"p"},"current staking rate")," < ",(0,i.kt)("em",{parentName:"p"},"ideal staking rate")," and disincentivize staking when\n",(0,i.kt)("em",{parentName:"p"},"current staking rate")," > ",(0,i.kt)("em",{parentName:"p"},"ideal staking rate"),". The goal is to have the staking rate meet the ideal\nstaking rate. The current staking rate would be the total amount staked in the current era over the\ntotal token supply, where the total amount staked is the stake of all validators and nominators on\nthe network. The ideal staking rate accounts for having sufficient backing of\nDOT to prevent the possible compromise of\nsecurity while keeping the native token liquid."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"staking",src:n(77202).Z,width:"1089",height:"762"})),(0,i.kt)("p",{style:{textAlign:"center"}},"Source: ",(0,i.kt)("a",{href:"https://research.web3.foundation/Polkadot/overview/token-economics"},"Research - Web3 Foundation")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"x-axis"),": Proportion of DOT staked"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"y-axis"),": Annualized percentage (inflation and staking rewards, see below)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Blue line"),": Annual inflation rate diverted to NPoS, i.e., the total amount of tokens minted to\npay validators and nominators. For instance, 0.1 corresponds to 10% of token inflation diverted to\nstakers. Since annual token inflation is 10%, all inflation is used to pay validators and\nnominators, and 0% of token inflation is diverted to the treasury."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Green line"),": Annual rewards rate for stakers. For instance, 0.2 corresponds to 20% of annual\nreturns on the staked tokens. You can determine the current annual staking rewards rate by looking\nat the top bar of the staking overview on\n",(0,i.kt)("a",{parentName:"li",href:"https://staking.polkadot.network/#/overview"},"the Polkadot Staking Dashboard"),".")),(0,i.kt)("p",null,"Assuming that the ideal staking rate is 60%, all of the inflation would go to the validators and\nnominators if 60% of all DOT are staked. Any\ndeviation from the 60% - positive or negative - sends the proportional remainder to the treasury.\nDeviations from the ideal staking rate are referred to as ",(0,i.kt)("em",{parentName:"p"},"staking inefficiencies"),". Thus, the\ntreasury does not receive an inflow of funds from inflation when the system staking rate equals the\nideal staking rate. See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury"},"this page")," for more information about\ntreasury inflow sources."),(0,i.kt)("p",null,"For those who are interested in knowing more about the design of the inflation model for the\nnetwork, please see ",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/overview/token-economics"},"here"),"."),(0,i.kt)("h2",{id:"ideal-staking-rate"},"Ideal Staking Rate"),(0,i.kt)("p",null,"The ideal staking rate can vary between 45% to 75% based on the number of parachains that acquired a\nlease through an auction (this excludes the System parachains), based on the implementation\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/cd901764a52edc04a6d22bea3a526def593ab2a7/polkadot/runtime/common/src/impls.rs#L80"},"here"),"."),(0,i.kt)("p",null,"Briefly, the ideal staking rate can be calculated as follows:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"0.75 - auction_proportion")),(0,i.kt)("p",null,"where ",(0,i.kt)("inlineCode",{parentName:"p"},"auction_proportion")," is obtained by computing ",(0,i.kt)("inlineCode",{parentName:"p"},"min(auctioned_slots, 60) / 300"),". The\n",(0,i.kt)("inlineCode",{parentName:"p"},"auctioned_slots")," are all the auctioned slots without the slots for system parachains."),(0,i.kt)("p",null,"Assuming there are 50 filled slots, of which three are dedicated to system parachains (Asset Hub,\nBridge Hub and Collectives), there are 47 auctioned slots. The ",(0,i.kt)("inlineCode",{parentName:"p"},"auction_proportion")," is thus\n",(0,i.kt)("inlineCode",{parentName:"p"},"47 / 300 = 0.157"),". The ideal staking rate is ",(0,i.kt)("inlineCode",{parentName:"p"},"0.75 - 0.157 = 0.593"),"."),(0,i.kt)("p",null,"If the amount of tokens staked goes below 59.3%, then staking rewards for nominators increase,\nincentivizing them to stake more tokens on the network. On the contrary, staking rewards drop if\nstaked tokens exceed the ideal staking rate. This results from the change in the percentage of\nstaking rewards that go to the Treasury."))}f.isMDXComponent=!0},77202:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/rewards-inflation-180df2fa3a0b109245394270a57f7aa2.png"},46601:()=>{}}]); \ No newline at end of file +(self.webpackChunk=self.webpackChunk||[]).push([[2399],{47940:(e,t,n)=>{"use strict";n.d(t,{Z:()=>k});var a=n(74165),o=n(15861),i=n(67294),r=n(87152),s=n(9712),l=n(67425);function d(e,t,n){return p.apply(this,arguments)}function p(){return(p=(0,o.Z)((0,a.Z)().mark((function e(t,n,o){var i,l,d,p,c;return(0,a.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 d=new r.U(i),e.next=21,s.G.create({provider:d});case 21:p=e.sent,(c=n.split(".")).forEach((function(e){e in p&&(p=p[e])})),e.t1=c[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 ("+c[0]+") in "+n);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(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 k=function(e){var t=e.network,n=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,p=(0,i.useState)(""),k=p[0],u=p[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?c(r.toString(),l,t,u):u(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;case"kusama-people":e="wss://kusama-people-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,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,d(t,n,u);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(o,l,t,u):u(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),k}},67425:e=>{var t="polkadot",n="kusama",a="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 l=void 0;if(r===t||r===o)l=3;else{if(r!==n&&r!==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/i[r].precision)?e/i[r].precision+" "+i[r].symbol:(e/i[r].precision).toFixed(l)+" "+i[r].symbol).toString())},Precise:function(e,t,n){n(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===o)s=1;else{if(r!==n&&r!==a)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())}}},10209:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>f,frontMatter:()=>l,metadata:()=>p,toc:()=>k});var a=n(87462),o=n(63366),i=(n(67294),n(3905)),r=n(47940),s=["components"],l={id:"learn-inflation",title:"Token Inflation",sidebar_label:"Token Inflation",description:"Explanation of Token's Inflation in the Polkadot Ecosystem.",keywords:["token","DOT","KSM","inflation"],slug:"../learn-inflation"},d=void 0,p={unversionedId:"learn/learn-inflation",id:"learn/learn-inflation",title:"Token Inflation",description:"Explanation of Token's Inflation in the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-inflation.md",sourceDirName:"learn",slug:"/learn-inflation",permalink:"/docs/learn-inflation",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-inflation.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1719391505,formattedLastUpdatedAt:"Jun 26, 2024",frontMatter:{id:"learn-inflation",title:"Token Inflation",sidebar_label:"Token Inflation",description:"Explanation of Token's Inflation in the Polkadot Ecosystem.",keywords:["token","DOT","KSM","inflation"],slug:"../learn-inflation"},sidebar:"docs",previous:{title:"DOT",permalink:"/docs/learn-DOT"},next:{title:"Asset Hub",permalink:"/docs/learn-assets"}},c={},k=[{value:"Inflation Model",id:"inflation-model",level:2},{value:"Ideal Staking Rate",id:"ideal-staking-rate",level:2}],u={toc:k},h="wrapper";function f(e){var t=e.components,l=(0,o.Z)(e,s);return(0,i.kt)(h,(0,a.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"DOT is an inflationary token. On the\nPolkadot network, inflation is\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/756ccc35e93d1a78e3c71a0e67ae4da5f1d09f69/runtime/polkadot/src/lib.rs#L576"},"set to be 10% annually"),".\n","Depending\non the DOT supply staked and the ideal staking\nrate (more about this below), part of the DOT\ninflation is distributed to the stakers and part to the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury"},"treasury"),"."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"DOT went through ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn/learn-redenomination"},"redenomination")," in 2020 that saw the DOT token\nsupply increase by 100 times."),(0,i.kt)("p",{parentName:"admonition"},"The current token supply on Polkadot is\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.balances.totalIssuance",defaultValue:0xa9bc0e330b775000,filter:"humanReadable",mdxType:"RPC"})," (1.4 Billion DOT).\n","")),(0,i.kt)("p",null,"It is essential to understand that the primary objective of\nDOT inflation is to incentivize network\nparticipants through\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus#nominated-proof-of-stake"},"Nominated Proof of Stake (NPoS)")," and to grow the\nnetwork through funding the on-chain treasury. There is an opportunity cost of keeping the\nDOT tokens idle with the current inflation model\nas the tokens get diluted over time. Economics and game theory suggest that setting an ideal\ninflation rate is essential for incentivizing the network participants as well as the growth of the\nnetwork, and any deviation from it can have adverse effects. Reducing the inflation rate could limit\ngrowth, while increasing the inflation rate could break the incentive model of the token. Hence,\n",(0,i.kt)("strong",{parentName:"p"},"token inflation rate is not a forever fixed value, and inflation can be updated in the future\nthrough ",(0,i.kt)("a",{parentName:"strong",href:"/docs/learn-polkadot-opengov"},"on-chain governance"))," based on thorough tokenomics research."),(0,i.kt)("h2",{id:"inflation-model"},"Inflation Model"),(0,i.kt)("p",null,"The chart below shows the inflation model of the network. Depending on the number of staked tokens,\nthe distribution of the inflation to validators and nominators versus the treasury will change\ndynamically to provide incentives to participate (or not participate) in staking."),(0,i.kt)("p",null,"There is a ",(0,i.kt)("a",{parentName:"p",href:"#ideal-staking-rate"},"dynamic ",(0,i.kt)("em",{parentName:"a"},"ideal staking rate"))," (in the figure set to 0.6 or 60%)\nthat the network tries to maintain. The inflation model will incentivize network participants to\nstake when the ",(0,i.kt)("em",{parentName:"p"},"current staking rate")," < ",(0,i.kt)("em",{parentName:"p"},"ideal staking rate")," and disincentivize staking when\n",(0,i.kt)("em",{parentName:"p"},"current staking rate")," > ",(0,i.kt)("em",{parentName:"p"},"ideal staking rate"),". The goal is to have the staking rate meet the ideal\nstaking rate. The current staking rate would be the total amount staked in the current era over the\ntotal token supply, where the total amount staked is the stake of all validators and nominators on\nthe network. The ideal staking rate accounts for having sufficient backing of\nDOT to prevent the possible compromise of\nsecurity while keeping the native token liquid."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"staking",src:n(77202).Z,width:"1089",height:"762"})),(0,i.kt)("p",{style:{textAlign:"center"}},"Source: ",(0,i.kt)("a",{href:"https://research.web3.foundation/Polkadot/overview/token-economics"},"Research - Web3 Foundation")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"x-axis"),": Proportion of DOT staked"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"y-axis"),": Annualized percentage (inflation and staking rewards, see below)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Blue line"),": Annual inflation rate diverted to NPoS, i.e., the total amount of tokens minted to\npay validators and nominators. For instance, 0.1 corresponds to 10% of token inflation diverted to\nstakers. Since annual token inflation is 10%, all inflation is used to pay validators and\nnominators, and 0% of token inflation is diverted to the treasury."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Green line"),": Annual rewards rate for stakers. For instance, 0.2 corresponds to 20% of annual\nreturns on the staked tokens. You can determine the current annual staking rewards rate by looking\nat the top bar of the staking overview on\n",(0,i.kt)("a",{parentName:"li",href:"https://staking.polkadot.cloud/#/overview"},"the Polkadot Staking Dashboard"),".")),(0,i.kt)("p",null,"Assuming that the ideal staking rate is 60%, all of the inflation would go to the validators and\nnominators if 60% of all DOT are staked. Any\ndeviation from the 60% - positive or negative - sends the proportional remainder to the treasury.\nDeviations from the ideal staking rate are referred to as ",(0,i.kt)("em",{parentName:"p"},"staking inefficiencies"),". Thus, the\ntreasury does not receive an inflow of funds from inflation when the system staking rate equals the\nideal staking rate. See ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-polkadot-opengov-treasury"},"this page")," for more information about\ntreasury inflow sources."),(0,i.kt)("p",null,"For those who are interested in knowing more about the design of the inflation model for the\nnetwork, please see ",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/overview/token-economics"},"here"),"."),(0,i.kt)("h2",{id:"ideal-staking-rate"},"Ideal Staking Rate"),(0,i.kt)("p",null,"The ideal staking rate can vary between 45% to 75% based on the number of parachains that acquired a\nlease through an auction (this excludes the System parachains), based on the implementation\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/blob/cd901764a52edc04a6d22bea3a526def593ab2a7/polkadot/runtime/common/src/impls.rs#L80"},"here"),"."),(0,i.kt)("p",null,"Briefly, the ideal staking rate can be calculated as follows:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"0.75 - auction_proportion")),(0,i.kt)("p",null,"where ",(0,i.kt)("inlineCode",{parentName:"p"},"auction_proportion")," is obtained by computing ",(0,i.kt)("inlineCode",{parentName:"p"},"min(auctioned_slots, 60) / 300"),". The\n",(0,i.kt)("inlineCode",{parentName:"p"},"auctioned_slots")," are all the auctioned slots without the slots for system parachains."),(0,i.kt)("p",null,"Assuming there are 50 filled slots, of which three are dedicated to system parachains (Asset Hub,\nBridge Hub and Collectives), there are 47 auctioned slots. The ",(0,i.kt)("inlineCode",{parentName:"p"},"auction_proportion")," is thus\n",(0,i.kt)("inlineCode",{parentName:"p"},"47 / 300 = 0.157"),". The ideal staking rate is ",(0,i.kt)("inlineCode",{parentName:"p"},"0.75 - 0.157 = 0.593"),"."),(0,i.kt)("p",null,"If the amount of tokens staked goes below 59.3%, then staking rewards for nominators increase,\nincentivizing them to stake more tokens on the network. On the contrary, staking rewards drop if\nstaked tokens exceed the ideal staking rate. This results from the change in the percentage of\nstaking rewards that go to the Treasury."))}f.isMDXComponent=!0},77202:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/rewards-inflation-180df2fa3a0b109245394270a57f7aa2.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/a74a59a0.50f0f645.js b/assets/js/a74a59a0.50f0f645.js new file mode 100644 index 000000000000..c0079a04c10e --- /dev/null +++ b/assets/js/a74a59a0.50f0f645.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[8702],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(9712),l=a(67425);function d(e,t,a){return p.apply(this,arguments)}function p(){return(p=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var i,l,d,p,u;return(0,n.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 d=new r.U(i),e.next=21,s.G.create({provider:d});case 21:p=e.sent,(u=a.split(".")).forEach((function(e){e in p&&(p=p[e])})),e.t1=u[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 ("+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,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 c=function(e){var t=e.network,a=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,p=(0,i.useState)(""),c=p[0],h=p[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;case"kusama-people":e="wss://kusama-people-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,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,d(t,a,h);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?u(o,l,t,h):h(o);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",n="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 l=void 0;if(r===t||r===o)l=3;else{if(r!==a&&r!==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/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===o)s=1;else{if(r!==a&&r!==n)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())}}},11300:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>p,toc:()=>c});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"maintain-guides-how-to-validate-polkadot",title:"Run a Validator (Polkadot)",sidebar_label:"How to run a Validator on Polkadot",description:"The fundamentals for running a Polkadot validator.",keywords:["validator setup","validator","validate","binary","runtime"],slug:"../maintain-guides-how-to-validate-polkadot"},d=void 0,p={unversionedId:"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.",source:"@site/../docs/maintain/maintain-guides-how-to-validate-polkadot.md",sourceDirName:"maintain",slug:"/maintain-guides-how-to-validate-polkadot",permalink:"/docs/maintain-guides-how-to-validate-polkadot",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/maintain-guides-how-to-validate-polkadot.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1719391505,formattedLastUpdatedAt:"Jun 26, 2024",frontMatter:{id:"maintain-guides-how-to-validate-polkadot",title:"Run a Validator (Polkadot)",sidebar_label:"How to run a Validator on Polkadot",description:"The fundamentals for running a Polkadot validator.",keywords:["validator setup","validator","validate","binary","runtime"],slug:"../maintain-guides-how-to-validate-polkadot"},sidebar:"docs",previous:{title:"Validator Guides",permalink:"/docs/maintain-validator-index"},next:{title:"Validator Payout Overview",permalink:"/docs/maintain-guides-validator-payout"}},u={},c=[{value:"Preliminaries",id:"preliminaries",level:2},{value:"How many DOT do I need to become an active Validator?",id:"how-many-dot-do-i-need-to-become-an-active-validator",level:3},{value:"Initial Set-up",id:"initial-set-up",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Reference Hardware",id:"reference-hardware",level:4},{value:"Install & Configure Network Time Protocol (NTP) Client",id:"install--configure-network-time-protocol-ntp-client",level:3},{value:"Make Sure Landlock is Enabled",id:"make-sure-landlock-is-enabled",level:3},{value:"Installing the Polkadot binaries",id:"installing-the-polkadot-binaries",level:3},{value:"Installation from official releases",id:"installation-from-official-releases",level:4},{value:"Optional: Installation with Package Managers",id:"optional-installation-with-package-managers",level:4},{value:"Debian-based (Debian, Ubuntu)",id:"debian-based-debian-ubuntu",level:4},{value:"RPM-based (Fedora, CentOS)",id:"rpm-based-fedora-centos",level:4},{value:"Optional: Installation with Ansible",id:"optional-installation-with-ansible",level:4},{value:"Optional: Installation with Docker",id:"optional-installation-with-docker",level:4},{value:"Optional: Building the Polkadot binaries from sources",id:"optional-building-the-polkadot-binaries-from-sources",level:3},{value:"Prerequisites: Install Rust and Dependencies",id:"prerequisites-install-rust-and-dependencies",level:4},{value:"Building the binaries",id:"building-the-binaries",level:4},{value:"Verify the installation",id:"verify-the-installation",level:3},{value:"Synchronize Chain Data",id:"synchronize-chain-data",level:3},{value:"Database Snapshot Services",id:"database-snapshot-services",level:4},{value:"Bond DOT",id:"bond-dot",level:2},{value:"Set Session Keys",id:"set-session-keys",level:2},{value:"Generating the Session Keys",id:"generating-the-session-keys",level:3},{value:"Option 1: PolkadotJS-APPS",id:"option-1-polkadotjs-apps",level:4},{value:"Option 2: CLI",id:"option-2-cli",level:4},{value:"Submitting the setKeys Transaction",id:"submitting-the-setkeys-transaction",level:3},{value:"Setting the Node (aka Network) Key",id:"setting-the-node-aka-network-key",level:3},{value:"Validate",id:"validate",level:2},{value:"Setup via Validator Tab",id:"setup-via-validator-tab",level:3},{value:"Thousand Validators Programme",id:"thousand-validators-programme",level:2},{value:"Running a validator on a testnet",id:"running-a-validator-on-a-testnet",level:2},{value:"FAQ",id:"faq",level:2},{value:"Why am I unable to synchronize the chain with 0 peers?",id:"why-am-i-unable-to-synchronize-the-chain-with-0-peers",level:3},{value:"How do I clear all my chain data?",id:"how-do-i-clear-all-my-chain-data",level:3},{value:"Note about VPS",id:"note-about-vps",level:2},{value:"Disable SMT",id:"disable-smt",level:3},{value:"Disable automatic NUMA balancing",id:"disable-automatic-numa-balancing",level:3},{value:"Configure Spectre/Meltdown Mitigations",id:"configure-spectremeltdown-mitigations",level:3},{value:"For Linux >= 5.16",id:"for-linux--516",level:4},{value:"For Linux < 5.16",id:"for-linux--516-1",level:4},{value:"VPS List",id:"vps-list",level:3}],h={toc:c},m="wrapper";function k(e){var t=e.components,l=(0,o.Z)(e,s);return(0,i.kt)(m,(0,n.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"If you are a beginner, it is recommended that you start your validator journey on Kusama network.\nCheck the ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-kusama"},"Kusama guide")," for details on how to get\nstarted.")),(0,i.kt)("h2",{id:"preliminaries"},"Preliminaries"),(0,i.kt)("p",null,"Running a validator on a live network is a lot of responsibility! You will be accountable for not\nonly your own stake, but also the stake of your current nominators. If you make a mistake and get\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashed"),", your tokens and your reputation will be at risk. However,\nrunning a validator can also be very rewarding, knowing that you contribute to the security of a\ndecentralized network while growing your stash."),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"It is highly recommended that you have significant system administration experience before\nattempting to run your own validator."),(0,i.kt)("p",{parentName:"admonition"},"You must be able to handle technical issues and anomalies with your node which you must be able to\ntackle yourself. Being a validator involves more than just executing the Polkadot binary.")),(0,i.kt)("p",null,"Since security is so important to running a successful validator, you should take a look at the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-secure-validator"},"secure validator")," information to make sure you understand the\nfactors to consider when constructing your infrastructure. As you progress in your journey as a\nvalidator, you will likely want to use this repository as a ",(0,i.kt)("em",{parentName:"p"},"starting point")," for your own\nmodifications and customizations."),(0,i.kt)("p",null,"If you need help, please reach out on the\n",(0,i.kt)("a",{parentName:"p",href:"https://matrix.to/#/#polkadotvalidatorlounge:web3.foundation"},"Polkadot Validator Lounge")," on\nElement. The team and other validators are there to help answer questions and provide tips from\nexperience."),(0,i.kt)("h3",{id:"how-many-dot-do-i-need-to-become-an-active-validator"},"How many DOT do I need to become an active Validator?"),(0,i.kt)("p",null,"You can have a rough estimate on that by using the methods listed\n",(0,i.kt)("a",{parentName:"p",href:"/docs/faq/#what-is-the-minimum-stake-necessary-to-be-elected-as-an-active-validator"},"here"),".\nTo be elected into the set, you need a minimum stake behind your validator. This stake can come from\nyourself or from ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"nominators"),". This means that as a minimum, you will\nneed enough DOT to set up stash (and optionally a staking\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"proxy account"),") with the existential deposit, plus a little extra for\ntransaction fees. The rest can come from nominators. To understand how validators are elected, check\nthe ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"NPoS Election algorithms")," page."),(0,i.kt)("p",null,"For further reference, you may look at the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.subscan.io/validator_list?status=validator"},"statistics for current, active validators."),"\n",""),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Warning:")," Any DOT that you stake for your validator is liable to be\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashed"),", meaning that an insecure or improper setup may result in loss\nof DOT tokens! If you are not confident in your ability to run a validator node, it is recommended\nto nominate your DOT to a trusted validator node instead."),(0,i.kt)("h2",{id:"initial-set-up"},"Initial Set-up"),(0,i.kt)("h3",{id:"requirements"},"Requirements"),(0,i.kt)("p",null,"The most common way for a beginner to run a validator is on a cloud server running Linux. You may\nchoose whatever ",(0,i.kt)("a",{parentName:"p",href:"#note-about-vps"},"VPS")," provider that you prefer. As OS it is best to use a recent\nDebian Linux. For this guide we will be using ",(0,i.kt)("strong",{parentName:"p"},"Ubuntu 22.04"),", but the instructions should be\nsimilar for other platforms."),(0,i.kt)("h4",{id:"reference-hardware"},"Reference Hardware"),(0,i.kt)("p",null,"The transaction weights in Polkadot are benchmarked on reference hardware. We ran the benchmark on\nVM instances of two major cloud providers: Google Cloud Platform (GCP) and Amazon Web Services\n(AWS). To be specific, we used ",(0,i.kt)("inlineCode",{parentName:"p"},"n2-standard-8")," VM instance on GCP and ",(0,i.kt)("inlineCode",{parentName:"p"},"c6i.4xlarge")," on AWS. It is\nrecommended that the hardware used to run the validators at least matches the specs of the reference\nhardware in order to ensure they are able to process all blocks in time. If you use subpar hardware\nyou will possibly run into performance issues, get less era points, and potentially even get\nslashed."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"CPU"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"x86-64 compatible;"),(0,i.kt)("li",{parentName:"ul"},"Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);"),(0,i.kt)("li",{parentName:"ul"},"4 physical cores @ 3.4GHz;"),(0,i.kt)("li",{parentName:"ul"},"Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);"),(0,i.kt)("li",{parentName:"ul"},"Prefer single-threaded performance over higher cores count. A comparison of single-threaded\nperformance can be found ",(0,i.kt)("a",{parentName:"li",href:"https://www.cpubenchmark.net/singleThread.html"},"here"),"."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Storage"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"An NVMe SSD of 1 TB (As it should be reasonably sized to deal with blockchain growth). An\nestimation of current chain snapshot sizes can be found\n",(0,i.kt)("a",{parentName:"li",href:"https://stakeworld.io/docs/dbsize"},"here"),". In general, the latency is more important than the\nthroughput."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Memory"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"32 GB DDR4 ECC."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"System"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Linux Kernel 5.16 or newer."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Network"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"The minimum symmetric networking speed is set to 500 Mbit/s (= 62.5 MB/s). This is required to\nsupport a large number of parachains and allow for proper congestion control in busy network\nsituations.")))),(0,i.kt)("p",null,"The specs posted above are not a ",(0,i.kt)("em",{parentName:"p"},"hard")," requirement to run a validator, but are considered best\npractice. Running a validator is a responsible task; using professional hardware is a must in any\nway."),(0,i.kt)("h3",{id:"install--configure-network-time-protocol-ntp-client"},"Install & Configure Network Time Protocol (NTP) Client"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Network_Time_Protocol"},"NTP")," is a networking protocol designed to\nsynchronize the clocks of computers over a network. NTP allows you to synchronize the clocks of all\nthe systems within the network. Currently it is required that validators' local clocks stay\nreasonably in sync, so you should be running NTP or a similar service. You can check whether you\nhave the NTP client by running:"),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"If you are using Ubuntu 18.04 or a newer version, NTP Client should be installed by default.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"timedatectl\n")),(0,i.kt)("p",null,"If NTP is installed and running, you should see ",(0,i.kt)("inlineCode",{parentName:"p"},"System clock synchronized: yes")," (or a similar\nmessage). If you do not see it, you can install it by executing:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt-get install ntp\n")),(0,i.kt)("p",null,"ntpd will be started automatically after install. You can query ntpd for status information to\nverify that everything is working:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ntpq -p\n")),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Skipping this can result in the validator node missing block authorship opportunities. If the clock\nis out of sync (even by a small amount), the blocks the validator produces may not get accepted by\nthe network.")),(0,i.kt)("h3",{id:"make-sure-landlock-is-enabled"},"Make Sure Landlock is Enabled"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://docs.kernel.org/userspace-api/landlock.html"},"Landlock")," is a Linux security feature used in\nPolkadot:"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Landlock empowers any process, including unprivileged ones, to securely restrict themselves.")),(0,i.kt)("p",null,"To make use of landlock, make sure you are on the reference kernel version or newer. Most Linux\ndistributions should already have landlock enabled, but you can check by running the following as\nroot:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"dmesg | grep landlock || journalctl -kg landlock\n")),(0,i.kt)("p",null,"If it is not enabled, please see the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.kernel.org/userspace-api/landlock.html#kernel-support"},'official docs ("Kernel support")'),"\nif you would like to build Linux with landlock enabled."),(0,i.kt)("h3",{id:"installing-the-polkadot-binaries"},"Installing the Polkadot binaries"),(0,i.kt)("admonition",{title:"Multiple Validator Binaries",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"In addition to the ",(0,i.kt)("inlineCode",{parentName:"p"},"polkadot")," binary, recent changes have separated out functionality into two\nadditional needed binaries, ",(0,i.kt)("inlineCode",{parentName:"p"},"polkadot-prepare-worker"),", and ",(0,i.kt)("inlineCode",{parentName:"p"},"polkadot-execute-worker"),". All three\nbinaries are needed to properly run a validator node. More context on these changes can be found\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/pull/7337"},"here"))),(0,i.kt)("h4",{id:"installation-from-official-releases"},"Installation from official releases"),(0,i.kt)("p",null,"The official binaries can be downloaded from the\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/releases"},"Github Releases"),". You should download the\nlatest available version. You can also download the binaries by using the following direct links\n(replace X.Y.Z by the appropriate version):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"https://github.com/paritytech/polkadot-sdk/releases/download/polkadot-vX.Y.Z/polkadot\nhttps://github.com/paritytech/polkadot-sdk/releases/download/polkadot-vX.Y.Z/polkadot-execute-worker\nhttps://github.com/paritytech/polkadot-sdk/releases/download/polkadot-vX.Y.Z/polkadot-prepare-worker\n")),(0,i.kt)("h4",{id:"optional-installation-with-package-managers"},"Optional: Installation with Package Managers"),(0,i.kt)("p",null,"The Polkadot Binary in included in ",(0,i.kt)("inlineCode",{parentName:"p"},"Debian")," derivatives (i.e. ",(0,i.kt)("strong",{parentName:"p"},"Debian"),", ",(0,i.kt)("strong",{parentName:"p"},"Ubuntu"),") and\n",(0,i.kt)("inlineCode",{parentName:"p"},"RPM-based")," distros (i.e. ",(0,i.kt)("strong",{parentName:"p"},"Fedora"),", ",(0,i.kt)("strong",{parentName:"p"},"CentOS"),")."),(0,i.kt)("h4",{id:"debian-based-debian-ubuntu"},"Debian-based (Debian, Ubuntu)"),(0,i.kt)("p",null,"Run the following commands as the root user:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-ssh"},"# Import the security@parity.io GPG key\ngpg --recv-keys --keyserver hkps://keys.mailvelope.com 9D4B2B6EB8F97156D19669A9FF0812D491B96798\ngpg --export 9D4B2B6EB8F97156D19669A9FF0812D491B96798 > /usr/share/keyrings/parity.gpg\n# Add the Parity repository and update the package index\necho 'deb [signed-by=/usr/share/keyrings/parity.gpg] https://releases.parity.io/deb release main' > /etc/apt/sources.list.d/parity.list\napt update\n# Install the `parity-keyring` package - This will ensure the GPG key\n# used by APT remains up-to-date\napt install parity-keyring\n# Install polkadot\napt install polkadot\n")),(0,i.kt)("h4",{id:"rpm-based-fedora-centos"},"RPM-based (Fedora, CentOS)"),(0,i.kt)("p",null,"Run the following commands as the root user:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"# Install dnf-plugins-core (This might already be installed)\ndnf install dnf-plugins-core\n# Add the repository and enable it\ndnf config-manager --add-repo https://releases.parity.io/rpm/polkadot.repo\ndnf config-manager --set-enabled polkadot\n# Install polkadot (You may have to confirm the import of the GPG key, which\n# should have the following fingerprint: 9D4B2B6EB8F97156D19669A9FF0812D491B96798)\ndnf install polkadot\n")),(0,i.kt)("p",null,'Make sure you verify the installation (see the "Verify the installation" section).'),(0,i.kt)("admonition",{title:"By default, the Polkadot systemd service is disabled",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"To start the service, run:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl start polkadot.service\n"))),(0,i.kt)("h4",{id:"optional-installation-with-ansible"},"Optional: Installation with Ansible"),(0,i.kt)("p",null,"To manage Polkadot installation with Ansible, you can use the ",(0,i.kt)("strong",{parentName:"p"},"Substrate node role")," distributed on\nthe ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/ansible-galaxy/"},"Parity chain operations Ansible collection")),(0,i.kt)("h4",{id:"optional-installation-with-docker"},"Optional: Installation with Docker"),(0,i.kt)("p",null,"To run Polkadot on a Docker or an OCI compatible container runtime, you can use the official\n",(0,i.kt)("a",{parentName:"p",href:"https://hub.docker.com/r/parity/polkadot/tags"},"parity/polkadot docker image"),", available on Docker\nHub (replace X.Y.Z by the appropriate version):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"docker.io/parity/polkadot:vX.Y.Z\n")),(0,i.kt)("h3",{id:"optional-building-the-polkadot-binaries-from-sources"},"Optional: Building the Polkadot binaries from sources"),(0,i.kt)("h4",{id:"prerequisites-install-rust-and-dependencies"},"Prerequisites: Install Rust and Dependencies"),(0,i.kt)("p",null,"If you have never installed Rust, you should do this first."),(0,i.kt)("p",null,"If you have already installed Rust, run the following command to make sure you are using the latest\nversion."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"rustup update\n")),(0,i.kt)("p",null,"If not, this command will fetch the latest version of Rust and install it."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"curl https://sh.rustup.rs -sSf | sh -s -- -y\n")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},'If you do not have "curl" installed, run:'),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt install curl\n")),(0,i.kt)("p",{parentName:"admonition"},'It will also be valuable to have "websocat" (Netcat, curl and socat for WebSockets) installed for\nRPC interactions. Installation instructions for various operating systems can be found\n',(0,i.kt)("a",{parentName:"p",href:"https://github.com/vi/websocat#installation"},"here"),".")),(0,i.kt)("p",null,"To configure your shell, run the following command."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"source $HOME/.cargo/env\n")),(0,i.kt)("p",null,"Verify your installation."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"rustc --version\n")),(0,i.kt)("p",null,"Finally, run this command to install the necessary dependencies for compiling and running the\nPolkadot node software."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt install make clang pkg-config libssl-dev build-essential\n")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you are using OSX and you have ",(0,i.kt)("a",{parentName:"p",href:"https://brew.sh"},"Homebrew")," installed, you can issue the following\nequivalent command INSTEAD of the previous one:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"brew install cmake pkg-config openssl git llvm\n"))),(0,i.kt)("h4",{id:"building-the-binaries"},"Building the binaries"),(0,i.kt)("p",null,"You can build the Polkadot binaries from the\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk"},"paritytech/polkadot-sdk")," repository on GitHub."),(0,i.kt)("p",null,"You should generally use the latest ",(0,i.kt)("strong",{parentName:"p"},"X.Y.Z"),' tag. You should either review the output from the "git\ntag" command or view the ',(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/tags"},"Polkadot SDK Github tags"),"\nto see a list of all the available release versions. You should replace ",(0,i.kt)("inlineCode",{parentName:"p"},"VERSION")," below with the\nlatest build (i.e., the highest number)."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you prefer to use SSH rather than HTTPS, you can replace the first line of the below with"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"git clone git@github.com:paritytech/polkadot-sdk.git\n"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"git clone https://github.com/paritytech/polkadot-sdk.git\ncd polkadot-sdk/polkadot\n")),(0,i.kt)("p",null,"Run the following command to find the latest version."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"git tag -l | sort -V | grep -v -- '-rc'\n")),(0,i.kt)("p",null,'Find the latest version; replace "VERSION" in the command below and run to change your branch.'),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"git checkout VERSION\n")),(0,i.kt)("p",null,"Build native code with the production profile. The following will make sure that the binaries are\nall in your ",(0,i.kt)("inlineCode",{parentName:"p"},"$PATH"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"cargo install --force --path . --profile production\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"This step will take a while (generally 10 - 40 minutes, depending on your hardware)."))),(0,i.kt)("admonition",{title:"Compilation Errors",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you run into compile errors, you may have to pin the version of Rust compiler to the one that was\nused to build the release. Check out ",(0,i.kt)("inlineCode",{parentName:"p"},"Rust compiler versions")," section in the release notes. This can\nbe done by running:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"rustup install nightly-2022-05-18\nrustup target add wasm32-unknown-unknown --toolchain nightly-2022-05-18\ncargo +nightly-2022-05-18 build --release\n")),(0,i.kt)("p",{parentName:"admonition"},"You may also need to run the build more than once."),(0,i.kt)("p",{parentName:"admonition"},"If you would like to execute the tests, run the following command:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"cargo test --all\n"))),(0,i.kt)("p",null,"If you are interested in generating keys locally, you can also install ",(0,i.kt)("inlineCode",{parentName:"p"},"subkey")," from the same\ndirectory. You may then take the generated ",(0,i.kt)("inlineCode",{parentName:"p"},"subkey")," executable and transfer it to an air-gapped\nmachine for extra security."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"cargo install --force --git https://github.com/paritytech/polkadot-sdk subkey\n")),(0,i.kt)("h3",{id:"verify-the-installation"},"Verify the installation"),(0,i.kt)("p",null,"After installing Polkadot, you can verify the installation by running"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"polkadot --version\npolkadot-execute-worker --version\npolkadot-prepare-worker --version\n")),(0,i.kt)("p",null,"It should return something like this (the exact versions don't matter, but they must all be the\nsame):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"0.9.43-36264cb36db\n0.9.43-36264cb36db\n0.9.43-36264cb36db\n")),(0,i.kt)("p",null,"If not, make sure that you installed all the binaries, all the binaries are somewhere in your\n",(0,i.kt)("inlineCode",{parentName:"p"},"$PATH")," and they are all in the same folder."),(0,i.kt)("h3",{id:"synchronize-chain-data"},"Synchronize Chain Data"),(0,i.kt)("p",null,"You can begin syncing your node by running the following command if you do not want to start in\nvalidator mode right away:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"polkadot\n")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you want to run a validator on Kusama, you have an option to specify the chain. With no\nspecification, this would default to Polkadot."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"polkadot --chain=kusama\n"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"2021-06-17 03:07:07 Parity Polkadot\n2021-06-17 03:07:07 \u270c\ufe0f version 0.9.5-95f6aa201-x86_64-linux-gnu\n2021-06-17 03:07:07 \u2764\ufe0f by Parity Technologies , 2017-2021\n2021-06-17 03:07:07 \ud83d\udccb Chain specification: Polkadot\n2021-06-17 03:07:07 \ud83c\udff7 Node name: boiling-pet-7554\n2021-06-17 03:07:07 \ud83d\udc64 Role: FULL\n2021-06-17 03:07:07 \ud83d\udcbe Database: RocksDb at /root/.local/share/polkadot/chains/polkadot/db\n2021-06-17 03:07:07 \u26d3 Native runtime: polkadot-9050 (parity-polkadot-0.tx7.au0)\n2021-06-17 03:07:10 \ud83c\udff7 Local node identity is: 12D3KooWLtXFWf1oGrnxMGmPKPW54xWCHAXHbFh4Eap6KXmxoi9u\n2021-06-17 03:07:10 \ud83d\udce6 Highest known block at #17914\n2021-06-17 03:07:10 \u303d\ufe0f Prometheus server started at 127.0.0.1:9615\n2021-06-17 03:07:10 Listening for new connections on 127.0.0.1:9944.\n")),(0,i.kt)("admonition",{title:"Example of node sync",type:"info"},(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre"},"2021-06-17 03:07:39 \ud83d\udd0d Discovered new external address for our node: /ip4/10.26.16.1/tcp/30333/ws/p2p/12D3KooWLtXFWf1oGrnxMGmPKPW54xWCHAXHbFh4Eap6KXmxoi9u\n2021-06-17 03:07:40 \u2699\ufe0f Syncing 218.8 bps, target=#5553764 (17 peers), best: #24034 (0x08af\u2026dcf5), finalized #23552 (0xd4f0\u20262642), \u2b07 173.5kiB/s \u2b06 12.7kiB/s\n2021-06-17 03:07:45 \u2699\ufe0f Syncing 214.8 bps, target=#5553765 (20 peers), best: #25108 (0xb272\u2026e800), finalized #25088 (0x94e6\u20268a9f), \u2b07 134.3kiB/s \u2b06 7.4kiB/s\n2021-06-17 03:07:50 \u2699\ufe0f Syncing 214.8 bps, target=#5553766 (21 peers), best: #26182 (0xe7a5\u202601a2), finalized #26112 (0xcc29\u2026b1a9), \u2b07 5.0kiB/s \u2b06 1.1kiB/s\n2021-06-17 03:07:55 \u2699\ufe0f Syncing 138.4 bps, target=#5553767 (21 peers), best: #26874 (0xcf4b\u20266553), finalized #26624 (0x9dd9\u202627f8), \u2b07 18.9kiB/s \u2b06 2.0kiB/s\n2021-06-17 03:08:00 \u2699\ufe0f Syncing 37.0 bps, target=#5553768 (22 peers), best: #27059 (0x5b73\u20266fc9), finalized #26624 (0x9dd9\u202627f8), \u2b07 14.3kiB/s \u2b06 4.4kiB/s\n"))),(0,i.kt)("admonition",{title:"Use Warp sync for faster syncing",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"By default, the node performs ",(0,i.kt)("inlineCode",{parentName:"p"},"full")," sync, which downloads and validates the full blockchain\nhistory. Full sync works by listening to announced blocks and requesting the blocks from the\nannouncing peers, or just the block headers in case of light clients."),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"Fast")," sync is another option that works by downloading the block header history and validating the\nauthority set changes in order to arrive at a specific (usually the most recent) header. After the\ndesired header has been reached and verified, the state can be downloaded and imported. Once this\nprocess has been completed, the node can proceed with a full sync."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"polkadot --sync warp\n")),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"Warp sync")," initially downloads and validates the finality proofs from\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus#finality-gadget-grandpa"},"GRANDPA")," and then downloads the state of the\nlatest finalized block. After the warp sync, the node is ready to import the latest blocks from the\nnetwork and can be used as a Validator. The blocks from genesis will be downloaded in the\nbackground. Check\n",(0,i.kt)("a",{parentName:"p",href:"https://substrate.stackexchange.com/questions/334/what-kinds-of-sync-mechanisms-does-substrate-implement/"},"this discussion"),"\nfor more information about the different sync options available.")),(0,i.kt)("admonition",{title:"Validators should sync using the RocksDb backend",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"This is implicit by default, but can be explicit by passing the ",(0,i.kt)("inlineCode",{parentName:"p"},"--database RocksDb")," flag."),(0,i.kt)("p",{parentName:"admonition"},"In the future, it is recommended to switch to the faster and more efficient ParityDB option. Note\nthat ",(0,i.kt)("strong",{parentName:"p"},"ParityDB is still experimental and should not be used in production.")," If you want to test\nout ParityDB, you can add the flag ",(0,i.kt)("inlineCode",{parentName:"p"},"--database paritydb"),". Switching between database backends will\nrequire a resync.")),(0,i.kt)("p",null,"Depending on the size of the chain when you do this, this step may take anywhere from a few minutes\nto a few hours."),(0,i.kt)("p",null,"If you are interested in determining how much longer you have to go, your server logs (printed to\nSTDOUT from the ",(0,i.kt)("inlineCode",{parentName:"p"},"polkadot")," process) will tell you the latest block your node has processed and\nverified. You can then compare that to the current highest block via\n",(0,i.kt)("a",{parentName:"p",href:"https://telemetry.polkadot.io/#list/Polkadot%20CC1"},"Telemetry")," or the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"PolkadotJS Block Explorer"),"."),(0,i.kt)("h4",{id:"database-snapshot-services"},"Database Snapshot Services"),(0,i.kt)("p",null,"If you start a node for the first time, it will start building from the genesis block. This process\ncan take a while depending on the database size. To make this process faster, snapshots can be used.\nSnapshots are compressed backups of the database directory of Polkadot/Kusama nodes, containing the\nwhole chain (or a pruned version of it, with states only from the latest 1000 or 256 blocks). Listed\nbelow are a few public snapshot providers for Polkadot and Kusama."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://stakeworld.io/snapshot"},"Stakeworld")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkachu.com/snapshots"},"Polkachu")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkashots.io/"},"Polkashots"))),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"For the security of the network, it is recommended that you sync from scratch, even if you are\nrunning your node in pruning mode for validation. The reason is that if these snapshots get\ncorrupted and a majority of nodes run based on these snapshots, the network could end up running on\na non-canonical chain.")),(0,i.kt)("h2",{id:"bond-dot"},"Bond DOT"),(0,i.kt)("p",null,"To start a validator instance on Polkadot, the\nminimum bond required is\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minValidatorBond",defaultValue:"0",filter:"humanReadable",mdxType:"RPC"}),".\n","\nBut to enter the active validator set and be eligible to earn rewards, your validator node should be\nnominated by a minimum number of DOT tokens."),(0,i.kt)("p",null,"For example, the minimum stake backing a validator in era\n1449 (May 21st 2024) is\n2,377,756.492 DOT. For a live view at\ncurrent validator stats, you may look to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.subscan.io/validator_list?status=validator"},"Subscan")," or the\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/#/overview"},"Staking Dashboard.")),(0,i.kt)("p",null,"If you are validator who intends to get DOT/KSM nominations from the community, you will need to\nshow some skin in the game. For that, you need to bond some DOT/KSM as own stake. Make sure not to\nbond all your DOT balance since you will be unable to pay transaction fees from your bonded balance."),(0,i.kt)("admonition",{title:"Controller accounts are deprecated. Use Staking Proxy.",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"),".\nIt is highly recommended that you setup an account with a staking proxy, which can be used for\nissuing start and stop validating calls. Read more about ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"proxy accounts"),"\nhere.")),(0,i.kt)("p",null,"First, go to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Staking"),' section. Click on\n"Account Actions", and then the "+ Stash" button.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"bonding-JS-UI",src:a(90412).Z,width:"2143",height:"847"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Stash account")," - Select your Stash account (which is the account with the DOT/KSM balance)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Value bonded")," - How much DOT from the Stash account you want to bond/stake. Note that you do\nnot need to bond all of the DOT in that account. Also note that you can always bond ",(0,i.kt)("em",{parentName:"li"},"more")," DOT\nlater. However, ",(0,i.kt)("em",{parentName:"li"},"withdrawing")," any bonded amount requires the duration of the unbonding period. On\nKusama, the unbonding period is 7 days. On Polkadot, the planned unbonding period is 28 days."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Payment destination")," - The account where the rewards from validating are sent. More info\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking/#reward-distribution"},"here"),". Starting with runtime version v23 natively\nincluded in client version ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot/releases/tag/v0.9.3"},"0.9.3"),",\npayouts can go to any custom address. If you'd like to redirect payments to an account that is not\nthe stash account, you can do it by entering the address here. Note that it is extremely unsafe to\nset an exchange address as the recipient of the staking rewards.")),(0,i.kt)("p",null,"Once everything is filled in properly, click ",(0,i.kt)("inlineCode",{parentName:"p"},"Bond")," and sign the transaction with your Stash\naccount."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"sign transaction",src:a(93002).Z,width:"2141",height:"780"})),(0,i.kt)("p",null,"After a few seconds, you should see an ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtrinsicSuccess")," message."),(0,i.kt)("p",null,"Your bonded account will be available under ",(0,i.kt)("inlineCode",{parentName:"p"},"Stashes"),". You should now see a new card with all your\naccounts (note: you may need to refresh the screen). The bonded amount on the right corresponds to\nthe funds bonded by the Stash account."),(0,i.kt)("h2",{id:"set-session-keys"},"Set Session Keys"),(0,i.kt)("admonition",{title:"Session keys are consensus critical",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"If you are not sure if your node has the current session keys that you made the ",(0,i.kt)("inlineCode",{parentName:"p"},"setKeys"),"\ntransaction then you can use one of the two available RPC methods to query your node:\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/substrate/rpc/#haskeypublickey-bytes-keytype-text-bool"},"hasKey")," to\ncheck for a specific key or\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/substrate/rpc/#hassessionkeyssessionkeys-bytes-bool"},"hasSessionKeys"),"\nto check the full session key public key string.")),(0,i.kt)("p",null,"Once your node is fully synced, stop the process by pressing Ctrl-C. At your terminal prompt, you\nwill now start running the node."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},'polkadot --validator --name "name on telemetry"\n')),(0,i.kt)("p",null,"Similarly:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"2021-06-17 03:12:08 Parity Polkadot\n2021-06-17 03:12:08 \u270c\ufe0f version 0.9.5-95f6aa201-x86_64-linux-gnu\n2021-06-17 03:12:08 \u2764\ufe0f by Parity Technologies , 2017-2021\n2021-06-17 03:12:08 \ud83d\udccb Chain specification: Polkadot\n2021-06-17 03:12:08 \ud83c\udff7 Node name: nateched-test\n2021-06-17 03:12:08 \ud83d\udc64 Role: AUTHORITY\n2021-06-17 03:12:08 \ud83d\udcbe Database: RocksDb at /root/.local/share/polkadot/chains/polkadot/db\n2021-06-17 03:12:08 \u26d3 Native runtime: polkadot-9050 (parity-polkadot-0.tx7.au0)\n2021-06-17 03:12:12 \ud83c\udff7 Local node identity is: 12D3KooWLtXFWf1oGrnxMGmPKPW54xWCHAXHbFh4Eap6KXmxoi9u\n2021-06-17 03:12:12 \ud83d\udce6 Highest known block at #64673\n2021-06-17 03:12:12 \u303d\ufe0f Prometheus server started at 127.0.0.1:9615\n2021-06-17 03:12:12 Listening for new connections on 127.0.0.1:9944.\n2021-06-17 03:12:12 \ud83d\udc76 Starting BABE Authorship worker\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"2021-06-17 03:12:16 \ud83d\udd0d Discovered new external address for our node: /ip4/10.26.11.1/tcp/30333/p2p/12D3KooWLtXFWf1oGrnxMGmPKPW54xWCHAXHbFh4Eap6KXmxoi9u\n2021-06-17 03:12:17 \u2699\ufe0f Syncing, target=#5553810 (14 peers), best: #65068 (0x6da5\u20260662), finalized #65024 (0x4e84\u2026d170), \u2b07 352.2kiB/s \u2b06 75.6kiB/s\n")),(0,i.kt)("p",null,"You can give your validator any name that you like, but note that others will be able to see it, and\nit will be included in the list of all servers using the same telemetry server. Since numerous\npeople are using telemetry, it is recommended that you choose something likely to be unique."),(0,i.kt)("h3",{id:"generating-the-session-keys"},"Generating the Session Keys"),(0,i.kt)("p",null,"You need to tell the chain your Session keys by signing and submitting an extrinsic. This is what\nassociates your validator node with your stash account on Polkadot."),(0,i.kt)("h4",{id:"option-1-polkadotjs-apps"},"Option 1: PolkadotJS-APPS"),(0,i.kt)("p",null,"You can generate your ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography"},"Session keys")," in the client via the apps RPC.\nIf you are doing this, make sure that you have the PolkadotJS-Apps explorer attached to your\nvalidator node. You can configure the apps dashboard to connect to the endpoint of your validator in\nthe Settings tab. If you are connected to a default endpoint hosted by Parity of Web3 Foundation,\nyou will not be able to use this method since making RPC requests to this node would effect the\nlocal keystore hosted on a ",(0,i.kt)("em",{parentName:"p"},"public node")," and you want to make sure you are interacting with the\nkeystore for ",(0,i.kt)("em",{parentName:"p"},"your node"),"."),(0,i.kt)("p",null,"Once ensuring that you have connected to your node, the easiest way to set session keys for your\nnode is by calling the ",(0,i.kt)("inlineCode",{parentName:"p"},"author_rotateKeys")," RPC request to create new keys in your validator's\nkeystore. Navigate to Toolbox tab and select RPC Calls then select the author > rotateKeys() option\nand remember to save the output that you get back for a later step."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Explorer RPC call",src:a(54061).Z,width:"1700",height:"582"})),(0,i.kt)("h4",{id:"option-2-cli"},"Option 2: CLI"),(0,i.kt)("p",null,"If you are on a remote server, it is easier to run this command on the same machine (while the node\nis running with the default WS RPC port configured):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},'curl -H "Content-Type: application/json" -d \'{"id":1, "jsonrpc":"2.0", "method": "author_rotateKeys", "params":[]}\' http://localhost:9944\n')),(0,i.kt)("p",null,'The output will have a hex-encoded "result" field. The result is the concatenation of the four\npublic keys. Save this result for a later step.'),(0,i.kt)("p",null,"You can restart your node at this point."),(0,i.kt)("h3",{id:"submitting-the-setkeys-transaction"},"Submitting the ",(0,i.kt)("inlineCode",{parentName:"h3"},"setKeys")," Transaction"),(0,i.kt)("p",null,"You need to tell the chain your Session keys by signing and submitting an extrinsic. This is what\nassociates your validator with your staking proxy."),(0,i.kt)("p",null,"Go to ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Staking > Account Actions"),', and click "Set\nSession Key" on the bonding account you generated earlier. Enter the output from ',(0,i.kt)("inlineCode",{parentName:"p"},"author_rotateKeys"),'\nin the field and click "Set Session Key".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"staking-change-session",src:a(72316).Z,width:"2792",height:"182"}),"\n",(0,i.kt)("img",{alt:"staking-session-result",src:a(12883).Z,width:"2146",height:"680"})),(0,i.kt)("p",null,"Submit this extrinsic and you are now ready to start validating."),(0,i.kt)("h3",{id:"setting-the-node-aka-network-key"},"Setting the Node (aka Network) Key"),(0,i.kt)("p",null,"Validators must use a static network key to maintain a stable node identity across restarts.\nStarting with Polkadot version 1.11, a check is performed on startup, and the following error will\nbe printed if a static node key is not set:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'Error:\n0: Starting an authority without network key\nThis is not a safe operation because other authorities in the network may depend on your node having a stable identity.\nOtherwise these other authorities may not being able to reach you.\n\nIf it is the first time running your node you could use one of the following methods:\n1. [Preferred] Separately generate the key with: key generate-node-key --base-path \n2. [Preferred] Separately generate the key with: key generate-node-key --file \n3. [Preferred] Separately generate the key with: key generate-node-key --default-base-path\n4. [Unsafe] Pass --unsafe-force-node-key-generation and make sure you remove it for subsequent node restarts"\n')),(0,i.kt)("p",null,"The recommended solution is to generate a node key and save it to a file using\n",(0,i.kt)("inlineCode",{parentName:"p"},"polkadot key generate-node-key --file "),", then attach it to your node with\n",(0,i.kt)("inlineCode",{parentName:"p"},"--node-key-file "),"."),(0,i.kt)("p",null,"Please see ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/pull/3852"},"polkadot-sdk#3852")," for the\nrationale behind this change."),(0,i.kt)("h2",{id:"validate"},"Validate"),(0,i.kt)("p",null,"To verify that your node is live and synchronized, head to\n",(0,i.kt)("a",{parentName:"p",href:"https://telemetry.polkadot.io/#list/Polkadot%20CC1"},"Telemetry")," and find your node. Note that this\nwill show all nodes on the Polkadot network, which is why it is important to select a unique name!"),(0,i.kt)("p",null,"In this example, we used the name ",(0,i.kt)("inlineCode",{parentName:"p"},"techedtest")," and have successfully located it upon searching:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"polkadot-dashboard-telemetry",src:a(67929).Z,width:"2862",height:"472"})),(0,i.kt)("h3",{id:"setup-via-validator-tab"},"Setup via Validator Tab"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"polkadot-dashboard-validate-1",src:a(63670).Z,width:"2128",height:"1022"})),(0,i.kt)("p",null,"Here you will need to input the Keys from ",(0,i.kt)("inlineCode",{parentName:"p"},"rotateKeys"),", which is the Hex output from\n",(0,i.kt)("inlineCode",{parentName:"p"},"author_rotateKeys"),". The keys will show as pending until applied at the start of a new session."),(0,i.kt)("p",null,'The "reward commission percentage" is the commission percentage that you can declare against your\nvalidator\'s rewards. This is the rate that your validator will be commissioned with.'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Payment preferences")," - You can specify the percentage of the rewards that will get paid to you.\nThe remaining will be split among your nominators.")),(0,i.kt)("admonition",{title:"Setting a commission rate of 100% suggests that you do not want your validator to receive",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"nominations")),(0,i.kt)("p",null,'You can also determine if you would like to receive nominations with the "allows new nominations"\noption.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"dashboard validate",src:a(44281).Z,width:"2126",height:"694"})),(0,i.kt)("p",null,'Click "Bond & Validate".'),(0,i.kt)("p",null,'If you go to the "Staking" tab, you will see a list of active validators currently running on the\nnetwork. At the top of the page, it shows the number of validator slots that are available as well\nas the number of nodes that have signaled their intention to be a validator. You can go to the\n"Waiting" tab to double check to see whether your node is listed there.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"staking queue",src:a(46513).Z,width:"2838",height:"1440"})),(0,i.kt)("p",null,"The validator set is refreshed every era. In the next era, if there is a slot available and your\nnode is selected to join the validator set, your node will become an active validator. Until then,\nit will remain in the ",(0,i.kt)("em",{parentName:"p"},"waiting")," queue. If your validator is not selected to become part of the\nvalidator set, it will remain in the ",(0,i.kt)("em",{parentName:"p"},"waiting")," queue until it is. There is no need to re-start if\nyou are not selected for the validator set in a particular era. However, it may be necessary to\nincrease the number of DOT staked or seek out nominators for your validator in order to join the\nvalidator set."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Congratulations!")," If you have followed all of these steps, and been selected to be a part of the\nvalidator set, you are now running a Polkadot validator! If you need help, reach out on the\n",(0,i.kt)("a",{parentName:"p",href:"https://matrix.to/#/!NZrbtteFeqYKCUGQtr:matrix.parity.io?via=matrix.parity.io&via=matrix.org&via=web3.foundation"},"Polkadot Validator chat"),"."),(0,i.kt)("h2",{id:"thousand-validators-programme"},"Thousand Validators Programme"),(0,i.kt)("p",null,"The Thousand Validators Programme is a joint initiative by Web3 Foundation and Parity Technologies\nto provide support for community validators. If you are interested in applying for the program, you\ncan find more information ",(0,i.kt)("a",{parentName:"p",href:"/docs/thousand-validators"},"on the wiki page"),"."),(0,i.kt)("h2",{id:"running-a-validator-on-a-testnet"},"Running a validator on a testnet"),(0,i.kt)("p",null,"To verify your validator setup, it is possible to run it against a PoS test network such as Westend.\nHowever, validator slots are intentionally limited on Westend to ensure stability and availability\nof the testnet for the Polkadot release process."),(0,i.kt)("p",null,"Here is a small comparison of each network characteristics as relevant to validators:"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Network"),(0,i.kt)("th",{parentName:"tr",align:null},"Polkadot"),(0,i.kt)("th",{parentName:"tr",align:null},"Westend"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"epoch"),(0,i.kt)("td",{parentName:"tr",align:null},"4h"),(0,i.kt)("td",{parentName:"tr",align:null},"1h")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"era"),(0,i.kt)("td",{parentName:"tr",align:null},"1d"),(0,i.kt)("td",{parentName:"tr",align:null},"6h")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"token"),(0,i.kt)("td",{parentName:"tr",align:null},"DOT"),(0,i.kt)("td",{parentName:"tr",align:null},"WND (test)")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"active validators"),(0,i.kt)("td",{parentName:"tr",align:null},"~300"),(0,i.kt)("td",{parentName:"tr",align:null},"~20")))),(0,i.kt)("h2",{id:"faq"},"FAQ"),(0,i.kt)("h3",{id:"why-am-i-unable-to-synchronize-the-chain-with-0-peers"},"Why am I unable to synchronize the chain with 0 peers?"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"zero-peer",src:a(29009).Z,width:"1350",height:"235"})),(0,i.kt)("p",null,"Make sure to enable ",(0,i.kt)("inlineCode",{parentName:"p"},"30333")," libp2p port. Eventually, it will take a little bit of time to discover\nother peers over the network."),(0,i.kt)("h3",{id:"how-do-i-clear-all-my-chain-data"},"How do I clear all my chain data?"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"polkadot purge-chain\n")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Check out the ",(0,i.kt)("a",{parentName:"p",href:"https://substrate.stackexchange.com/"},"Substrate StackExchange")," to quickly get the\nanswers you need.")),(0,i.kt)("h2",{id:"note-about-vps"},"Note about VPS"),(0,i.kt)("p",null,"VPS providers are very popular for running servers of any kind. Extensive benchmarking was conducted\nto ensure that VPS servers are able to keep up with the work load in general."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Before you run a live Validator, please verify if the advertised performance is actually delivered\nconsistently by the VPS provider.")),(0,i.kt)("p",null,"that this is not an endorsement in any way:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"GCP's ",(0,i.kt)("em",{parentName:"li"},"c2")," and ",(0,i.kt)("em",{parentName:"li"},"c2d")," machine families"),(0,i.kt)("li",{parentName:"ul"},"AWS's ",(0,i.kt)("em",{parentName:"li"},"c6id")," machine family")),(0,i.kt)("p",null,"The following additional configurations were applied to the instances to tune their performance:"),(0,i.kt)("h3",{id:"disable-smt"},"Disable ",(0,i.kt)("a",{parentName:"h3",href:"https://en.wikipedia.org/wiki/Simultaneous_multithreading"},"SMT")),(0,i.kt)("p",null,"As critical path of Substrate is single-threaded we need to optimize for single-core CPU\nperformance. The node still profits from multiple cores when doing networking and other non-runtime\noperations. It is therefore still necessary to run it on at least the minimum required number of\ncores. Disabling SMT improves the performance as each vCPU becomes mapped to a physical CPU core\nrather than being presented to the OS as two logical cores. SMT implementation is called\n",(0,i.kt)("em",{parentName:"p"},"Hyper-Threading")," on Intel and ",(0,i.kt)("em",{parentName:"p"},"2-way SMT")," on AMD Zen. To disable SMT in runtime:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"for cpunum in $(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d, -f2- | tr ',' '\\n' | sort -un)\ndo\n echo 0 > /sys/devices/system/cpu/cpu$cpunum/online\ndone\n")),(0,i.kt)("p",null,"It will disable every other (vCPU) core."),(0,i.kt)("p",null,"To save changes permanently add ",(0,i.kt)("inlineCode",{parentName:"p"},"nosmt=force")," as kernel parameter. Edit ",(0,i.kt)("inlineCode",{parentName:"p"},"/etc/default/grub")," and add\n",(0,i.kt)("inlineCode",{parentName:"p"},"nosmt=force")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"GRUB_CMDLINE_LINUX_DEFAULT")," variable and run ",(0,i.kt)("inlineCode",{parentName:"p"},"sudo update-grub"),". After the reboot\nyou should see half of the cores are offline. Run ",(0,i.kt)("inlineCode",{parentName:"p"},"lscpu --extended")," to confirm."),(0,i.kt)("h3",{id:"disable-automatic-numa-balancing"},"Disable automatic NUMA balancing"),(0,i.kt)("p",null,"If you have multiple physical CPUs (CPU0 and CPU1) in the system each with its own memory bank (MB0\nand MB1), then it is usually slower for a CPU0 to access MB1 due to the slower interconnection. To\nprevent the OS from automatically moving the running Substrate process from one CPU to another and\nthus causing an increased latency, it is recommended to disable automatic NUMA balancing."),(0,i.kt)("p",null,"With automatic NUMA balancing disabled, an OS will always run a process on the same NUMA node where\nit was initially scheduled."),(0,i.kt)("p",null,"To disable NUMA balancing in runtime:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sysctl kernel.numa_balancing=0\n")),(0,i.kt)("p",null,"To save changes permanently, update startup options and reconfigure GRUB. Edit ",(0,i.kt)("inlineCode",{parentName:"p"},"/etc/default/grub"),"\nand add ",(0,i.kt)("inlineCode",{parentName:"p"},"numa_balancing=disable")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"GRUB_CMDLINE_LINUX_DEFAULT")," variable and run\n",(0,i.kt)("inlineCode",{parentName:"p"},"sudo update-grub"),". After reboot you can confirm the change by running\n",(0,i.kt)("inlineCode",{parentName:"p"},"sysctl -a | grep 'kernel.numa_balancing'")," and checking if the parameter is set to 0"),(0,i.kt)("h3",{id:"configure-spectremeltdown-mitigations"},"Configure Spectre/Meltdown Mitigations"),(0,i.kt)("p",null,"Spectre and Meltdown are vulnerabilities discovered in modern CPUs a few years ago. Mitigations were\nmade to the Linux kernel to cope with the multiple variations of these attacks. Check out\n",(0,i.kt)("a",{parentName:"p",href:"https://meltdownattack.com/"},"https://meltdownattack.com/")," for more info."),(0,i.kt)("p",null,"Initially those mitigations added ~20% penalty to the performance of the workloads. As CPU\nmanufacturers started to roll-out mitigations implemented in hardware, the performance gap\n",(0,i.kt)("a",{parentName:"p",href:"https://www.phoronix.com/scan.php?page=article&item=3-years-specmelt&num=1"},"narrowed down"),". As the\nbenchmark demonstrates, the performance penalty got reduced to ~7% on Intel 10th Gen CPUs. This is\ntrue for the workloads running on both bare-metal and VMs. But the penalty remains high for the\ncontainerized workloads in some cases."),(0,i.kt)("p",null,"As demonstrated in\n",(0,i.kt)("a",{parentName:"p",href:"http://mamememo.blogspot.com/2020/05/cpu-intensive-rubypython-code-runs.html"},"Yusuke Endoh's article"),",\na performance penalty for containerized workloads can be as high as 100%. This is due to SECCOMP\nprofile being overprotective about applying Spectre/Meltdown mitigations without providing real\nsecurity. A longer explanation is available in the\n",(0,i.kt)("a",{parentName:"p",href:"https://lkml.org/lkml/2020/11/4/1135"},"kernel patch discussion"),"."),(0,i.kt)("p",null,"Linux 5.16\n",(0,i.kt)("a",{parentName:"p",href:"https://www.phoronix.com/scan.php?page=news_item&px=Linux-Spectre-SECCOMP-Default"},"loosened the protections"),"\napplied to SECCOMP threads by default. Containers running on kernel 5.16 and later now don't suffer\nfrom the performance penalty implied by using a SECCOMP profile in container runtimes."),(0,i.kt)("h4",{id:"for-linux--516"},"For Linux >= 5.16"),(0,i.kt)("p",null,"You are all set. The performance of containerized workloads is on par with non-containerized ones.\nYou don't have to do anything."),(0,i.kt)("h4",{id:"for-linux--516-1"},"For Linux < 5.16"),(0,i.kt)("p",null,"You'll need to disable mitigations for Spectre V2 for user-space tasks as well as Speculative Store\nBypass Disable (SSBD) for Spectre V4.\n",(0,i.kt)("a",{parentName:"p",href:"https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git/commit/?h=for-next/seccomp&id=2f46993d83ff4abb310ef7b4beced56ba96f0d9d"},"This patch message"),"\ndescribes the reasoning for this default change in more detail:"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Ultimately setting SSBD and STIBP by default for all seccomp jails is a bad sweet spot and bad\ndefault with more cons than pros that end up reducing security in the public cloud (by giving an\nhuge incentive to not expose SPEC_CTRL which would be needed to get full security with IBPB after\nsetting nosmt in the guest) and by excessively hurting performance to more secure apps using\nseccomp that end up having to opt out with SECCOMP_FILTER_FLAG_SPEC_ALLOW.")),(0,i.kt)("p",null,"To disable the mitigations edit ",(0,i.kt)("inlineCode",{parentName:"p"},"/etc/default/grub")," and add\n",(0,i.kt)("inlineCode",{parentName:"p"},"spec_store_bypass_disable=prctl spectre_v2_user=prctl")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"GRUB_CMDLINE_LINUX_DEFAULT")," variable,\nrun ",(0,i.kt)("inlineCode",{parentName:"p"},"sudo update-grub"),", then reboot."),(0,i.kt)("p",null,"Note that mitigations are not disabled completely. You can fully disable all the available kernel\nmitigations by setting ",(0,i.kt)("inlineCode",{parentName:"p"},"mitigations=off"),". But we don't recommend doing this unless you run a fully\ntrusted code on the host."),(0,i.kt)("h3",{id:"vps-list"},"VPS List"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://cloud.google.com/"},"Google Cloud")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://aws.amazon.com/"},"Amazon AWS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.ovh.com.au/"},"OVH")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.digitalocean.com/"},"Digital Ocean")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.vultr.com/"},"Vultr")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.linode.com/"},"Linode")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.scaleway.com/"},"Scaleway")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://onfinality.io/"},"OnFinality"))),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"Beware of the ",(0,i.kt)("strong",{parentName:"mdxAdmonitionTitle"},"Terms and Conditions")," and ",(0,i.kt)("strong",{parentName:"mdxAdmonitionTitle"},"Acceptable Use Policies")," for each VPS"),(0,i.kt)("p",{parentName:"admonition"},"provider"),(0,i.kt)("p",{parentName:"admonition"},'You may be locked out of your account and your server shut down if you come in violation. For\ninstance, Digital Ocean lists "Mining of Cryptocurrencies" under the Network Abuse section of their\n',(0,i.kt)("a",{parentName:"p",href:"https://www.digitalocean.com/legal/acceptable-use-policy/"},"Acceptable Use Policy")," and requires\nexplicit permission to do so. This may extend to other cryptocurrency activity.")))}k.isMDXComponent=!0},90412:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/JS-UI-bond-7bdecad8831f3c1b20d96e426e7e47c1.png"},93002:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/JS-UI-sign-transaction-75b2e29fcaecc44c5eb1c4f5e3e364ae.png"},46513:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-dashboard-staking-4005504ef30291ebe1a243298c351a34.png"},67929:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-dashboard-telemetry-8930bdd60309c864ed682a1bdd4b1e31.png"},63670:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-dashboard-validate-1-4bf6a6488b4e128d12cab2617025d796.png"},44281:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-dashboard-validate-2-18a8869804f89ffebafa1b920e31ccd6.png"},54061:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-explorer-rotatekeys-rpc-6d5ba5d9ffb20fd9683432e9a6ccd0f9.jpg"},29009:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-zero-peer-2642d52b7e07893a66a0ddfd492cce38.jpg"},72316:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/set-session-key-1-b0cdb38a299d6ef6bcc24c6ab2bce66d.png"},12883:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/set-session-key-2-408efe22daa8d6533715987a1099828a.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/a74a59a0.fae2510e.js b/assets/js/a74a59a0.fae2510e.js deleted file mode 100644 index cc73ab71156c..000000000000 --- a/assets/js/a74a59a0.fae2510e.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[8702],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>c});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(9712),l=a(67425);function d(e,t,a){return p.apply(this,arguments)}function p(){return(p=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var i,l,d,p,u;return(0,n.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 d=new r.U(i),e.next=21,s.G.create({provider:d});case 21:p=e.sent,(u=a.split(".")).forEach((function(e){e in p&&(p=p[e])})),e.t1=u[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 ("+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,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 c=function(e){var t=e.network,a=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,p=(0,i.useState)(""),c=p[0],h=p[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;case"kusama-people":e="wss://kusama-people-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,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,d(t,a,h);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?u(o,l,t,h):h(o);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",n="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 l=void 0;if(r===t||r===o)l=3;else{if(r!==a&&r!==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/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===o)s=1;else{if(r!==a&&r!==n)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())}}},11300:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>p,toc:()=>c});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"maintain-guides-how-to-validate-polkadot",title:"Run a Validator (Polkadot)",sidebar_label:"How to run a Validator on Polkadot",description:"The fundamentals for running a Polkadot validator.",keywords:["validator setup","validator","validate","binary","runtime"],slug:"../maintain-guides-how-to-validate-polkadot"},d=void 0,p={unversionedId:"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.",source:"@site/../docs/maintain/maintain-guides-how-to-validate-polkadot.md",sourceDirName:"maintain",slug:"/maintain-guides-how-to-validate-polkadot",permalink:"/docs/maintain-guides-how-to-validate-polkadot",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/maintain-guides-how-to-validate-polkadot.md",tags:[],version:"current",lastUpdatedBy:"github-actions[bot]",lastUpdatedAt:1719197533,formattedLastUpdatedAt:"Jun 24, 2024",frontMatter:{id:"maintain-guides-how-to-validate-polkadot",title:"Run a Validator (Polkadot)",sidebar_label:"How to run a Validator on Polkadot",description:"The fundamentals for running a Polkadot validator.",keywords:["validator setup","validator","validate","binary","runtime"],slug:"../maintain-guides-how-to-validate-polkadot"},sidebar:"docs",previous:{title:"Validator Guides",permalink:"/docs/maintain-validator-index"},next:{title:"Validator Payout Overview",permalink:"/docs/maintain-guides-validator-payout"}},u={},c=[{value:"Preliminaries",id:"preliminaries",level:2},{value:"How many DOT do I need to become an active Validator?",id:"how-many-dot-do-i-need-to-become-an-active-validator",level:3},{value:"Initial Set-up",id:"initial-set-up",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Reference Hardware",id:"reference-hardware",level:4},{value:"Install & Configure Network Time Protocol (NTP) Client",id:"install--configure-network-time-protocol-ntp-client",level:3},{value:"Make Sure Landlock is Enabled",id:"make-sure-landlock-is-enabled",level:3},{value:"Installing the Polkadot binaries",id:"installing-the-polkadot-binaries",level:3},{value:"Installation from official releases",id:"installation-from-official-releases",level:4},{value:"Optional: Installation with Package Managers",id:"optional-installation-with-package-managers",level:4},{value:"Debian-based (Debian, Ubuntu)",id:"debian-based-debian-ubuntu",level:4},{value:"RPM-based (Fedora, CentOS)",id:"rpm-based-fedora-centos",level:4},{value:"Optional: Installation with Ansible",id:"optional-installation-with-ansible",level:4},{value:"Optional: Installation with Docker",id:"optional-installation-with-docker",level:4},{value:"Optional: Building the Polkadot binaries from sources",id:"optional-building-the-polkadot-binaries-from-sources",level:3},{value:"Prerequisites: Install Rust and Dependencies",id:"prerequisites-install-rust-and-dependencies",level:4},{value:"Building the binaries",id:"building-the-binaries",level:4},{value:"Verify the installation",id:"verify-the-installation",level:3},{value:"Synchronize Chain Data",id:"synchronize-chain-data",level:3},{value:"Database Snapshot Services",id:"database-snapshot-services",level:4},{value:"Bond DOT",id:"bond-dot",level:2},{value:"Set Session Keys",id:"set-session-keys",level:2},{value:"Generating the Session Keys",id:"generating-the-session-keys",level:3},{value:"Option 1: PolkadotJS-APPS",id:"option-1-polkadotjs-apps",level:4},{value:"Option 2: CLI",id:"option-2-cli",level:4},{value:"Submitting the setKeys Transaction",id:"submitting-the-setkeys-transaction",level:3},{value:"Setting the Node (aka Network) Key",id:"setting-the-node-aka-network-key",level:3},{value:"Validate",id:"validate",level:2},{value:"Setup via Validator Tab",id:"setup-via-validator-tab",level:3},{value:"Thousand Validators Programme",id:"thousand-validators-programme",level:2},{value:"Running a validator on a testnet",id:"running-a-validator-on-a-testnet",level:2},{value:"FAQ",id:"faq",level:2},{value:"Why am I unable to synchronize the chain with 0 peers?",id:"why-am-i-unable-to-synchronize-the-chain-with-0-peers",level:3},{value:"How do I clear all my chain data?",id:"how-do-i-clear-all-my-chain-data",level:3},{value:"Note about VPS",id:"note-about-vps",level:2},{value:"Disable SMT",id:"disable-smt",level:3},{value:"Disable automatic NUMA balancing",id:"disable-automatic-numa-balancing",level:3},{value:"Configure Spectre/Meltdown Mitigations",id:"configure-spectremeltdown-mitigations",level:3},{value:"For Linux >= 5.16",id:"for-linux--516",level:4},{value:"For Linux < 5.16",id:"for-linux--516-1",level:4},{value:"VPS List",id:"vps-list",level:3}],h={toc:c},m="wrapper";function k(e){var t=e.components,l=(0,o.Z)(e,s);return(0,i.kt)(m,(0,n.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"If you are a beginner, it is recommended that you start your validator journey on Kusama network.\nCheck the ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-kusama"},"Kusama guide")," for details on how to get\nstarted.")),(0,i.kt)("h2",{id:"preliminaries"},"Preliminaries"),(0,i.kt)("p",null,"Running a validator on a live network is a lot of responsibility! You will be accountable for not\nonly your own stake, but also the stake of your current nominators. If you make a mistake and get\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashed"),", your tokens and your reputation will be at risk. However,\nrunning a validator can also be very rewarding, knowing that you contribute to the security of a\ndecentralized network while growing your stash."),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"It is highly recommended that you have significant system administration experience before\nattempting to run your own validator."),(0,i.kt)("p",{parentName:"admonition"},"You must be able to handle technical issues and anomalies with your node which you must be able to\ntackle yourself. Being a validator involves more than just executing the Polkadot binary.")),(0,i.kt)("p",null,"Since security is so important to running a successful validator, you should take a look at the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-secure-validator"},"secure validator")," information to make sure you understand the\nfactors to consider when constructing your infrastructure. As you progress in your journey as a\nvalidator, you will likely want to use this repository as a ",(0,i.kt)("em",{parentName:"p"},"starting point")," for your own\nmodifications and customizations."),(0,i.kt)("p",null,"If you need help, please reach out on the\n",(0,i.kt)("a",{parentName:"p",href:"https://matrix.to/#/#polkadotvalidatorlounge:web3.foundation"},"Polkadot Validator Lounge")," on\nElement. The team and other validators are there to help answer questions and provide tips from\nexperience."),(0,i.kt)("h3",{id:"how-many-dot-do-i-need-to-become-an-active-validator"},"How many DOT do I need to become an active Validator?"),(0,i.kt)("p",null,"You can have a rough estimate on that by using the methods listed\n",(0,i.kt)("a",{parentName:"p",href:"/docs/faq/#what-is-the-minimum-stake-necessary-to-be-elected-as-an-active-validator"},"here"),".\nTo be elected into the set, you need a minimum stake behind your validator. This stake can come from\nyourself or from ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"nominators"),". This means that as a minimum, you will\nneed enough DOT to set up stash (and optionally a staking\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"proxy account"),") with the existential deposit, plus a little extra for\ntransaction fees. The rest can come from nominators. To understand how validators are elected, check\nthe ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"NPoS Election algorithms")," page."),(0,i.kt)("p",null,"For further reference, you may look at the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.subscan.io/validator_list?status=validator"},"statistics for current, active validators."),"\n",""),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Warning:")," Any DOT that you stake for your validator is liable to be\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashed"),", meaning that an insecure or improper setup may result in loss\nof DOT tokens! If you are not confident in your ability to run a validator node, it is recommended\nto nominate your DOT to a trusted validator node instead."),(0,i.kt)("h2",{id:"initial-set-up"},"Initial Set-up"),(0,i.kt)("h3",{id:"requirements"},"Requirements"),(0,i.kt)("p",null,"The most common way for a beginner to run a validator is on a cloud server running Linux. You may\nchoose whatever ",(0,i.kt)("a",{parentName:"p",href:"#note-about-vps"},"VPS")," provider that you prefer. As OS it is best to use a recent\nDebian Linux. For this guide we will be using ",(0,i.kt)("strong",{parentName:"p"},"Ubuntu 22.04"),", but the instructions should be\nsimilar for other platforms."),(0,i.kt)("h4",{id:"reference-hardware"},"Reference Hardware"),(0,i.kt)("p",null,"The transaction weights in Polkadot are benchmarked on reference hardware. We ran the benchmark on\nVM instances of two major cloud providers: Google Cloud Platform (GCP) and Amazon Web Services\n(AWS). To be specific, we used ",(0,i.kt)("inlineCode",{parentName:"p"},"n2-standard-8")," VM instance on GCP and ",(0,i.kt)("inlineCode",{parentName:"p"},"c6i.4xlarge")," on AWS. It is\nrecommended that the hardware used to run the validators at least matches the specs of the reference\nhardware in order to ensure they are able to process all blocks in time. If you use subpar hardware\nyou will possibly run into performance issues, get less era points, and potentially even get\nslashed."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"CPU"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"x86-64 compatible;"),(0,i.kt)("li",{parentName:"ul"},"Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);"),(0,i.kt)("li",{parentName:"ul"},"4 physical cores @ 3.4GHz;"),(0,i.kt)("li",{parentName:"ul"},"Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);"),(0,i.kt)("li",{parentName:"ul"},"Prefer single-threaded performance over higher cores count. A comparison of single-threaded\nperformance can be found ",(0,i.kt)("a",{parentName:"li",href:"https://www.cpubenchmark.net/singleThread.html"},"here"),"."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Storage"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"An NVMe SSD of 1 TB (As it should be reasonably sized to deal with blockchain growth). An\nestimation of current chain snapshot sizes can be found\n",(0,i.kt)("a",{parentName:"li",href:"https://stakeworld.io/docs/dbsize"},"here"),". In general, the latency is more important than the\nthroughput."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Memory"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"32 GB DDR4 ECC."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"System"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Linux Kernel 5.16 or newer."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Network"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"The minimum symmetric networking speed is set to 500 Mbit/s (= 62.5 MB/s). This is required to\nsupport a large number of parachains and allow for proper congestion control in busy network\nsituations.")))),(0,i.kt)("p",null,"The specs posted above are not a ",(0,i.kt)("em",{parentName:"p"},"hard")," requirement to run a validator, but are considered best\npractice. Running a validator is a responsible task; using professional hardware is a must in any\nway."),(0,i.kt)("h3",{id:"install--configure-network-time-protocol-ntp-client"},"Install & Configure Network Time Protocol (NTP) Client"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Network_Time_Protocol"},"NTP")," is a networking protocol designed to\nsynchronize the clocks of computers over a network. NTP allows you to synchronize the clocks of all\nthe systems within the network. Currently it is required that validators' local clocks stay\nreasonably in sync, so you should be running NTP or a similar service. You can check whether you\nhave the NTP client by running:"),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"If you are using Ubuntu 18.04 or a newer version, NTP Client should be installed by default.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"timedatectl\n")),(0,i.kt)("p",null,"If NTP is installed and running, you should see ",(0,i.kt)("inlineCode",{parentName:"p"},"System clock synchronized: yes")," (or a similar\nmessage). If you do not see it, you can install it by executing:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt-get install ntp\n")),(0,i.kt)("p",null,"ntpd will be started automatically after install. You can query ntpd for status information to\nverify that everything is working:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo ntpq -p\n")),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Skipping this can result in the validator node missing block authorship opportunities. If the clock\nis out of sync (even by a small amount), the blocks the validator produces may not get accepted by\nthe network.")),(0,i.kt)("h3",{id:"make-sure-landlock-is-enabled"},"Make Sure Landlock is Enabled"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://docs.kernel.org/userspace-api/landlock.html"},"Landlock")," is a Linux security feature used in\nPolkadot:"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Landlock empowers any process, including unprivileged ones, to securely restrict themselves.")),(0,i.kt)("p",null,"To make use of landlock, make sure you are on the reference kernel version or newer. Most Linux\ndistributions should already have landlock enabled, but you can check by running the following as\nroot:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"dmesg | grep landlock || journalctl -kg landlock\n")),(0,i.kt)("p",null,"If it is not enabled, please see the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.kernel.org/userspace-api/landlock.html#kernel-support"},'official docs ("Kernel support")'),"\nif you would like to build Linux with landlock enabled."),(0,i.kt)("h3",{id:"installing-the-polkadot-binaries"},"Installing the Polkadot binaries"),(0,i.kt)("admonition",{title:"Multiple Validator Binaries",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"In addition to the ",(0,i.kt)("inlineCode",{parentName:"p"},"polkadot")," binary, recent changes have separated out functionality into two\nadditional needed binaries, ",(0,i.kt)("inlineCode",{parentName:"p"},"polkadot-prepare-worker"),", and ",(0,i.kt)("inlineCode",{parentName:"p"},"polkadot-execute-worker"),". All three\nbinaries are needed to properly run a validator node. More context on these changes can be found\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/pull/7337"},"here"))),(0,i.kt)("h4",{id:"installation-from-official-releases"},"Installation from official releases"),(0,i.kt)("p",null,"The official binaries can be downloaded from the\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/releases"},"Github Releases"),". You should download the\nlatest available version. You can also download the binaries by using the following direct links\n(replace X.Y.Z by the appropriate version):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"https://github.com/paritytech/polkadot-sdk/releases/download/polkadot-vX.Y.Z/polkadot\nhttps://github.com/paritytech/polkadot-sdk/releases/download/polkadot-vX.Y.Z/polkadot-execute-worker\nhttps://github.com/paritytech/polkadot-sdk/releases/download/polkadot-vX.Y.Z/polkadot-prepare-worker\n")),(0,i.kt)("h4",{id:"optional-installation-with-package-managers"},"Optional: Installation with Package Managers"),(0,i.kt)("p",null,"The Polkadot Binary in included in ",(0,i.kt)("inlineCode",{parentName:"p"},"Debian")," derivatives (i.e. ",(0,i.kt)("strong",{parentName:"p"},"Debian"),", ",(0,i.kt)("strong",{parentName:"p"},"Ubuntu"),") and\n",(0,i.kt)("inlineCode",{parentName:"p"},"RPM-based")," distros (i.e. ",(0,i.kt)("strong",{parentName:"p"},"Fedora"),", ",(0,i.kt)("strong",{parentName:"p"},"CentOS"),")."),(0,i.kt)("h4",{id:"debian-based-debian-ubuntu"},"Debian-based (Debian, Ubuntu)"),(0,i.kt)("p",null,"Run the following commands as the root user:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-ssh"},"# Import the security@parity.io GPG key\ngpg --recv-keys --keyserver hkps://keys.mailvelope.com 9D4B2B6EB8F97156D19669A9FF0812D491B96798\ngpg --export 9D4B2B6EB8F97156D19669A9FF0812D491B96798 > /usr/share/keyrings/parity.gpg\n# Add the Parity repository and update the package index\necho 'deb [signed-by=/usr/share/keyrings/parity.gpg] https://releases.parity.io/deb release main' > /etc/apt/sources.list.d/parity.list\napt update\n# Install the `parity-keyring` package - This will ensure the GPG key\n# used by APT remains up-to-date\napt install parity-keyring\n# Install polkadot\napt install polkadot\n")),(0,i.kt)("h4",{id:"rpm-based-fedora-centos"},"RPM-based (Fedora, CentOS)"),(0,i.kt)("p",null,"Run the following commands as the root user:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"# Install dnf-plugins-core (This might already be installed)\ndnf install dnf-plugins-core\n# Add the repository and enable it\ndnf config-manager --add-repo https://releases.parity.io/rpm/polkadot.repo\ndnf config-manager --set-enabled polkadot\n# Install polkadot (You may have to confirm the import of the GPG key, which\n# should have the following fingerprint: 9D4B2B6EB8F97156D19669A9FF0812D491B96798)\ndnf install polkadot\n")),(0,i.kt)("p",null,'Make sure you verify the installation (see the "Verify the installation" section).'),(0,i.kt)("admonition",{title:"By default, the Polkadot systemd service is disabled",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"To start the service, run:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl start polkadot.service\n"))),(0,i.kt)("h4",{id:"optional-installation-with-ansible"},"Optional: Installation with Ansible"),(0,i.kt)("p",null,"To manage Polkadot installation with Ansible, you can use the ",(0,i.kt)("strong",{parentName:"p"},"Substrate node role")," distributed on\nthe ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/ansible-galaxy/"},"Parity chain operations Ansible collection")),(0,i.kt)("h4",{id:"optional-installation-with-docker"},"Optional: Installation with Docker"),(0,i.kt)("p",null,"To run Polkadot on a Docker or an OCI compatible container runtime, you can use the official\n",(0,i.kt)("a",{parentName:"p",href:"https://hub.docker.com/r/parity/polkadot/tags"},"parity/polkadot docker image"),", available on Docker\nHub (replace X.Y.Z by the appropriate version):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"docker.io/parity/polkadot:vX.Y.Z\n")),(0,i.kt)("h3",{id:"optional-building-the-polkadot-binaries-from-sources"},"Optional: Building the Polkadot binaries from sources"),(0,i.kt)("h4",{id:"prerequisites-install-rust-and-dependencies"},"Prerequisites: Install Rust and Dependencies"),(0,i.kt)("p",null,"If you have never installed Rust, you should do this first."),(0,i.kt)("p",null,"If you have already installed Rust, run the following command to make sure you are using the latest\nversion."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"rustup update\n")),(0,i.kt)("p",null,"If not, this command will fetch the latest version of Rust and install it."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"curl https://sh.rustup.rs -sSf | sh -s -- -y\n")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},'If you do not have "curl" installed, run:'),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt install curl\n")),(0,i.kt)("p",{parentName:"admonition"},'It will also be valuable to have "websocat" (Netcat, curl and socat for WebSockets) installed for\nRPC interactions. Installation instructions for various operating systems can be found\n',(0,i.kt)("a",{parentName:"p",href:"https://github.com/vi/websocat#installation"},"here"),".")),(0,i.kt)("p",null,"To configure your shell, run the following command."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"source $HOME/.cargo/env\n")),(0,i.kt)("p",null,"Verify your installation."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"rustc --version\n")),(0,i.kt)("p",null,"Finally, run this command to install the necessary dependencies for compiling and running the\nPolkadot node software."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"sudo apt install make clang pkg-config libssl-dev build-essential\n")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you are using OSX and you have ",(0,i.kt)("a",{parentName:"p",href:"https://brew.sh"},"Homebrew")," installed, you can issue the following\nequivalent command INSTEAD of the previous one:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"brew install cmake pkg-config openssl git llvm\n"))),(0,i.kt)("h4",{id:"building-the-binaries"},"Building the binaries"),(0,i.kt)("p",null,"You can build the Polkadot binaries from the\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk"},"paritytech/polkadot-sdk")," repository on GitHub."),(0,i.kt)("p",null,"You should generally use the latest ",(0,i.kt)("strong",{parentName:"p"},"X.Y.Z"),' tag. You should either review the output from the "git\ntag" command or view the ',(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/tags"},"Polkadot SDK Github tags"),"\nto see a list of all the available release versions. You should replace ",(0,i.kt)("inlineCode",{parentName:"p"},"VERSION")," below with the\nlatest build (i.e., the highest number)."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you prefer to use SSH rather than HTTPS, you can replace the first line of the below with"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"git clone git@github.com:paritytech/polkadot-sdk.git\n"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"git clone https://github.com/paritytech/polkadot-sdk.git\ncd polkadot-sdk/polkadot\n")),(0,i.kt)("p",null,"Run the following command to find the latest version."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"git tag -l | sort -V | grep -v -- '-rc'\n")),(0,i.kt)("p",null,'Find the latest version; replace "VERSION" in the command below and run to change your branch.'),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"git checkout VERSION\n")),(0,i.kt)("p",null,"Build native code with the production profile. The following will make sure that the binaries are\nall in your ",(0,i.kt)("inlineCode",{parentName:"p"},"$PATH"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"cargo install --force --path . --profile production\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"This step will take a while (generally 10 - 40 minutes, depending on your hardware)."))),(0,i.kt)("admonition",{title:"Compilation Errors",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you run into compile errors, you may have to pin the version of Rust compiler to the one that was\nused to build the release. Check out ",(0,i.kt)("inlineCode",{parentName:"p"},"Rust compiler versions")," section in the release notes. This can\nbe done by running:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"rustup install nightly-2022-05-18\nrustup target add wasm32-unknown-unknown --toolchain nightly-2022-05-18\ncargo +nightly-2022-05-18 build --release\n")),(0,i.kt)("p",{parentName:"admonition"},"You may also need to run the build more than once."),(0,i.kt)("p",{parentName:"admonition"},"If you would like to execute the tests, run the following command:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"cargo test --all\n"))),(0,i.kt)("p",null,"If you are interested in generating keys locally, you can also install ",(0,i.kt)("inlineCode",{parentName:"p"},"subkey")," from the same\ndirectory. You may then take the generated ",(0,i.kt)("inlineCode",{parentName:"p"},"subkey")," executable and transfer it to an air-gapped\nmachine for extra security."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"cargo install --force --git https://github.com/paritytech/polkadot-sdk subkey\n")),(0,i.kt)("h3",{id:"verify-the-installation"},"Verify the installation"),(0,i.kt)("p",null,"After installing Polkadot, you can verify the installation by running"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"polkadot --version\npolkadot-execute-worker --version\npolkadot-prepare-worker --version\n")),(0,i.kt)("p",null,"It should return something like this (the exact versions don't matter, but they must all be the\nsame):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"0.9.43-36264cb36db\n0.9.43-36264cb36db\n0.9.43-36264cb36db\n")),(0,i.kt)("p",null,"If not, make sure that you installed all the binaries, all the binaries are somewhere in your\n",(0,i.kt)("inlineCode",{parentName:"p"},"$PATH")," and they are all in the same folder."),(0,i.kt)("h3",{id:"synchronize-chain-data"},"Synchronize Chain Data"),(0,i.kt)("p",null,"You can begin syncing your node by running the following command if you do not want to start in\nvalidator mode right away:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"polkadot\n")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you want to run a validator on Kusama, you have an option to specify the chain. With no\nspecification, this would default to Polkadot."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"polkadot --chain=kusama\n"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"2021-06-17 03:07:07 Parity Polkadot\n2021-06-17 03:07:07 \u270c\ufe0f version 0.9.5-95f6aa201-x86_64-linux-gnu\n2021-06-17 03:07:07 \u2764\ufe0f by Parity Technologies , 2017-2021\n2021-06-17 03:07:07 \ud83d\udccb Chain specification: Polkadot\n2021-06-17 03:07:07 \ud83c\udff7 Node name: boiling-pet-7554\n2021-06-17 03:07:07 \ud83d\udc64 Role: FULL\n2021-06-17 03:07:07 \ud83d\udcbe Database: RocksDb at /root/.local/share/polkadot/chains/polkadot/db\n2021-06-17 03:07:07 \u26d3 Native runtime: polkadot-9050 (parity-polkadot-0.tx7.au0)\n2021-06-17 03:07:10 \ud83c\udff7 Local node identity is: 12D3KooWLtXFWf1oGrnxMGmPKPW54xWCHAXHbFh4Eap6KXmxoi9u\n2021-06-17 03:07:10 \ud83d\udce6 Highest known block at #17914\n2021-06-17 03:07:10 \u303d\ufe0f Prometheus server started at 127.0.0.1:9615\n2021-06-17 03:07:10 Listening for new connections on 127.0.0.1:9944.\n")),(0,i.kt)("admonition",{title:"Example of node sync",type:"info"},(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre"},"2021-06-17 03:07:39 \ud83d\udd0d Discovered new external address for our node: /ip4/10.26.16.1/tcp/30333/ws/p2p/12D3KooWLtXFWf1oGrnxMGmPKPW54xWCHAXHbFh4Eap6KXmxoi9u\n2021-06-17 03:07:40 \u2699\ufe0f Syncing 218.8 bps, target=#5553764 (17 peers), best: #24034 (0x08af\u2026dcf5), finalized #23552 (0xd4f0\u20262642), \u2b07 173.5kiB/s \u2b06 12.7kiB/s\n2021-06-17 03:07:45 \u2699\ufe0f Syncing 214.8 bps, target=#5553765 (20 peers), best: #25108 (0xb272\u2026e800), finalized #25088 (0x94e6\u20268a9f), \u2b07 134.3kiB/s \u2b06 7.4kiB/s\n2021-06-17 03:07:50 \u2699\ufe0f Syncing 214.8 bps, target=#5553766 (21 peers), best: #26182 (0xe7a5\u202601a2), finalized #26112 (0xcc29\u2026b1a9), \u2b07 5.0kiB/s \u2b06 1.1kiB/s\n2021-06-17 03:07:55 \u2699\ufe0f Syncing 138.4 bps, target=#5553767 (21 peers), best: #26874 (0xcf4b\u20266553), finalized #26624 (0x9dd9\u202627f8), \u2b07 18.9kiB/s \u2b06 2.0kiB/s\n2021-06-17 03:08:00 \u2699\ufe0f Syncing 37.0 bps, target=#5553768 (22 peers), best: #27059 (0x5b73\u20266fc9), finalized #26624 (0x9dd9\u202627f8), \u2b07 14.3kiB/s \u2b06 4.4kiB/s\n"))),(0,i.kt)("admonition",{title:"Use Warp sync for faster syncing",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"By default, the node performs ",(0,i.kt)("inlineCode",{parentName:"p"},"full")," sync, which downloads and validates the full blockchain\nhistory. Full sync works by listening to announced blocks and requesting the blocks from the\nannouncing peers, or just the block headers in case of light clients."),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"Fast")," sync is another option that works by downloading the block header history and validating the\nauthority set changes in order to arrive at a specific (usually the most recent) header. After the\ndesired header has been reached and verified, the state can be downloaded and imported. Once this\nprocess has been completed, the node can proceed with a full sync."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"polkadot --sync warp\n")),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"Warp sync")," initially downloads and validates the finality proofs from\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-consensus#finality-gadget-grandpa"},"GRANDPA")," and then downloads the state of the\nlatest finalized block. After the warp sync, the node is ready to import the latest blocks from the\nnetwork and can be used as a Validator. The blocks from genesis will be downloaded in the\nbackground. Check\n",(0,i.kt)("a",{parentName:"p",href:"https://substrate.stackexchange.com/questions/334/what-kinds-of-sync-mechanisms-does-substrate-implement/"},"this discussion"),"\nfor more information about the different sync options available.")),(0,i.kt)("admonition",{title:"Validators should sync using the RocksDb backend",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"This is implicit by default, but can be explicit by passing the ",(0,i.kt)("inlineCode",{parentName:"p"},"--database RocksDb")," flag."),(0,i.kt)("p",{parentName:"admonition"},"In the future, it is recommended to switch to the faster and more efficient ParityDB option. Note\nthat ",(0,i.kt)("strong",{parentName:"p"},"ParityDB is still experimental and should not be used in production.")," If you want to test\nout ParityDB, you can add the flag ",(0,i.kt)("inlineCode",{parentName:"p"},"--database paritydb"),". Switching between database backends will\nrequire a resync.")),(0,i.kt)("p",null,"Depending on the size of the chain when you do this, this step may take anywhere from a few minutes\nto a few hours."),(0,i.kt)("p",null,"If you are interested in determining how much longer you have to go, your server logs (printed to\nSTDOUT from the ",(0,i.kt)("inlineCode",{parentName:"p"},"polkadot")," process) will tell you the latest block your node has processed and\nverified. You can then compare that to the current highest block via\n",(0,i.kt)("a",{parentName:"p",href:"https://telemetry.polkadot.io/#list/Polkadot%20CC1"},"Telemetry")," or the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/explorer"},"PolkadotJS Block Explorer"),"."),(0,i.kt)("h4",{id:"database-snapshot-services"},"Database Snapshot Services"),(0,i.kt)("p",null,"If you start a node for the first time, it will start building from the genesis block. This process\ncan take a while depending on the database size. To make this process faster, snapshots can be used.\nSnapshots are compressed backups of the database directory of Polkadot/Kusama nodes, containing the\nwhole chain (or a pruned version of it, with states only from the latest 1000 or 256 blocks). Listed\nbelow are a few public snapshot providers for Polkadot and Kusama."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://stakeworld.io/snapshot"},"Stakeworld")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkachu.com/snapshots"},"Polkachu")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkashots.io/"},"Polkashots"))),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"For the security of the network, it is recommended that you sync from scratch, even if you are\nrunning your node in pruning mode for validation. The reason is that if these snapshots get\ncorrupted and a majority of nodes run based on these snapshots, the network could end up running on\na non-canonical chain.")),(0,i.kt)("h2",{id:"bond-dot"},"Bond DOT"),(0,i.kt)("p",null,"To start a validator instance on Polkadot, the\nminimum bond required is\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minValidatorBond",defaultValue:"0",filter:"humanReadable",mdxType:"RPC"}),".\n","\nBut to enter the active validator set and be eligible to earn rewards, your validator node should be\nnominated by a minimum number of DOT tokens."),(0,i.kt)("p",null,"For example, the minimum stake backing a validator in era\n1449 (May 21st 2024) is\n2,377,756.492 DOT. For a live view at\ncurrent validator stats, you may look to\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.subscan.io/validator_list?status=validator"},"Subscan")," or the\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Staking Dashboard.")),(0,i.kt)("p",null,"If you are validator who intends to get DOT/KSM nominations from the community, you will need to\nshow some skin in the game. For that, you need to bond some DOT/KSM as own stake. Make sure not to\nbond all your DOT balance since you will be unable to pay transaction fees from your bonded balance."),(0,i.kt)("admonition",{title:"Controller accounts are deprecated. Use Staking Proxy.",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"),".\nIt is highly recommended that you setup an account with a staking proxy, which can be used for\nissuing start and stop validating calls. Read more about ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},"proxy accounts"),"\nhere.")),(0,i.kt)("p",null,"First, go to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Staking"),' section. Click on\n"Account Actions", and then the "+ Stash" button.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"bonding-JS-UI",src:a(90412).Z,width:"2143",height:"847"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Stash account")," - Select your Stash account (which is the account with the DOT/KSM balance)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Value bonded")," - How much DOT from the Stash account you want to bond/stake. Note that you do\nnot need to bond all of the DOT in that account. Also note that you can always bond ",(0,i.kt)("em",{parentName:"li"},"more")," DOT\nlater. However, ",(0,i.kt)("em",{parentName:"li"},"withdrawing")," any bonded amount requires the duration of the unbonding period. On\nKusama, the unbonding period is 7 days. On Polkadot, the planned unbonding period is 28 days."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Payment destination")," - The account where the rewards from validating are sent. More info\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking/#reward-distribution"},"here"),". Starting with runtime version v23 natively\nincluded in client version ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot/releases/tag/v0.9.3"},"0.9.3"),",\npayouts can go to any custom address. If you'd like to redirect payments to an account that is not\nthe stash account, you can do it by entering the address here. Note that it is extremely unsafe to\nset an exchange address as the recipient of the staking rewards.")),(0,i.kt)("p",null,"Once everything is filled in properly, click ",(0,i.kt)("inlineCode",{parentName:"p"},"Bond")," and sign the transaction with your Stash\naccount."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"sign transaction",src:a(93002).Z,width:"2141",height:"780"})),(0,i.kt)("p",null,"After a few seconds, you should see an ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtrinsicSuccess")," message."),(0,i.kt)("p",null,"Your bonded account will be available under ",(0,i.kt)("inlineCode",{parentName:"p"},"Stashes"),". You should now see a new card with all your\naccounts (note: you may need to refresh the screen). The bonded amount on the right corresponds to\nthe funds bonded by the Stash account."),(0,i.kt)("h2",{id:"set-session-keys"},"Set Session Keys"),(0,i.kt)("admonition",{title:"Session keys are consensus critical",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"If you are not sure if your node has the current session keys that you made the ",(0,i.kt)("inlineCode",{parentName:"p"},"setKeys"),"\ntransaction then you can use one of the two available RPC methods to query your node:\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/substrate/rpc/#haskeypublickey-bytes-keytype-text-bool"},"hasKey")," to\ncheck for a specific key or\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/substrate/rpc/#hassessionkeyssessionkeys-bytes-bool"},"hasSessionKeys"),"\nto check the full session key public key string.")),(0,i.kt)("p",null,"Once your node is fully synced, stop the process by pressing Ctrl-C. At your terminal prompt, you\nwill now start running the node."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},'polkadot --validator --name "name on telemetry"\n')),(0,i.kt)("p",null,"Similarly:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"2021-06-17 03:12:08 Parity Polkadot\n2021-06-17 03:12:08 \u270c\ufe0f version 0.9.5-95f6aa201-x86_64-linux-gnu\n2021-06-17 03:12:08 \u2764\ufe0f by Parity Technologies , 2017-2021\n2021-06-17 03:12:08 \ud83d\udccb Chain specification: Polkadot\n2021-06-17 03:12:08 \ud83c\udff7 Node name: nateched-test\n2021-06-17 03:12:08 \ud83d\udc64 Role: AUTHORITY\n2021-06-17 03:12:08 \ud83d\udcbe Database: RocksDb at /root/.local/share/polkadot/chains/polkadot/db\n2021-06-17 03:12:08 \u26d3 Native runtime: polkadot-9050 (parity-polkadot-0.tx7.au0)\n2021-06-17 03:12:12 \ud83c\udff7 Local node identity is: 12D3KooWLtXFWf1oGrnxMGmPKPW54xWCHAXHbFh4Eap6KXmxoi9u\n2021-06-17 03:12:12 \ud83d\udce6 Highest known block at #64673\n2021-06-17 03:12:12 \u303d\ufe0f Prometheus server started at 127.0.0.1:9615\n2021-06-17 03:12:12 Listening for new connections on 127.0.0.1:9944.\n2021-06-17 03:12:12 \ud83d\udc76 Starting BABE Authorship worker\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"2021-06-17 03:12:16 \ud83d\udd0d Discovered new external address for our node: /ip4/10.26.11.1/tcp/30333/p2p/12D3KooWLtXFWf1oGrnxMGmPKPW54xWCHAXHbFh4Eap6KXmxoi9u\n2021-06-17 03:12:17 \u2699\ufe0f Syncing, target=#5553810 (14 peers), best: #65068 (0x6da5\u20260662), finalized #65024 (0x4e84\u2026d170), \u2b07 352.2kiB/s \u2b06 75.6kiB/s\n")),(0,i.kt)("p",null,"You can give your validator any name that you like, but note that others will be able to see it, and\nit will be included in the list of all servers using the same telemetry server. Since numerous\npeople are using telemetry, it is recommended that you choose something likely to be unique."),(0,i.kt)("h3",{id:"generating-the-session-keys"},"Generating the Session Keys"),(0,i.kt)("p",null,"You need to tell the chain your Session keys by signing and submitting an extrinsic. This is what\nassociates your validator node with your stash account on Polkadot."),(0,i.kt)("h4",{id:"option-1-polkadotjs-apps"},"Option 1: PolkadotJS-APPS"),(0,i.kt)("p",null,"You can generate your ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography"},"Session keys")," in the client via the apps RPC.\nIf you are doing this, make sure that you have the PolkadotJS-Apps explorer attached to your\nvalidator node. You can configure the apps dashboard to connect to the endpoint of your validator in\nthe Settings tab. If you are connected to a default endpoint hosted by Parity of Web3 Foundation,\nyou will not be able to use this method since making RPC requests to this node would effect the\nlocal keystore hosted on a ",(0,i.kt)("em",{parentName:"p"},"public node")," and you want to make sure you are interacting with the\nkeystore for ",(0,i.kt)("em",{parentName:"p"},"your node"),"."),(0,i.kt)("p",null,"Once ensuring that you have connected to your node, the easiest way to set session keys for your\nnode is by calling the ",(0,i.kt)("inlineCode",{parentName:"p"},"author_rotateKeys")," RPC request to create new keys in your validator's\nkeystore. Navigate to Toolbox tab and select RPC Calls then select the author > rotateKeys() option\nand remember to save the output that you get back for a later step."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Explorer RPC call",src:a(54061).Z,width:"1700",height:"582"})),(0,i.kt)("h4",{id:"option-2-cli"},"Option 2: CLI"),(0,i.kt)("p",null,"If you are on a remote server, it is easier to run this command on the same machine (while the node\nis running with the default WS RPC port configured):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},'curl -H "Content-Type: application/json" -d \'{"id":1, "jsonrpc":"2.0", "method": "author_rotateKeys", "params":[]}\' http://localhost:9944\n')),(0,i.kt)("p",null,'The output will have a hex-encoded "result" field. The result is the concatenation of the four\npublic keys. Save this result for a later step.'),(0,i.kt)("p",null,"You can restart your node at this point."),(0,i.kt)("h3",{id:"submitting-the-setkeys-transaction"},"Submitting the ",(0,i.kt)("inlineCode",{parentName:"h3"},"setKeys")," Transaction"),(0,i.kt)("p",null,"You need to tell the chain your Session keys by signing and submitting an extrinsic. This is what\nassociates your validator with your staking proxy."),(0,i.kt)("p",null,"Go to ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Staking > Account Actions"),', and click "Set\nSession Key" on the bonding account you generated earlier. Enter the output from ',(0,i.kt)("inlineCode",{parentName:"p"},"author_rotateKeys"),'\nin the field and click "Set Session Key".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"staking-change-session",src:a(72316).Z,width:"2792",height:"182"}),"\n",(0,i.kt)("img",{alt:"staking-session-result",src:a(12883).Z,width:"2146",height:"680"})),(0,i.kt)("p",null,"Submit this extrinsic and you are now ready to start validating."),(0,i.kt)("h3",{id:"setting-the-node-aka-network-key"},"Setting the Node (aka Network) Key"),(0,i.kt)("p",null,"Validators must use a static network key to maintain a stable node identity across restarts.\nStarting with Polkadot version 1.11, a check is performed on startup, and the following error will\nbe printed if a static node key is not set:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'Error:\n0: Starting an authority without network key\nThis is not a safe operation because other authorities in the network may depend on your node having a stable identity.\nOtherwise these other authorities may not being able to reach you.\n\nIf it is the first time running your node you could use one of the following methods:\n1. [Preferred] Separately generate the key with: key generate-node-key --base-path \n2. [Preferred] Separately generate the key with: key generate-node-key --file \n3. [Preferred] Separately generate the key with: key generate-node-key --default-base-path\n4. [Unsafe] Pass --unsafe-force-node-key-generation and make sure you remove it for subsequent node restarts"\n')),(0,i.kt)("p",null,"The recommended solution is to generate a node key and save it to a file using\n",(0,i.kt)("inlineCode",{parentName:"p"},"polkadot key generate-node-key --file "),", then attach it to your node with\n",(0,i.kt)("inlineCode",{parentName:"p"},"--node-key-file "),"."),(0,i.kt)("p",null,"Please see ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-sdk/pull/3852"},"polkadot-sdk#3852")," for the\nrationale behind this change."),(0,i.kt)("h2",{id:"validate"},"Validate"),(0,i.kt)("p",null,"To verify that your node is live and synchronized, head to\n",(0,i.kt)("a",{parentName:"p",href:"https://telemetry.polkadot.io/#list/Polkadot%20CC1"},"Telemetry")," and find your node. Note that this\nwill show all nodes on the Polkadot network, which is why it is important to select a unique name!"),(0,i.kt)("p",null,"In this example, we used the name ",(0,i.kt)("inlineCode",{parentName:"p"},"techedtest")," and have successfully located it upon searching:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"polkadot-dashboard-telemetry",src:a(67929).Z,width:"2862",height:"472"})),(0,i.kt)("h3",{id:"setup-via-validator-tab"},"Setup via Validator Tab"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"polkadot-dashboard-validate-1",src:a(63670).Z,width:"2128",height:"1022"})),(0,i.kt)("p",null,"Here you will need to input the Keys from ",(0,i.kt)("inlineCode",{parentName:"p"},"rotateKeys"),", which is the Hex output from\n",(0,i.kt)("inlineCode",{parentName:"p"},"author_rotateKeys"),". The keys will show as pending until applied at the start of a new session."),(0,i.kt)("p",null,'The "reward commission percentage" is the commission percentage that you can declare against your\nvalidator\'s rewards. This is the rate that your validator will be commissioned with.'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Payment preferences")," - You can specify the percentage of the rewards that will get paid to you.\nThe remaining will be split among your nominators.")),(0,i.kt)("admonition",{title:"Setting a commission rate of 100% suggests that you do not want your validator to receive",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"nominations")),(0,i.kt)("p",null,'You can also determine if you would like to receive nominations with the "allows new nominations"\noption.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"dashboard validate",src:a(44281).Z,width:"2126",height:"694"})),(0,i.kt)("p",null,'Click "Bond & Validate".'),(0,i.kt)("p",null,'If you go to the "Staking" tab, you will see a list of active validators currently running on the\nnetwork. At the top of the page, it shows the number of validator slots that are available as well\nas the number of nodes that have signaled their intention to be a validator. You can go to the\n"Waiting" tab to double check to see whether your node is listed there.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"staking queue",src:a(46513).Z,width:"2838",height:"1440"})),(0,i.kt)("p",null,"The validator set is refreshed every era. In the next era, if there is a slot available and your\nnode is selected to join the validator set, your node will become an active validator. Until then,\nit will remain in the ",(0,i.kt)("em",{parentName:"p"},"waiting")," queue. If your validator is not selected to become part of the\nvalidator set, it will remain in the ",(0,i.kt)("em",{parentName:"p"},"waiting")," queue until it is. There is no need to re-start if\nyou are not selected for the validator set in a particular era. However, it may be necessary to\nincrease the number of DOT staked or seek out nominators for your validator in order to join the\nvalidator set."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Congratulations!")," If you have followed all of these steps, and been selected to be a part of the\nvalidator set, you are now running a Polkadot validator! If you need help, reach out on the\n",(0,i.kt)("a",{parentName:"p",href:"https://matrix.to/#/!NZrbtteFeqYKCUGQtr:matrix.parity.io?via=matrix.parity.io&via=matrix.org&via=web3.foundation"},"Polkadot Validator chat"),"."),(0,i.kt)("h2",{id:"thousand-validators-programme"},"Thousand Validators Programme"),(0,i.kt)("p",null,"The Thousand Validators Programme is a joint initiative by Web3 Foundation and Parity Technologies\nto provide support for community validators. If you are interested in applying for the program, you\ncan find more information ",(0,i.kt)("a",{parentName:"p",href:"/docs/thousand-validators"},"on the wiki page"),"."),(0,i.kt)("h2",{id:"running-a-validator-on-a-testnet"},"Running a validator on a testnet"),(0,i.kt)("p",null,"To verify your validator setup, it is possible to run it against a PoS test network such as Westend.\nHowever, validator slots are intentionally limited on Westend to ensure stability and availability\nof the testnet for the Polkadot release process."),(0,i.kt)("p",null,"Here is a small comparison of each network characteristics as relevant to validators:"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Network"),(0,i.kt)("th",{parentName:"tr",align:null},"Polkadot"),(0,i.kt)("th",{parentName:"tr",align:null},"Westend"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"epoch"),(0,i.kt)("td",{parentName:"tr",align:null},"4h"),(0,i.kt)("td",{parentName:"tr",align:null},"1h")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"era"),(0,i.kt)("td",{parentName:"tr",align:null},"1d"),(0,i.kt)("td",{parentName:"tr",align:null},"6h")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"token"),(0,i.kt)("td",{parentName:"tr",align:null},"DOT"),(0,i.kt)("td",{parentName:"tr",align:null},"WND (test)")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"active validators"),(0,i.kt)("td",{parentName:"tr",align:null},"~300"),(0,i.kt)("td",{parentName:"tr",align:null},"~20")))),(0,i.kt)("h2",{id:"faq"},"FAQ"),(0,i.kt)("h3",{id:"why-am-i-unable-to-synchronize-the-chain-with-0-peers"},"Why am I unable to synchronize the chain with 0 peers?"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"zero-peer",src:a(29009).Z,width:"1350",height:"235"})),(0,i.kt)("p",null,"Make sure to enable ",(0,i.kt)("inlineCode",{parentName:"p"},"30333")," libp2p port. Eventually, it will take a little bit of time to discover\nother peers over the network."),(0,i.kt)("h3",{id:"how-do-i-clear-all-my-chain-data"},"How do I clear all my chain data?"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"polkadot purge-chain\n")),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Check out the ",(0,i.kt)("a",{parentName:"p",href:"https://substrate.stackexchange.com/"},"Substrate StackExchange")," to quickly get the\nanswers you need.")),(0,i.kt)("h2",{id:"note-about-vps"},"Note about VPS"),(0,i.kt)("p",null,"VPS providers are very popular for running servers of any kind. Extensive benchmarking was conducted\nto ensure that VPS servers are able to keep up with the work load in general."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Before you run a live Validator, please verify if the advertised performance is actually delivered\nconsistently by the VPS provider.")),(0,i.kt)("p",null,"that this is not an endorsement in any way:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"GCP's ",(0,i.kt)("em",{parentName:"li"},"c2")," and ",(0,i.kt)("em",{parentName:"li"},"c2d")," machine families"),(0,i.kt)("li",{parentName:"ul"},"AWS's ",(0,i.kt)("em",{parentName:"li"},"c6id")," machine family")),(0,i.kt)("p",null,"The following additional configurations were applied to the instances to tune their performance:"),(0,i.kt)("h3",{id:"disable-smt"},"Disable ",(0,i.kt)("a",{parentName:"h3",href:"https://en.wikipedia.org/wiki/Simultaneous_multithreading"},"SMT")),(0,i.kt)("p",null,"As critical path of Substrate is single-threaded we need to optimize for single-core CPU\nperformance. The node still profits from multiple cores when doing networking and other non-runtime\noperations. It is therefore still necessary to run it on at least the minimum required number of\ncores. Disabling SMT improves the performance as each vCPU becomes mapped to a physical CPU core\nrather than being presented to the OS as two logical cores. SMT implementation is called\n",(0,i.kt)("em",{parentName:"p"},"Hyper-Threading")," on Intel and ",(0,i.kt)("em",{parentName:"p"},"2-way SMT")," on AMD Zen. To disable SMT in runtime:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"for cpunum in $(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d, -f2- | tr ',' '\\n' | sort -un)\ndo\n echo 0 > /sys/devices/system/cpu/cpu$cpunum/online\ndone\n")),(0,i.kt)("p",null,"It will disable every other (vCPU) core."),(0,i.kt)("p",null,"To save changes permanently add ",(0,i.kt)("inlineCode",{parentName:"p"},"nosmt=force")," as kernel parameter. Edit ",(0,i.kt)("inlineCode",{parentName:"p"},"/etc/default/grub")," and add\n",(0,i.kt)("inlineCode",{parentName:"p"},"nosmt=force")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"GRUB_CMDLINE_LINUX_DEFAULT")," variable and run ",(0,i.kt)("inlineCode",{parentName:"p"},"sudo update-grub"),". After the reboot\nyou should see half of the cores are offline. Run ",(0,i.kt)("inlineCode",{parentName:"p"},"lscpu --extended")," to confirm."),(0,i.kt)("h3",{id:"disable-automatic-numa-balancing"},"Disable automatic NUMA balancing"),(0,i.kt)("p",null,"If you have multiple physical CPUs (CPU0 and CPU1) in the system each with its own memory bank (MB0\nand MB1), then it is usually slower for a CPU0 to access MB1 due to the slower interconnection. To\nprevent the OS from automatically moving the running Substrate process from one CPU to another and\nthus causing an increased latency, it is recommended to disable automatic NUMA balancing."),(0,i.kt)("p",null,"With automatic NUMA balancing disabled, an OS will always run a process on the same NUMA node where\nit was initially scheduled."),(0,i.kt)("p",null,"To disable NUMA balancing in runtime:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sysctl kernel.numa_balancing=0\n")),(0,i.kt)("p",null,"To save changes permanently, update startup options and reconfigure GRUB. Edit ",(0,i.kt)("inlineCode",{parentName:"p"},"/etc/default/grub"),"\nand add ",(0,i.kt)("inlineCode",{parentName:"p"},"numa_balancing=disable")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"GRUB_CMDLINE_LINUX_DEFAULT")," variable and run\n",(0,i.kt)("inlineCode",{parentName:"p"},"sudo update-grub"),". After reboot you can confirm the change by running\n",(0,i.kt)("inlineCode",{parentName:"p"},"sysctl -a | grep 'kernel.numa_balancing'")," and checking if the parameter is set to 0"),(0,i.kt)("h3",{id:"configure-spectremeltdown-mitigations"},"Configure Spectre/Meltdown Mitigations"),(0,i.kt)("p",null,"Spectre and Meltdown are vulnerabilities discovered in modern CPUs a few years ago. Mitigations were\nmade to the Linux kernel to cope with the multiple variations of these attacks. Check out\n",(0,i.kt)("a",{parentName:"p",href:"https://meltdownattack.com/"},"https://meltdownattack.com/")," for more info."),(0,i.kt)("p",null,"Initially those mitigations added ~20% penalty to the performance of the workloads. As CPU\nmanufacturers started to roll-out mitigations implemented in hardware, the performance gap\n",(0,i.kt)("a",{parentName:"p",href:"https://www.phoronix.com/scan.php?page=article&item=3-years-specmelt&num=1"},"narrowed down"),". As the\nbenchmark demonstrates, the performance penalty got reduced to ~7% on Intel 10th Gen CPUs. This is\ntrue for the workloads running on both bare-metal and VMs. But the penalty remains high for the\ncontainerized workloads in some cases."),(0,i.kt)("p",null,"As demonstrated in\n",(0,i.kt)("a",{parentName:"p",href:"http://mamememo.blogspot.com/2020/05/cpu-intensive-rubypython-code-runs.html"},"Yusuke Endoh's article"),",\na performance penalty for containerized workloads can be as high as 100%. This is due to SECCOMP\nprofile being overprotective about applying Spectre/Meltdown mitigations without providing real\nsecurity. A longer explanation is available in the\n",(0,i.kt)("a",{parentName:"p",href:"https://lkml.org/lkml/2020/11/4/1135"},"kernel patch discussion"),"."),(0,i.kt)("p",null,"Linux 5.16\n",(0,i.kt)("a",{parentName:"p",href:"https://www.phoronix.com/scan.php?page=news_item&px=Linux-Spectre-SECCOMP-Default"},"loosened the protections"),"\napplied to SECCOMP threads by default. Containers running on kernel 5.16 and later now don't suffer\nfrom the performance penalty implied by using a SECCOMP profile in container runtimes."),(0,i.kt)("h4",{id:"for-linux--516"},"For Linux >= 5.16"),(0,i.kt)("p",null,"You are all set. The performance of containerized workloads is on par with non-containerized ones.\nYou don't have to do anything."),(0,i.kt)("h4",{id:"for-linux--516-1"},"For Linux < 5.16"),(0,i.kt)("p",null,"You'll need to disable mitigations for Spectre V2 for user-space tasks as well as Speculative Store\nBypass Disable (SSBD) for Spectre V4.\n",(0,i.kt)("a",{parentName:"p",href:"https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git/commit/?h=for-next/seccomp&id=2f46993d83ff4abb310ef7b4beced56ba96f0d9d"},"This patch message"),"\ndescribes the reasoning for this default change in more detail:"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Ultimately setting SSBD and STIBP by default for all seccomp jails is a bad sweet spot and bad\ndefault with more cons than pros that end up reducing security in the public cloud (by giving an\nhuge incentive to not expose SPEC_CTRL which would be needed to get full security with IBPB after\nsetting nosmt in the guest) and by excessively hurting performance to more secure apps using\nseccomp that end up having to opt out with SECCOMP_FILTER_FLAG_SPEC_ALLOW.")),(0,i.kt)("p",null,"To disable the mitigations edit ",(0,i.kt)("inlineCode",{parentName:"p"},"/etc/default/grub")," and add\n",(0,i.kt)("inlineCode",{parentName:"p"},"spec_store_bypass_disable=prctl spectre_v2_user=prctl")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"GRUB_CMDLINE_LINUX_DEFAULT")," variable,\nrun ",(0,i.kt)("inlineCode",{parentName:"p"},"sudo update-grub"),", then reboot."),(0,i.kt)("p",null,"Note that mitigations are not disabled completely. You can fully disable all the available kernel\nmitigations by setting ",(0,i.kt)("inlineCode",{parentName:"p"},"mitigations=off"),". But we don't recommend doing this unless you run a fully\ntrusted code on the host."),(0,i.kt)("h3",{id:"vps-list"},"VPS List"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://cloud.google.com/"},"Google Cloud")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://aws.amazon.com/"},"Amazon AWS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.ovh.com.au/"},"OVH")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.digitalocean.com/"},"Digital Ocean")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.vultr.com/"},"Vultr")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.linode.com/"},"Linode")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.scaleway.com/"},"Scaleway")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://onfinality.io/"},"OnFinality"))),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"Beware of the ",(0,i.kt)("strong",{parentName:"mdxAdmonitionTitle"},"Terms and Conditions")," and ",(0,i.kt)("strong",{parentName:"mdxAdmonitionTitle"},"Acceptable Use Policies")," for each VPS"),(0,i.kt)("p",{parentName:"admonition"},"provider"),(0,i.kt)("p",{parentName:"admonition"},'You may be locked out of your account and your server shut down if you come in violation. For\ninstance, Digital Ocean lists "Mining of Cryptocurrencies" under the Network Abuse section of their\n',(0,i.kt)("a",{parentName:"p",href:"https://www.digitalocean.com/legal/acceptable-use-policy/"},"Acceptable Use Policy")," and requires\nexplicit permission to do so. This may extend to other cryptocurrency activity.")))}k.isMDXComponent=!0},90412:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/JS-UI-bond-7bdecad8831f3c1b20d96e426e7e47c1.png"},93002:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/JS-UI-sign-transaction-75b2e29fcaecc44c5eb1c4f5e3e364ae.png"},46513:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-dashboard-staking-4005504ef30291ebe1a243298c351a34.png"},67929:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-dashboard-telemetry-8930bdd60309c864ed682a1bdd4b1e31.png"},63670:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-dashboard-validate-1-4bf6a6488b4e128d12cab2617025d796.png"},44281:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-dashboard-validate-2-18a8869804f89ffebafa1b920e31ccd6.png"},54061:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-explorer-rotatekeys-rpc-6d5ba5d9ffb20fd9683432e9a6ccd0f9.jpg"},29009:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/polkadot-zero-peer-2642d52b7e07893a66a0ddfd492cce38.jpg"},72316:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/set-session-key-1-b0cdb38a299d6ef6bcc24c6ab2bce66d.png"},12883:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});const n=a.p+"assets/images/set-session-key-2-408efe22daa8d6533715987a1099828a.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/b0cbc1d4.2355700b.js b/assets/js/b0cbc1d4.2355700b.js new file mode 100644 index 000000000000..a5c79cc848f9 --- /dev/null +++ b/assets/js/b0cbc1d4.2355700b.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[3667],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>u});var o=a(74165),n=a(15861),i=a(67294),r=a(87152),s=a(9712),l=a(67425);function d(e,t,a){return p.apply(this,arguments)}function p(){return(p=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var i,l,d,p,h;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 d=new r.U(i),e.next=21,s.G.create({provider:d});case 21:p=e.sent,(h=a.split(".")).forEach((function(e){e in p&&(p=p[e])})),e.t1=h[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 ("+h[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function h(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 u=function(e){var t=e.network,a=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,p=(0,i.useState)(""),u=p[0],m=p[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?h(r.toString(),l,t,m):m(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;case"kusama-people":e="wss://kusama-people-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,d(t,a,m);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?h(n,l,t,m):m(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),u}},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())}}},14374:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>p,toc:()=>u});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"staking-dashboard",title:"Polkadot Staking Dashboard",sidebar_label:"Staking Dashboard",description:"Everything about the Polkadot Staking Dashboard.",keywords:["ledger","staking","polkadot","dashboard"],slug:"../staking-dashboard"},d=void 0,p={unversionedId:"general/staking-dashboard",id:"general/staking-dashboard",title:"Polkadot Staking Dashboard",description:"Everything about the Polkadot Staking Dashboard.",source:"@site/../docs/general/staking-dashboard.md",sourceDirName:"general",slug:"/staking-dashboard",permalink:"/docs/staking-dashboard",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/staking-dashboard.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1719391505,formattedLastUpdatedAt:"Jun 26, 2024",frontMatter:{id:"staking-dashboard",title:"Polkadot Staking Dashboard",sidebar_label:"Staking Dashboard",description:"Everything about the Polkadot Staking Dashboard.",keywords:["ledger","staking","polkadot","dashboard"],slug:"../staking-dashboard"},sidebar:"docs",previous:{title:"Parity Data Dashboards",permalink:"/docs/parity-data-dashboards"},next:{title:"Community & Contributors",permalink:"/docs/community-index"}},h={},u=[{value:"Preliminary Notes",id:"preliminary-notes",level:2},{value:"Using the Polkadot Staking Dashboard",id:"using-the-polkadot-staking-dashboard",level:2},{value:"Overview",id:"overview",level:2},{value:"Stake",id:"stake",level:2},{value:"Pools",id:"pools",level:3},{value:"Nominate",id:"nominate",level:3},{value:"Payouts",id:"payouts",level:3},{value:"After Staking",id:"after-staking",level:3},{value:"Validators",id:"validators",level:2},{value:"Support",id:"support",level:2},{value:"Network",id:"network",level:2}],m={toc:u},c="wrapper";function k(e){var t=e.components,l=(0,n.Z)(e,s);return(0,i.kt)(c,(0,o.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"preliminary-notes"},"Preliminary Notes"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/#/overview"},"Polkadot Staking Dashboard")," supports\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},(0,i.kt)("strong",{parentName:"a"},"proxy accounts"))," and you can import your\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#staking-proxies"},"staking proxy")," (for nominators) or\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies#non-transfer-proxy"},"non-transfer proxy")," (for nomination pool admins and\nmembers)."),(0,i.kt)("p",null,"The dashboard also has ",(0,i.kt)("strong",{parentName:"p"},"native ",(0,i.kt)("a",{parentName:"strong",href:"/docs/ledger"},"Ledger")," support"),", meaning that you do not need an\nextension or a wallet to use it; you just need your Ledger device.\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-accounts#metadata-updates-with-the-polkadot-js-browser-extension"},"Metadata updates"),"\nare thus not necessary, as you only need to keep your Ledger apps up-to-date."),(0,i.kt)("p",null,"Before using the dashboard, make sure you have a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions#browser-extensions"},"wallet or extension")," with a funded\nPolkadot account. Note that accounts on\nwallets or extensions can be imported from ",(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger")," or\n",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadot-vault"},"Polkadot Vault"),"."),(0,i.kt)("p",null,"On top of the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts#existential-deposit-and-reaping"},"existential deposit"),", you\nneed some free balance to pay for ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-transaction-fees"},"transaction fees")," and the\nminimum amount to place your nominations (only for nominators, currently\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"})),"",")\nor join a nomination pool (only for pool members, currently\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"})),"",").\nFor more information about staking on Polkadot\nvisit the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"staking page")," and the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"advanced staking page"),"."),(0,i.kt)("h2",{id:"using-the-polkadot-staking-dashboard"},"Using the Polkadot Staking Dashboard"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/#/overview"},"Polkadot Staking Dashboard")," is a tool only dedicated\nto ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"staking")," on Polkadot, ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-comparisons-kusama"},"Kusama"),"\n(Polkadot's canary network) and ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-networks#westend-test-network"},"Westend"),"\n(Polkadot's test network)."),(0,i.kt)("p",null,"The dashboard is not a wallet, meaning that you cannot transfer funds between accounts. To fund\naccounts, you can use ",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"wallets and extension"),". You can participate in\nstaking by being a ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"nominator")," or a member of a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool"),". Once you have a funded account, you need to\nconnect it to the dashboard (connect button on the top-right corner), this will allow you to\ninteract with Polkadot's native staking."),(0,i.kt)("admonition",{title:"The dashboard is a Web3 dApp",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The dashboard is a decentralized application (dApp), and to login you do not need to sign up with an\nemail and password but just need an account created on the supported non-custodial wallets. Any\ntransaction to be submitted needs to be signed by you. Also, if you use light clients, which are\nresistant to censorship, you interact trustlessly with the network without intermediaries. Welcome\nto the world of ",(0,i.kt)("a",{parentName:"p",href:"/docs/web3-and-polkadot"},"true Web3"),"!")),(0,i.kt)("p",null,"Note the pictures on this page refer to Kusama, but the same applies to Polkadot and Westend.\nThe structure of this page follows the sidebar of the staking dashboard. Here you will learn about\nthe main features of the dashboard. If you need more information, see the\n",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/hvXLc4H7rA4"},"Walkthrough Tutorial"),"."),(0,i.kt)("admonition",{title:"Walk-through 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/F59N3YKYCRs"},(0,i.kt)("strong",{parentName:"a"},"Nominating")),": Stake your tokens, choose your best validators,\nand start your staking journey on Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/dDIG7QAApig"},(0,i.kt)("strong",{parentName:"a"},"Becoming a Pool Member")),": Start becoming a part of the Polkadot\nmovement, keep Polkadot secure by staking\nminimum 1 DOT and receiving staking rewards."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/hvXLc4H7rA4"},(0,i.kt)("strong",{parentName:"a"},"Dashboard Walkthrough")),": Become a Pro using the Staking\nDashboard."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/58pIe8tt2o4"},(0,i.kt)("strong",{parentName:"a"},"After Staking")),": Nominating on\nPolkadot is not a set-and-forget action,\nlearn what you can do with the dashboard after you started staking."))),(0,i.kt)("h2",{id:"overview"},"Overview"),(0,i.kt)("admonition",{title:"Staking Dashboard Walk-through video tutorial",type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/hvXLc4H7rA4"},"This video tutorial")," shows you everything you can do with the Staking\nDashboard.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"dashboard overview",src:a(49083).Z,width:"1920",height:"1080"})),(0,i.kt)("p",null,"This page of the dashboard has six main panels:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section A: The Sidebar")," shows which page you are on (in this case, the Overview). It will also\nshow the role you currently have in staking (in this case, active in both ",(0,i.kt)("a",{parentName:"p",href:"#pools"},"Pools")," and\n",(0,i.kt)("a",{parentName:"p",href:"#nominate"},"Nominate"),"). You can also change the ",(0,i.kt)("a",{parentName:"p",href:"#network"},"network")," (currently on Kusama).")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section B: The Accounts Panel")," allows you to connect one account to the dashboard. Once\nconnected, the account will appear next to the ",(0,i.kt)("inlineCode",{parentName:"p"},"Accounts")," button. You can see it here if you are\nactive as a nominator and/or a pool member. In this case, the account KSM Stash is a nominator and\na member of the pool Insight Finance. Proxy accounts are also shown here if applicable. Note that\nthe dashboard will automatically fetch the stash and the proxy."))),(0,i.kt)("p",null,"Note that Sections A and B will always be visible while you use the dashboard."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section C: The Stats Panel")," shows the general view of current staking metrics, including the\nhistorical reward rate (including after\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#inflation"},"inflation"),"), the supply staked and time remaining\nin the current era.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section D: The Summary Panel")," shows your current situation and gives you general tips about\nstaking. In this case, the KSM Stash account is a nominator and a pool member, and by clicking on\n",(0,i.kt)("inlineCode",{parentName:"p"},"Manage >")," you can go directly to the ",(0,i.kt)("a",{parentName:"p",href:"#nominate"},"Nominate")," and ",(0,i.kt)("a",{parentName:"p",href:"#pools"},"Pools")," pages,\nrespectively. You can take actions such as changing staking preferences, bonding more funds, etc.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section E: The Balance Panel"),' shows the bonded amount distinguishing between "Nominating", "In\na Pool", and "Not Staking". The amount that is not staking is further divided into "Free" (a\nbalance that can be transferred) and "Reserve" (a balance that is needed the keep the account\non-chain, see ',(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts#existential-deposit-and-reaping"},"existential deposit"),").\nIn this case, 0.301 KSM are bonded for nominating, 0.3 KSM are bonded in a pool, and 0.145 KSM are\nnot used for staking. Of the non-staking balance, 0.144 KSM are free while\n",(0,i.kt)(r.Z,{network:"kusama",path:"consts.balances.existentialDeposit",defaultValue:333e6,filter:"humanReadable",mdxType:"RPC"}),"","\nare reserved for the existential deposit.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section F: The Recent Payouts Panel")," shows a bar chart with the rewards paid out to you in the\npast 15 days either as a nominator or a pool member (manually claimed). Note how the 4th of April\nbar has the tip that is not filled with color. This is to show a pending payout (for nominators\nonly). Below the bar chart is a line chart showing the 10-day moving average."))),(0,i.kt)("p",null,"Additional statistics can be found at the bottom of the overview page."),(0,i.kt)("admonition",{title:"Pool funds are in system accounts",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Remember that funds bonded in a pool are transferred to the pool's system account, which can only be\naccessed by the protocol, and not by any individual user. Some wallets might not display the balance\nbonded in pools, but the dashboard will always show it.")),(0,i.kt)("h2",{id:"stake"},"Stake"),(0,i.kt)("p",null,"In this category, you can access all functionalities allowing you to stake your tokens as a\nnominator, member of a nomination pool, or both. The payout section will enable you to inspect the\nmost recently received rewards."),(0,i.kt)("h3",{id:"pools"},"Pools"),(0,i.kt)("admonition",{title:"Joining a Nomination Pool - Walk-through video tutorial",type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/dDIG7QAApig"},"This video tutorial")," shows you how to join a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," with the Staking Dashboard. You can also read\nthe\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182376-staking-dashboard-how-to-join-a-nomination-pool"},"dedicated support article"),"\nabout joining a pool.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"dashboard pools",src:a(86214).Z,width:"1920",height:"1080"})),(0,i.kt)("p",null,"This page of the dashboard has four main panels (Sidebar and Accounts Panels excluded):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section A: The Stats Panel")," shows the number of active pools and the minimum number of tokens\nneeded to join a pool and/or create one."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section B: The Balance Panel")," shows the number of tokens bonded in pools and those that are\nfree. In this case, we have 0.3 KSM bonded and 0.144 KSM free. In this panel, you can bond more\nfunds (",(0,i.kt)("inlineCode",{parentName:"li"},"+")," button) or unbond some funds (",(0,i.kt)("inlineCode",{parentName:"li"},"-")," button). Unbonding will withdraw unclaimed rewards\nand funds will be locked for 28 eras\n(28 days). Once the 28 eras have passed, you\ncan unlock the locked funds (button with a lock icon) that will be available as a free balance.")),(0,i.kt)("admonition",{title:"No fast unstake and pool swap for pool members",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Note that the option to fast unstake is only available to nominators. Also, to change pool, you\ncannot simply swap memberships. You will need to unbond and go through the whole unbonding period.")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section C: The Pool Panel")," shows the pool id where you have membership (in this case, Pool 82),\nthe pool name, and next to it, a ",(0,i.kt)("inlineCode",{parentName:"p"},"Manage")," button that will allow to choose between different\noptions:"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Update Claim Permissions: you can allow other pool members to compound your rewards, withdraw\nyour rewards as a free balance, or both. More details about nomination pools and updating claim\npermissions can be found on the\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools#claim-permissions"},"dedicated wiki page"),".")),(0,i.kt)("p",{parentName:"li"},(0,i.kt)("img",{alt:"dashboard-permissionlessPoolClaims",src:a(70359).Z,width:"651",height:"272"})),(0,i.kt)("admonition",{parentName:"li",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For more information about how-to update your claim permissions with the staking dashboard see\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182399-staking-dashboard-how-to-claim-nomination-pool-rewards#Permissionless-claiming"},"this support article"),".")),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Leave the pool and unbond all the funds in the pool.")),(0,i.kt)("p",{parentName:"li"},"If you are a pool admin you will be able to see the additional options:"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Claim Commission: you can claim pool commissions to an account specified under Manage Commission\n(below)."),(0,i.kt)("li",{parentName:"ul"},"Manage Commission: you can manage the pool commission rate, maximum commission, maximum change\nrate, and minimum time delay between commission updates. More details about nomination pools and\nmanaging pool commissions can be found on the\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools#pool-commissions"},"dedicated wiki page"),".")),(0,i.kt)("p",{parentName:"li"},(0,i.kt)("img",{alt:"dashboard-manage-commission",src:a(42069).Z,width:"650",height:"645"})),(0,i.kt)("admonition",{parentName:"li",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For more information about how-to manage commission of your nomination pool with the staking\ndashboard see\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182388-staking-dashboard-how-to-create-a-nomination-pool#Pool-management-options"},"this support article"),".")),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Rename Pool: you can change the pool's name."),(0,i.kt)("li",{parentName:"ul"},"Lock Pool: you can lock the pool so that new members are not allowed."),(0,i.kt)("li",{parentName:"ul"},"Destroy Pool: you can destroy the pool. See\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-guides-staking-pools#pool-destruction"},"this wiki page")," and\n",(0,i.kt)("a",{parentName:"li",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,i.kt)("p",{parentName:"li"},"You can see any unclaimed rewards in the middle of the panel. You can claim and bond the rewards\n(",(0,i.kt)("inlineCode",{parentName:"p"},"+ Compound")," button) or withdraw them as a free balance (",(0,i.kt)("inlineCode",{parentName:"p"},"Withdraw"),' button). In this case, there\nare approximately 0.0012 KSM that can be claimed. You can see the Pool Status at the bottom of the\npanel, currently set to "Nominating and Earning Rewards".'))),(0,i.kt)("p",null,"Note that if it is the first time you log in to the dashboard, you will see two\nbuttons\xa0",(0,i.kt)("inlineCode",{parentName:"p"},"Create"),"\xa0and\xa0",(0,i.kt)("inlineCode",{parentName:"p"},"Join"),", instead of ",(0,i.kt)("inlineCode",{parentName:"p"},"Manage"),". For more information about how to create a\nnomination pool, see\n",(0,i.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"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section D: The Pool Nominations Panel")," shows the nominations of the pool you are currently in,\nhighlighting the validator that is active and will pay rewards to the pool at the end of the era\n(in this case ",(0,i.kt)("inlineCode",{parentName:"li"},"ParaNodes.io/11"),").")),(0,i.kt)("p",null,"If you scroll down the page, there are two additional panels:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Roles")," showing the accounts of the pool's Depositor, Root, Nominator, and Bouncer. The same\naccount can cover all the roles."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Pool Stats")," showing the Pool State (either Active, Closed, or Destroying), Pool Members (number\nof members in the pool), and Total Bonded (total number of bonded tokens).")),(0,i.kt)("p",null,"The Pools page is divided into four parts: the Overview is basically what we talked about until now,\nthe Members section will show all accounts of the pool members, the All Pools section will show all\npools (you can filter Active, Locked, and Destroying pools), and the Favorites section shows all\npools that you liked (you can like a pool in the All Pools section by clicking on the heart icons)."),(0,i.kt)("h3",{id:"nominate"},"Nominate"),(0,i.kt)("admonition",{title:"Walk-through video tutorial of How to Nominate",type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/F59N3YKYCRs"},"This video tutorial")," shows you how to become a nominator with the\nStaking Dashboard.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"dashboard nominate",src:a(99289).Z,width:"1920",height:"1080"})),(0,i.kt)("p",null,"This page of the dashboard has four main panels (Sidebar and Accounts Panels excluded):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section A: The Stats Panel")," shows the number of active nominators, the minimum number of tokens\nto nominate (currently\n",(0,i.kt)(r.Z,{network:"kusama",path:"query.staking.minNominatorBond",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"",")\nand the minimum active bond (currently\n",(0,i.kt)(r.Z,{network:"kusama",path:"query.staking.minimumActiveStake",defaultValue:2937e9,filter:"humanReadable",mdxType:"RPC"}),"",").\nThe system keeps 12500 nomination intents and puts them into the\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},"bags list"),". The fact that active nominators are not\n12500 is because there are nominators that have no active validator."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section B: The Balance Panel")," shows the number of tokens bonded in nominations and those that\nare free. In this case, we have 0.301 KSM bonded and 0.144 KSM free. In this panel, you can bond\nmore funds (",(0,i.kt)("inlineCode",{parentName:"li"},"+")," button) or unbond some funds (",(0,i.kt)("inlineCode",{parentName:"li"},"-")," button). Unbonding will withdraw unclaimed\nrewards and funds will be locked for 28 eras\n(28 days). Once the 28 eras have passed, you\ncan unlock the locked funds (button with a lock icon) that will be available as a free balance.")),(0,i.kt)("admonition",{title:"Fast unstake",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If your account did not receive rewards in the past 28 eras, you will be eligible for fast unstake.\nThe dashboard will automatically check this for you and prompt a banner.")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section C: The Nominator Panel"),' shows the current status of the nominator, currently set to\n"Nominating and Earning Rewards", and next to it, the ',(0,i.kt)("inlineCode",{parentName:"li"},"Unstake"),' button allows you to unstake the\nwhole bonded amount and stop nominating. In the middle of the panel, the payout destination is\ncurrently set to "Compounding" (i.e. rewards are added to the bonded funds). The ',(0,i.kt)("inlineCode",{parentName:"li"},"Update"),' button\nwill allow you to change the destination to "To Your Account" (to the stash account as a free\nbalance), "To Another Account" (an account that is not the stash), or "None" (no payout\ndestination).'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section D: The Nominations panel")," shows your nominations and allows you to stop all nomination\nwith the ",(0,i.kt)("inlineCode",{parentName:"li"},"Stop")," button or to select specific validators (",(0,i.kt)("inlineCode",{parentName:"li"},"Select")," button) and stop nominating only\nthose.")),(0,i.kt)("h3",{id:"payouts"},"Payouts"),(0,i.kt)("p",null,"This page is an expanded version of Panel F on the ",(0,i.kt)("a",{parentName:"p",href:"#overview"},"Overview")," page. It also shows all\nvalidators and/or nomination pools that paid out rewards to your accounts in the past few months."),(0,i.kt)("h3",{id:"after-staking"},"After Staking"),(0,i.kt)("admonition",{title:"Walk-through video tutorial - What to do after Staking",type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/F59N3YKYCRs"},"This video tutorial")," shows you how to what you can do after staking\nwith the Staking Dashboard.")),(0,i.kt)("h2",{id:"validators"},"Validators"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"dashboard nominate",src:a(72258).Z,width:"1920",height:"1080"})),(0,i.kt)("p",null,"This page of the dashboard has two main panels (Sidebar and Accounts Panels excluded):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Panel A: The Stats Panel")," shows the total number of active validators, all validators currently\nregistered (active and inactive), and average commission across all validators."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Panel B: The Validators Panel")," shows all validators. You can order them by low/high commission\nor apply the following filters:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Include only active validators"),(0,i.kt)("li",{parentName:"ul"},"Exclude validators that have 100% commission, blocked nominations, and have missing identity.")))),(0,i.kt)("h2",{id:"support"},"Support"),(0,i.kt)("p",null,"Support for the Staking Dashboard is available at\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"the official Polkadot support website"),"."),(0,i.kt)("h2",{id:"network"},"Network"),(0,i.kt)("p",null,"Under Network, you can connect to either Polkadot, Kusama, or Westend through public RPC nodes or\nlight clients for a true Web3 experience. For more information about light clients, see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/build-light-clients#replacing-rpc-node-reliance-with-light-clients"},"this page"),"."))}k.isMDXComponent=!0},42069:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-managePoolCommission-46842e2d0927915c031faf72cb3e266a.png"},99289:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-nominate-7b882e41a42abeb928b78a6d6db4a6f0.png"},49083:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-overview-755861fe5937455f21a9360334fc26ea.png"},70359:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-permissionlessPoolClaims-20c461799ea9447fff83f2d2bd41b4f9.png"},86214:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-pools-b7327a1bbe115970fe683b0350c7bb6e.png"},72258:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-validators-a90166e01dcd1072c9a3be81a439afbb.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/b0cbc1d4.87ba95d0.js b/assets/js/b0cbc1d4.87ba95d0.js deleted file mode 100644 index 002d4e18f779..000000000000 --- a/assets/js/b0cbc1d4.87ba95d0.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[3667],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>u});var o=a(74165),n=a(15861),i=a(67294),r=a(87152),s=a(9712),l=a(67425);function d(e,t,a){return p.apply(this,arguments)}function p(){return(p=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var i,l,d,p,h;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 d=new r.U(i),e.next=21,s.G.create({provider:d});case 21:p=e.sent,(h=a.split(".")).forEach((function(e){e in p&&(p=p[e])})),e.t1=h[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 ("+h[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function h(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 u=function(e){var t=e.network,a=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,p=(0,i.useState)(""),u=p[0],m=p[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?h(r.toString(),l,t,m):m(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;case"kusama-people":e="wss://kusama-people-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,d(t,a,m);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?h(n,l,t,m):m(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),u}},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())}}},14374:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>p,toc:()=>u});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"staking-dashboard",title:"Polkadot Staking Dashboard",sidebar_label:"Staking Dashboard",description:"Everything about the Polkadot Staking Dashboard.",keywords:["ledger","staking","polkadot","dashboard"],slug:"../staking-dashboard"},d=void 0,p={unversionedId:"general/staking-dashboard",id:"general/staking-dashboard",title:"Polkadot Staking Dashboard",description:"Everything about the Polkadot Staking Dashboard.",source:"@site/../docs/general/staking-dashboard.md",sourceDirName:"general",slug:"/staking-dashboard",permalink:"/docs/staking-dashboard",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/staking-dashboard.md",tags:[],version:"current",lastUpdatedBy:"github-actions[bot]",lastUpdatedAt:1714376284,formattedLastUpdatedAt:"Apr 29, 2024",frontMatter:{id:"staking-dashboard",title:"Polkadot Staking Dashboard",sidebar_label:"Staking Dashboard",description:"Everything about the Polkadot Staking Dashboard.",keywords:["ledger","staking","polkadot","dashboard"],slug:"../staking-dashboard"},sidebar:"docs",previous:{title:"Parity Data Dashboards",permalink:"/docs/parity-data-dashboards"},next:{title:"Community & Contributors",permalink:"/docs/community-index"}},h={},u=[{value:"Preliminary Notes",id:"preliminary-notes",level:2},{value:"Using the Polkadot Staking Dashboard",id:"using-the-polkadot-staking-dashboard",level:2},{value:"Overview",id:"overview",level:2},{value:"Stake",id:"stake",level:2},{value:"Pools",id:"pools",level:3},{value:"Nominate",id:"nominate",level:3},{value:"Payouts",id:"payouts",level:3},{value:"After Staking",id:"after-staking",level:3},{value:"Validators",id:"validators",level:2},{value:"Support",id:"support",level:2},{value:"Network",id:"network",level:2}],m={toc:u},c="wrapper";function k(e){var t=e.components,l=(0,n.Z)(e,s);return(0,i.kt)(c,(0,o.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"preliminary-notes"},"Preliminary Notes"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Polkadot Staking Dashboard")," supports\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies"},(0,i.kt)("strong",{parentName:"a"},"proxy accounts"))," and you can import your\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#staking-proxies"},"staking proxy")," (for nominators) or\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies#non-transfer-proxy"},"non-transfer proxy")," (for nomination pool admins and\nmembers)."),(0,i.kt)("p",null,"The dashboard also has ",(0,i.kt)("strong",{parentName:"p"},"native ",(0,i.kt)("a",{parentName:"strong",href:"/docs/ledger"},"Ledger")," support"),", meaning that you do not need an\nextension or a wallet to use it; you just need your Ledger device.\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-accounts#metadata-updates-with-the-polkadot-js-browser-extension"},"Metadata updates"),"\nare thus not necessary, as you only need to keep your Ledger apps up-to-date."),(0,i.kt)("p",null,"Before using the dashboard, make sure you have a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions#browser-extensions"},"wallet or extension")," with a funded\nPolkadot account. Note that accounts on\nwallets or extensions can be imported from ",(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger")," or\n",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadot-vault"},"Polkadot Vault"),"."),(0,i.kt)("p",null,"On top of the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts#existential-deposit-and-reaping"},"existential deposit"),", you\nneed some free balance to pay for ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-transaction-fees"},"transaction fees")," and the\nminimum amount to place your nominations (only for nominators, currently\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:25e11,filter:"humanReadable",mdxType:"RPC"})),"",")\nor join a nomination pool (only for pool members, currently\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"})),"",").\nFor more information about staking on Polkadot\nvisit the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"staking page")," and the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"advanced staking page"),"."),(0,i.kt)("h2",{id:"using-the-polkadot-staking-dashboard"},"Using the Polkadot Staking Dashboard"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Polkadot Staking Dashboard")," is a tool only\ndedicated to ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"staking")," on Polkadot,\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-comparisons-kusama"},"Kusama")," (Polkadot's canary network) and\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-networks#westend-test-network"},"Westend")," (Polkadot's test network)."),(0,i.kt)("p",null,"The dashboard is not a wallet, meaning that you cannot transfer funds between accounts. To fund\naccounts, you can use ",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"wallets and extension"),". You can participate in\nstaking by being a ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"nominator")," or a member of a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool"),". Once you have a funded account, you need to\nconnect it to the dashboard (connect button on the top-right corner), this will allow you to\ninteract with Polkadot's native staking."),(0,i.kt)("admonition",{title:"The dashboard is a Web3 dApp",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The dashboard is a decentralized application (dApp), and to login you do not need to sign up with an\nemail and password but just need an account created on the supported non-custodial wallets. Any\ntransaction to be submitted needs to be signed by you. Also, if you use light clients, which are\nresistant to censorship, you interact trustlessly with the network without intermediaries. Welcome\nto the world of ",(0,i.kt)("a",{parentName:"p",href:"/docs/web3-and-polkadot"},"true Web3"),"!")),(0,i.kt)("p",null,"Note the pictures on this page refer to Kusama, but the same applies to Polkadot and Westend.\nThe structure of this page follows the sidebar of the staking dashboard. Here you will learn about\nthe main features of the dashboard. If you need more information, see the\n",(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/hvXLc4H7rA4"},"Walkthrough Tutorial"),"."),(0,i.kt)("admonition",{title:"Walk-through 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/F59N3YKYCRs"},(0,i.kt)("strong",{parentName:"a"},"Nominating")),": Stake your tokens, choose your best validators,\nand start your staking journey on Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/dDIG7QAApig"},(0,i.kt)("strong",{parentName:"a"},"Becoming a Pool Member")),": Start becoming a part of the Polkadot\nmovement, keep Polkadot secure by staking\nminimum 1 DOT and receiving staking rewards."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/hvXLc4H7rA4"},(0,i.kt)("strong",{parentName:"a"},"Dashboard Walkthrough")),": Become a Pro using the Staking\nDashboard."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/58pIe8tt2o4"},(0,i.kt)("strong",{parentName:"a"},"After Staking")),": Nominating on\nPolkadot is not a set-and-forget action,\nlearn what you can do with the dashboard after you started staking."))),(0,i.kt)("h2",{id:"overview"},"Overview"),(0,i.kt)("admonition",{title:"Staking Dashboard Walk-through video tutorial",type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/hvXLc4H7rA4"},"This video tutorial")," shows you everything you can do with the Staking\nDashboard.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"dashboard overview",src:a(49083).Z,width:"1920",height:"1080"})),(0,i.kt)("p",null,"This page of the dashboard has six main panels:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section A: The Sidebar")," shows which page you are on (in this case, the Overview). It will also\nshow the role you currently have in staking (in this case, active in both ",(0,i.kt)("a",{parentName:"p",href:"#pools"},"Pools")," and\n",(0,i.kt)("a",{parentName:"p",href:"#nominate"},"Nominate"),"). You can also change the ",(0,i.kt)("a",{parentName:"p",href:"#network"},"network")," (currently on Kusama).")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section B: The Accounts Panel")," allows you to connect one account to the dashboard. Once\nconnected, the account will appear next to the ",(0,i.kt)("inlineCode",{parentName:"p"},"Accounts")," button. You can see it here if you are\nactive as a nominator and/or a pool member. In this case, the account KSM Stash is a nominator and\na member of the pool Insight Finance. Proxy accounts are also shown here if applicable. Note that\nthe dashboard will automatically fetch the stash and the proxy."))),(0,i.kt)("p",null,"Note that Sections A and B will always be visible while you use the dashboard."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section C: The Stats Panel")," shows the general view of current staking metrics, including the\nhistorical reward rate (including after\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#inflation"},"inflation"),"), the supply staked and time remaining\nin the current era.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section D: The Summary Panel")," shows your current situation and gives you general tips about\nstaking. In this case, the KSM Stash account is a nominator and a pool member, and by clicking on\n",(0,i.kt)("inlineCode",{parentName:"p"},"Manage >")," you can go directly to the ",(0,i.kt)("a",{parentName:"p",href:"#nominate"},"Nominate")," and ",(0,i.kt)("a",{parentName:"p",href:"#pools"},"Pools")," pages,\nrespectively. You can take actions such as changing staking preferences, bonding more funds, etc.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section E: The Balance Panel"),' shows the bonded amount distinguishing between "Nominating", "In\na Pool", and "Not Staking". The amount that is not staking is further divided into "Free" (a\nbalance that can be transferred) and "Reserve" (a balance that is needed the keep the account\non-chain, see ',(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts#existential-deposit-and-reaping"},"existential deposit"),").\nIn this case, 0.301 KSM are bonded for nominating, 0.3 KSM are bonded in a pool, and 0.145 KSM are\nnot used for staking. Of the non-staking balance, 0.144 KSM are free while\n",(0,i.kt)(r.Z,{network:"kusama",path:"consts.balances.existentialDeposit",defaultValue:333e6,filter:"humanReadable",mdxType:"RPC"}),"","\nare reserved for the existential deposit.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section F: The Recent Payouts Panel")," shows a bar chart with the rewards paid out to you in the\npast 15 days either as a nominator or a pool member (manually claimed). Note how the 4th of April\nbar has the tip that is not filled with color. This is to show a pending payout (for nominators\nonly). Below the bar chart is a line chart showing the 10-day moving average."))),(0,i.kt)("p",null,"Additional statistics can be found at the bottom of the overview page."),(0,i.kt)("admonition",{title:"Pool funds are in system accounts",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Remember that funds bonded in a pool are transferred to the pool's system account, which can only be\naccessed by the protocol, and not by any individual user. Some wallets might not display the balance\nbonded in pools, but the dashboard will always show it.")),(0,i.kt)("h2",{id:"stake"},"Stake"),(0,i.kt)("p",null,"In this category, you can access all functionalities allowing you to stake your tokens as a\nnominator, member of a nomination pool, or both. The payout section will enable you to inspect the\nmost recently received rewards."),(0,i.kt)("h3",{id:"pools"},"Pools"),(0,i.kt)("admonition",{title:"Joining a Nomination Pool - Walk-through video tutorial",type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/dDIG7QAApig"},"This video tutorial")," shows you how to join a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," with the Staking Dashboard. You can also read\nthe\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182376-staking-dashboard-how-to-join-a-nomination-pool"},"dedicated support article"),"\nabout joining a pool.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"dashboard pools",src:a(86214).Z,width:"1920",height:"1080"})),(0,i.kt)("p",null,"This page of the dashboard has four main panels (Sidebar and Accounts Panels excluded):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section A: The Stats Panel")," shows the number of active pools and the minimum number of tokens\nneeded to join a pool and/or create one."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section B: The Balance Panel")," shows the number of tokens bonded in pools and those that are\nfree. In this case, we have 0.3 KSM bonded and 0.144 KSM free. In this panel, you can bond more\nfunds (",(0,i.kt)("inlineCode",{parentName:"li"},"+")," button) or unbond some funds (",(0,i.kt)("inlineCode",{parentName:"li"},"-")," button). Unbonding will withdraw unclaimed rewards\nand funds will be locked for 28 eras\n(28 days). Once the 28 eras have passed, you\ncan unlock the locked funds (button with a lock icon) that will be available as a free balance.")),(0,i.kt)("admonition",{title:"No fast unstake and pool swap for pool members",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Note that the option to fast unstake is only available to nominators. Also, to change pool, you\ncannot simply swap memberships. You will need to unbond and go through the whole unbonding period.")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Section C: The Pool Panel")," shows the pool id where you have membership (in this case, Pool 82),\nthe pool name, and next to it, a ",(0,i.kt)("inlineCode",{parentName:"p"},"Manage")," button that will allow to choose between different\noptions:"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Update Claim Permissions: you can allow other pool members to compound your rewards, withdraw\nyour rewards as a free balance, or both. More details about nomination pools and updating claim\npermissions can be found on the\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools#claim-permissions"},"dedicated wiki page"),".")),(0,i.kt)("p",{parentName:"li"},(0,i.kt)("img",{alt:"dashboard-permissionlessPoolClaims",src:a(70359).Z,width:"651",height:"272"})),(0,i.kt)("admonition",{parentName:"li",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For more information about how-to update your claim permissions with the staking dashboard see\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182399-staking-dashboard-how-to-claim-nomination-pool-rewards#Permissionless-claiming"},"this support article"),".")),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Leave the pool and unbond all the funds in the pool.")),(0,i.kt)("p",{parentName:"li"},"If you are a pool admin you will be able to see the additional options:"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Claim Commission: you can claim pool commissions to an account specified under Manage Commission\n(below)."),(0,i.kt)("li",{parentName:"ul"},"Manage Commission: you can manage the pool commission rate, maximum commission, maximum change\nrate, and minimum time delay between commission updates. More details about nomination pools and\nmanaging pool commissions can be found on the\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools#pool-commissions"},"dedicated wiki page"),".")),(0,i.kt)("p",{parentName:"li"},(0,i.kt)("img",{alt:"dashboard-manage-commission",src:a(42069).Z,width:"650",height:"645"})),(0,i.kt)("admonition",{parentName:"li",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For more information about how-to manage commission of your nomination pool with the staking\ndashboard see\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182388-staking-dashboard-how-to-create-a-nomination-pool#Pool-management-options"},"this support article"),".")),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Rename Pool: you can change the pool's name."),(0,i.kt)("li",{parentName:"ul"},"Lock Pool: you can lock the pool so that new members are not allowed."),(0,i.kt)("li",{parentName:"ul"},"Destroy Pool: you can destroy the pool. See\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-guides-staking-pools#pool-destruction"},"this wiki page")," and\n",(0,i.kt)("a",{parentName:"li",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,i.kt)("p",{parentName:"li"},"You can see any unclaimed rewards in the middle of the panel. You can claim and bond the rewards\n(",(0,i.kt)("inlineCode",{parentName:"p"},"+ Compound")," button) or withdraw them as a free balance (",(0,i.kt)("inlineCode",{parentName:"p"},"Withdraw"),' button). In this case, there\nare approximately 0.0012 KSM that can be claimed. You can see the Pool Status at the bottom of the\npanel, currently set to "Nominating and Earning Rewards".'))),(0,i.kt)("p",null,"Note that if it is the first time you log in to the dashboard, you will see two\nbuttons\xa0",(0,i.kt)("inlineCode",{parentName:"p"},"Create"),"\xa0and\xa0",(0,i.kt)("inlineCode",{parentName:"p"},"Join"),", instead of ",(0,i.kt)("inlineCode",{parentName:"p"},"Manage"),". For more information about how to create a\nnomination pool, see\n",(0,i.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"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section D: The Pool Nominations Panel")," shows the nominations of the pool you are currently in,\nhighlighting the validator that is active and will pay rewards to the pool at the end of the era\n(in this case ",(0,i.kt)("inlineCode",{parentName:"li"},"ParaNodes.io/11"),").")),(0,i.kt)("p",null,"If you scroll down the page, there are two additional panels:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Roles")," showing the accounts of the pool's Depositor, Root, Nominator, and Bouncer. The same\naccount can cover all the roles."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Pool Stats")," showing the Pool State (either Active, Closed, or Destroying), Pool Members (number\nof members in the pool), and Total Bonded (total number of bonded tokens).")),(0,i.kt)("p",null,"The Pools page is divided into four parts: the Overview is basically what we talked about until now,\nthe Members section will show all accounts of the pool members, the All Pools section will show all\npools (you can filter Active, Locked, and Destroying pools), and the Favorites section shows all\npools that you liked (you can like a pool in the All Pools section by clicking on the heart icons)."),(0,i.kt)("h3",{id:"nominate"},"Nominate"),(0,i.kt)("admonition",{title:"Walk-through video tutorial of How to Nominate",type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/F59N3YKYCRs"},"This video tutorial")," shows you how to become a nominator with the\nStaking Dashboard.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"dashboard nominate",src:a(99289).Z,width:"1920",height:"1080"})),(0,i.kt)("p",null,"This page of the dashboard has four main panels (Sidebar and Accounts Panels excluded):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section A: The Stats Panel")," shows the number of active nominators, the minimum number of tokens\nto nominate (currently\n",(0,i.kt)(r.Z,{network:"kusama",path:"query.staking.minNominatorBond",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"",")\nand the minimum active bond (currently\n",(0,i.kt)(r.Z,{network:"kusama",path:"query.staking.minimumActiveStake",defaultValue:2937e9,filter:"humanReadable",mdxType:"RPC"}),"",").\nThe system keeps 12500 nomination intents and puts them into the\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},"bags list"),". The fact that active nominators are not\n12500 is because there are nominators that have no active validator."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section B: The Balance Panel")," shows the number of tokens bonded in nominations and those that\nare free. In this case, we have 0.301 KSM bonded and 0.144 KSM free. In this panel, you can bond\nmore funds (",(0,i.kt)("inlineCode",{parentName:"li"},"+")," button) or unbond some funds (",(0,i.kt)("inlineCode",{parentName:"li"},"-")," button). Unbonding will withdraw unclaimed\nrewards and funds will be locked for 28 eras\n(28 days). Once the 28 eras have passed, you\ncan unlock the locked funds (button with a lock icon) that will be available as a free balance.")),(0,i.kt)("admonition",{title:"Fast unstake",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If your account did not receive rewards in the past 28 eras, you will be eligible for fast unstake.\nThe dashboard will automatically check this for you and prompt a banner.")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section C: The Nominator Panel"),' shows the current status of the nominator, currently set to\n"Nominating and Earning Rewards", and next to it, the ',(0,i.kt)("inlineCode",{parentName:"li"},"Unstake"),' button allows you to unstake the\nwhole bonded amount and stop nominating. In the middle of the panel, the payout destination is\ncurrently set to "Compounding" (i.e. rewards are added to the bonded funds). The ',(0,i.kt)("inlineCode",{parentName:"li"},"Update"),' button\nwill allow you to change the destination to "To Your Account" (to the stash account as a free\nbalance), "To Another Account" (an account that is not the stash), or "None" (no payout\ndestination).'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Section D: The Nominations panel")," shows your nominations and allows you to stop all nomination\nwith the ",(0,i.kt)("inlineCode",{parentName:"li"},"Stop")," button or to select specific validators (",(0,i.kt)("inlineCode",{parentName:"li"},"Select")," button) and stop nominating only\nthose.")),(0,i.kt)("h3",{id:"payouts"},"Payouts"),(0,i.kt)("p",null,"This page is an expanded version of Panel F on the ",(0,i.kt)("a",{parentName:"p",href:"#overview"},"Overview")," page. It also shows all\nvalidators and/or nomination pools that paid out rewards to your accounts in the past few months."),(0,i.kt)("h3",{id:"after-staking"},"After Staking"),(0,i.kt)("admonition",{title:"Walk-through video tutorial - What to do after Staking",type:"info"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("a",{parentName:"p",href:"https://youtu.be/F59N3YKYCRs"},"This video tutorial")," shows you how to what you can do after staking\nwith the Staking Dashboard.")),(0,i.kt)("h2",{id:"validators"},"Validators"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"dashboard nominate",src:a(72258).Z,width:"1920",height:"1080"})),(0,i.kt)("p",null,"This page of the dashboard has two main panels (Sidebar and Accounts Panels excluded):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Panel A: The Stats Panel")," shows the total number of active validators, all validators currently\nregistered (active and inactive), and average commission across all validators."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Panel B: The Validators Panel")," shows all validators. You can order them by low/high commission\nor apply the following filters:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Include only active validators"),(0,i.kt)("li",{parentName:"ul"},"Exclude validators that have 100% commission, blocked nominations, and have missing identity.")))),(0,i.kt)("h2",{id:"support"},"Support"),(0,i.kt)("p",null,"Support for the Staking Dashboard is available at\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"the official Polkadot support website"),"."),(0,i.kt)("h2",{id:"network"},"Network"),(0,i.kt)("p",null,"Under Network, you can connect to either Polkadot, Kusama, or Westend through public RPC nodes or\nlight clients for a true Web3 experience. For more information about light clients, see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/build-light-clients#replacing-rpc-node-reliance-with-light-clients"},"this page"),"."))}k.isMDXComponent=!0},42069:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-managePoolCommission-46842e2d0927915c031faf72cb3e266a.png"},99289:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-nominate-7b882e41a42abeb928b78a6d6db4a6f0.png"},49083:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-overview-755861fe5937455f21a9360334fc26ea.png"},70359:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-permissionlessPoolClaims-20c461799ea9447fff83f2d2bd41b4f9.png"},86214:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-pools-b7327a1bbe115970fe683b0350c7bb6e.png"},72258:(e,t,a)=>{"use strict";a.d(t,{Z:()=>o});const o=a.p+"assets/images/dashboard-validators-a90166e01dcd1072c9a3be81a439afbb.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/ff6596ea.9803ce8e.js b/assets/js/ff6596ea.9803ce8e.js new file mode 100644 index 000000000000..be4090437421 --- /dev/null +++ b/assets/js/ff6596ea.9803ce8e.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[3842],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>p});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(9712),l=a(67425);function d(t,e,a){return m.apply(this,arguments)}function m(){return(m=(0,o.Z)((0,n.Z)().mark((function t(e,a,o){var i,l,d,m,h;return(0,n.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 d=new r.U(i),t.next=21,s.G.create({provider:d});case 21:m=t.sent,(h=a.split(".")).forEach((function(t){t in m&&(m=m[t])})),t.t1=h[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=m.toString(),t.abrupt("break",35);case 29:return t.next=31,m();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+h[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function h(t,e,a,n){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,n);break;case"precise":(0,l.Precise)(t,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(t,n);break;case"erasToDays":(0,l.ErasToDays)(t,n,a);break;case"percentage":(0,l.Percentage)(t,n);break;case"permillToPercent":(0,l.PermillToPercent)(t,n);break;case"arrayLength":(0,l.ArrayLength)(t,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(t){var e=t.network,a=t.path,r=t.defaultValue,s=t.filter,l=void 0===s?void 0:s,m=(0,i.useState)(""),p=m[0],u=m[1];return e=e.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?h(r.toString(),l,e,u):u(r.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;case"kusama-people":t="wss://kusama-people-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,o.Z)((0,n.Z)().mark((function t(){var o;return(0,n.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,d(e,a,u);case 2:if(void 0!==(o=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?h(o,l,e,u):u(o);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),p}},67425:t=>{var e="polkadot",a="kusama",n="statemine",o="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,r,s){var l=void 0;if(r===e||r===o)l=3;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),s((t=Number.isInteger(t/i[r].precision)?t/i[r].precision+" "+i[r].symbol:(t/i[r].precision).toFixed(l)+" "+i[r].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,r){var s=void 0;if(r===e||r===o)s=1;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((t/=s).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())}}},25398:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>h,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>m,toc:()=>p});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-nominator",title:"Nominator",sidebar_label:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",keyword:["nominate","nominator","stake","staking"],slug:"../learn-nominator"},d=void 0,m={unversionedId:"learn/learn-nominator",id:"learn/learn-nominator",title:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-nominator.md",sourceDirName:"learn",slug:"/learn-nominator",permalink:"/docs/learn-nominator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-nominator.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1719391505,formattedLastUpdatedAt:"Jun 26, 2024",frontMatter:{id:"learn-nominator",title:"Nominator",sidebar_label:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",keyword:["nominate","nominator","stake","staking"],slug:"../learn-nominator"},sidebar:"docs",previous:{title:"Collator",permalink:"/docs/learn-collator"},next:{title:"Validator",permalink:"/docs/learn-validator"}},h={},p=[{value:"Who are Nominators?",id:"who-are-nominators",level:2},{value:"Why Nominate?",id:"why-nominate",level:2},{value:"Setting-up Accounts",id:"setting-up-accounts",level:2},{value:"Stash & Staking Proxy",id:"stash--staking-proxy",level:3},{value:"Rewards Payout Account",id:"rewards-payout-account",level:3},{value:"Nominating with the Polkadot-JS UI",id:"nominating-with-the-polkadot-js-ui",level:2},{value:"Targets Page",id:"targets-page",level:3},{value:"Bags-list",id:"bags-list",level:3},{value:"Validator Stats",id:"validator-stats",level:3},{value:"Nominating with the Staking Dashboard",id:"nominating-with-the-staking-dashboard",level:2},{value:"Staking Election Stages",id:"staking-election-stages",level:2},{value:"The Election Solution Set",id:"the-election-solution-set",level:3},{value:"Receiving Rewards",id:"receiving-rewards",level:2},{value:"Good Nominator Practices",id:"good-nominator-practices",level:2},{value:"Required Minimum Stake",id:"required-minimum-stake",level:3},{value:"Active vs. Inactive Nomination",id:"active-vs-inactive-nomination",level:3},{value:"Minimum Active Nomination to Receive Staking Rewards",id:"minimum-active-nomination-to-receive-staking-rewards",level:3},{value:"Guides",id:"guides",level:2}],u={toc:p},c="wrapper";function k(t){var e=t.components,l=(0,o.Z)(t,s);return(0,i.kt)(c,(0,n.Z)({},u,l,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Start your staking journey or explore more information about staking on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Home Page"),". You can learn how staking works by\nreading ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"this dedicated page"),"."),(0,i.kt)("p",{parentName:"admonition"},"Discover the new ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/#/overview"},(0,i.kt)("strong",{parentName:"a"},"Staking Dashboard"))," that makes\nstaking much easier and check this\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started.\nYou can now ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"stake natively with just 1 DOT and earn staking rewards"),".\n")),(0,i.kt)("admonition",{title:"Stake through Nomination Pools",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum amount required to become an active nominator and earn rewards may change from era to\nera.\nIt is currently ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minimumActiveStake",defaultValue:2937e9,filter:"humanReadable",mdxType:"RPC"})),".\n","\nIf you have less DOT than the minimum active\nnomination and still want to participate in staking, you can join the nomination pools. You can now\nstake on Polkadot natively with just\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"})),"\n","\nin the nomination pools and earn staking rewards. For additional information, see\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".\nCheck the wiki doc on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools")," for more information.")),(0,i.kt)("p",null,"If you landed on this page, you decided to understand how you can be a good nominator. Note, this\npage is not for ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," members, although pool members might\ngain essential knowledge about how to choose nomination pools."),(0,i.kt)("p",null,"The information provided on this page is complementary to that on the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},(0,i.kt)("strong",{parentName:"a"},"Staking Page"))," and ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},(0,i.kt)("strong",{parentName:"a"},"Advanced Staking Page")),".\nMake sure you read those pages as well before nominating."),(0,i.kt)("h2",{id:"who-are-nominators"},"Who are Nominators?"),(0,i.kt)("p",null,"Nominators are one type of participant in the staking subsystem of\nPolkadot. They appoint their stake to the\nvalidators, the second type of participant. By appointing their stake, they can elect the active set\nof validators and share in the rewards that are paid out."),(0,i.kt)("p",null,"While the ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot"},"validators")," are active\nparticipants in the network that engage in the block production and finality mechanisms, nominators\ntake a slightly more passive role. Being a nominator does not require running a node of your own or\nworrying about online uptime. However, a good nominator performs due diligence on the validators\nthat they elect. When looking for validators to nominate, a nominator should pay attention to their\nown reward percentage for nominating a specific validator - as well as the risk that they bear of\nbeing ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashed")," if the validator gets slashed."),(0,i.kt)("h2",{id:"why-nominate"},"Why Nominate?"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"You become part of the Polkadot movement, a\ngroup of diverse professionals and enthusiasts around the world aspiring to build and foster the\nnext-gen Internet, Web3: a decentralized, privacy-focused, and trustless internet."),(0,i.kt)("li",{parentName:"ul"},"You are an essential piece of the puzzle, keeping\nPolkadot secure. The bonded balance can be\nused to vote in ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov")," and shape the future direction of\nPolkadot."),(0,i.kt)("li",{parentName:"ul"},"You will start to understand how Polkadot\nworks at a technical-level. When you feel comfortable with your nomination skills and knowledge,\nyou can open your ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools"},"nomination pool"),", help others secure the network\nand earn rewards, and build your reputation as a trusted nomination pool operator. If you like to\nbe more involved, the next step is to become a ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-validator"},"validator"),"."),(0,i.kt)("li",{parentName:"ul"},"By getting ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking"},"staking")," rewards you keep up with or (likely) stay ahead of\nPolkadot inflation.")),(0,i.kt)("p",null,"Nominators secure the Relay Chain by staking DOT\nand nominating validators. You may have an account with\nDOT and want to earn fresh\nDOT. You could do so as a validator, which\nrequires experience setting up a node and running and maintaining it 24/7."),(0,i.kt)("p",null,"On Polkadot you can also earn\nDOT by nominating one or more validators. Doing\nso makes you a nominator for the validator(s) you chose. Pick your validators carefully - if they do\nnot behave properly, they will get slashed, and you will lose\nDOT. However, if they follow the network rules,\nyou can share the staking rewards they generate."),(0,i.kt)("p",null,"While your DOT are staked for nominations, they\nare 'locked' (bonded). You can\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#stop-nominating"},"stop nominating at any time"),", but remember that the\naction is effective in the next era and does not automatically unbond your funds. Unbonding is a\nseparate action, and it takes effect after the unbonding period, which is\n28-day long on Polkadot. This is\ncalculated by taking the ",(0,i.kt)("strong",{parentName:"p"},"bonding duration")," (in eras), multiplying it by the ",(0,i.kt)("strong",{parentName:"p"},"length of a single\nera")," (in hours), and dividing by the ",(0,i.kt)("strong",{parentName:"p"},"hours in a day")," (24). Example:\n(28 \xd7 24 \xf7 24 = 28 days). A\nstaking lock will be visible on the Polkadot-JS UI during the unbonding period, and after it, the\nstaking lock can be unlocked, and the bonded funds become free balance you can transfer."),(0,i.kt)("admonition",{title:"Fast Unstaking",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you accidentally bonded your DOT or your\nbonded DOT never backed any active validator, you\ncan now unbond them immediately.")),(0,i.kt)("p",null,"If your bonded balance did not back any validators in the last\n28 days on Polkadot (when the feature goes live),\nyou are eligible to perform fast unstaking. The\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/#/overview"},"staking dashboard")," will automatically check if you\nqualify. For more information, visit the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169433-can-i-transfer-dot-without-unbonding-and-waiting-28-days-"},'"Fast Unstake" section in this support article'),"."),(0,i.kt)("h2",{id:"setting-up-accounts"},"Setting-up Accounts"),(0,i.kt)("h3",{id:"stash--staking-proxy"},"Stash & Staking Proxy"),(0,i.kt)("p",null,"Nominators are recommended to set up separate stash and staking proxy accounts. Explanation and the\nreasoning for generating distinct accounts for this purpose is elaborated in the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography#keys"},"keys section"),"."),(0,i.kt)("p",null,"You can generate your stash and staking proxy account via any of the recommended methods, which are\ndetailed on the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts#account-generation"},"account generation")," page. The first\nthing you need to do before becoming a nominator is to make sure you have a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking/#stash-account-and-staking-proxy"},(0,i.kt)("strong",{parentName:"a"},"stash account")),' where you can transfer\nfunds you want to use for staking. For these accounts, it is recommended to use a "cold wallet"\nsolution such as ',(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger")," or ",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadot-vault"},"Polkadot Vault"),"."),(0,i.kt)("p",null,"After setting up the stash account, it is recommended to have a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced/#staking-proxies"},(0,i.kt)("strong",{parentName:"a"},"staking proxy")),". Although you can be a nominator\nwith just a stash account, having a staking proxy is good practice for security reasons."),(0,i.kt)("p",null,"A staking proxy of the stash will be able to sign for all staking-related transactions as well. The\nstash will be fully isolated (except if the user decides to change the staking proxy of the stash or\nto attach different proxies to the stash)."),(0,i.kt)("h3",{id:"rewards-payout-account"},"Rewards Payout Account"),(0,i.kt)("p",null,"As a nominator, you will be asked to choose an account where rewards will be paid. You can select\none of the following options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"back to staking: rewards are compounded to the bonded amount."),(0,i.kt)("li",{parentName:"ul"},"to stash: rewards are sent to the stash account as a free balance."),(0,i.kt)("li",{parentName:"ul"},"to another account: rewards are sent to a user-defined account (not stash).")),(0,i.kt)("p",null,"Starting with runtime version v23 natively included in the client version\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/releases/tag/v0.8.23"},"0.8.23"),", payouts can go to any custom\naddress. If you'd like to redirect payments to an account that is neither the staking proxy nor the\nstash account, set one up. Note that setting an exchange address as the recipient of the staking\nrewards is extremely unsafe."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Being a nominator is made simpler by using the\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.cloud/#/overview"},(0,i.kt)("strong",{parentName:"a"},"Staking Dashboard"))," that will guide you step by step\nthrough specifying rewards destination and bonded amount, and nominating validators (more on this\nbelow). Note that staking proxies are not currently supported on the dashboard.")),(0,i.kt)("h2",{id:"nominating-with-the-polkadot-js-ui"},"Nominating with the Polkadot-JS UI"),(0,i.kt)("h3",{id:"targets-page"},"Targets Page"),(0,i.kt)("p",null,"There are many factors to consider when deciding which of your nominations. One helpful tool to\nchoose validators is the Staking ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"Targets")," table in\nthe Polkadot-JS UI. This allows sorting validators using various metrics. Below are the relevant\nmetrics shown as an example, followed by a brief description of each."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"validator"),(0,i.kt)("th",{parentName:"tr",align:null},"payout"),(0,i.kt)("th",{parentName:"tr",align:null},"nominators"),(0,i.kt)("th",{parentName:"tr",align:null},"comm."),(0,i.kt)("th",{parentName:"tr",align:null},"total stake"),(0,i.kt)("th",{parentName:"tr",align:null},"own stake"),(0,i.kt)("th",{parentName:"tr",align:null},"return"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"A"),(0,i.kt)("td",{parentName:"tr",align:null},"recently"),(0,i.kt)("td",{parentName:"tr",align:null},"1 (",(0,i.kt)("inlineCode",{parentName:"td"},"active"),") 4 (",(0,i.kt)("inlineCode",{parentName:"td"},"all"),")"),(0,i.kt)("td",{parentName:"tr",align:null},"3%"),(0,i.kt)("td",{parentName:"tr",align:null},"1.6 MDOT"),(0,i.kt)("td",{parentName:"tr",align:null},"8500 DOT"),(0,i.kt)("td",{parentName:"tr",align:null},"17.8%")))),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"payout"),": How recently the validator made its last reward payout to nominators.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"nominators"),": This column consists of two number values. The ",(0,i.kt)("strong",{parentName:"p"},"active")," count (left number) is\nthe number of nominators whose stake is baking the validator in the current era. In this case\nValidator A has one active nominator. The total or ",(0,i.kt)("strong",{parentName:"p"},"all")," count (right number) is the number of\nall nominators who nominated Validator A. This includes the active count and all the other\nnominators whose stake in the current era is baking other validators."),(0,i.kt)("p",{parentName:"li"},"Every nominator can select up to a maximum of 16\nvalidators, which contributes towards maximizing the probability of\nhaving the nominator\u2019s stake applied to the validators active set. Nominating too few validators\ncould result in the nominators not receiving their rewards when none of them make it to the active\nset or when those validators stop validating. The election algorithm attempts to maximize the\noverall network stake while minimizing the variance of the active stake across the validators. For\nadditional information on the election process, check out the research behind\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS"},"nominated proof-of-stake"),".")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"comm."),": Total commission kept by the validator (100% means the validator will keep all rewards\n, and thus nominators will not receive them). A validator's commission is the percentage of the\nvalidator reward taken by the validator before the rewards are split among the nominators. As a\nnominator, you may think that choosing validators with the lowest commission is best. However,\nvalidators must be able to run at break-even to continue operations sustainably. Independent\nvalidators that rely on the commission to cover their server costs help to keep the network\ndecentralized. Some validators, operated by central exchanges, etc., keep 100% of the commission\nto payout their staking service clients and therefore do not provide any rewards to external\nnominators. The commission is just one piece of the puzzle you should consider when picking\nnominating validators.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"total stake"),": The total amount of DOT tokens\nstaked by nominators and the validator (i.e. own stake, see below).")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"own stake"),': The amount of DOT tokens the\nvalidator has put up as a stake. A higher own stake can be considered as having more "skin in the\ngame". This can imply increased trustworthiness. However, a validator not having a large amount of\n"own stake" is not automatically untrustworthy, as the validator could nominate from a different\naddress.')),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"return"),": Average annual yield paid out to nominators (i.e. number of rewards divided by the\nnumber of bonded tokens). Note that nominating those with a higher yield may not guarantee similar\nfuture performance."))),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Staking Returns",src:a(53325).Z,width:"2169",height:"509"})),(0,i.kt)("p",null,"On the Targets page, you can use different filters to select validators with specific traits (where\na trait is a combination of the metrics above). Available filters are:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"one validator per operator"),": Do not show groups of validators run by a single operator. It\nshows small operators only who will likely have a higher commission and higher self-stake.\nNominating only small operators might not always guarantee staking rewards, but it helps to keep\nthe network more resilient to attacks.")),(0,i.kt)("admonition",{title:"Validator vs Operator",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"A validator is the node, the physical equipment with installed software that allows to produce new\nblocks and earn rewards. An operator is the entity responsible for setting up, running and\nmaintaining the node. An operator can have multiple validators under different sub-identities. For\nexample, ",(0,i.kt)("inlineCode",{parentName:"p"},"ZUG CAPITAL/07")," is one of the numerous validators belonging to the operator Zug Capital.")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"comm. < 20%"),": Do not show any validators with a commission of 20% or higher."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"recent payouts"),": Only show validators that have recently caused a\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced"},"payout to be issued"),". Note that anyone can cause a payout to occur; it\ndoes not have to be the operator of a validator."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"currently elected"),": Only show validators in the active set (i.e., they have been elected to\nproduce blocks in the current era)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"with an identity"),": Only show validators that have set an ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-identity"},"identity"),". Note\nthat this identity does not have to be verified by a registrar for the validator to appear in the\nlist.")),(0,i.kt)("admonition",{title:"Single Operators with Multiple Validators",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Recall that ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashing"),' is an additive function; the more validators\nequivocating in a given session, the harsher the penalties. Since validators that are controlled by\na single operator are more at risk of a "synchronized" failure, nominating them implies a greater\nrisk of having a large slash of your nominated funds. Generally, it is safer to nominate validators\nwhose behavior is independent of others in many ways (different hardware, geographic location,\nowner, etc.).')),(0,i.kt)("h3",{id:"bags-list"},"Bags-list"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"On Polkadot and Kusama, the instance of the pallet\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_bags_list/"},"Bags-List")," is named as\n",(0,i.kt)("inlineCode",{parentName:"p"},"voterList"),".")),(0,i.kt)("p",null,"Nominating accounts are placed in a semi-sorted list called bags-list. This sorting functionality is\nextremely important for the long-term improvements of the staking/election system. Bags-list allows\nup to\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.maxNominatorsCount",defaultValue:5e4,mdxType:"RPC"}),"\n","\nnominators to set their intention to nominate, of which the stake of the top\n22500 nominators is considered for\n",(0,i.kt)("a",{parentName:"p",href:"#staking-election-stages"},"electing set")," that eventually determines the active validators."),(0,i.kt)("p",null,"The nominator accounts in a bag are sorted based on their insertion order, not by their nomination\nstake. The ",(0,i.kt)("inlineCode",{parentName:"p"},"voterList.putInFrontOf")," extrinsic can be issued to move up in the bag, which might be\nvery useful for the accounts in the last bag eligible for receiving staking rewards. Balance changes\ndue to staking rewards or slashing do not automatically rebag the account. Whenever applicable,\nPolkadot JS Apps UI prompts the nominator account to rebag or move up by calling the\n",(0,i.kt)("inlineCode",{parentName:"p"},"voterList.rebag")," extrinsic."),(0,i.kt)("p",null,"For guidelines about how to rebag or move your account within a bag, see the followings:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'The "Bags List" Section on\n',(0,i.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000181018-i-have-more-than-the-minimum-bonded-but-i-m-not-getting-rewards"},"this Support Page"),"."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},"Bags List Section")," in Advanced Staking Concepts."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/hIIZRJLrBZA"},"dedicated technical explainer video"),".")),(0,i.kt)("h3",{id:"validator-stats"},"Validator Stats"),(0,i.kt)("p",null,"Nominators can query ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/query/"},"validator histories")," to see\nstatistics such as era points, elected stake, rewards and slashes, and commission. It is good\npractice to do comprehensive research on validator candidates. This could include (but should not be\nlimited to) checking the validators' ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-identity"},"identity")," (if they have set one) and going\nover the validators' websites to see who they are, what kind of infrastructure setup they are using,\nreputation, the vision behind the validator, and more."),(0,i.kt)("p",null,"Any problematic behavior must be taken seriously. An example of problematic behavior will be if a\nvalidator is regularly offline. In this case, nominators will get fewer rewards."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Validator Stats",src:a(95520).Z,width:"1900",height:"1204"})),(0,i.kt)("h2",{id:"nominating-with-the-staking-dashboard"},"Nominating with the Staking Dashboard"),(0,i.kt)("p",null,"If you are a beginner, please watch the video below for detailed instructions."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=F59N3YKYCRs"},(0,i.kt)("img",{parentName:"a",src:"https://img.youtube.com/vi/F59N3YKYCRs/0.jpg",alt:"Staking Tutorial"}))),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"/docs/staking-dashboard"},"Polkadot Staking Dashboard")," allows to choose pre-selected\nlists of validators based on user preference, or to manually select validators similarly as in the\nPolkadot-JS UI."),(0,i.kt)("p",null,"Pre-selected choices are:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Optimal Selection: Selects a mix of majority active and inactive validators."),(0,i.kt)("li",{parentName:"ul"},"Active Low Commission: Gets a set of active validators with low commission."),(0,i.kt)("li",{parentName:"ul"},"From Favorites: Gets a set of your favorite validators.")),(0,i.kt)("h2",{id:"staking-election-stages"},"Staking Election Stages"),(0,i.kt)("p",null,'The staking election system has three stages for both validators and nominators, namely "intention",\n"electable/electing", and "active".'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"intention to nominate:"),' an account that has stated the intention to nominate; also called\nsimply a "nominator".'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"electing nominator:")," a nominator who is selected to be a part of the input to the\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-phragmen"},"NPoS election algorithm"),". This selection is based on stake and is made using\nthe ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},"bags-list"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"active nominator:")," a nominator who came out of the NPoS election algorithm backing an active\nvalidator. When slashing occurs, all the active nominators backing the validator get slashed.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominator Election",src:a(55404).Z,width:"612",height:"430"})),(0,i.kt)("h3",{id:"the-election-solution-set"},"The Election Solution Set"),(0,i.kt)("p",null,'Determining which validators are in the active set and which nominators are nominating them creates\na very large graph mapping nominators to their respective validators. This "solution set" is\ncomputed off-chain and submitted to the chain, which means it must fit in a single block. If there\nare a large number of nominators, this means that some nominators must be eliminated. Currently,\nnominators are sorted by the amount of DOT staked, and those with more DOT are prioritized. This\nmeans that you may not receive rewards if you are staking with a small amount of DOT. This minimal\namount is dynamic based on the number of validators, nominators, amount nominated, and other\nfactors.'),(0,i.kt)("h2",{id:"receiving-rewards"},"Receiving Rewards"),(0,i.kt)("p",null,"As long as you have nominated more than one validator candidate, at least one of them got elected,\nand you are nominating with enough stake to get into the solution set, your bonded stake will be\nfully distributed to one or more validators. That being said, you may not receive rewards if you\nnominated very few validator candidates and no one got elected, or your stake is small, and you are\nnot part of the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#bags-list"},"top 22,500 nominators"),", or the validator you\nare nominating has 100% commission. It is generally wise to choose as many trustworthy validators as\nyou can (up to 16) to reduce the risk of\nnone of your nominated validators being elected."),(0,i.kt)("admonition",{title:"Not receiving Staking Rewards?",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"To explore the possible reasons for not receiving staking rewards, check out the followings:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"The\n",(0,i.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000181959-staking-faq-s"},"Staking FAQ"),"\non the Support Pages."),(0,i.kt)("li",{parentName:"ul"},"The\n",(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/Polkadot/comments/10kurje/why_am_i_not_receiving_staking_rewards/"},'"Why am I not receiving staking rewards?"'),"\nReddit article."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking#why-am-i-not-receiving-rewards"},'"Why am I not receiving staking rewards?"'),"\nsection on the Staking Page."))),(0,i.kt)("p",null,"Rewards are ",(0,i.kt)("em",{parentName:"p"},"lazy")," - somebody must trigger a payout for a validator for rewards to go to all of the\nvalidator's nominators. Any account can do this, although validator operators often do this as a\nservice to their nominators. See the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"Simple Payouts")," for more\ninformation and instructions for claiming rewards."),(0,i.kt)("admonition",{title:"Explainer videos on Nominating",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"These concepts have been further explained in the following videos:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=weG_uzdSs1E&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=4"},"Why Nominate on Polkadot & Kusama")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=K-a4CgVchvU&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=9"},"What to Consider when Nominating Validators on Polkadot and Kusama")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/FCXC0CDhyS4"},"Nominating/Staking on Polkadot and Kusama")))),(0,i.kt)("h2",{id:"good-nominator-practices"},"Good Nominator Practices"),(0,i.kt)("h3",{id:"required-minimum-stake"},"Required Minimum Stake"),(0,i.kt)("p",null,"Due to the way the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragmen algorithm")," generates the solution set and due to the\nfact that the solution set must fit in a single block, a minimum number of DOT will be required to\nnominate with to receive staking rewards can change between the eras."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-intention-threshold:")," minimum stake to declare the intention to nominate. This parameter\ncan be updated via on-chain governance, and the most recent and up-to-date version can be found on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"chain state")," (select ",(0,i.kt)("strong",{parentName:"p"},"state query > staking >\nminimumNominatorBond"),")")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-electing:")," minimum stake among the electing nominators. Since this is almost always the\nsame as \u201cmin-active\u201d, it might not be reported.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-active:")," minimum stake among the active nominators. If your stake falls below this dynamic\nthreshold in a given era, you will not receive staking rewards for that era."))),(0,i.kt)("p",null,"Thus, for ",(0,i.kt)("strong",{parentName:"p"},"nominator counters"),", we have:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"count of nominator intentions and max possible nominator intentions\n(unlimited)\n",""),(0,i.kt)("li",{parentName:"ul"},"count of electing nominators, and maximum possible electing nominators\n(22500) "),(0,i.kt)("li",{parentName:"ul"},"count of active nominators and maximum possible active nominators\n(22500) ")),(0,i.kt)("h3",{id:"active-vs-inactive-nomination"},"Active vs. Inactive Nomination"),(0,i.kt)("p",null,"When you go to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Account actions")," under staking\npage, you should see your bonded accounts and nomination status. If not, you can follow\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#nominate-using-polkadot-js"},"this")," guide to configure it first. Your\nnominations will be effective in the next era; eras are roughly\n24 hours on Polkadot."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominations",src:a(44277).Z,width:"2878",height:"766"})),(0,i.kt)("p",null,'Suppose you have nominated five validator candidates, and three out of five were elected to the\nactive validator set; then you should see two of your nominations as "waiting", and most likely one\nas "active" and the rest as "inactive". Active or inactive nomination means your nominated\nvalidators have been elected to be in the validator set, whereas waiting means they did not get\nelected. Generally, you will only have a single validator have an active nomination, which means\nthat you are directly supporting it with your stake this era and thus potentially receiving staking\nrewards. Inactive nominators were validators elected for this era but which you are not actively\nsupporting. Every era, a new election will take place, and you may be assigned a different active\nnomination from the validators you selected.'),(0,i.kt)("p",null,"If you are committing a very large stake, you may have more than one active nomination. However, the\nelection algorithm attempts to minimize this situation, and it should not occur often, so you should\nalmost always see only a single active nomination per era. See the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen#optimizations"},"section on Phragm\xe9n optimization")," for more details."),(0,i.kt)("h3",{id:"minimum-active-nomination-to-receive-staking-rewards"},"Minimum Active Nomination to Receive Staking Rewards"),(0,i.kt)("admonition",{title:"Minimum DOT required to earn staking rewards",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum DOT required to submit intent to nominate is\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:1e12,filter:"humanReadable",mdxType:"RPC"})),"\n, but the minimum active nomination required to earn staking rewards is dynamic and may be much\nhigher, which can be viewed on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"Polkadot JS Apps > Network > Staking > Targets page"),".")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Minimum Active Nomination",src:a(95670).Z,width:"1436",height:"166"})),(0,i.kt)("h2",{id:"guides"},"Guides"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/learn-guides-nominator#nominate-a-validator"},"Be a Nominator (Polkadot)")," - Guide on\nnominating on the Kusama canary network."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/learn-guides-nominator#stop-nominating"},"Stop Being a Nominator (all networks)")," - Guide on\nstopping nominations and withdrawing tokens.")))}k.isMDXComponent=!0},53325:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/nominators_target-d8652ac89f3cbb16528cd68808a32cf0.png"},95670:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/min-active-nomination-bfbe67c2714eb5027c6a4f45608c9bc2.png"},55404:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/nominator-election-ae25b5db36fa18b56fa58c5370127dd4.png"},44277:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/polkadotjs_nominator_account-e0f5d58cd9cce279d6f462cde9f706f4.png"},95520:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/validator_stats-57ec40656d6829e2ef791550116824d4.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/ff6596ea.fc33edf9.js b/assets/js/ff6596ea.fc33edf9.js deleted file mode 100644 index 4337a6eeb366..000000000000 --- a/assets/js/ff6596ea.fc33edf9.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[3842],{47940:(t,e,a)=>{"use strict";a.d(e,{Z:()=>p});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(9712),l=a(67425);function d(t,e,a){return m.apply(this,arguments)}function m(){return(m=(0,o.Z)((0,n.Z)().mark((function t(e,a,o){var i,l,d,m,h;return(0,n.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 d=new r.U(i),t.next=21,s.G.create({provider:d});case 21:m=t.sent,(h=a.split(".")).forEach((function(t){t in m&&(m=m[t])})),t.t1=h[0],t.next="consts"===t.t1?27:"query"===t.t1?29:34;break;case 27:return l=m.toString(),t.abrupt("break",35);case 29:return t.next=31,m();case 31:return l=(l=t.sent).toString(),t.abrupt("break",35);case 34:console.log("Unknown path prefix ("+h[0]+") in "+a);case 35:return t.abrupt("return",l);case 36:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function h(t,e,a,n){switch(e){case"humanReadable":(0,l.HumanReadable)(t,a,n);break;case"precise":(0,l.Precise)(t,a,n);break;case"blocksToDays":(0,l.BlocksToDays)(t,n);break;case"erasToDays":(0,l.ErasToDays)(t,n,a);break;case"percentage":(0,l.Percentage)(t,n);break;case"permillToPercent":(0,l.PermillToPercent)(t,n);break;case"arrayLength":(0,l.ArrayLength)(t,n);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(t){var e=t.network,a=t.path,r=t.defaultValue,s=t.filter,l=void 0===s?void 0:s,m=(0,i.useState)(""),p=m[0],u=m[1];return e=e.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?h(r.toString(),l,e,u):u(r.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;case"kusama-people":t="wss://kusama-people-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,o.Z)((0,n.Z)().mark((function t(){var o;return(0,n.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,d(e,a,u);case 2:if(void 0!==(o=t.sent)){t.next=7;break}return t.abrupt("return");case 7:void 0!==l?h(o,l,e,u):u(o);case 8:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),p}},67425:t=>{var e="polkadot",a="kusama",n="statemine",o="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,r,s){var l=void 0;if(r===e||r===o)l=3;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");l=6}t=parseFloat(t),s((t=Number.isInteger(t/i[r].precision)?t/i[r].precision+" "+i[r].symbol:(t/i[r].precision).toFixed(l)+" "+i[r].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,r){var s=void 0;if(r===e||r===o)s=1;else{if(r!==a&&r!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");s=4}i((t/=s).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())}}},25398:(t,e,a)=>{"use strict";a.r(e),a.d(e,{assets:()=>h,contentTitle:()=>d,default:()=>k,frontMatter:()=>l,metadata:()=>m,toc:()=>p});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"learn-nominator",title:"Nominator",sidebar_label:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",keyword:["nominate","nominator","stake","staking"],slug:"../learn-nominator"},d=void 0,m={unversionedId:"learn/learn-nominator",id:"learn/learn-nominator",title:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-nominator.md",sourceDirName:"learn",slug:"/learn-nominator",permalink:"/docs/learn-nominator",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-nominator.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1718028821,formattedLastUpdatedAt:"Jun 10, 2024",frontMatter:{id:"learn-nominator",title:"Nominator",sidebar_label:"Nominator",description:"Role of Nominators in the Polkadot Ecosystem.",keyword:["nominate","nominator","stake","staking"],slug:"../learn-nominator"},sidebar:"docs",previous:{title:"Collator",permalink:"/docs/learn-collator"},next:{title:"Validator",permalink:"/docs/learn-validator"}},h={},p=[{value:"Who are Nominators?",id:"who-are-nominators",level:2},{value:"Why Nominate?",id:"why-nominate",level:2},{value:"Setting-up Accounts",id:"setting-up-accounts",level:2},{value:"Stash & Staking Proxy",id:"stash--staking-proxy",level:3},{value:"Rewards Payout Account",id:"rewards-payout-account",level:3},{value:"Nominating with the Polkadot-JS UI",id:"nominating-with-the-polkadot-js-ui",level:2},{value:"Targets Page",id:"targets-page",level:3},{value:"Bags-list",id:"bags-list",level:3},{value:"Validator Stats",id:"validator-stats",level:3},{value:"Nominating with the Staking Dashboard",id:"nominating-with-the-staking-dashboard",level:2},{value:"Staking Election Stages",id:"staking-election-stages",level:2},{value:"The Election Solution Set",id:"the-election-solution-set",level:3},{value:"Receiving Rewards",id:"receiving-rewards",level:2},{value:"Good Nominator Practices",id:"good-nominator-practices",level:2},{value:"Required Minimum Stake",id:"required-minimum-stake",level:3},{value:"Active vs. Inactive Nomination",id:"active-vs-inactive-nomination",level:3},{value:"Minimum Active Nomination to Receive Staking Rewards",id:"minimum-active-nomination-to-receive-staking-rewards",level:3},{value:"Guides",id:"guides",level:2}],u={toc:p},c="wrapper";function k(t){var e=t.components,l=(0,o.Z)(t,s);return(0,i.kt)(c,(0,n.Z)({},u,l,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"New to Staking?",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Start your staking journey or explore more information about staking on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/staking/"},"Polkadot's Home Page"),". You can learn how staking works by\nreading ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"this dedicated page"),"."),(0,i.kt)("p",{parentName:"admonition"},"Discover the new ",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},(0,i.kt)("strong",{parentName:"a"},"Staking Dashboard"))," that makes\nstaking much easier and check this\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000182104"},"extensive article list")," to\nhelp you get started.\nYou can now ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"stake natively with just 1 DOT and earn staking rewards"),".\n")),(0,i.kt)("admonition",{title:"Stake through Nomination Pools",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum amount required to become an active nominator and earn rewards may change from era to\nera.\nIt is currently ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minimumActiveStake",defaultValue:2937e9,filter:"humanReadable",mdxType:"RPC"})),".\n","\nIf you have less DOT than the minimum active\nnomination and still want to participate in staking, you can join the nomination pools. You can now\nstake on Polkadot natively with just\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"})),"\n","\nin the nomination pools and earn staking rewards. For additional information, see\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".\nCheck the wiki doc on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools")," for more information.")),(0,i.kt)("p",null,"If you landed on this page, you decided to understand how you can be a good nominator. Note, this\npage is not for ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," members, although pool members might\ngain essential knowledge about how to choose nomination pools."),(0,i.kt)("p",null,"The information provided on this page is complementary to that on the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking"},(0,i.kt)("strong",{parentName:"a"},"Staking Page"))," and ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},(0,i.kt)("strong",{parentName:"a"},"Advanced Staking Page")),".\nMake sure you read those pages as well before nominating."),(0,i.kt)("h2",{id:"who-are-nominators"},"Who are Nominators?"),(0,i.kt)("p",null,"Nominators are one type of participant in the staking subsystem of\nPolkadot. They appoint their stake to the\nvalidators, the second type of participant. By appointing their stake, they can elect the active set\nof validators and share in the rewards that are paid out."),(0,i.kt)("p",null,"While the ",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot"},"validators")," are active\nparticipants in the network that engage in the block production and finality mechanisms, nominators\ntake a slightly more passive role. Being a nominator does not require running a node of your own or\nworrying about online uptime. However, a good nominator performs due diligence on the validators\nthat they elect. When looking for validators to nominate, a nominator should pay attention to their\nown reward percentage for nominating a specific validator - as well as the risk that they bear of\nbeing ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashed")," if the validator gets slashed."),(0,i.kt)("h2",{id:"why-nominate"},"Why Nominate?"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"You become part of the Polkadot movement, a\ngroup of diverse professionals and enthusiasts around the world aspiring to build and foster the\nnext-gen Internet, Web3: a decentralized, privacy-focused, and trustless internet."),(0,i.kt)("li",{parentName:"ul"},"You are an essential piece of the puzzle, keeping\nPolkadot secure. The bonded balance can be\nused to vote in ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov"},"Polkadot OpenGov")," and shape the future direction of\nPolkadot."),(0,i.kt)("li",{parentName:"ul"},"You will start to understand how Polkadot\nworks at a technical-level. When you feel comfortable with your nomination skills and knowledge,\nyou can open your ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-nomination-pools"},"nomination pool"),", help others secure the network\nand earn rewards, and build your reputation as a trusted nomination pool operator. If you like to\nbe more involved, the next step is to become a ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-validator"},"validator"),"."),(0,i.kt)("li",{parentName:"ul"},"By getting ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking"},"staking")," rewards you keep up with or (likely) stay ahead of\nPolkadot inflation.")),(0,i.kt)("p",null,"Nominators secure the Relay Chain by staking DOT\nand nominating validators. You may have an account with\nDOT and want to earn fresh\nDOT. You could do so as a validator, which\nrequires experience setting up a node and running and maintaining it 24/7."),(0,i.kt)("p",null,"On Polkadot you can also earn\nDOT by nominating one or more validators. Doing\nso makes you a nominator for the validator(s) you chose. Pick your validators carefully - if they do\nnot behave properly, they will get slashed, and you will lose\nDOT. However, if they follow the network rules,\nyou can share the staking rewards they generate."),(0,i.kt)("p",null,"While your DOT are staked for nominations, they\nare 'locked' (bonded). You can\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#stop-nominating"},"stop nominating at any time"),", but remember that the\naction is effective in the next era and does not automatically unbond your funds. Unbonding is a\nseparate action, and it takes effect after the unbonding period, which is\n28-day long on Polkadot. This is\ncalculated by taking the ",(0,i.kt)("strong",{parentName:"p"},"bonding duration")," (in eras), multiplying it by the ",(0,i.kt)("strong",{parentName:"p"},"length of a single\nera")," (in hours), and dividing by the ",(0,i.kt)("strong",{parentName:"p"},"hours in a day")," (24). Example:\n(28 \xd7 24 \xf7 24 = 28 days). A\nstaking lock will be visible on the Polkadot-JS UI during the unbonding period, and after it, the\nstaking lock can be unlocked, and the bonded funds become free balance you can transfer."),(0,i.kt)("admonition",{title:"Fast Unstaking",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"If you accidentally bonded your DOT or your\nbonded DOT never backed any active validator, you\ncan now unbond them immediately.")),(0,i.kt)("p",null,"If your bonded balance did not back any validators in the last\n28 days on Polkadot (when the feature goes live),\nyou are eligible to perform fast unstaking. The\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"staking dashboard")," will automatically check if you\nqualify. For more information, visit the\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000169433-can-i-transfer-dot-without-unbonding-and-waiting-28-days-"},'"Fast Unstake" section in this support article'),"."),(0,i.kt)("h2",{id:"setting-up-accounts"},"Setting-up Accounts"),(0,i.kt)("h3",{id:"stash--staking-proxy"},"Stash & Staking Proxy"),(0,i.kt)("p",null,"Nominators are recommended to set up separate stash and staking proxy accounts. Explanation and the\nreasoning for generating distinct accounts for this purpose is elaborated in the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography#keys"},"keys section"),"."),(0,i.kt)("p",null,"You can generate your stash and staking proxy account via any of the recommended methods, which are\ndetailed on the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts#account-generation"},"account generation")," page. The first\nthing you need to do before becoming a nominator is to make sure you have a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking/#stash-account-and-staking-proxy"},(0,i.kt)("strong",{parentName:"a"},"stash account")),' where you can transfer\nfunds you want to use for staking. For these accounts, it is recommended to use a "cold wallet"\nsolution such as ',(0,i.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger")," or ",(0,i.kt)("a",{parentName:"p",href:"/docs/polkadot-vault"},"Polkadot Vault"),"."),(0,i.kt)("p",null,"After setting up the stash account, it is recommended to have a\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced/#staking-proxies"},(0,i.kt)("strong",{parentName:"a"},"staking proxy")),". Although you can be a nominator\nwith just a stash account, having a staking proxy is good practice for security reasons."),(0,i.kt)("p",null,"A staking proxy of the stash will be able to sign for all staking-related transactions as well. The\nstash will be fully isolated (except if the user decides to change the staking proxy of the stash or\nto attach different proxies to the stash)."),(0,i.kt)("h3",{id:"rewards-payout-account"},"Rewards Payout Account"),(0,i.kt)("p",null,"As a nominator, you will be asked to choose an account where rewards will be paid. You can select\none of the following options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"back to staking: rewards are compounded to the bonded amount."),(0,i.kt)("li",{parentName:"ul"},"to stash: rewards are sent to the stash account as a free balance."),(0,i.kt)("li",{parentName:"ul"},"to another account: rewards are sent to a user-defined account (not stash).")),(0,i.kt)("p",null,"Starting with runtime version v23 natively included in the client version\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/releases/tag/v0.8.23"},"0.8.23"),", payouts can go to any custom\naddress. If you'd like to redirect payments to an account that is neither the staking proxy nor the\nstash account, set one up. Note that setting an exchange address as the recipient of the staking\nrewards is extremely unsafe."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Being a nominator is made simpler by using the\n",(0,i.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},(0,i.kt)("strong",{parentName:"a"},"Staking Dashboard"))," that will guide you step by\nstep through specifying rewards destination and bonded amount, and nominating validators (more on\nthis below). Note that staking proxies are not currently supported on the dashboard.")),(0,i.kt)("h2",{id:"nominating-with-the-polkadot-js-ui"},"Nominating with the Polkadot-JS UI"),(0,i.kt)("h3",{id:"targets-page"},"Targets Page"),(0,i.kt)("p",null,"There are many factors to consider when deciding which of your nominations. One helpful tool to\nchoose validators is the Staking ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"Targets")," table in\nthe Polkadot-JS UI. This allows sorting validators using various metrics. Below are the relevant\nmetrics shown as an example, followed by a brief description of each."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"validator"),(0,i.kt)("th",{parentName:"tr",align:null},"payout"),(0,i.kt)("th",{parentName:"tr",align:null},"nominators"),(0,i.kt)("th",{parentName:"tr",align:null},"comm."),(0,i.kt)("th",{parentName:"tr",align:null},"total stake"),(0,i.kt)("th",{parentName:"tr",align:null},"own stake"),(0,i.kt)("th",{parentName:"tr",align:null},"return"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"A"),(0,i.kt)("td",{parentName:"tr",align:null},"recently"),(0,i.kt)("td",{parentName:"tr",align:null},"1 (",(0,i.kt)("inlineCode",{parentName:"td"},"active"),") 4 (",(0,i.kt)("inlineCode",{parentName:"td"},"all"),")"),(0,i.kt)("td",{parentName:"tr",align:null},"3%"),(0,i.kt)("td",{parentName:"tr",align:null},"1.6 MDOT"),(0,i.kt)("td",{parentName:"tr",align:null},"8500 DOT"),(0,i.kt)("td",{parentName:"tr",align:null},"17.8%")))),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"payout"),": How recently the validator made its last reward payout to nominators.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"nominators"),": This column consists of two number values. The ",(0,i.kt)("strong",{parentName:"p"},"active")," count (left number) is\nthe number of nominators whose stake is baking the validator in the current era. In this case\nValidator A has one active nominator. The total or ",(0,i.kt)("strong",{parentName:"p"},"all")," count (right number) is the number of\nall nominators who nominated Validator A. This includes the active count and all the other\nnominators whose stake in the current era is baking other validators."),(0,i.kt)("p",{parentName:"li"},"Every nominator can select up to a maximum of 16\nvalidators, which contributes towards maximizing the probability of\nhaving the nominator\u2019s stake applied to the validators active set. Nominating too few validators\ncould result in the nominators not receiving their rewards when none of them make it to the active\nset or when those validators stop validating. The election algorithm attempts to maximize the\noverall network stake while minimizing the variance of the active stake across the validators. For\nadditional information on the election process, check out the research behind\n",(0,i.kt)("a",{parentName:"p",href:"https://research.web3.foundation/Polkadot/protocols/NPoS"},"nominated proof-of-stake"),".")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"comm."),": Total commission kept by the validator (100% means the validator will keep all rewards\n, and thus nominators will not receive them). A validator's commission is the percentage of the\nvalidator reward taken by the validator before the rewards are split among the nominators. As a\nnominator, you may think that choosing validators with the lowest commission is best. However,\nvalidators must be able to run at break-even to continue operations sustainably. Independent\nvalidators that rely on the commission to cover their server costs help to keep the network\ndecentralized. Some validators, operated by central exchanges, etc., keep 100% of the commission\nto payout their staking service clients and therefore do not provide any rewards to external\nnominators. The commission is just one piece of the puzzle you should consider when picking\nnominating validators.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"total stake"),": The total amount of DOT tokens\nstaked by nominators and the validator (i.e. own stake, see below).")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"own stake"),': The amount of DOT tokens the\nvalidator has put up as a stake. A higher own stake can be considered as having more "skin in the\ngame". This can imply increased trustworthiness. However, a validator not having a large amount of\n"own stake" is not automatically untrustworthy, as the validator could nominate from a different\naddress.')),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"return"),": Average annual yield paid out to nominators (i.e. number of rewards divided by the\nnumber of bonded tokens). Note that nominating those with a higher yield may not guarantee similar\nfuture performance."))),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Staking Returns",src:a(53325).Z,width:"2169",height:"509"})),(0,i.kt)("p",null,"On the Targets page, you can use different filters to select validators with specific traits (where\na trait is a combination of the metrics above). Available filters are:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"one validator per operator"),": Do not show groups of validators run by a single operator. It\nshows small operators only who will likely have a higher commission and higher self-stake.\nNominating only small operators might not always guarantee staking rewards, but it helps to keep\nthe network more resilient to attacks.")),(0,i.kt)("admonition",{title:"Validator vs Operator",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"A validator is the node, the physical equipment with installed software that allows to produce new\nblocks and earn rewards. An operator is the entity responsible for setting up, running and\nmaintaining the node. An operator can have multiple validators under different sub-identities. For\nexample, ",(0,i.kt)("inlineCode",{parentName:"p"},"ZUG CAPITAL/07")," is one of the numerous validators belonging to the operator Zug Capital.")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"comm. < 20%"),": Do not show any validators with a commission of 20% or higher."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"recent payouts"),": Only show validators that have recently caused a\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced"},"payout to be issued"),". Note that anyone can cause a payout to occur; it\ndoes not have to be the operator of a validator."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"currently elected"),": Only show validators in the active set (i.e., they have been elected to\nproduce blocks in the current era)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"with an identity"),": Only show validators that have set an ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-identity"},"identity"),". Note\nthat this identity does not have to be verified by a registrar for the validator to appear in the\nlist.")),(0,i.kt)("admonition",{title:"Single Operators with Multiple Validators",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Recall that ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-offenses"},"slashing"),' is an additive function; the more validators\nequivocating in a given session, the harsher the penalties. Since validators that are controlled by\na single operator are more at risk of a "synchronized" failure, nominating them implies a greater\nrisk of having a large slash of your nominated funds. Generally, it is safer to nominate validators\nwhose behavior is independent of others in many ways (different hardware, geographic location,\nowner, etc.).')),(0,i.kt)("h3",{id:"bags-list"},"Bags-list"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"On Polkadot and Kusama, the instance of the pallet\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_bags_list/"},"Bags-List")," is named as\n",(0,i.kt)("inlineCode",{parentName:"p"},"voterList"),".")),(0,i.kt)("p",null,"Nominating accounts are placed in a semi-sorted list called bags-list. This sorting functionality is\nextremely important for the long-term improvements of the staking/election system. Bags-list allows\nup to\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.maxNominatorsCount",defaultValue:5e4,mdxType:"RPC"}),"\n","\nnominators to set their intention to nominate, of which the stake of the top\n22500 nominators is considered for\n",(0,i.kt)("a",{parentName:"p",href:"#staking-election-stages"},"electing set")," that eventually determines the active validators."),(0,i.kt)("p",null,"The nominator accounts in a bag are sorted based on their insertion order, not by their nomination\nstake. The ",(0,i.kt)("inlineCode",{parentName:"p"},"voterList.putInFrontOf")," extrinsic can be issued to move up in the bag, which might be\nvery useful for the accounts in the last bag eligible for receiving staking rewards. Balance changes\ndue to staking rewards or slashing do not automatically rebag the account. Whenever applicable,\nPolkadot JS Apps UI prompts the nominator account to rebag or move up by calling the\n",(0,i.kt)("inlineCode",{parentName:"p"},"voterList.rebag")," extrinsic."),(0,i.kt)("p",null,"For guidelines about how to rebag or move your account within a bag, see the followings:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'The "Bags List" Section on\n',(0,i.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000181018-i-have-more-than-the-minimum-bonded-but-i-m-not-getting-rewards"},"this Support Page"),"."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},"Bags List Section")," in Advanced Staking Concepts."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/hIIZRJLrBZA"},"dedicated technical explainer video"),".")),(0,i.kt)("h3",{id:"validator-stats"},"Validator Stats"),(0,i.kt)("p",null,"Nominators can query ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/query/"},"validator histories")," to see\nstatistics such as era points, elected stake, rewards and slashes, and commission. It is good\npractice to do comprehensive research on validator candidates. This could include (but should not be\nlimited to) checking the validators' ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-identity"},"identity")," (if they have set one) and going\nover the validators' websites to see who they are, what kind of infrastructure setup they are using,\nreputation, the vision behind the validator, and more."),(0,i.kt)("p",null,"Any problematic behavior must be taken seriously. An example of problematic behavior will be if a\nvalidator is regularly offline. In this case, nominators will get fewer rewards."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Validator Stats",src:a(95520).Z,width:"1900",height:"1204"})),(0,i.kt)("h2",{id:"nominating-with-the-staking-dashboard"},"Nominating with the Staking Dashboard"),(0,i.kt)("p",null,"If you are a beginner, please watch the video below for detailed instructions."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=F59N3YKYCRs"},(0,i.kt)("img",{parentName:"a",src:"https://img.youtube.com/vi/F59N3YKYCRs/0.jpg",alt:"Staking Tutorial"}))),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"/docs/staking-dashboard"},"Polkadot Staking Dashboard")," allows to choose pre-selected\nlists of validators based on user preference, or to manually select validators similarly as in the\nPolkadot-JS UI."),(0,i.kt)("p",null,"Pre-selected choices are:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Optimal Selection: Selects a mix of majority active and inactive validators."),(0,i.kt)("li",{parentName:"ul"},"Active Low Commission: Gets a set of active validators with low commission."),(0,i.kt)("li",{parentName:"ul"},"From Favorites: Gets a set of your favorite validators.")),(0,i.kt)("h2",{id:"staking-election-stages"},"Staking Election Stages"),(0,i.kt)("p",null,'The staking election system has three stages for both validators and nominators, namely "intention",\n"electable/electing", and "active".'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"intention to nominate:"),' an account that has stated the intention to nominate; also called\nsimply a "nominator".'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"electing nominator:")," a nominator who is selected to be a part of the input to the\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-phragmen"},"NPoS election algorithm"),". This selection is based on stake and is made using\nthe ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking-advanced#bags-list"},"bags-list"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"active nominator:")," a nominator who came out of the NPoS election algorithm backing an active\nvalidator. When slashing occurs, all the active nominators backing the validator get slashed.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominator Election",src:a(55404).Z,width:"612",height:"430"})),(0,i.kt)("h3",{id:"the-election-solution-set"},"The Election Solution Set"),(0,i.kt)("p",null,'Determining which validators are in the active set and which nominators are nominating them creates\na very large graph mapping nominators to their respective validators. This "solution set" is\ncomputed off-chain and submitted to the chain, which means it must fit in a single block. If there\nare a large number of nominators, this means that some nominators must be eliminated. Currently,\nnominators are sorted by the amount of DOT staked, and those with more DOT are prioritized. This\nmeans that you may not receive rewards if you are staking with a small amount of DOT. This minimal\namount is dynamic based on the number of validators, nominators, amount nominated, and other\nfactors.'),(0,i.kt)("h2",{id:"receiving-rewards"},"Receiving Rewards"),(0,i.kt)("p",null,"As long as you have nominated more than one validator candidate, at least one of them got elected,\nand you are nominating with enough stake to get into the solution set, your bonded stake will be\nfully distributed to one or more validators. That being said, you may not receive rewards if you\nnominated very few validator candidates and no one got elected, or your stake is small, and you are\nnot part of the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#bags-list"},"top 22,500 nominators"),", or the validator you\nare nominating has 100% commission. It is generally wise to choose as many trustworthy validators as\nyou can (up to 16) to reduce the risk of\nnone of your nominated validators being elected."),(0,i.kt)("admonition",{title:"Not receiving Staking Rewards?",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"To explore the possible reasons for not receiving staking rewards, check out the followings:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"The\n",(0,i.kt)("a",{parentName:"li",href:"https://support.polkadot.network/support/solutions/articles/65000181959-staking-faq-s"},"Staking FAQ"),"\non the Support Pages."),(0,i.kt)("li",{parentName:"ul"},"The\n",(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/Polkadot/comments/10kurje/why_am_i_not_receiving_staking_rewards/"},'"Why am I not receiving staking rewards?"'),"\nReddit article."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-staking#why-am-i-not-receiving-rewards"},'"Why am I not receiving staking rewards?"'),"\nsection on the Staking Page."))),(0,i.kt)("p",null,"Rewards are ",(0,i.kt)("em",{parentName:"p"},"lazy")," - somebody must trigger a payout for a validator for rewards to go to all of the\nvalidator's nominators. Any account can do this, although validator operators often do this as a\nservice to their nominators. See the page on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced"},"Simple Payouts")," for more\ninformation and instructions for claiming rewards."),(0,i.kt)("admonition",{title:"Explainer videos on Nominating",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"These concepts have been further explained in the following videos:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=weG_uzdSs1E&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=4"},"Why Nominate on Polkadot & Kusama")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=K-a4CgVchvU&list=PLOyWqupZ-WGuAuS00rK-pebTMAOxW41W8&index=9"},"What to Consider when Nominating Validators on Polkadot and Kusama")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://youtu.be/FCXC0CDhyS4"},"Nominating/Staking on Polkadot and Kusama")))),(0,i.kt)("h2",{id:"good-nominator-practices"},"Good Nominator Practices"),(0,i.kt)("h3",{id:"required-minimum-stake"},"Required Minimum Stake"),(0,i.kt)("p",null,"Due to the way the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragmen algorithm")," generates the solution set and due to the\nfact that the solution set must fit in a single block, a minimum number of DOT will be required to\nnominate with to receive staking rewards can change between the eras."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-intention-threshold:")," minimum stake to declare the intention to nominate. This parameter\ncan be updated via on-chain governance, and the most recent and up-to-date version can be found on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"chain state")," (select ",(0,i.kt)("strong",{parentName:"p"},"state query > staking >\nminimumNominatorBond"),")")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-electing:")," minimum stake among the electing nominators. Since this is almost always the\nsame as \u201cmin-active\u201d, it might not be reported.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"min-active:")," minimum stake among the active nominators. If your stake falls below this dynamic\nthreshold in a given era, you will not receive staking rewards for that era."))),(0,i.kt)("p",null,"Thus, for ",(0,i.kt)("strong",{parentName:"p"},"nominator counters"),", we have:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"count of nominator intentions and max possible nominator intentions\n(unlimited)\n",""),(0,i.kt)("li",{parentName:"ul"},"count of electing nominators, and maximum possible electing nominators\n(22500) "),(0,i.kt)("li",{parentName:"ul"},"count of active nominators and maximum possible active nominators\n(22500) ")),(0,i.kt)("h3",{id:"active-vs-inactive-nomination"},"Active vs. Inactive Nomination"),(0,i.kt)("p",null,"When you go to the ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/actions"},"Account actions")," under staking\npage, you should see your bonded accounts and nomination status. If not, you can follow\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-nominator#nominate-using-polkadot-js"},"this")," guide to configure it first. Your\nnominations will be effective in the next era; eras are roughly\n24 hours on Polkadot."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nominations",src:a(44277).Z,width:"2878",height:"766"})),(0,i.kt)("p",null,'Suppose you have nominated five validator candidates, and three out of five were elected to the\nactive validator set; then you should see two of your nominations as "waiting", and most likely one\nas "active" and the rest as "inactive". Active or inactive nomination means your nominated\nvalidators have been elected to be in the validator set, whereas waiting means they did not get\nelected. Generally, you will only have a single validator have an active nomination, which means\nthat you are directly supporting it with your stake this era and thus potentially receiving staking\nrewards. Inactive nominators were validators elected for this era but which you are not actively\nsupporting. Every era, a new election will take place, and you may be assigned a different active\nnomination from the validators you selected.'),(0,i.kt)("p",null,"If you are committing a very large stake, you may have more than one active nomination. However, the\nelection algorithm attempts to minimize this situation, and it should not occur often, so you should\nalmost always see only a single active nomination per era. See the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen#optimizations"},"section on Phragm\xe9n optimization")," for more details."),(0,i.kt)("h3",{id:"minimum-active-nomination-to-receive-staking-rewards"},"Minimum Active Nomination to Receive Staking Rewards"),(0,i.kt)("admonition",{title:"Minimum DOT required to earn staking rewards",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum DOT required to submit intent to nominate is\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:1e12,filter:"humanReadable",mdxType:"RPC"})),"\n, but the minimum active nomination required to earn staking rewards is dynamic and may be much\nhigher, which can be viewed on\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/staking/targets"},"Polkadot JS Apps > Network > Staking > Targets page"),".")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Minimum Active Nomination",src:a(95670).Z,width:"1436",height:"166"})),(0,i.kt)("h2",{id:"guides"},"Guides"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/learn-guides-nominator#nominate-a-validator"},"Be a Nominator (Polkadot)")," - Guide on\nnominating on the Kusama canary network."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/learn-guides-nominator#stop-nominating"},"Stop Being a Nominator (all networks)")," - Guide on\nstopping nominations and withdrawing tokens.")))}k.isMDXComponent=!0},53325:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/nominators_target-d8652ac89f3cbb16528cd68808a32cf0.png"},95670:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/min-active-nomination-bfbe67c2714eb5027c6a4f45608c9bc2.png"},55404:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/nominator-election-ae25b5db36fa18b56fa58c5370127dd4.png"},44277:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/polkadotjs_nominator_account-e0f5d58cd9cce279d6f462cde9f706f4.png"},95520:(t,e,a)=>{"use strict";a.d(e,{Z:()=>n});const n=a.p+"assets/images/validator_stats-57ec40656d6829e2ef791550116824d4.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.0860cc54.js b/assets/js/runtime~main.124ed29b.js similarity index 85% rename from assets/js/runtime~main.0860cc54.js rename to assets/js/runtime~main.124ed29b.js index f702ea86713d..ff5f7f6f0f22 100644 --- a/assets/js/runtime~main.0860cc54.js +++ b/assets/js/runtime~main.124ed29b.js @@ -1 +1 @@ -(()=>{"use strict";var e,d,f,a,c={},b={};function r(e){var d=b[e];if(void 0!==d)return d.exports;var f=b[e]={id:e,loaded:!1,exports:{}};return c[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=c,e=[],r.O=(d,f,a,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,a,c]},r.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return r.d(d,{a:d}),d},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};d=d||[null,f({}),f([]),f(f)];for(var t=2&a&&e;"object"==typeof t&&!~d.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((d=>b[d]=()=>e[d]));return b.default=()=>e,r.d(c,b),c},r.d=(e,d)=>{for(var f in d)r.o(d,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:d[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((d,f)=>(r.f[f](e,d),d)),[])),r.u=e=>"assets/js/"+({1:"f4fb6e9c",6:"408829bd",12:"1d6d4797",43:"74985360",53:"935f2afb",63:"9f319605",150:"77c23c97",192:"f189ca9f",217:"c7a044bb",230:"804b1e9f",289:"bf3ab9de",315:"9528ac88",356:"797239df",502:"2d429218",509:"2e0c35d5",537:"3829cf1d",576:"f52abf29",587:"76efc107",609:"d569989b",648:"4403bb94",657:"386bfe51",660:"387813b8",690:"e4ef088f",691:"145746f5",740:"078895e8",810:"23498fd5",948:"d9a69e3a",1062:"f90fa732",1083:"899aadcc",1090:"cfd53ea4",1125:"3184af97",1207:"49ea81bb",1211:"73c3bebc",1213:"25f2bd2a",1239:"f359a251",1288:"fabebe44",1299:"74df6a22",1306:"543c9f0a",1372:"b61f6dc7",1415:"4d76887f",1419:"f750c690",1446:"5136ee31",1451:"f44679e7",1453:"497334c4",1486:"8dd7cee0",1494:"b21dd8a7",1506:"c630d0cd",1529:"ffe9c3c9",1585:"33b0bcab",1598:"7fbac68a",1635:"5db34cd0",1678:"fa343ad1",1686:"f7191335",1703:"a5002e4a",1713:"0eeb7a68",1723:"0df78d26",1748:"987d08ef",1759:"e8522a07",1760:"8081c0c6",1774:"9e6341e5",1786:"d9ef69a7",1825:"48074a08",1872:"78e1e977",1953:"1ed3671a",1957:"df154d69",1966:"f47489cd",1975:"fda65b2b",1979:"0cb62240",2008:"4f031749",2042:"dd32e389",2117:"21877fa5",2119:"6d5c9a28",2136:"ecb495b7",2169:"1646726c",2174:"f2b5c614",2194:"6151e7ce",2242:"f3027c84",2248:"da9f79cb",2261:"333929a0",2327:"efba78c5",2354:"493c7fdf",2377:"f9358c97",2399:"8d3a1bf8",2507:"7c78c461",2508:"918b38b6",2552:"863c4753",2581:"967fa6d4",2633:"e2e89062",2635:"0b632434",2664:"9662c81e",2665:"f4130007",2677:"ece9fdae",2704:"f3bde756",2712:"c2c6a3a6",2749:"b906f375",2754:"78868b16",2758:"9e3f6a8a",2794:"feadf832",2813:"d000eb73",2884:"5d69d9d4",2909:"f4200fe5",2914:"2be0d940",2949:"2ea50c63",2969:"979a04e7",3029:"6544ec02",3066:"af40287e",3091:"b0a48d97",3132:"85afe03a",3262:"8a8a7d05",3274:"41f7224c",3330:"e31fc461",3332:"3497b7c6",3348:"7ccc428f",3356:"f14351c1",3375:"d42819bc",3451:"7c138549",3452:"3d1bf5db",3484:"5c90fc9b",3495:"f861e7c0",3513:"41b7b3e8",3518:"59acd71c",3531:"879e564b",3554:"d5909206",3576:"73d1b372",3599:"21899dd2",3620:"f137ce68",3643:"cb9afd28",3665:"f1585bfb",3667:"b0cbc1d4",3668:"b225a2ce",3669:"dbbd9e76",3757:"bea375d6",3828:"e5615b18",3842:"ff6596ea",3933:"cda87995",3945:"f8518919",3978:"c8dd560b",4004:"ec3b6a32",4097:"eef3f1dd",4105:"702d5d94",4126:"5355b952",4143:"9f804621",4174:"a7c27f4d",4187:"6a04f266",4195:"c4f5d8e4",4220:"437b4e16",4338:"84ede15a",4355:"19ed4d4c",4359:"dc36d550",4363:"f2c21b54",4379:"c662f00a",4385:"e00ac272",4436:"b418feb9",4445:"4d9b9869",4458:"af2ff1b5",4507:"a7b37b86",4537:"1ae2b102",4541:"3e56470e",4566:"694e7470",4620:"48d75399",4634:"54338ffb",4661:"db9d4dae",4666:"f41c4e9d",4672:"43ee4f22",4674:"fea93377",4885:"2462cc91",4909:"f0855ff9",4916:"c1bbdb2a",4933:"08c12c3a",5005:"320c8a05",5011:"7e9389ad",5013:"c41801b5",5049:"e3d2722f",5052:"6116139f",5068:"b7bd3ab3",5084:"196e07e8",5103:"db039c7f",5116:"8d48ec84",5132:"a4c751bb",5157:"d27ae88d",5251:"c78e4f7d",5281:"31bd35e0",5341:"9913464d",5422:"b3719d54",5472:"72b78d4a",5483:"f7acb151",5492:"1882e65d",5526:"0c68fb82",5548:"d6b0148d",5594:"269bc3bb",5645:"2d34559d",5651:"9e2042f5",5704:"b9b4ec9e",5752:"73a7060c",5806:"a8f54fb1",5821:"571c8793",5933:"e77078a1",5969:"7dcec981",5989:"fbf58567",6060:"556d3f96",6104:"c7c5ba1a",6140:"32e8da05",6220:"d01f45b7",6253:"a29dc56e",6255:"452ad91d",6285:"f10f9928",6294:"bbba852d",6298:"3611be04",6312:"dbc4065c",6325:"3002ebf4",6357:"43cda9e8",6373:"ceaa29cb",6482:"49816380",6579:"b3558274",6585:"13b7bafa",6598:"ca9fe671",6673:"af3013e9",6689:"f2521980",6730:"73617284",6779:"c5d9e474",6812:"5193d8a9",6827:"279fb1d6",6841:"5c6a20c2",6918:"29a046f3",6920:"ccc1222e",6946:"4642ab5c",7022:"543610b9",7051:"240a6b01",7061:"feea648c",7202:"4a8eb552",7211:"f44ed8f8",7270:"90a09ad1",7288:"6f1a81b8",7313:"db3d6c4d",7368:"bb8b1738",7388:"bd701914",7466:"a5b3561d",7518:"7266120e",7540:"a2d5a6d8",7584:"98a431f4",7633:"b940de31",7654:"c07c2447",7683:"cc44e8fd",7714:"591eca19",7738:"113faa87",7778:"41871d53",7799:"8b670b2b",7823:"9e76b49d",7830:"15985664",7837:"0a3f0c9b",7858:"d6a97e7e",7908:"33bbe353",7918:"17896441",7920:"1a4e3797",7932:"26dc7bd1",7940:"ad762f86",7961:"a2800a5b",8034:"fecdcc34",8049:"a87fd2e4",8067:"69b97ecd",8086:"b133b626",8115:"8247eba8",8132:"b0d34550",8138:"694672cd",8139:"386099fc",8158:"dc0f9344",8178:"9a679a70",8191:"f0ff685a",8215:"30d868e8",8236:"ffd76171",8270:"12331e8b",8343:"ad5a1373",8355:"c91a9c06",8361:"824749c6",8444:"28b84bbb",8609:"ed3409b3",8648:"71ed82b9",8702:"a74a59a0",8757:"83d4859f",8791:"ab138bf8",8831:"3bd77df4",8842:"a9f58d5b",8855:"d3a753cf",8860:"766a10e1",8866:"98a30fd8",8876:"31c99aa1",8901:"b48c599b",8913:"706277b1",8951:"e495ca4d",8956:"2e944e01",8970:"a44b8423",9009:"afddde9d",9023:"c97a416e",9062:"b38833d4",9071:"60738e36",9112:"a4b71220",9217:"64c7e1cc",9226:"2f3b630e",9315:"6d2ffbf3",9323:"131c7f55",9351:"36051dfe",9478:"c7a2145e",9514:"1be78505",9567:"c977dfe8",9596:"390ca211",9626:"32c9742a",9764:"dc776cbc",9771:"89a76fd2",9779:"cd144357",9790:"7ffd66a6",9802:"1e15616a",9806:"51fbc2c9",9817:"14eb3368",9856:"06597bc8",9905:"b0cb055f",9962:"dd2fa029",9977:"3104d5d8",9988:"09dda9ae",9993:"482bfb5c"}[e]||e)+"."+{1:"5563b650",6:"d3b10840",12:"9f327517",43:"6ed5990d",53:"434f6cea",63:"3da4421b",150:"de13d987",192:"da9e04e3",217:"0102c432",230:"abeb61ae",289:"6adb36ed",315:"e1c7c166",356:"220d0258",502:"8957ccb4",509:"1c31983f",537:"0c427b12",576:"f33f5486",587:"7c7a1647",609:"68d23dbf",648:"1982160f",657:"7a85ba0e",660:"55d26161",690:"b7ee2ac4",691:"1d230a3d",740:"fe6b97e6",810:"bbdf17b5",948:"000b418b",1062:"1b3f4042",1083:"98434a72",1090:"432ead1f",1125:"a5050b17",1207:"7916f6ea",1211:"84a813cb",1213:"6182a0a2",1239:"0ca258d5",1288:"4a133ff1",1299:"7dda7011",1306:"efa9e91d",1372:"44b4d9b2",1415:"5d52c06a",1419:"749e21fb",1426:"ad86846c",1446:"2265d608",1451:"d8b23a48",1453:"ab82db6a",1486:"9712076d",1494:"31e0a0f5",1506:"c61263c9",1529:"08567223",1585:"e1ec66d3",1598:"c14606e3",1635:"4344e2ee",1678:"6b0f0d25",1686:"ce7ae0b6",1703:"a7850cef",1713:"8e84c927",1723:"71e5f4cd",1748:"23865353",1759:"8754c4e5",1760:"526a2dff",1774:"1c405b46",1786:"b942951f",1825:"23728930",1872:"bb402936",1953:"e4392cf0",1957:"dac895d5",1966:"8193149d",1975:"4b60acbf",1979:"6d282955",2008:"484e4748",2042:"8bcdb8f5",2117:"8df821d7",2119:"39f85d55",2136:"8a33bec7",2169:"b7063abf",2174:"b4eb1826",2194:"66f8b87d",2242:"62be819f",2248:"a887987c",2261:"2f74827e",2327:"393fd266",2354:"da09f31b",2377:"1b2524e6",2399:"883fda68",2507:"26692215",2508:"c42132b5",2552:"6484aed3",2581:"a15c2e8a",2633:"abda080c",2635:"830edb6d",2664:"d52d8b8f",2665:"b3e97431",2677:"c8e81209",2704:"c83746c5",2712:"a44e2c30",2749:"e7d5e53a",2754:"b000525e",2758:"a6af0a68",2794:"0f0123ed",2813:"62c26829",2884:"9039bbf0",2909:"b7a3b117",2914:"459b445d",2949:"7738f0eb",2969:"1ec9198c",3029:"efe4503a",3066:"2d6ba895",3091:"872881f4",3132:"52079c42",3262:"920a917c",3274:"94f077ac",3330:"f8f9d28c",3332:"59059207",3348:"32c50c47",3356:"44e16802",3375:"186f73f5",3451:"ea6a7703",3452:"d18a3afc",3484:"2f90373b",3495:"6382f4fa",3513:"0499e4ef",3518:"8601616d",3531:"505d5e2c",3554:"6dc12371",3576:"7a6f241f",3599:"d5398d39",3620:"70c09097",3643:"c2dd3728",3665:"fb0ea919",3667:"87ba95d0",3668:"b34aa74c",3669:"ffd12b05",3757:"00a4f022",3828:"d39d947c",3842:"fc33edf9",3933:"b4da0711",3945:"39609227",3978:"72bf9cde",4004:"47637506",4097:"7796be62",4105:"5e24a8e9",4126:"11f3acc9",4143:"082476a6",4174:"d074f050",4187:"96b9c920",4195:"cfe133f9",4220:"446b5536",4338:"910fa212",4355:"30ff1600",4359:"c5923bbf",4363:"c101350a",4379:"9cbf1426",4385:"960c00ca",4436:"694a4a50",4445:"8f3d0e24",4458:"ea71f5fb",4507:"9e482a81",4537:"bfbc8d9f",4541:"978ae83c",4566:"ab0d60ad",4620:"97758654",4634:"7815e94c",4661:"8b988bf0",4666:"abf3d2b4",4672:"0175aaca",4674:"32cbd63b",4885:"ccc00357",4909:"3ae4713d",4916:"4b3a7688",4933:"3715dd81",4972:"2c004fcc",5005:"d567e8ec",5011:"469e67df",5013:"63672e85",5049:"4fc07d07",5052:"2844f9b7",5068:"e3d0ecc4",5084:"26c3888d",5103:"3f268ad3",5116:"606cacfa",5132:"9a303e8e",5157:"3f697f28",5251:"4da5a1cf",5281:"6761b31b",5341:"6a468aaa",5422:"a5cba597",5424:"9f945d13",5472:"774516e3",5483:"a7bdc5db",5492:"7b10a32b",5526:"35eee94b",5548:"f7eecc13",5594:"3f595e2a",5645:"8aa81c9b",5651:"8a76a52f",5704:"70bd0ba6",5752:"a1f35bcd",5806:"1b9a2586",5821:"c070cc17",5933:"79294ec8",5969:"d61af9db",5989:"0b1cb12b",6060:"e63c3157",6104:"cfc55807",6140:"4185286c",6220:"53ca5510",6253:"50057d87",6255:"8509f60e",6285:"78ce35a2",6294:"b077023f",6298:"56d411dd",6312:"da0c23f7",6316:"24db8bc9",6325:"676f44c8",6357:"4fb9d9ea",6373:"b8a24443",6482:"502a0b67",6495:"93b21474",6579:"0a500dc3",6585:"19cd9b62",6598:"4350b7cd",6673:"4c461033",6689:"6f4d26d7",6730:"51915769",6779:"407834dd",6812:"1d1abd61",6827:"051de704",6841:"32a50fa8",6918:"61dac2e1",6920:"e1b6bdcd",6945:"96d36007",6946:"92f77118",7022:"fea426f7",7051:"db5e2280",7061:"dd334eb5",7202:"d8da9a6c",7211:"81eed936",7270:"cb231451",7288:"c9a5db0f",7313:"ec5e7fed",7368:"db7c6a07",7388:"2ec93c74",7466:"6c38d255",7518:"0b210bc0",7540:"9bb29901",7584:"75defa39",7633:"4175c224",7654:"50c30d85",7683:"2d51b550",7714:"4d67463d",7724:"2906ce0b",7738:"3524d0b4",7778:"8da5b4da",7799:"b308c638",7823:"12af6f15",7830:"a2703576",7837:"d3f6c850",7858:"f9862ed2",7908:"3c96efa3",7918:"916bc4d8",7920:"16d7152d",7932:"92bc3bec",7940:"cadc1f7d",7961:"3c189a2f",8034:"dca0d1af",8049:"54678671",8067:"0606a87b",8086:"e5b42fd0",8115:"2ebb714e",8132:"7bb8f424",8138:"43973274",8139:"5c4f2962",8158:"bb13e2eb",8178:"62f5ed0b",8191:"4e7d3abd",8215:"775d309b",8236:"2798771b",8270:"f30c3f90",8343:"2290a31c",8355:"64ab0bfc",8361:"74bdcabf",8444:"b4852ff5",8609:"d2d709e7",8648:"39950abe",8702:"fae2510e",8757:"4f1ee155",8791:"6089055c",8831:"d0fa10f7",8842:"afbf5b86",8855:"142c7fbf",8860:"91b3db71",8866:"4bdda915",8876:"a30609d2",8894:"ba661129",8901:"cc3ae736",8913:"95810b09",8951:"e9b45337",8956:"df7dec1a",8970:"2ffda527",9009:"d20693f7",9023:"44d59de8",9062:"64303d26",9071:"2eac49bb",9112:"38b794db",9217:"4b3d9e10",9226:"26afbc1a",9315:"d5006aa3",9323:"a1b62b7f",9351:"1de7a366",9478:"ce7ecbd2",9487:"48bf43fe",9514:"693800c6",9567:"ced4063c",9596:"5b750b89",9626:"b43c6d01",9764:"f44c5e05",9771:"be039c22",9779:"e397e514",9790:"eca8e014",9802:"11684b0f",9806:"c3977137",9817:"5ba13cdf",9856:"99a149db",9905:"3e1ce1bd",9962:"a3138a8e",9977:"f5ab6a05",9988:"abbafc27",9993:"7bf6c4e1"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),a={},r.l=(e,d,f,c)=>{if(a[e])a[e].push(d);else{var b,t;if(void 0!==f)for(var o=document.getElementsByTagName("script"),n=0;n{b.onerror=b.onload=null,clearTimeout(u);var c=a[e];if(delete a[e],b.parentNode&&b.parentNode.removeChild(b),c&&c.forEach((e=>e(f))),d)return d(f)},u=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),t&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={15985664:"7830",17896441:"7918",49816380:"6482",73617284:"6730",74985360:"43",f4fb6e9c:"1","408829bd":"6","1d6d4797":"12","935f2afb":"53","9f319605":"63","77c23c97":"150",f189ca9f:"192",c7a044bb:"217","804b1e9f":"230",bf3ab9de:"289","9528ac88":"315","797239df":"356","2d429218":"502","2e0c35d5":"509","3829cf1d":"537",f52abf29:"576","76efc107":"587",d569989b:"609","4403bb94":"648","386bfe51":"657","387813b8":"660",e4ef088f:"690","145746f5":"691","078895e8":"740","23498fd5":"810",d9a69e3a:"948",f90fa732:"1062","899aadcc":"1083",cfd53ea4:"1090","3184af97":"1125","49ea81bb":"1207","73c3bebc":"1211","25f2bd2a":"1213",f359a251:"1239",fabebe44:"1288","74df6a22":"1299","543c9f0a":"1306",b61f6dc7:"1372","4d76887f":"1415",f750c690:"1419","5136ee31":"1446",f44679e7:"1451","497334c4":"1453","8dd7cee0":"1486",b21dd8a7:"1494",c630d0cd:"1506",ffe9c3c9:"1529","33b0bcab":"1585","7fbac68a":"1598","5db34cd0":"1635",fa343ad1:"1678",f7191335:"1686",a5002e4a:"1703","0eeb7a68":"1713","0df78d26":"1723","987d08ef":"1748",e8522a07:"1759","8081c0c6":"1760","9e6341e5":"1774",d9ef69a7:"1786","48074a08":"1825","78e1e977":"1872","1ed3671a":"1953",df154d69:"1957",f47489cd:"1966",fda65b2b:"1975","0cb62240":"1979","4f031749":"2008",dd32e389:"2042","21877fa5":"2117","6d5c9a28":"2119",ecb495b7:"2136","1646726c":"2169",f2b5c614:"2174","6151e7ce":"2194",f3027c84:"2242",da9f79cb:"2248","333929a0":"2261",efba78c5:"2327","493c7fdf":"2354",f9358c97:"2377","8d3a1bf8":"2399","7c78c461":"2507","918b38b6":"2508","863c4753":"2552","967fa6d4":"2581",e2e89062:"2633","0b632434":"2635","9662c81e":"2664",f4130007:"2665",ece9fdae:"2677",f3bde756:"2704",c2c6a3a6:"2712",b906f375:"2749","78868b16":"2754","9e3f6a8a":"2758",feadf832:"2794",d000eb73:"2813","5d69d9d4":"2884",f4200fe5:"2909","2be0d940":"2914","2ea50c63":"2949","979a04e7":"2969","6544ec02":"3029",af40287e:"3066",b0a48d97:"3091","85afe03a":"3132","8a8a7d05":"3262","41f7224c":"3274",e31fc461:"3330","3497b7c6":"3332","7ccc428f":"3348",f14351c1:"3356",d42819bc:"3375","7c138549":"3451","3d1bf5db":"3452","5c90fc9b":"3484",f861e7c0:"3495","41b7b3e8":"3513","59acd71c":"3518","879e564b":"3531",d5909206:"3554","73d1b372":"3576","21899dd2":"3599",f137ce68:"3620",cb9afd28:"3643",f1585bfb:"3665",b0cbc1d4:"3667",b225a2ce:"3668",dbbd9e76:"3669",bea375d6:"3757",e5615b18:"3828",ff6596ea:"3842",cda87995:"3933",f8518919:"3945",c8dd560b:"3978",ec3b6a32:"4004",eef3f1dd:"4097","702d5d94":"4105","5355b952":"4126","9f804621":"4143",a7c27f4d:"4174","6a04f266":"4187",c4f5d8e4:"4195","437b4e16":"4220","84ede15a":"4338","19ed4d4c":"4355",dc36d550:"4359",f2c21b54:"4363",c662f00a:"4379",e00ac272:"4385",b418feb9:"4436","4d9b9869":"4445",af2ff1b5:"4458",a7b37b86:"4507","1ae2b102":"4537","3e56470e":"4541","694e7470":"4566","48d75399":"4620","54338ffb":"4634",db9d4dae:"4661",f41c4e9d:"4666","43ee4f22":"4672",fea93377:"4674","2462cc91":"4885",f0855ff9:"4909",c1bbdb2a:"4916","08c12c3a":"4933","320c8a05":"5005","7e9389ad":"5011",c41801b5:"5013",e3d2722f:"5049","6116139f":"5052",b7bd3ab3:"5068","196e07e8":"5084",db039c7f:"5103","8d48ec84":"5116",a4c751bb:"5132",d27ae88d:"5157",c78e4f7d:"5251","31bd35e0":"5281","9913464d":"5341",b3719d54:"5422","72b78d4a":"5472",f7acb151:"5483","1882e65d":"5492","0c68fb82":"5526",d6b0148d:"5548","269bc3bb":"5594","2d34559d":"5645","9e2042f5":"5651",b9b4ec9e:"5704","73a7060c":"5752",a8f54fb1:"5806","571c8793":"5821",e77078a1:"5933","7dcec981":"5969",fbf58567:"5989","556d3f96":"6060",c7c5ba1a:"6104","32e8da05":"6140",d01f45b7:"6220",a29dc56e:"6253","452ad91d":"6255",f10f9928:"6285",bbba852d:"6294","3611be04":"6298",dbc4065c:"6312","3002ebf4":"6325","43cda9e8":"6357",ceaa29cb:"6373",b3558274:"6579","13b7bafa":"6585",ca9fe671:"6598",af3013e9:"6673",f2521980:"6689",c5d9e474:"6779","5193d8a9":"6812","279fb1d6":"6827","5c6a20c2":"6841","29a046f3":"6918",ccc1222e:"6920","4642ab5c":"6946","543610b9":"7022","240a6b01":"7051",feea648c:"7061","4a8eb552":"7202",f44ed8f8:"7211","90a09ad1":"7270","6f1a81b8":"7288",db3d6c4d:"7313",bb8b1738:"7368",bd701914:"7388",a5b3561d:"7466","7266120e":"7518",a2d5a6d8:"7540","98a431f4":"7584",b940de31:"7633",c07c2447:"7654",cc44e8fd:"7683","591eca19":"7714","113faa87":"7738","41871d53":"7778","8b670b2b":"7799","9e76b49d":"7823","0a3f0c9b":"7837",d6a97e7e:"7858","33bbe353":"7908","1a4e3797":"7920","26dc7bd1":"7932",ad762f86:"7940",a2800a5b:"7961",fecdcc34:"8034",a87fd2e4:"8049","69b97ecd":"8067",b133b626:"8086","8247eba8":"8115",b0d34550:"8132","694672cd":"8138","386099fc":"8139",dc0f9344:"8158","9a679a70":"8178",f0ff685a:"8191","30d868e8":"8215",ffd76171:"8236","12331e8b":"8270",ad5a1373:"8343",c91a9c06:"8355","824749c6":"8361","28b84bbb":"8444",ed3409b3:"8609","71ed82b9":"8648",a74a59a0:"8702","83d4859f":"8757",ab138bf8:"8791","3bd77df4":"8831",a9f58d5b:"8842",d3a753cf:"8855","766a10e1":"8860","98a30fd8":"8866","31c99aa1":"8876",b48c599b:"8901","706277b1":"8913",e495ca4d:"8951","2e944e01":"8956",a44b8423:"8970",afddde9d:"9009",c97a416e:"9023",b38833d4:"9062","60738e36":"9071",a4b71220:"9112","64c7e1cc":"9217","2f3b630e":"9226","6d2ffbf3":"9315","131c7f55":"9323","36051dfe":"9351",c7a2145e:"9478","1be78505":"9514",c977dfe8:"9567","390ca211":"9596","32c9742a":"9626",dc776cbc:"9764","89a76fd2":"9771",cd144357:"9779","7ffd66a6":"9790","1e15616a":"9802","51fbc2c9":"9806","14eb3368":"9817","06597bc8":"9856",b0cb055f:"9905",dd2fa029:"9962","3104d5d8":"9977","09dda9ae":"9988","482bfb5c":"9993"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(d,f)=>{var a=r.o(e,d)?e[d]:void 0;if(0!==a)if(a)f.push(a[2]);else if(/^(1303|532)$/.test(d))e[d]=0;else{var c=new Promise(((f,c)=>a=e[d]=[f,c]));f.push(a[2]=c);var b=r.p+r.u(d),t=new Error;r.l(b,(f=>{if(r.o(e,d)&&(0!==(a=e[d])&&(e[d]=void 0),a)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+d+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,a[1](t)}}),"chunk-"+d,d)}},r.O.j=d=>0===e[d];var d=(d,f)=>{var a,c,[b,t,o]=f,n=0;if(b.some((d=>0!==e[d]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(d&&d(f);n{"use strict";var e,d,a,f,c={},b={};function r(e){var d=b[e];if(void 0!==d)return d.exports;var a=b[e]={id:e,loaded:!1,exports:{}};return c[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=c,e=[],r.O=(d,a,f,c)=>{if(!a){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[a,f,c]},r.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return r.d(d,{a:d}),d},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};d=d||[null,a({}),a([]),a(a)];for(var t=2&f&&e;"object"==typeof t&&!~d.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((d=>b[d]=()=>e[d]));return b.default=()=>e,r.d(c,b),c},r.d=(e,d)=>{for(var a in d)r.o(d,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:d[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((d,a)=>(r.f[a](e,d),d)),[])),r.u=e=>"assets/js/"+({1:"f4fb6e9c",6:"408829bd",12:"1d6d4797",43:"74985360",53:"935f2afb",63:"9f319605",150:"77c23c97",192:"f189ca9f",217:"c7a044bb",230:"804b1e9f",289:"bf3ab9de",315:"9528ac88",356:"797239df",502:"2d429218",509:"2e0c35d5",537:"3829cf1d",576:"f52abf29",587:"76efc107",609:"d569989b",648:"4403bb94",657:"386bfe51",660:"387813b8",690:"e4ef088f",691:"145746f5",740:"078895e8",810:"23498fd5",948:"d9a69e3a",1062:"f90fa732",1083:"899aadcc",1090:"cfd53ea4",1125:"3184af97",1207:"49ea81bb",1211:"73c3bebc",1213:"25f2bd2a",1239:"f359a251",1288:"fabebe44",1299:"74df6a22",1306:"543c9f0a",1372:"b61f6dc7",1415:"4d76887f",1419:"f750c690",1446:"5136ee31",1451:"f44679e7",1453:"497334c4",1486:"8dd7cee0",1494:"b21dd8a7",1506:"c630d0cd",1529:"ffe9c3c9",1585:"33b0bcab",1598:"7fbac68a",1635:"5db34cd0",1678:"fa343ad1",1686:"f7191335",1703:"a5002e4a",1713:"0eeb7a68",1723:"0df78d26",1748:"987d08ef",1759:"e8522a07",1760:"8081c0c6",1774:"9e6341e5",1786:"d9ef69a7",1825:"48074a08",1872:"78e1e977",1953:"1ed3671a",1957:"df154d69",1966:"f47489cd",1975:"fda65b2b",1979:"0cb62240",2008:"4f031749",2042:"dd32e389",2117:"21877fa5",2119:"6d5c9a28",2136:"ecb495b7",2169:"1646726c",2174:"f2b5c614",2194:"6151e7ce",2242:"f3027c84",2248:"da9f79cb",2261:"333929a0",2327:"efba78c5",2354:"493c7fdf",2377:"f9358c97",2399:"8d3a1bf8",2507:"7c78c461",2508:"918b38b6",2552:"863c4753",2581:"967fa6d4",2633:"e2e89062",2635:"0b632434",2664:"9662c81e",2665:"f4130007",2677:"ece9fdae",2704:"f3bde756",2712:"c2c6a3a6",2749:"b906f375",2754:"78868b16",2758:"9e3f6a8a",2794:"feadf832",2813:"d000eb73",2884:"5d69d9d4",2909:"f4200fe5",2914:"2be0d940",2949:"2ea50c63",2969:"979a04e7",3029:"6544ec02",3066:"af40287e",3091:"b0a48d97",3132:"85afe03a",3262:"8a8a7d05",3274:"41f7224c",3330:"e31fc461",3332:"3497b7c6",3348:"7ccc428f",3356:"f14351c1",3375:"d42819bc",3451:"7c138549",3452:"3d1bf5db",3484:"5c90fc9b",3495:"f861e7c0",3513:"41b7b3e8",3518:"59acd71c",3531:"879e564b",3554:"d5909206",3576:"73d1b372",3599:"21899dd2",3620:"f137ce68",3643:"cb9afd28",3665:"f1585bfb",3667:"b0cbc1d4",3668:"b225a2ce",3669:"dbbd9e76",3757:"bea375d6",3828:"e5615b18",3842:"ff6596ea",3933:"cda87995",3945:"f8518919",3978:"c8dd560b",4004:"ec3b6a32",4097:"eef3f1dd",4105:"702d5d94",4126:"5355b952",4143:"9f804621",4174:"a7c27f4d",4187:"6a04f266",4195:"c4f5d8e4",4220:"437b4e16",4338:"84ede15a",4355:"19ed4d4c",4359:"dc36d550",4363:"f2c21b54",4379:"c662f00a",4385:"e00ac272",4436:"b418feb9",4445:"4d9b9869",4458:"af2ff1b5",4507:"a7b37b86",4537:"1ae2b102",4541:"3e56470e",4566:"694e7470",4620:"48d75399",4634:"54338ffb",4661:"db9d4dae",4666:"f41c4e9d",4672:"43ee4f22",4674:"fea93377",4885:"2462cc91",4909:"f0855ff9",4916:"c1bbdb2a",4933:"08c12c3a",5005:"320c8a05",5011:"7e9389ad",5013:"c41801b5",5049:"e3d2722f",5052:"6116139f",5068:"b7bd3ab3",5084:"196e07e8",5103:"db039c7f",5116:"8d48ec84",5132:"a4c751bb",5157:"d27ae88d",5251:"c78e4f7d",5281:"31bd35e0",5341:"9913464d",5422:"b3719d54",5472:"72b78d4a",5483:"f7acb151",5492:"1882e65d",5526:"0c68fb82",5548:"d6b0148d",5594:"269bc3bb",5645:"2d34559d",5651:"9e2042f5",5704:"b9b4ec9e",5752:"73a7060c",5806:"a8f54fb1",5821:"571c8793",5933:"e77078a1",5969:"7dcec981",5989:"fbf58567",6060:"556d3f96",6104:"c7c5ba1a",6140:"32e8da05",6220:"d01f45b7",6253:"a29dc56e",6255:"452ad91d",6285:"f10f9928",6294:"bbba852d",6298:"3611be04",6312:"dbc4065c",6325:"3002ebf4",6357:"43cda9e8",6373:"ceaa29cb",6482:"49816380",6579:"b3558274",6585:"13b7bafa",6598:"ca9fe671",6673:"af3013e9",6689:"f2521980",6730:"73617284",6779:"c5d9e474",6812:"5193d8a9",6827:"279fb1d6",6841:"5c6a20c2",6918:"29a046f3",6920:"ccc1222e",6946:"4642ab5c",7022:"543610b9",7051:"240a6b01",7061:"feea648c",7202:"4a8eb552",7211:"f44ed8f8",7270:"90a09ad1",7288:"6f1a81b8",7313:"db3d6c4d",7368:"bb8b1738",7388:"bd701914",7466:"a5b3561d",7518:"7266120e",7540:"a2d5a6d8",7584:"98a431f4",7633:"b940de31",7654:"c07c2447",7683:"cc44e8fd",7714:"591eca19",7738:"113faa87",7778:"41871d53",7799:"8b670b2b",7823:"9e76b49d",7830:"15985664",7837:"0a3f0c9b",7858:"d6a97e7e",7908:"33bbe353",7918:"17896441",7920:"1a4e3797",7932:"26dc7bd1",7940:"ad762f86",7961:"a2800a5b",8034:"fecdcc34",8049:"a87fd2e4",8067:"69b97ecd",8086:"b133b626",8115:"8247eba8",8132:"b0d34550",8138:"694672cd",8139:"386099fc",8158:"dc0f9344",8178:"9a679a70",8191:"f0ff685a",8215:"30d868e8",8236:"ffd76171",8270:"12331e8b",8343:"ad5a1373",8355:"c91a9c06",8361:"824749c6",8444:"28b84bbb",8609:"ed3409b3",8648:"71ed82b9",8702:"a74a59a0",8757:"83d4859f",8791:"ab138bf8",8831:"3bd77df4",8842:"a9f58d5b",8855:"d3a753cf",8860:"766a10e1",8866:"98a30fd8",8876:"31c99aa1",8901:"b48c599b",8913:"706277b1",8951:"e495ca4d",8956:"2e944e01",8970:"a44b8423",9009:"afddde9d",9023:"c97a416e",9062:"b38833d4",9071:"60738e36",9112:"a4b71220",9217:"64c7e1cc",9226:"2f3b630e",9315:"6d2ffbf3",9323:"131c7f55",9351:"36051dfe",9478:"c7a2145e",9514:"1be78505",9567:"c977dfe8",9596:"390ca211",9626:"32c9742a",9764:"dc776cbc",9771:"89a76fd2",9779:"cd144357",9790:"7ffd66a6",9802:"1e15616a",9806:"51fbc2c9",9817:"14eb3368",9856:"06597bc8",9905:"b0cb055f",9962:"dd2fa029",9977:"3104d5d8",9988:"09dda9ae",9993:"482bfb5c"}[e]||e)+"."+{1:"5563b650",6:"d3b10840",12:"9f327517",43:"6ed5990d",53:"434f6cea",63:"3da4421b",150:"de13d987",192:"da9e04e3",217:"0102c432",230:"abeb61ae",289:"6adb36ed",315:"e1c7c166",356:"220d0258",502:"8957ccb4",509:"1c31983f",537:"0c427b12",576:"f33f5486",587:"7c7a1647",609:"68d23dbf",648:"1982160f",657:"7a85ba0e",660:"55d26161",690:"b7ee2ac4",691:"1d230a3d",740:"fe6b97e6",810:"bbdf17b5",948:"000b418b",1062:"1b3f4042",1083:"98434a72",1090:"432ead1f",1125:"a5050b17",1207:"7916f6ea",1211:"84a813cb",1213:"6182a0a2",1239:"0ca258d5",1288:"4a133ff1",1299:"7dda7011",1306:"efa9e91d",1372:"44b4d9b2",1415:"5d52c06a",1419:"749e21fb",1426:"ad86846c",1446:"2265d608",1451:"d8b23a48",1453:"ab82db6a",1486:"9712076d",1494:"31e0a0f5",1506:"c61263c9",1529:"08567223",1585:"e1ec66d3",1598:"c14606e3",1635:"4344e2ee",1678:"6b0f0d25",1686:"ce7ae0b6",1703:"a7850cef",1713:"8e84c927",1723:"71e5f4cd",1748:"23865353",1759:"8754c4e5",1760:"526a2dff",1774:"1c405b46",1786:"b942951f",1825:"23728930",1872:"bb402936",1953:"e4392cf0",1957:"dac895d5",1966:"8193149d",1975:"4b60acbf",1979:"6d282955",2008:"484e4748",2042:"8bcdb8f5",2117:"8df821d7",2119:"1b52fa22",2136:"8a33bec7",2169:"a29d1e22",2174:"b4eb1826",2194:"66f8b87d",2242:"62be819f",2248:"a887987c",2261:"2f74827e",2327:"393fd266",2354:"da09f31b",2377:"1b2524e6",2399:"065e7f7b",2507:"26692215",2508:"c42132b5",2552:"6484aed3",2581:"a15c2e8a",2633:"abda080c",2635:"830edb6d",2664:"d52d8b8f",2665:"b3e97431",2677:"c8e81209",2704:"c83746c5",2712:"a44e2c30",2749:"e7d5e53a",2754:"b000525e",2758:"a6af0a68",2794:"0f0123ed",2813:"62c26829",2884:"9039bbf0",2909:"b7a3b117",2914:"459b445d",2949:"7738f0eb",2969:"1ec9198c",3029:"efe4503a",3066:"2d6ba895",3091:"872881f4",3132:"52079c42",3262:"920a917c",3274:"94f077ac",3330:"f8f9d28c",3332:"59059207",3348:"32c50c47",3356:"44e16802",3375:"186f73f5",3451:"ea6a7703",3452:"d18a3afc",3484:"2f90373b",3495:"6382f4fa",3513:"164ce82d",3518:"8601616d",3531:"505d5e2c",3554:"6dc12371",3576:"7a6f241f",3599:"d5398d39",3620:"70c09097",3643:"c2dd3728",3665:"fb0ea919",3667:"2355700b",3668:"b34aa74c",3669:"ffd12b05",3757:"00a4f022",3828:"d39d947c",3842:"9803ce8e",3933:"b4da0711",3945:"39609227",3978:"72bf9cde",4004:"47637506",4097:"7796be62",4105:"5e24a8e9",4126:"11f3acc9",4143:"082476a6",4174:"d074f050",4187:"96b9c920",4195:"cfe133f9",4220:"446b5536",4338:"910fa212",4355:"30ff1600",4359:"c5923bbf",4363:"c101350a",4379:"9cbf1426",4385:"960c00ca",4436:"694a4a50",4445:"8f3d0e24",4458:"ea71f5fb",4507:"9e482a81",4537:"bfbc8d9f",4541:"978ae83c",4566:"ab0d60ad",4620:"97758654",4634:"7815e94c",4661:"8b988bf0",4666:"abf3d2b4",4672:"0175aaca",4674:"32cbd63b",4885:"ccc00357",4909:"3ae4713d",4916:"4b3a7688",4933:"3715dd81",4972:"2c004fcc",5005:"d567e8ec",5011:"469e67df",5013:"63672e85",5049:"4fc07d07",5052:"2844f9b7",5068:"e3d0ecc4",5084:"26c3888d",5103:"3f268ad3",5116:"606cacfa",5132:"9a303e8e",5157:"3f697f28",5251:"4da5a1cf",5281:"6761b31b",5341:"6a468aaa",5422:"a5cba597",5424:"9f945d13",5472:"774516e3",5483:"a7bdc5db",5492:"7b10a32b",5526:"35eee94b",5548:"f7eecc13",5594:"3f595e2a",5645:"8aa81c9b",5651:"8a76a52f",5704:"70bd0ba6",5752:"a1f35bcd",5806:"1b9a2586",5821:"c070cc17",5933:"79294ec8",5969:"d61af9db",5989:"0b1cb12b",6060:"e63c3157",6104:"cfc55807",6140:"4185286c",6220:"53ca5510",6253:"50057d87",6255:"8509f60e",6285:"78ce35a2",6294:"b077023f",6298:"56d411dd",6312:"da0c23f7",6316:"24db8bc9",6325:"676f44c8",6357:"4fb9d9ea",6373:"b8a24443",6482:"502a0b67",6495:"93b21474",6579:"0a500dc3",6585:"19cd9b62",6598:"4350b7cd",6673:"4c461033",6689:"6f4d26d7",6730:"51915769",6779:"407834dd",6812:"1d1abd61",6827:"051de704",6841:"32a50fa8",6918:"61dac2e1",6920:"e1b6bdcd",6945:"96d36007",6946:"92f77118",7022:"fea426f7",7051:"db5e2280",7061:"dd334eb5",7202:"d8da9a6c",7211:"81eed936",7270:"cb231451",7288:"c9a5db0f",7313:"ec5e7fed",7368:"db7c6a07",7388:"2ec93c74",7466:"6c38d255",7518:"0b210bc0",7540:"9bb29901",7584:"75defa39",7633:"4175c224",7654:"50c30d85",7683:"2d51b550",7714:"4d67463d",7724:"2906ce0b",7738:"3524d0b4",7778:"8da5b4da",7799:"b308c638",7823:"12af6f15",7830:"a2703576",7837:"d3f6c850",7858:"f9862ed2",7908:"3c96efa3",7918:"916bc4d8",7920:"16d7152d",7932:"92bc3bec",7940:"cadc1f7d",7961:"3c189a2f",8034:"dca0d1af",8049:"54678671",8067:"0606a87b",8086:"e5b42fd0",8115:"2ebb714e",8132:"7bb8f424",8138:"43973274",8139:"2b231c32",8158:"bb13e2eb",8178:"62f5ed0b",8191:"4e7d3abd",8215:"775d309b",8236:"2798771b",8270:"4e1881d4",8343:"2290a31c",8355:"64ab0bfc",8361:"74bdcabf",8444:"b4852ff5",8609:"d2d709e7",8648:"39950abe",8702:"50f0f645",8757:"4f1ee155",8791:"6089055c",8831:"d0fa10f7",8842:"afbf5b86",8855:"142c7fbf",8860:"91b3db71",8866:"4bdda915",8876:"a30609d2",8894:"ba661129",8901:"cc3ae736",8913:"95810b09",8951:"e9b45337",8956:"df7dec1a",8970:"2ffda527",9009:"d20693f7",9023:"44d59de8",9062:"64303d26",9071:"2eac49bb",9112:"38b794db",9217:"4b3d9e10",9226:"26afbc1a",9315:"d5006aa3",9323:"a1b62b7f",9351:"1de7a366",9478:"ce7ecbd2",9487:"48bf43fe",9514:"693800c6",9567:"ced4063c",9596:"5b750b89",9626:"b43c6d01",9764:"f44c5e05",9771:"be039c22",9779:"e397e514",9790:"eca8e014",9802:"11684b0f",9806:"c3977137",9817:"5ba13cdf",9856:"99a149db",9905:"3e1ce1bd",9962:"a3138a8e",9977:"f5ab6a05",9988:"abbafc27",9993:"7bf6c4e1"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),f={},r.l=(e,d,a,c)=>{if(f[e])f[e].push(d);else{var b,t;if(void 0!==a)for(var o=document.getElementsByTagName("script"),n=0;n{b.onerror=b.onload=null,clearTimeout(u);var c=f[e];if(delete f[e],b.parentNode&&b.parentNode.removeChild(b),c&&c.forEach((e=>e(a))),d)return d(a)},u=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),t&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={15985664:"7830",17896441:"7918",49816380:"6482",73617284:"6730",74985360:"43",f4fb6e9c:"1","408829bd":"6","1d6d4797":"12","935f2afb":"53","9f319605":"63","77c23c97":"150",f189ca9f:"192",c7a044bb:"217","804b1e9f":"230",bf3ab9de:"289","9528ac88":"315","797239df":"356","2d429218":"502","2e0c35d5":"509","3829cf1d":"537",f52abf29:"576","76efc107":"587",d569989b:"609","4403bb94":"648","386bfe51":"657","387813b8":"660",e4ef088f:"690","145746f5":"691","078895e8":"740","23498fd5":"810",d9a69e3a:"948",f90fa732:"1062","899aadcc":"1083",cfd53ea4:"1090","3184af97":"1125","49ea81bb":"1207","73c3bebc":"1211","25f2bd2a":"1213",f359a251:"1239",fabebe44:"1288","74df6a22":"1299","543c9f0a":"1306",b61f6dc7:"1372","4d76887f":"1415",f750c690:"1419","5136ee31":"1446",f44679e7:"1451","497334c4":"1453","8dd7cee0":"1486",b21dd8a7:"1494",c630d0cd:"1506",ffe9c3c9:"1529","33b0bcab":"1585","7fbac68a":"1598","5db34cd0":"1635",fa343ad1:"1678",f7191335:"1686",a5002e4a:"1703","0eeb7a68":"1713","0df78d26":"1723","987d08ef":"1748",e8522a07:"1759","8081c0c6":"1760","9e6341e5":"1774",d9ef69a7:"1786","48074a08":"1825","78e1e977":"1872","1ed3671a":"1953",df154d69:"1957",f47489cd:"1966",fda65b2b:"1975","0cb62240":"1979","4f031749":"2008",dd32e389:"2042","21877fa5":"2117","6d5c9a28":"2119",ecb495b7:"2136","1646726c":"2169",f2b5c614:"2174","6151e7ce":"2194",f3027c84:"2242",da9f79cb:"2248","333929a0":"2261",efba78c5:"2327","493c7fdf":"2354",f9358c97:"2377","8d3a1bf8":"2399","7c78c461":"2507","918b38b6":"2508","863c4753":"2552","967fa6d4":"2581",e2e89062:"2633","0b632434":"2635","9662c81e":"2664",f4130007:"2665",ece9fdae:"2677",f3bde756:"2704",c2c6a3a6:"2712",b906f375:"2749","78868b16":"2754","9e3f6a8a":"2758",feadf832:"2794",d000eb73:"2813","5d69d9d4":"2884",f4200fe5:"2909","2be0d940":"2914","2ea50c63":"2949","979a04e7":"2969","6544ec02":"3029",af40287e:"3066",b0a48d97:"3091","85afe03a":"3132","8a8a7d05":"3262","41f7224c":"3274",e31fc461:"3330","3497b7c6":"3332","7ccc428f":"3348",f14351c1:"3356",d42819bc:"3375","7c138549":"3451","3d1bf5db":"3452","5c90fc9b":"3484",f861e7c0:"3495","41b7b3e8":"3513","59acd71c":"3518","879e564b":"3531",d5909206:"3554","73d1b372":"3576","21899dd2":"3599",f137ce68:"3620",cb9afd28:"3643",f1585bfb:"3665",b0cbc1d4:"3667",b225a2ce:"3668",dbbd9e76:"3669",bea375d6:"3757",e5615b18:"3828",ff6596ea:"3842",cda87995:"3933",f8518919:"3945",c8dd560b:"3978",ec3b6a32:"4004",eef3f1dd:"4097","702d5d94":"4105","5355b952":"4126","9f804621":"4143",a7c27f4d:"4174","6a04f266":"4187",c4f5d8e4:"4195","437b4e16":"4220","84ede15a":"4338","19ed4d4c":"4355",dc36d550:"4359",f2c21b54:"4363",c662f00a:"4379",e00ac272:"4385",b418feb9:"4436","4d9b9869":"4445",af2ff1b5:"4458",a7b37b86:"4507","1ae2b102":"4537","3e56470e":"4541","694e7470":"4566","48d75399":"4620","54338ffb":"4634",db9d4dae:"4661",f41c4e9d:"4666","43ee4f22":"4672",fea93377:"4674","2462cc91":"4885",f0855ff9:"4909",c1bbdb2a:"4916","08c12c3a":"4933","320c8a05":"5005","7e9389ad":"5011",c41801b5:"5013",e3d2722f:"5049","6116139f":"5052",b7bd3ab3:"5068","196e07e8":"5084",db039c7f:"5103","8d48ec84":"5116",a4c751bb:"5132",d27ae88d:"5157",c78e4f7d:"5251","31bd35e0":"5281","9913464d":"5341",b3719d54:"5422","72b78d4a":"5472",f7acb151:"5483","1882e65d":"5492","0c68fb82":"5526",d6b0148d:"5548","269bc3bb":"5594","2d34559d":"5645","9e2042f5":"5651",b9b4ec9e:"5704","73a7060c":"5752",a8f54fb1:"5806","571c8793":"5821",e77078a1:"5933","7dcec981":"5969",fbf58567:"5989","556d3f96":"6060",c7c5ba1a:"6104","32e8da05":"6140",d01f45b7:"6220",a29dc56e:"6253","452ad91d":"6255",f10f9928:"6285",bbba852d:"6294","3611be04":"6298",dbc4065c:"6312","3002ebf4":"6325","43cda9e8":"6357",ceaa29cb:"6373",b3558274:"6579","13b7bafa":"6585",ca9fe671:"6598",af3013e9:"6673",f2521980:"6689",c5d9e474:"6779","5193d8a9":"6812","279fb1d6":"6827","5c6a20c2":"6841","29a046f3":"6918",ccc1222e:"6920","4642ab5c":"6946","543610b9":"7022","240a6b01":"7051",feea648c:"7061","4a8eb552":"7202",f44ed8f8:"7211","90a09ad1":"7270","6f1a81b8":"7288",db3d6c4d:"7313",bb8b1738:"7368",bd701914:"7388",a5b3561d:"7466","7266120e":"7518",a2d5a6d8:"7540","98a431f4":"7584",b940de31:"7633",c07c2447:"7654",cc44e8fd:"7683","591eca19":"7714","113faa87":"7738","41871d53":"7778","8b670b2b":"7799","9e76b49d":"7823","0a3f0c9b":"7837",d6a97e7e:"7858","33bbe353":"7908","1a4e3797":"7920","26dc7bd1":"7932",ad762f86:"7940",a2800a5b:"7961",fecdcc34:"8034",a87fd2e4:"8049","69b97ecd":"8067",b133b626:"8086","8247eba8":"8115",b0d34550:"8132","694672cd":"8138","386099fc":"8139",dc0f9344:"8158","9a679a70":"8178",f0ff685a:"8191","30d868e8":"8215",ffd76171:"8236","12331e8b":"8270",ad5a1373:"8343",c91a9c06:"8355","824749c6":"8361","28b84bbb":"8444",ed3409b3:"8609","71ed82b9":"8648",a74a59a0:"8702","83d4859f":"8757",ab138bf8:"8791","3bd77df4":"8831",a9f58d5b:"8842",d3a753cf:"8855","766a10e1":"8860","98a30fd8":"8866","31c99aa1":"8876",b48c599b:"8901","706277b1":"8913",e495ca4d:"8951","2e944e01":"8956",a44b8423:"8970",afddde9d:"9009",c97a416e:"9023",b38833d4:"9062","60738e36":"9071",a4b71220:"9112","64c7e1cc":"9217","2f3b630e":"9226","6d2ffbf3":"9315","131c7f55":"9323","36051dfe":"9351",c7a2145e:"9478","1be78505":"9514",c977dfe8:"9567","390ca211":"9596","32c9742a":"9626",dc776cbc:"9764","89a76fd2":"9771",cd144357:"9779","7ffd66a6":"9790","1e15616a":"9802","51fbc2c9":"9806","14eb3368":"9817","06597bc8":"9856",b0cb055f:"9905",dd2fa029:"9962","3104d5d8":"9977","09dda9ae":"9988","482bfb5c":"9993"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(d,a)=>{var f=r.o(e,d)?e[d]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(d))e[d]=0;else{var c=new Promise(((a,c)=>f=e[d]=[a,c]));a.push(f[2]=c);var b=r.p+r.u(d),t=new Error;r.l(b,(a=>{if(r.o(e,d)&&(0!==(f=e[d])&&(e[d]=void 0),f)){var c=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+d+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,f[1](t)}}),"chunk-"+d,d)}},r.O.j=d=>0===e[d];var d=(d,a)=>{var f,c,[b,t,o]=a,n=0;if(b.some((d=>0!==e[d]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(d&&d(a);n - + @@ -37,7 +37,7 @@ development. The program aims to enable your team to tap into Polkadot’s ecosystem of resources and bring your product into production while contributing to feedback for Polkadot’s ecosystem.

Check out the official Polkadot Alpha Program site for more information and steps on how to apply.

- + \ No newline at end of file diff --git a/docs/ambassadors.html b/docs/ambassadors.html index b127d3314c5f..b272a2287ec5 100644 --- a/docs/ambassadors.html +++ b/docs/ambassadors.html @@ -19,7 +19,7 @@ - + @@ -28,7 +28,7 @@ the approval of Polkadot OpenGov referenda 487.

If you are enthusiastic about Polkadot and Web3 and are willing to help the community grow, you can join the program and receive funding for hosting events, gain access to communication channels of core team members, and gain access to Polkadot events.

There are many ways you can get involved in expanding Polkadot’s ecosystem, such as:

  • Contributing code and documentation related to the ecosystem
  • Speaking about Polkadot at events, workshops, and meetups
  • Writing blog posts
  • Representing Polkadot in your region
  • Mentoring and onboarding newcomers
  • Identifying partnerships and opportunities for the Polkadot ecosystem
  • Participating in calls and tasks that help drive the ecosystem forward
- + \ No newline at end of file diff --git a/docs/apps-index.html b/docs/apps-index.html index f7a5576870ac..855f8e6817db 100644 --- a/docs/apps-index.html +++ b/docs/apps-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/bug-bounty.html b/docs/bug-bounty.html index 6968c5a5361a..18c267c60170 100644 --- a/docs/bug-bounty.html +++ b/docs/bug-bounty.html @@ -19,7 +19,7 @@ - + @@ -43,7 +43,7 @@ not to be disruptive or harmful to our users or us. Otherwise, your actions might be interpreted as an attack rather than an effort to be helpful.

How to report a bug

Please follow the instructions at web3.foundation/security-report/.

- + \ No newline at end of file diff --git a/docs/build-archive-index.html b/docs/build-archive-index.html index 86ee1cba53b4..b1c200f156cf 100644 --- a/docs/build-archive-index.html +++ b/docs/build-archive-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/build-client-index.html b/docs/build-client-index.html index 58c52d40c6a8..72489ad7bd04 100644 --- a/docs/build-client-index.html +++ b/docs/build-client-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/build-client-side.html b/docs/build-client-side.html index 23f3ae75de12..caf69996eb97 100644 --- a/docs/build-client-side.html +++ b/docs/build-client-side.html @@ -19,7 +19,7 @@ - + @@ -72,7 +72,7 @@ specifically the documentation on deploying Polkadot dApp on decentralized storage. You can get started with Filebase by signing up here.

- + \ No newline at end of file diff --git a/docs/build-dapp.html b/docs/build-dapp.html index 6864b3e8f570..a708abd49b71 100644 --- a/docs/build-dapp.html +++ b/docs/build-dapp.html @@ -19,7 +19,7 @@ - + @@ -34,7 +34,7 @@ see the tooling page for a detailed overview of different SDKs and libraries that are available.

Frameworks & Toolkits

For front-end applications, several options exist for interfacing with Substrate-based chains (parachains, relay chains, etc.) and smart contracts. These often will interact with the RPC of a Substrate node:

Promise and RxJS APIs around Polkadot and Substrate-based chains via RPC calls. It is dynamically generated based on what the Substrate runtime provides regarding metadata. Full documentation & examples available here.
- + \ No newline at end of file diff --git a/docs/build-data.html b/docs/build-data.html index a8d51f4b9391..06d11398b419 100644 --- a/docs/build-data.html +++ b/docs/build-data.html @@ -19,7 +19,7 @@ - + @@ -50,7 +50,7 @@ for details on how to access the data.

Block Explorers

As you can imagine, blockchain explorers also offer data analytics through an interface where users can examine common data points.

Some block explorers in the Polkadot ecosystem are listed on the tools page.

- + \ No newline at end of file diff --git a/docs/build-guide.html b/docs/build-guide.html index 971051a91147..8998eb3de9c4 100644 --- a/docs/build-guide.html +++ b/docs/build-guide.html @@ -19,7 +19,7 @@ - + @@ -131,7 +131,7 @@ (parachains, relay chains, etc.) and smart contracts. These often will interact with the RPC of a Substrate node.

Please visit the documentation for developing dApps and other general client-side development resources.

For a complete list of tools, please take a look here: Tools, APIs, and Languages

Resources

- + \ No newline at end of file diff --git a/docs/build-guides-coretime-start.html b/docs/build-guides-coretime-start.html index 89a05be49f47..ba1fdee2cebd 100644 --- a/docs/build-guides-coretime-start.html +++ b/docs/build-guides-coretime-start.html @@ -19,7 +19,7 @@ - + @@ -49,7 +49,7 @@ Substrate parachain runtime guide.

Polkadot SDK Parachain Template

If you wish to the Polkadot SDK's Parachain template, please follow the Template to Core guide.

- + \ No newline at end of file diff --git a/docs/build-guides-coretime-troubleshoot.html b/docs/build-guides-coretime-troubleshoot.html index 615068d1a414..046a40407cb2 100644 --- a/docs/build-guides-coretime-troubleshoot.html +++ b/docs/build-guides-coretime-troubleshoot.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ term now. They refer to what are now known as on-demand parachains. Although they be references in various places through PolkadotJS, docs, or other UIs, really we only have two types of parachain: on-demand parachains, and parachains which use bulk coretime.


- + \ No newline at end of file diff --git a/docs/build-guides-install-deps.html b/docs/build-guides-install-deps.html index d6d90c85ba49..e2a78f4a3ec9 100644 --- a/docs/build-guides-install-deps.html +++ b/docs/build-guides-install-deps.html @@ -19,7 +19,7 @@ - + @@ -78,7 +78,7 @@ by running the following command:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Follow the prompts displayed to proceed with a default installation.

  • Update your current shell to include Cargo by running the following command:

    source ~/.cargo/env
  • Verify your installation by running the following command:

    rustc --version
  • Configure the Rust toolchain to use the latest stable version as the default toolchain by running the following commands:

    rustup default stable
    rustup update
  • Add the nightly version of the toolchain and the nightly WebAssembly (wasm) target to your development environment by running the following commands:

    rustup update nightly
    rustup target add wasm32-unknown-unknown --toolchain nightly
  • Verify your installation here.

  • Verifying Installation

    Verify the configuration of your development environment by running the following command:

    rustup show
    rustup +nightly show

    The command displays output similar to the following:

    # rustup show

    active toolchain
    ----------------

    stable-x86_64-unknown-linux-gnu (default)
    rustc 1.61.0 (fe5b13d68 2022-05-18)

    # rustup +nightly show

    active toolchain
    ----------------

    nightly-x86_64-unknown-linux-gnu (overridden by +toolchain on the command line)
    rustc 1.63.0-nightly (e7144
    - + \ No newline at end of file diff --git a/docs/build-guides-template-basic.html b/docs/build-guides-template-basic.html index 8b8e4ef304c5..c6b17074fb7f 100644 --- a/docs/build-guides-template-basic.html +++ b/docs/build-guides-template-basic.html @@ -19,7 +19,7 @@ - + @@ -82,7 +82,7 @@ for doing so:

    1. Head to General > Cross Chain Transfer on the right, and transfer 10 ROC:

    Region X cross chain transfer

    1. Sign the transaction with Polkadot.js. If all goes well, you should see the balance update in the upper right:

    Region X cross chain transfer

    1. Connect your wallet and make sure you select Rococo as your network:

    Connect your wallet to RegionX

    1. Click Purchase a Core on the left:

    GMcdatDW8AEC8kh

    1. In the lower right, click "Purchase Core":

    Purchase a core

    1. Go to My Regions, and click to select your region, then click Assign on the right side:

    Select and assign region

    1. Click Add Task, and input your ParaId along with a name for your chain:

    Add a new task

    1. Select your task, and select Provisional Assignment, and sign using Polkadot JS:

    Assign the core

    1. Once the transaction is confirmed, provided everything is synced and your collator is running, you should see blocks being persistently created as they were with the on-demand extrinsic:

    GMcdatDW8AEC8kh

    What's Next?

    Now that you can launch a layer one blockchain, the possibilities are endless:

    - + \ No newline at end of file diff --git a/docs/build-hackathon.html b/docs/build-hackathon.html index 771acb4b3e3b..36c951bace76 100644 --- a/docs/build-hackathon.html +++ b/docs/build-hackathon.html @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ that can be a feature of you hackathon or suggested prerequisite for those joining to use.

    Support / Contact

    If you have any questions regarding organizing a hackathon, please free feel to contact us by email or ask us via Element chat.

    - + \ No newline at end of file diff --git a/docs/build-hrmp-channels.html b/docs/build-hrmp-channels.html index f4c3ecfc03cf..8dfdb7279f61 100644 --- a/docs/build-hrmp-channels.html +++ b/docs/build-hrmp-channels.html @@ -19,7 +19,7 @@ - + @@ -62,7 +62,7 @@ forceOpenHrmpChannel calls.

    Opening HRMP Channels Between Two System Parachains

    As of Polkadot and Kusama runtimes 1,001,000, anyone can call an establishSystemChannel extrinsic with two system parachains as arguments in order to establish a channel from the given sender to receiver.

    - + \ No newline at end of file diff --git a/docs/build-index.html b/docs/build-index.html index 9dbdba7a2b28..6f82af120d64 100644 --- a/docs/build-index.html +++ b/docs/build-index.html @@ -19,7 +19,7 @@ - + @@ -39,7 +39,7 @@ are building.

    Grants

    • Grants - Information regarding grants and funding sources available in the Polkadot ecosystem.

    PCPs

    Polkadot Contracts Proposals (PCPs) are standards for smart contracts in the Polkadot ecosystem.

    Hackathon

    - + \ No newline at end of file diff --git a/docs/build-integrate-assets.html b/docs/build-integrate-assets.html index 4e44e71a175f..5c72c9f26296 100644 --- a/docs/build-integrate-assets.html +++ b/docs/build-integrate-assets.html @@ -19,7 +19,7 @@ - + @@ -137,7 +137,7 @@ be claimed).

    A great resource to learn more about Error Management in XCM is the Polkadot blog post from Gavin Wood, XCM Part III: Execution and Error Management.

    - + \ No newline at end of file diff --git a/docs/build-integration.html b/docs/build-integration.html index f2fc5a55ea9b..31630930f867 100644 --- a/docs/build-integration.html +++ b/docs/build-integration.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ transactions. Parity and Web3 Foundation will be able to provide the best support if you use these tools.

    If your team would like support, join some of our community channels or contact support@polkadot.network.

    - + \ No newline at end of file diff --git a/docs/build-light-clients.html b/docs/build-light-clients.html index 8cc4d0065caa..ac41916bbe1f 100644 --- a/docs/build-light-clients.html +++ b/docs/build-light-clients.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ end-users to interact with applications connected to multiple blockchains or connect their own blockchains to applications that support it.

    note

    Substrate Connect will auto-detect whether a user is using the extension. If not, the Wasm light client will be created in-page for them.

    Resources

    - + \ No newline at end of file diff --git a/docs/build-network-overview.html b/docs/build-network-overview.html index c9f046d8db77..e109973a316b 100644 --- a/docs/build-network-overview.html +++ b/docs/build-network-overview.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ here.

    For other programmatic ways of interacting with these networks (including PolkadotJS), please view the Node Interactions page.

    Testnet Faucets

    Almost all tesnets either have a web-based interface for getting test currency or a Matrix room which you can post !drip <ADDRESS>

    See here for all available faucets and how to obtain testnet tokens.

    - + \ No newline at end of file diff --git a/docs/build-node-interaction.html b/docs/build-node-interaction.html index fc0417ee60dd..9aabe93ea427 100644 --- a/docs/build-node-interaction.html +++ b/docs/build-node-interaction.html @@ -19,7 +19,7 @@ - + @@ -57,7 +57,7 @@ block by the block author.

    {
    "number":"7409038",
    "hash":"0x0e9610f3c89fac046ef83aa625ad414d5403031faa026b7ab2a918184e389968",
    "parentHash":"0xba308541eb207bc639f36d392706309a031c21622f883fb07411060389c5ffdd",
    "stateRoot":"0x4426383b64a944ad7222a4019aefd558c749da0c6920cfcdfd587741d54abbe2",
    "extrinsicsRoot":"0x74749e5f5aeb610bc23fd6d8d79fd8bbf5e4b6053f70ba94ea6b3cc271df4b3a",
    "authorId":"Fvvz6Ej1D5ZR5ZTK1vE1dCjBvkbxE1VncptEtmFaecXe4PF",
    "logs":[
    {
    "type":"PreRuntime",
    "index":"6",
    "value":[
    "BABE",
    "0x023a0200009c7d191000000000"
    ]
    },
    {
    "type":"Seal",
    "index":"5",
    "value":[
    "BABE",
    "0x2296a50fa4fea3a46a95ad5b1f09de76d22c6ed3dc6755718c976e2d14c63e4dd3c6257813d9bdc03bb180b1e20393f1558ae1204982e5c7570df393e11f908b"
    ]
    }
    ],
    "onInitialize":{
    "events":[

    ]
    },
    "extrinsics":[
    {
    "method":{
    "pallet":"timestamp",
    "method":"set"
    },
    "signature":null,
    "nonce":null,
    "args":{
    "now":"1620636072000"
    },
    "tip":null,
    "hash":"0x8b853f49b6543e4fcbc796ad3574ea5601d2869d80629e080e501da4cb7b74b4",
    "info":{

    },
    "events":[
    {
    "method":{
    "pallet":"system",
    "method":"ExtrinsicSuccess"
    },
    "data":[
    {
    "weight":"185253000",
    "class":"Mandatory",
    "paysFee":"Yes"
    }
    ]
    }
    ],
    "success":true,
    "paysFee":false
    },
    {
    "method":{
    "pallet":"balances",
    "method":"transfer"
    },
    "signature":{
    "signature":"0x94b63112648e8e692f0076fa1ccab3a04510c269d1392c1df2560503865e144e3afd578f1e37e98063b64b98a77a89a9cdc8ade579dcac0984e78d90646a052001",
    "signer":{
    "id":"Gr5sBB1EgdmQ7FG3Ud2BdECWQTMDXNgGPfdHMMtDsmT4Dj3"
    }
    },
    "nonce":"12",
    "args":{
    "dest":{
    "id":"J6ksma2jVeHRcRoYPZBkJRzRbckys7oSmgvjKLrVbj1U8bE"
    },
    "value":"100000000"
    },
    "tip":"0",
    "hash":"0xfbc5e5de75d64abe5aa3ee9272a3112b3ce53710664f6f2b9416b2ffda8799c2",
    "info":{
    "weight":"201217000",
    "class":"Normal",
    "partialFee":"2583332634"
    },
    "events":[
    {
    "method":{
    "pallet":"balances",
    "method":"Transfer"
    },
    "data":[
    "Gr5sBB1EgdmQ7FG3Ud2BdECWQTMDXNgGPfdHMMtDsmT4Dj3",
    "J6ksma2jVeHRcRoYPZBkJRzRbckys7oSmgvjKLrVbj1U8bE",
    "100000000"
    ]
    },
    {
    "method":{
    "pallet":"balances",
    "method":"Deposit"
    },
    "data":[
    "Fvvz6Ej1D5ZR5ZTK1vE1dCjBvkbxE1VncptEtmFaecXe4PF",
    "2583332634"
    ]
    },
    {
    "method":{
    "pallet":"system",
    "method":"ExtrinsicSuccess"
    },
    "data":[
    {
    "weight":"201217000",
    "class":"Normal",
    "paysFee":"Yes"
    }
    ]
    }
    ],
    "success":true,
    "paysFee":true
    },
    {
    "method":{
    "pallet":"utility",
    "method":"batch"
    },
    "signature":{
    "signature":"0x8aa2fc3f0cff52533745679523705720cff42d0e7258b9797feed193deb0ca73474726e148af0a0b096d44c07f20e5292819ec92279cffb2897e95cc337e638e",
    "signer":{
    "id":"F4gmSZGiM9pMYPsKW7xnGktDr4zRmN2jqy5Ze678y9YWR7F"
    }
    },
    "nonce":"687",
    "args":{
    "calls":[
    {
    "method":{
    "pallet":"staking",
    "method":"payoutStakers"
    },
    "args":{
    "validator_stash":"Cfish3zJiFnTvR9jscCap7imeA9ep3cH1wZfcZwAp2gdZHo",
    "era":"2229"
    }
    },
    {
    "method":{
    "pallet":"staking",
    "method":"payoutStakers"
    },
    "args":{
    "validator_stash":"Cfish3zJiFnTvR9jscCap7imeA9ep3cH1wZfcZwAp2gdZHo",
    "era":"2230"
    }
    },
    {
    "method":{
    "pallet":"staking",
    "method":"payoutStakers"
    },
    "args":{
    "validator_stash":"Cfish3zJiFnTvR9jscCap7imeA9ep3cH1wZfcZwAp2gdZHo",
    "era":"2231"
    }
    },
    {
    "method":{
    "pallet":"staking",
    "method":"payoutStakers"
    },
    "args":{
    "validator_stash":"DifishR4auphofhzxsy2aupgYo4NaUECH7qgt71CgiB2o6P",
    "era":"2231"
    }
    },
    {
    "method":{
    "pallet":"staking",
    "method":"payoutStakers"
    },
    "args":{
    "validator_stash":"J1fishfH94nFZLNScHgC2HorWpFD2xdPxd96wtTCHLvKxfa",
    "era":"2231"
    }
    }
    ]
    },
    "tip":"0",
    "hash":"0x69171ec3f4e5e4dfd27f4d1c5b5dbc884932c5d9a078c84495bb7ab875c8785f",
    "info":{
    "weight":"629782467000",
    "class":"Normal",
    "partialFee":"5150837715"
    },
    "events":[
    {
    "method":{
    "pallet":"staking",
    "method":"Reward"
    },
    "data":[
    "Cfish3zJiFnTvR9jscCap7imeA9ep3cH1wZfcZwAp2gdZHo",
    "40730624074"
    ]
    },
    {
    "method":{
    "pallet":"staking",
    "method":"Reward"
    },
    "data":[
    "FhLcXuFkTwyc3o9K82VBahpain1YHWyGeNMDTTyeDJKfm5b",
    "4296071738"
    ]
    },
    {
    "method":{
    "pallet":"staking",
    "method":"Reward"
    },
    "data":[
    "F1NyXFUayqmVMdjNK45hcaTCE3JiqdU83sEGhQ3HQXn2Rpq",
    "1770904403"
    ]
    },

    // ...

    {
    "method":{
    "pallet":"utility",
    "method":"BatchCompleted"
    },
    "data":[

    ]
    },
    {
    "method":{
    "pallet":"balances",
    "method":"Deposit"
    },
    "data":[
    "Fvvz6Ej1D5ZR5ZTK1vE1dCjBvkbxE1VncptEtmFaecXe4PF",
    "5150837715"
    ]
    },
    {
    "method":{
    "pallet":"system",
    "method":"ExtrinsicSuccess"
    },
    "data":[
    {
    "weight":"629782467000",
    "class":"Normal",
    "paysFee":"Yes"
    }
    ]
    }
    ],
    "success":true,
    "paysFee":true
    }
    ],
    "onFinalize":{
    "events":[

    ]
    },
    "finalized":true
    }
    The JS number type is a 53 bit precision float

    There is no guarantee that the numerical values in the response will have a numerical type. Any numbers larger than 2**53-1 will have a string type.

    Submitting a Transaction

    Submit a serialized transaction using the transaction endpoint with an HTTP POST request.

    import requests
    import json

    url = 'http://127.0.0.1:8080/transaction/'
    tx_headers = {'Content-type' : 'application/json', 'Accept' : 'text/plain'}
    response = requests.post(
    url,
    data='{"tx": "0xed0...000"}', # A serialized tx.
    headers=tx_headers
    )
    tx_response = json.loads(response.text)

    If successful, this endpoint returns a JSON with the transaction hash. In case of error, it will return an error report, e.g.:

    {
    "error": "Failed to parse a tx" | "Failed to submit a tx",
    "cause": "Upstream error description"
    }
    - + \ No newline at end of file diff --git a/docs/build-node-management.html b/docs/build-node-management.html index 93bb4915ed00..deded915edf8 100644 --- a/docs/build-node-management.html +++ b/docs/build-node-management.html @@ -19,7 +19,7 @@ - + @@ -67,7 +67,7 @@ has a monitor node metrics tutorial which uses this endpoint.

    - + \ No newline at end of file diff --git a/docs/build-open-source.html b/docs/build-open-source.html index 256382e2b4c0..0f12ac530a68 100644 --- a/docs/build-open-source.html +++ b/docs/build-open-source.html @@ -19,7 +19,7 @@ - + @@ -34,7 +34,7 @@ the tech stack.

    ❗ All technologies listed above need to be open-source. Ideally, the links lead directly to the code.

    Note: You will need a GitHub account to suggest changes or open issues. If you do not have one, you may sign up for free.

    - + \ No newline at end of file diff --git a/docs/build-oracle.html b/docs/build-oracle.html index 2f2ddf042d01..6761b8db8454 100644 --- a/docs/build-oracle.html +++ b/docs/build-oracle.html @@ -19,7 +19,7 @@ - + @@ -49,7 +49,7 @@ ecosystem develops and oracle parachains begin to appear, this article will be updated with a comparison of the different solutions and the benefits and drawbacks that each provide.

    - + \ No newline at end of file diff --git a/docs/build-pdk.html b/docs/build-pdk.html index 32933fbfcc2e..34a4c8a1ed57 100644 --- a/docs/build-pdk.html +++ b/docs/build-pdk.html @@ -19,7 +19,7 @@ - + @@ -182,7 +182,7 @@ deprecated and parachains can purchase coretime to produce blocks continuously or on-demand.

    Resources

    - + \ No newline at end of file diff --git a/docs/build-protocol-index.html b/docs/build-protocol-index.html index 372cdb08fceb..a9432d0067c9 100644 --- a/docs/build-protocol-index.html +++ b/docs/build-protocol-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/build-protocol-info.html b/docs/build-protocol-info.html index 9e9688f860a3..72b7cedaa201 100644 --- a/docs/build-protocol-info.html +++ b/docs/build-protocol-info.html @@ -19,7 +19,7 @@ - + @@ -127,7 +127,7 @@ to cancel a runtime upgrade. Using a finalized depth of ten blocks should be safe.

    Note that block production and finality are isolated processes in Polkadot, and the chain can have a long unfinalized head.

    Do users need to interact with any smart contracts?

    No, users interact directly with the chain's logic.

    Does Polkadot have state rent?

    No, Polkadot uses the existential deposit to prevent dust accounts and other economic mechanisms like locking or reserving tokens for operations that utilize state.

    What is an external source to see the current chain height?

    - + \ No newline at end of file diff --git a/docs/build-smart-contracts.html b/docs/build-smart-contracts.html index 0d78e9d3f605..9f706e463f88 100644 --- a/docs/build-smart-contracts.html +++ b/docs/build-smart-contracts.html @@ -19,7 +19,7 @@ - + @@ -148,7 +148,7 @@ Substrate and Polkadot StackExchange to ask their questions. As always, keep up to date with Polkadot and Kusama by following the social channels.

    - + \ No newline at end of file diff --git a/docs/build-storage.html b/docs/build-storage.html index b4052279a185..26984171cf54 100644 --- a/docs/build-storage.html +++ b/docs/build-storage.html @@ -19,7 +19,7 @@ - + @@ -59,7 +59,7 @@ directory info will not be visible if you switch to a new browser or clear the browser cache. The storage module allows you to export file directory info from the current browser and import it to the new browser.

    manage file dir

    note

    These above images are taken from this pull request

    - + \ No newline at end of file diff --git a/docs/build-tools-index.html b/docs/build-tools-index.html index ada341f89efe..2ed5b4cf7a1c 100644 --- a/docs/build-tools-index.html +++ b/docs/build-tools-index.html @@ -19,7 +19,7 @@ - + @@ -115,7 +115,7 @@ Squid Archive Registry
  • Polka-store - A tool which scans a Substrate chain and stores balance-relevant transactions in an SQLite database.
  • Substrate-graph - A compact indexer for Substrate based nodes providing a GraphQL interface.
  • - + \ No newline at end of file diff --git a/docs/build-transaction-construction.html b/docs/build-transaction-construction.html index 3442cebc5a2a..44fc0f60db67 100644 --- a/docs/build-transaction-construction.html +++ b/docs/build-transaction-construction.html @@ -19,7 +19,7 @@ - + @@ -59,7 +59,7 @@ author_submitAndWatchExtrinsic, the latter of which will subscribe you to events to be notified as a transaction gets validated and included in the chain.

    Notes

    Some addresses to use in the examples. See Subkey documentation.

    $ subkey --network polkadot generate
    Secret phrase `pulp gaze fuel ... mercy inherit equal` is account:
    Secret seed: 0x57450b3e09ba4598 ... ... ... ... ... ... ... .. 219756eeba80bb16
    Public key (hex): 0x2ca17d26ca376087dc30ed52deb74bf0f64aca96fe78b05ec3e720a72adb1235
    Account ID: 0x2ca17d26ca376087dc30ed52deb74bf0f64aca96fe78b05ec3e720a72adb1235
    SS58 Address: 121X5bEgTZcGQx5NZjwuTjqqKoiG8B2wEAvrUFjuw24ZGZf2

    $ subkey --network polkadot generate
    Secret phrase `exercise auction soft ... obey control easily` is account:
    Secret seed: 0x5f4bbb9fbb69261a ... ... ... ... ... ... ... .. 4691ed7d1130fbbd
    Public key (hex): 0xda04de6cd781c98acf0693dfb97c11011938ad22fcc476ed0089ac5aec3fe243
    Account ID: 0xda04de6cd781c98acf0693dfb97c11011938ad22fcc476ed0089ac5aec3fe243
    SS58 Address: 15vrtLsCQFG3qRYUcaEeeEih4JwepocNJHkpsrqojqnZPc2y
    - + \ No newline at end of file diff --git a/docs/community-index.html b/docs/community-index.html index 75fc5945dd2f..43610ae40688 100644 --- a/docs/community-index.html +++ b/docs/community-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/community.html b/docs/community.html index 7bd785054bc1..b15a31c31cda 100644 --- a/docs/community.html +++ b/docs/community.html @@ -19,7 +19,7 @@ - + @@ -65,7 +65,7 @@ Discover thriving communities and participate in engaging campaigns.
  • DotAppStore - Discover featured projects and apps upvoted by the Polkadot community.
  • Awesome Dot - community curated resources, projects, and learning material about the Polkadot and Kusama ecosystems.
  • - + \ No newline at end of file diff --git a/docs/contributing.html b/docs/contributing.html index aa2be79d71e2..1f96b6242ef0 100644 --- a/docs/contributing.html +++ b/docs/contributing.html @@ -19,7 +19,7 @@ - + @@ -51,7 +51,7 @@ your local copy with npx lint-staged, but for simplicity we also have a bot which runs this for us in your PRs.

    Heritage

    This document is based on the Level contribution guidelines.


    - + \ No newline at end of file diff --git a/docs/contributors.html b/docs/contributors.html index aa6c2e301e43..09b59d41c7b5 100644 --- a/docs/contributors.html +++ b/docs/contributors.html @@ -19,7 +19,7 @@ - + @@ -95,7 +95,7 @@ for the Polkadot protocol. He contributed in creating written content and example applications that demonstrate how to use these new technologies.

    You can now find Logan leading efforts to define the prediction market space at Zeitgeist.

    - + \ No newline at end of file diff --git a/docs/dashboards-index.html b/docs/dashboards-index.html index 4166188cac09..4ac232200462 100644 --- a/docs/dashboards-index.html +++ b/docs/dashboards-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/decentralized-futures.html b/docs/decentralized-futures.html index 0193504711a2..3328b443ce28 100644 --- a/docs/decentralized-futures.html +++ b/docs/decentralized-futures.html @@ -19,7 +19,7 @@ - + @@ -49,7 +49,7 @@ utilized, with granularity increasing proportionally with the amount sought. This meticulous approach ensures transparency and accountability in the allocation of resources.
  • A demonstrated willingness to receive a more significant portion of the value in long-term DOT rather than immediate FIAT, aligning with the broader ecosystem's goals.
  • - + \ No newline at end of file diff --git a/docs/decentralized-voices.html b/docs/decentralized-voices.html index a345e3d2d85a..595e4325915e 100644 --- a/docs/decentralized-voices.html +++ b/docs/decentralized-voices.html @@ -19,7 +19,7 @@ - + @@ -56,7 +56,7 @@ dedicated community members to shape the future of the Polkadot ecosystem. For more detailed information, see the original Medium article.

    - + \ No newline at end of file diff --git a/docs/dev-heroes.html b/docs/dev-heroes.html index f5d7b9e1392a..3a874fe9ae27 100644 --- a/docs/dev-heroes.html +++ b/docs/dev-heroes.html @@ -19,7 +19,7 @@ - + @@ -40,7 +40,7 @@ open source technology stack list and contribute with a pull request, an issue, or find and fix bugs.

  • Create content: Write a blog post, record a video tutorial, and write a Twitter thread. Share about your latest coding success, something you learned and are excited about.

  • Speak at events: Do a workshop or talk at meetups and conferences.

  • - + \ No newline at end of file diff --git a/docs/explore-index.html b/docs/explore-index.html index 19b26043c46d..ed14bb0392a9 100644 --- a/docs/explore-index.html +++ b/docs/explore-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/faq.html b/docs/faq.html index 5c46af723525..413877721129 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -19,7 +19,7 @@ - + @@ -203,7 +203,7 @@ fee calculation page in the Substrate documentation for more detailed information.

    Answered by Gav series

    The "Answered by Gav" series is a collection of posts uploaded to Reddit of questions that have been asked in the Polkadot Watercooler Riot channel and answered by Polkadot founder Gavin Wood.

    - + \ No newline at end of file diff --git a/docs/general-index.html b/docs/general-index.html index 05f56e7d17b8..094f5b72e04f 100644 --- a/docs/general-index.html +++ b/docs/general-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/general/dune-analytics.html b/docs/general/dune-analytics.html index 832e9b20e098..46cdc2921da0 100644 --- a/docs/general/dune-analytics.html +++ b/docs/general/dune-analytics.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/general/dune-analytics/acala-dashboards.html b/docs/general/dune-analytics/acala-dashboards.html index 7bf1985d6359..92b8d2423f83 100644 --- a/docs/general/dune-analytics/acala-dashboards.html +++ b/docs/general/dune-analytics/acala-dashboards.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ queries. You can use the following DuneSQL queries as examples:

    Acala List of Assets
    WITH
    decimals_for_each_symbol AS (
    SELECT
    symbol,
    MAX(decimals) AS decimals
    FROM
    acala.transfers
    WHERE
    symbol IS NOT NULL
    GROUP BY
    symbol
    )
    SELECT
    b.asset,
    b.symbol,
    d.decimals
    FROM
    acala.balances b
    LEFT JOIN decimals_for_each_symbol d ON b.symbol = d.symbol
    GROUP BY
    b.asset,
    b.symbol,
    d.decimals
    ORDER BY
    SUM(b.free + b.reserved + b.misc_frozen + b.frozen) DESC

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/assethub-dashboards.html b/docs/general/dune-analytics/assethub-dashboards.html index be01bd89f433..a64b9db923aa 100644 --- a/docs/general/dune-analytics/assethub-dashboards.html +++ b/docs/general/dune-analytics/assethub-dashboards.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ queries. You can use the following DuneSQL queries as examples:

    Sum of USDC in Polkadot Parachains
    SELECT
    *
    FROM
    "query_3526956(asset_id='1984')" -- AssetHub Sum of Stablecoin on Each Chain by Time
    WHERE
    not chain_name = ''

    Query result:

    Visualized result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/astar-dashboards.html b/docs/general/dune-analytics/astar-dashboards.html index d9014a5d0f84..ed59270af73e 100644 --- a/docs/general/dune-analytics/astar-dashboards.html +++ b/docs/general/dune-analytics/astar-dashboards.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ queries. You can use the following DuneSQL queries as examples:

    Astar EVM Executed
    SELECT
    block_number, extrinsic_id, event_id, extrinsic_hash, section, method,
    json_extract_scalar(data, '$[0]') as tx_from,
    json_extract_scalar(data, '$[1]') as tx_to,
    json_extract_scalar(data, '$[2]') as tx_hash,
    json_extract(data, '$[3]') as tx_success
    FROM
    astar.events
    WHERE
    block_time >= TIMESTAMP '2024-02-13 00:00:00' and (section = 'ethereum' and method = 'Executed')
    limit 10000;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/bifrost-dashboards.html b/docs/general/dune-analytics/bifrost-dashboards.html index 58b242dcc6ab..8487e72f3e25 100644 --- a/docs/general/dune-analytics/bifrost-dashboards.html +++ b/docs/general/dune-analytics/bifrost-dashboards.html @@ -19,7 +19,7 @@ - + @@ -37,7 +37,7 @@ maintain precision.

    Query result:

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/bridgehub-dashboards.html b/docs/general/dune-analytics/bridgehub-dashboards.html index efbf97ddf459..5198aa672eac 100644 --- a/docs/general/dune-analytics/bridgehub-dashboards.html +++ b/docs/general/dune-analytics/bridgehub-dashboards.html @@ -19,7 +19,7 @@ - + @@ -34,7 +34,7 @@ queries. You can use the following DuneSQL queries as examples:

    Bridgehub and Kusama Message Trends
    WITH
    transactions AS (
    SELECT
    CASE
    WHEN ROW_NUMBER() OVER (
    PARTITION BY
    "from",
    "to",
    "send_time"
    ORDER BY
    "send_time"
    ) % 2 = 1 THEN "from"
    ELSE "to"
    END AS direction,
    date_trunc('month', "send_time") as month
    FROM
    query_3816910
    ),
    polkadot_to_kusama AS (
    SELECT
    month,
    COUNT(*) as count_polkadot_to_kusama
    FROM
    transactions
    WHERE
    direction = 'polkadot'
    GROUP BY
    month
    ),
    kusama_to_polkadot AS (
    SELECT
    month,
    COUNT(*) as count_kusama_to_polkadot
    FROM
    transactions
    WHERE
    direction = 'kusama'
    GROUP BY
    month
    ),
    all_polkadot_to_kusama AS (
    SELECT
    'for_join' as "for_join",
    COUNT(*) as total_count_polkadot_to_kusama
    FROM
    transactions
    WHERE
    direction = 'polkadot'
    ),
    all_kusama_to_polkadot AS (
    SELECT
    'for_join' as "for_join",
    COUNT(*) as total_count_kusama_to_polkadot
    FROM
    transactions
    WHERE
    direction = 'kusama'
    ),
    monthly_result as (
    SELECT
    coalesce(
    polkadot_to_kusama.month,
    kusama_to_polkadot.month
    ) as month,
    coalesce(count_polkadot_to_kusama, 0) as count_polkadot_to_kusama,
    coalesce(count_kusama_to_polkadot, 0) as count_kusama_to_polkadot,
    'for_join' as "for_join"
    FROM
    polkadot_to_kusama
    FULL OUTER JOIN kusama_to_polkadot ON polkadot_to_kusama.month = kusama_to_polkadot.month
    ORDER BY
    month
    )
    SELECT
    monthly_result.month,
    monthly_result.count_polkadot_to_kusama,
    monthly_result.count_kusama_to_polkadot,
    all_polkadot_to_kusama.total_count_polkadot_to_kusama,
    all_kusama_to_polkadot.total_count_kusama_to_polkadot
    FROM
    monthly_result
    LEFT JOIN all_polkadot_to_kusama on monthly_result.for_join = all_polkadot_to_kusama.for_join
    LEFT JOIN all_kusama_to_polkadot on monthly_result.for_join = all_kusama_to_polkadot.for_join

    Query result:

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/centrifuge-dashboards.html b/docs/general/dune-analytics/centrifuge-dashboards.html index 99ff42aa294d..9fd8019c597f 100644 --- a/docs/general/dune-analytics/centrifuge-dashboards.html +++ b/docs/general/dune-analytics/centrifuge-dashboards.html @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ maintain precision.

    Query result:

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/collectives-dashboards.html b/docs/general/dune-analytics/collectives-dashboards.html index 377a64b81b0b..dc1ec1565a88 100644 --- a/docs/general/dune-analytics/collectives-dashboards.html +++ b/docs/general/dune-analytics/collectives-dashboards.html @@ -19,7 +19,7 @@ - + @@ -34,7 +34,7 @@ materialized queries. You can use the following DuneSQL queries as examples:

    Collectives Referenda Types
    WITH types AS (
    SELECT
    block_time,
    JSON_EXTRACT_SCALAR(params, '$.proposal.lookup.hash') AS lookup,
    JSON_EXTRACT_SCALAR(params, '$.proposal_origin.fellowshipOrigins') AS fellowshipOrigins
    FROM
    collectives.extrinsics
    WHERE
    section = 'fellowshipReferenda'
    AND method = 'submit'
    AND JSON_EXTRACT_SCALAR(params, '$.proposal.lookup.hash') IS NOT NULL
    )
    SELECT
    JSON_EXTRACT_SCALAR(data, '$[0]') AS r_id,
    JSON_EXTRACT_SCALAR(data, '$[2].lookup.hash') AS lookup,
    COALESCE(types.fellowshipOrigins, 'Fellows') AS types
    FROM
    collectives.events
    LEFT JOIN types ON JSON_EXTRACT_SCALAR(data, '$[2].lookup.hash') = types.lookup
    WHERE
    method = 'Submitted'
    AND JSON_EXTRACT_SCALAR(data, '$[2].lookup.hash') IS NOT NULL;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/coretime-dashboards.html b/docs/general/dune-analytics/coretime-dashboards.html index b21049916e6e..3146d7203a9b 100644 --- a/docs/general/dune-analytics/coretime-dashboards.html +++ b/docs/general/dune-analytics/coretime-dashboards.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ queries. You can use the following DuneSQL queries as examples:

    Kusama Coretime Core Statistics
    WITH
    core_sta as (
    SELECT
    block_time,
    get_href (
    'https://nodle.subscan.io/extrinsic/' || cast(extrinsic_id as VARCHAR),
    extrinsic_id
    ) as extrinsics_url,
    extrinsic_id,
    CAST(JSON_EXTRACT_SCALAR(data, '$[0]') AS BIGINT) as sale_start,
    CAST(JSON_EXTRACT_SCALAR(data, '$[1]') AS BIGINT) as leadin_length,
    CAST(JSON_EXTRACT_SCALAR(data, '$[2]') AS BIGINT) / pow(10, 12) as start_price,
    CAST(JSON_EXTRACT_SCALAR(data, '$[3]') AS BIGINT) / pow(10, 12) as regular_price,
    CAST(JSON_EXTRACT_SCALAR(data, '$[4]') AS BIGINT) as region_begin,
    CAST(JSON_EXTRACT_SCALAR(data, '$[5]') AS BIGINT) as region_end,
    CAST(JSON_EXTRACT_SCALAR(data, '$[6]') AS BIGINT) as ideal_cores_sold,
    CAST(JSON_EXTRACT_SCALAR(data, '$[7]') AS BIGINT) as cores_offered,
    CAST(
    ROW_NUMBER() OVER (
    ORDER BY
    block_time ASC
    ) AS BIGINT
    ) AS sale_round
    FROM
    coretime_kusama.events
    WHERE
    section = 'broker'
    AND method = 'SaleInitialized'
    )
    SELECT
    *,
    get_href (
    'https://dune.com/substrate/kusama-coretime-sales-history?sale_round=' || cast(sale_round as VARCHAR),
    cast(sale_round as VARCHAR)
    ) as sale_round_url
    FROM
    core_sta
    ORDER BY
    block_time DESC

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/energywebx-dashboards.html b/docs/general/dune-analytics/energywebx-dashboards.html index 3e07c5274c54..5c52779d186c 100644 --- a/docs/general/dune-analytics/energywebx-dashboards.html +++ b/docs/general/dune-analytics/energywebx-dashboards.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ queries. You can use the following DuneSQL queries as examples:

    EnergyWebX Token Lifted & Lowered
    WITH
    lift AS (
    SELECT
    date_trunc('day', block_time) AS day,
    SUM(
    CAST(json_extract_scalar(data, '$[1]') AS double) / POWER(10, 18)
    ) AS amount,
    'AVTLifted' AS method
    FROM
    energywebx.events
    WHERE
    method = 'AVTLifted'
    GROUP BY
    date_trunc('day', block_time)
    ),
    lower AS (
    SELECT
    date_trunc('day', block_time) AS day,
    SUM(
    CAST(json_extract_scalar(data, '$[2]') AS double) / POWER(10, 18)
    ) AS amount,
    'AVTLowered' AS method
    FROM
    energywebx.events
    WHERE
    method = 'AvtLowered'
    GROUP BY
    date_trunc('day', block_time)
    )
    SELECT
    *
    FROM
    lift
    UNION ALL
    SELECT
    *
    FROM
    lower;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/frequency-dashboards.html b/docs/general/dune-analytics/frequency-dashboards.html index 5453941da1b6..87b8a8ee0b13 100644 --- a/docs/general/dune-analytics/frequency-dashboards.html +++ b/docs/general/dune-analytics/frequency-dashboards.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ queries. You can use the following DuneSQL queries as examples:

    Frequency Extrinsics by Day
    SELECT
    DATE_TRUNC('day', block_time) AS day,
    section || '_' || method AS section_method,
    COUNT(*) AS cnt
    FROM
    frequency.extrinsics
    WHERE
    section || '_' || method IN (
    SELECT section_method
    FROM unnest(SPLIT('{{section_method}}', ',')) AS c(section_method)
    )
    GROUP BY
    DATE_TRUNC('day', block_time),
    section || '_' || method;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/hydration-dashboards.html b/docs/general/dune-analytics/hydration-dashboards.html index 212481de6990..84d14d624fbb 100644 --- a/docs/general/dune-analytics/hydration-dashboards.html +++ b/docs/general/dune-analytics/hydration-dashboards.html @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ and still maintain precision.

    Query result:

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/interlay-dashboards.html b/docs/general/dune-analytics/interlay-dashboards.html index d909d91a2e3b..b9633ee1cd5d 100644 --- a/docs/general/dune-analytics/interlay-dashboards.html +++ b/docs/general/dune-analytics/interlay-dashboards.html @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ and still maintain precision.

    Query result:

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/invarch-dashboards.html b/docs/general/dune-analytics/invarch-dashboards.html index 2be64b16efd7..ceaeda417640 100644 --- a/docs/general/dune-analytics/invarch-dashboards.html +++ b/docs/general/dune-analytics/invarch-dashboards.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ queries. You can use the following DuneSQL queries as examples:

    InvArch Cumulative Activated Acounts by Day
    WITH accounts_first_active AS (
    SELECT
    address_ss58,
    MIN(date_trunc('day', ts)) AS first_active_date
    FROM
    invarch.balances
    WHERE
    (free + reserved + misc_frozen + frozen) > 0
    GROUP BY
    address_ss58
    )
    SELECT
    first_active_date AS date,
    SUM(COUNT(DISTINCT address_ss58)) OVER (
    ORDER BY
    DATE(first_active_date)
    ) AS cumulative_accounts
    FROM
    accounts_first_active
    GROUP BY
    first_active_date
    ORDER BY
    first_active_date DESC;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/litentry-dashboards.html b/docs/general/dune-analytics/litentry-dashboards.html index b39db4275332..eecb52ded966 100644 --- a/docs/general/dune-analytics/litentry-dashboards.html +++ b/docs/general/dune-analytics/litentry-dashboards.html @@ -19,7 +19,7 @@ - + @@ -34,7 +34,7 @@ queries. You can use the following DuneSQL queries as examples:

    Litentry LIT Token Sent To Ethereum
    SELECT DISTINCT
    block_time,
    extrinsic_id,
    get_href(
    'https://litentry.statescan.io/#/extrinsics/' || extrinsic_id,
    extrinsic_id
    ) AS extrinsic_id_url,
    JSON_VALUE(data, 'strict $[0]') AS dest_id,
    JSON_VALUE(data, 'strict $[1]') AS nonce,
    JSON_VALUE(data, 'strict $[2]') AS source_id,
    IF(
    JSON_VALUE(data, 'strict $[3]') LIKE '0x%',
    bytearray_to_int256(JSON_VALUE(data, 'strict $[3]')) / POW(10, 12),
    CAST(JSON_VALUE(data, 'strict $[3]') AS int256) / POW(10, 12)
    ) AS amount,
    JSON_VALUE(data, 'strict $[4]') AS recipient,
    get_href(
    'https://etherscan.io/address/' || JSON_VALUE(data, 'strict $[4]'),
    CONCAT(
    SUBSTR(JSON_VALUE(data, 'strict $[4]'), 1, 4),
    '...',
    SUBSTR(
    JSON_VALUE(data, 'strict $[4]'),
    LENGTH(JSON_VALUE(data, 'strict $[4]')) - 3
    )
    )
    ) AS recipient_url
    FROM
    litentry.events
    WHERE
    section = 'chainBridge'
    AND method = 'FungibleTransfer'
    ORDER BY
    block_time DESC;

    Query result:

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/manta-dashboards.html b/docs/general/dune-analytics/manta-dashboards.html index 152f8e78d744..6bb39ec22061 100644 --- a/docs/general/dune-analytics/manta-dashboards.html +++ b/docs/general/dune-analytics/manta-dashboards.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ queries. You can use the following DuneSQL queries as examples:

    Manta to Moonbeam XTokens Transfer
    SELECT
    DATE_TRUNC('day', block_time) AS day,
    SUM(
    CAST(json_extract_scalar(params, '$.amount') AS DOUBLE) / POWER(10, 18)
    ) AS amount,
    'Manta to Moonbeam' AS section
    FROM
    manta.extrinsics
    WHERE
    section = 'xTokens'
    AND method = 'transfer'
    AND json_extract_scalar(params, '$.dest.v3.interior.x2[0].parachain') = '2004'
    GROUP BY
    DATE_TRUNC('day', block_time)
    ORDER BY
    day DESC;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/moonbeam-dashboards.html b/docs/general/dune-analytics/moonbeam-dashboards.html index 75bb0af103f6..c202589609d5 100644 --- a/docs/general/dune-analytics/moonbeam-dashboards.html +++ b/docs/general/dune-analytics/moonbeam-dashboards.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ queries. You can use the following DuneSQL queries as examples:

    Moonbeam Referenda Result
    SELECT DISTINCT
    CAST(JSON_EXTRACT_SCALAR(data, '$[0]') AS INTEGER) AS referenda_id,
    get_href(
    'https://moonbeam.subscan.io/referenda_v2/' || CAST(JSON_EXTRACT_SCALAR(data, '$[0]') AS VARCHAR),
    CAST(JSON_EXTRACT_SCALAR(data, '$[0]') AS VARCHAR)
    ) AS referenda_id_url,
    varbinary_to_uint256(
    from_hex(SUBSTR(JSON_EXTRACT_SCALAR(data, '$[1].ayes'), 3))
    ) / POW(10, 18) AS aye_total,
    varbinary_to_uint256(
    from_hex(SUBSTR(JSON_EXTRACT_SCALAR(data, '$[1].nays'), 3))
    ) / POW(10, 18) AS nay_total,
    varbinary_to_uint256(
    from_hex(SUBSTR(JSON_EXTRACT_SCALAR(data, '$[1].support'), 3))
    ) / POW(10, 18) AS support,
    method AS result
    FROM
    moonbeam.events
    WHERE
    section = 'referenda'
    AND (
    method = 'Confirmed'
    OR method = 'Rejected'
    OR method = 'Cancelled'
    OR method = 'TimedOut'
    )
    ORDER BY
    referenda_id DESC;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/neuroweb-dashboards.html b/docs/general/dune-analytics/neuroweb-dashboards.html index 1608d542ccb1..306ad92cd0c2 100644 --- a/docs/general/dune-analytics/neuroweb-dashboards.html +++ b/docs/general/dune-analytics/neuroweb-dashboards.html @@ -19,7 +19,7 @@ - + @@ -34,7 +34,7 @@ queries. You can use the following DuneSQL queries as examples:

    Neuroweb Knowledge Asset Distribution
    SELECT DISTINCT
    get_href(
    'https://dkg.origintrail.io/profile?wallet=' || CAST(To AS VARCHAR),
    CONCAT(
    SUBSTR(To, 1, 4),
    '...',
    SUBSTR(To, LENGTH(To) - 3)
    )
    ) AS Holder_URL,
    CONCAT(
    SUBSTR(To, 1, 4),
    '...',
    SUBSTR(To, LENGTH(To) - 3)
    ) AS Holder,
    COUNT("Token ID") AS "# of Tokens"
    FROM
    query_3695045
    GROUP BY
    To
    ORDER BY
    "# of Tokens" DESC;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/nodle-dashboards.html b/docs/general/dune-analytics/nodle-dashboards.html index f77953661a0f..3d56a3d0a316 100644 --- a/docs/general/dune-analytics/nodle-dashboards.html +++ b/docs/general/dune-analytics/nodle-dashboards.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ queries. You can use the following DuneSQL queries as examples:

    Nodle Mint Uniques
    SELECT DISTINCT
    block_time,
    JSON_EXTRACT_SCALAR(call_args, '$.owner.id') AS owner,
    JSON_EXTRACT(call_args, '$.collection') AS collection,
    JSON_EXTRACT(call_args, '$.item') AS item
    FROM
    nodle.calls
    WHERE
    (call_section = 'nodleUniques' OR call_section = 'uniques')
    AND call_method = 'mint'
    AND extrinsic_id NOT IN (
    SELECT
    extrinsic_id
    FROM
    nodle.events
    WHERE
    method = 'ExtrinsicFailed'
    );

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/parachain-dashboards.html b/docs/general/dune-analytics/parachain-dashboards.html index b4bea1813c07..6ae921519899 100644 --- a/docs/general/dune-analytics/parachain-dashboards.html +++ b/docs/general/dune-analytics/parachain-dashboards.html @@ -19,13 +19,13 @@ - +

    Parachain Dashboards

    In-depth analysis dashboards for each specific parachain within the Polkadot ecosystem.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/pendulum-dashboards.html b/docs/general/dune-analytics/pendulum-dashboards.html index d7c8ffd08885..f1048db79a44 100644 --- a/docs/general/dune-analytics/pendulum-dashboards.html +++ b/docs/general/dune-analytics/pendulum-dashboards.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ queries. You can use the following DuneSQL queries as examples:

    Pendulum Spacewalk Transactions by Month
    SELECT
    DATE_TRUNC('month', block_time) AS month,
    SUM(amount) AS amount,
    COUNT(*) AS count,
    token_name
    FROM
    query_3821151 -- Pendulum Spacewalk Transactions
    GROUP BY
    DATE_TRUNC('month', block_time),
    token_name;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/people-dashboards.html b/docs/general/dune-analytics/people-dashboards.html index 89a64e5641ce..61d406bfcad4 100644 --- a/docs/general/dune-analytics/people-dashboards.html +++ b/docs/general/dune-analytics/people-dashboards.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ queries. You can use the following DuneSQL queries as examples:

    Kusama People Chain - Identity History Sample
    SELECT
    block_time,
    extrinsic_id,
    signer_ss58,
    signer_pub_key,
    CAST(
    from_utf8(
    from_hex(JSON_EXTRACT_SCALAR(call_args, '$.info.display.raw'))
    ) AS VARCHAR
    ) AS name,
    CAST(
    from_utf8(
    from_hex(JSON_EXTRACT_SCALAR(call_args, '$.info.email.raw'))
    ) AS VARCHAR
    ) AS email
    FROM
    people_kusama.calls
    WHERE
    call_section = 'identity'
    AND call_method = 'setIdentity';

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/phala-dashboards.html b/docs/general/dune-analytics/phala-dashboards.html index 2bbcc1c120b5..884577f93e66 100644 --- a/docs/general/dune-analytics/phala-dashboards.html +++ b/docs/general/dune-analytics/phala-dashboards.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ queries. You can use the following DuneSQL queries as examples:

    Phala Computation
    SELECT
    chain,
    circulation,
    sygma_bridge,
    reward,
    COALESCE(total_issuance, total_supply) AS total_issuance,
    total_value,
    idle_worker_count,
    daily_rewards,
    average_apr,
    budget_per_share,
    delegator_count
    FROM
    dune.phala_network.dataset_phala_computation;

    Query result:

    Visualizations using the query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polimec-dashboards.html b/docs/general/dune-analytics/polimec-dashboards.html index e9a16634d6a2..16e70e546ddc 100644 --- a/docs/general/dune-analytics/polimec-dashboards.html +++ b/docs/general/dune-analytics/polimec-dashboards.html @@ -19,7 +19,7 @@ - + @@ -31,7 +31,7 @@ queries. You can use the following DuneSQL queries as examples:

    Polimec Latest Reward Distribution
    WITH latest_round AS (
    SELECT
    MAX(CAST(JSON_EXTRACT_SCALAR(data, '$[0]') AS BIGINT)) AS start_block
    FROM
    polimec.events
    WHERE
    section = 'parachainStaking'
    AND method = 'NewRound'
    ),
    summed AS (
    SELECT
    MAX(block_time) AS latest_time,
    JSON_EXTRACT_SCALAR(JSON_PARSE(data), '$[0]') AS delegator,
    SUM(
    CAST(JSON_EXTRACT_SCALAR(data, '$[1]') AS BIGINT) / POW(10, 10)
    ) AS reward
    FROM
    polimec.events
    WHERE
    section = 'parachainStaking'
    AND method = 'Rewarded'
    AND CAST(block_number AS BIGINT) >= (
    SELECT
    start_block
    FROM
    latest_round
    )
    GROUP BY
    JSON_EXTRACT_SCALAR(JSON_PARSE(data), '$[0]')
    )
    SELECT
    latest_time,
    delegator,
    get_href(
    'https://explorer.polimec.org/polimec/account/' || delegator,
    CONCAT(
    SUBSTR(delegator, 1, 4),
    '...',
    SUBSTR(delegator, LENGTH(delegator) - 3)
    )
    ) AS delegator_url,
    reward
    FROM
    summed
    ORDER BY
    reward DESC;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadex-dashboards.html b/docs/general/dune-analytics/polkadex-dashboards.html index 3c168d2f26f1..f022e215514e 100644 --- a/docs/general/dune-analytics/polkadex-dashboards.html +++ b/docs/general/dune-analytics/polkadex-dashboards.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ queries. You can use the following DuneSQL queries as examples:

    Polkadot BridgeHub Outbound Msg Sent To Ethereum
    SELECT
    DATE_TRUNC('day', block_time) AS day,
    COUNT(method) AS cnt
    FROM
    polkadex.events
    WHERE
    method = 'TransferredMultiAssets'
    GROUP BY
    DATE_TRUNC('day', block_time);

    Query result:

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards-governance.html b/docs/general/dune-analytics/polkadot-dashboards-governance.html index 5ba6e292b977..c985e57a7492 100644 --- a/docs/general/dune-analytics/polkadot-dashboards-governance.html +++ b/docs/general/dune-analytics/polkadot-dashboards-governance.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ Visit our dashboard on Dune to use the referendum_id parameter for more in-depth analysis. For more information, please visit the Dune documentation on parameters.

    Voting Power Analysis

    • Voting Power Daily Accumulation

    • Aye vs Nay

    Vote Analysis

    • Aye Votes Analysis

    • Nay Votes Analysis

    • Abstain Votes Analysis

    Voter Insights

    • First Time Voter Analysis

    • Voter Conviction Adjustment

    • Awakened Voters

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards-network.html b/docs/general/dune-analytics/polkadot-dashboards-network.html index 052723a8a180..1d675b1ec5a3 100644 --- a/docs/general/dune-analytics/polkadot-dashboards-network.html +++ b/docs/general/dune-analytics/polkadot-dashboards-network.html @@ -19,7 +19,7 @@ - + @@ -43,7 +43,7 @@ stake concentration by showing the difference between the highest and lowest stakes as a percentage of the total stake, offering insights into the network's staking dynamics and the level of decentralization.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards-overview.html b/docs/general/dune-analytics/polkadot-dashboards-overview.html index f0fad8647de0..f1a9379c9b6c 100644 --- a/docs/general/dune-analytics/polkadot-dashboards-overview.html +++ b/docs/general/dune-analytics/polkadot-dashboards-overview.html @@ -19,7 +19,7 @@ - + @@ -68,7 +68,7 @@ queries. You can use the following DuneSQL queries as examples:

    Polkadot Staking APR (Normalized)
    SELECT
    AVG(validator_normalized_staking_apr) AS staking_apr,
    era,
    DATE_FORMAT(ts, '%Y-%m-%d') AS era_ts
    FROM
    dune.substrate.result_polkadot_validators
    WHERE
    validator_is_active = TRUE
    AND validator_commission <> 1
    GROUP BY
    era,
    ts
    HAVING
    AVG(validator_normalized_staking_apr) > 0
    ORDER BY
    era DESC;

    Query result:

    Visualized result:

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards-staking.html b/docs/general/dune-analytics/polkadot-dashboards-staking.html index 8d488356cd91..a9229ce06314 100644 --- a/docs/general/dune-analytics/polkadot-dashboards-staking.html +++ b/docs/general/dune-analytics/polkadot-dashboards-staking.html @@ -19,7 +19,7 @@ - + @@ -55,7 +55,7 @@ Visit our dashboard on Dune to use the user_ss58 parameter for more in-depth analysis. For more information, please visit the Dune documentation on parameters.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards.html b/docs/general/dune-analytics/polkadot-dashboards.html index ea2632387aa9..3d73f637a58f 100644 --- a/docs/general/dune-analytics/polkadot-dashboards.html +++ b/docs/general/dune-analytics/polkadot-dashboards.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards/polkadot-dot-ordinals.html b/docs/general/dune-analytics/polkadot-dashboards/polkadot-dot-ordinals.html index ce1a1158b80f..72367db2fa7b 100644 --- a/docs/general/dune-analytics/polkadot-dashboards/polkadot-dot-ordinals.html +++ b/docs/general/dune-analytics/polkadot-dashboards/polkadot-dot-ordinals.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards/polkadot-governance-dashboard.html b/docs/general/dune-analytics/polkadot-dashboards/polkadot-governance-dashboard.html index 34ac3c203f46..60d359448121 100644 --- a/docs/general/dune-analytics/polkadot-dashboards/polkadot-governance-dashboard.html +++ b/docs/general/dune-analytics/polkadot-dashboards/polkadot-governance-dashboard.html @@ -19,7 +19,7 @@ - + @@ -81,7 +81,7 @@ voting conviction, using interactive elements that link to external references for detailed blockchain data. This allows for an in-depth look at the re-emergence of major stakeholders in the decision-making process.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards/polkadot-opengov-referenda-home.html b/docs/general/dune-analytics/polkadot-dashboards/polkadot-opengov-referenda-home.html index 6f32c3f8488c..5013e476dba0 100644 --- a/docs/general/dune-analytics/polkadot-dashboards/polkadot-opengov-referenda-home.html +++ b/docs/general/dune-analytics/polkadot-dashboards/polkadot-opengov-referenda-home.html @@ -19,7 +19,7 @@ - + @@ -29,7 +29,7 @@ Polkassembly.

    If you want to see more details of each referendum, please check Polkadot Opengov - Referendum Voting Analysis.

    Authored by @ colorfulnotion

    Controversial Referenda

    Select those referenda with approval ratings ranging from 0.2 to 0.8, and consider them as controversial referenda.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards/polkadot-opengov-referendum-voting-analysis.html b/docs/general/dune-analytics/polkadot-dashboards/polkadot-opengov-referendum-voting-analysis.html index e9f6dafbf223..a1dd7b0784b7 100644 --- a/docs/general/dune-analytics/polkadot-dashboards/polkadot-opengov-referendum-voting-analysis.html +++ b/docs/general/dune-analytics/polkadot-dashboards/polkadot-opengov-referendum-voting-analysis.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ how voter convictions shift across referenda.

    Methodology

    Calculates each voter's previous average conviction, compares it to their current conviction in the referendum, and categorizes the change as Increase 🔼, Maintain 🔁, or Decrease 🔽. Finally, it provides counts and percentages for each category

    Awakened Voters

    Enumerate the "Aye" and "Nay" voters who have not voted in the last 90 days

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-nomination-pool.html b/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-nomination-pool.html index c13d15e0cc76..64fd1286449b 100644 --- a/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-nomination-pool.html +++ b/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-nomination-pool.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@

    Polkadot Staking Dashboard (Nomination Pool)

    View On Dune: Polkadot Staking Dashboard

    We're using default parameters for all of the following parameterized charts. Visit our dashboard on Dune to use the pool_id parameter and analyze a specific referendum.

    For a _specific nomination pool id, this dashbaord shows:

    • Pool Members
    • Historical APY, Daily Pool Rewards & Fees

    Raw data is presented at the bottom.

    Source Table: polkadot.stakings , MaterializedView: dune.substrate.result_polkadot_nominationpools

    Go back to Polkadot Staking Home

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-nominators.html b/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-nominators.html index 86d37a7f6e33..3eeef1e187ab 100644 --- a/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-nominators.html +++ b/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-nominators.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@

    Polkadot Staking Dashboard (Nominators)

    View On Dune: Polkadot Staking Dashboard

    We're using default parameters for all of the following parameterized charts. Visit our dashboard on Dune to use the nominator_ss58 parameter and analyze a specific referendum.

    For a specific nominator, this dashboard shows:

    • Nominator Staking Rewards
    • Nominator Shares
    • Delegated Amount
    • Nominator Staking Rewards Raw Data

    Source Table: polkadot.stakings , MaterializedView: dune.substrate.result_polkadot_nominators

    Go back to Polkadot Staking Home

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-pool-member.html b/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-pool-member.html index 12413b887fc8..faef524edf74 100644 --- a/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-pool-member.html +++ b/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-pool-member.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@

    Polkadot Staking Dashboard (Pool Member)

    View On Dune: Polkadot Staking Dashboard

    We're using default parameters for all of the following parameterized charts. Visit our dashboard on Dune to use the user_ss58 parameter and analyze a specific referendum.

    For a specific nomination pool member

    This dashboard shows raw data of member activity within the pool

    Member Pool Fee: 365 * member_staking_rewards / member_bonded

    Source Table: polkadot.stakings , MaterializedView: dune.substrate.result_polkadot_poolmembers

    Go back to Polkadot Staking Home

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-validators.html b/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-validators.html index 53c7a5ce54f9..604a057739bf 100644 --- a/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-validators.html +++ b/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard-validators.html @@ -19,7 +19,7 @@ - + @@ -31,7 +31,7 @@ commission) / validator_total_stake. This metric nomoralized the reward rate across active validator sets

    Source Table: polkadot.stakings , MaterializedView: dune.substrate.result_polkadot_validators

    Go back to Polkadot Staking Home

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard.html b/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard.html index 2a7a6a886556..3bf0cdb9c9ee 100644 --- a/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard.html +++ b/docs/general/dune-analytics/polkadot-dashboards/polkadot-staking-dashboard.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ dune.substrate.result_polkadot_nominationpools (MetVeiw)
  • Pool Members - dune.substrate.result_polkadot_poolmembers (MetVeiw)
  • On-Chain Identities - dune.substrate.result_polkadot_identity (MetVeiw)
  • Github repo: substrate-etl

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/snowbridge-dashboards.html b/docs/general/dune-analytics/snowbridge-dashboards.html index 0ea7fdb15331..092b61aec7b2 100644 --- a/docs/general/dune-analytics/snowbridge-dashboards.html +++ b/docs/general/dune-analytics/snowbridge-dashboards.html @@ -19,7 +19,7 @@ - + @@ -34,7 +34,7 @@ queries. You can use the following DuneSQL queries as examples:

    Polkadot BridgeHub Outbound Msg Sent To Ethereum
    SELECT DISTINCT
    block_time,
    block_number,
    block_hash,
    extrinsic_id,
    extrinsic_hash,
    event_id,
    section,
    method,
    CAST(JSON_VALUE(data, 'strict $[0]') AS VARCHAR) AS message_id,
    CAST(JSON_VALUE(data, 'strict $[1]') AS uint256) AS nonce
    FROM
    bridgehub.events
    WHERE
    section = 'ethereumOutboundQueue'
    AND method = 'MessageAccepted';

    Query result:

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/stellaswap-dashboards.html b/docs/general/dune-analytics/stellaswap-dashboards.html index 13d98460d4e6..42c68d051637 100644 --- a/docs/general/dune-analytics/stellaswap-dashboards.html +++ b/docs/general/dune-analytics/stellaswap-dashboards.html @@ -19,7 +19,7 @@ - + @@ -45,7 +45,7 @@ calculated.

    Query result:

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dune-analytics/unique-dashboards.html b/docs/general/dune-analytics/unique-dashboards.html index b0d342078939..ffdb94546490 100644 --- a/docs/general/dune-analytics/unique-dashboards.html +++ b/docs/general/dune-analytics/unique-dashboards.html @@ -19,7 +19,7 @@ - + @@ -34,7 +34,7 @@ queries. You can use the following DuneSQL queries as examples:

    Unique Top Collections by Total Sales Amount
    SELECT
    collection_id_with_dashboard_url,
    token_prefix,
    SUM(for_price) AS total_amount
    FROM
    dune.substrate.result_unique_nft_transaction_info
    GROUP BY
    collection_id_with_dashboard_url,
    token_prefix
    ORDER BY
    SUM(for_price) DESC;

    Query result:

    DuneSQL Referece

    For more information on DuneSQL, please refer to the DuneSQL Cheatsheet and DuneSQL Official Documentation.

    - + \ No newline at end of file diff --git a/docs/general/dunesql-cheatsheet.html b/docs/general/dunesql-cheatsheet.html index 96828f8d331d..818896d0c61f 100644 --- a/docs/general/dunesql-cheatsheet.html +++ b/docs/general/dunesql-cheatsheet.html @@ -19,7 +19,7 @@ - + @@ -29,7 +29,7 @@ versions of SQL. Below is a comparison table of common features between DuneSQL and Google BigQuery SQL.

    DuneSQL Reference

    For more information on DuneSQL, please refer to the DuneSQL documentation.

    Problem TypeBigQueryDuneSQL(V2)Description
    JSON Reading MethodJSON_EXTRACT_SCALAR(call_args, "$.remark")JSON_EXTRACT_SCALAR(JSON_PARSE(call_args), '$.remark')In DuneSQL, JSON_PARSE is needed to split the JSON if it is initially not in JSON format but is transformed into a JSON string.
    JSON array to SQL arrayJSON_EXTRACT_ARRAY(JSON_EXTRACT(pv, '$.others'))cast(json_extract(pv, '$.others') as array<json>)BigQuery uses a function for this conversion, while DuneSQL utilizes casting and supports the JSON data type.
    HEX to UTF8SAFE_CONVERT_BYTES_TO_STRING(FROM_HEX(SUBSTR(hex_encode, 3)))FROM_UTF8(from_hex(SUBSTR(hex_encode, 3)))In DuneSQL, the SAFE_CONVERT_BYTES_TO_STRING is not required.
    Time SeriesTIMESTAMP_TRUNC(block_time, DAY) >= TIMESTAMP("2023-12-01")block_time >= date('2023-12-01')Time conversion in DuneSQL is simpler, involving direct usage of variable operator date(value).
    Data Type Conversion (FLOAT64 to DOUBLE)CAST(JSON_EXTRACT_SCALAR(nominationpools_rewardpools, '$.lastRecordedRewardCounter') AS FLOAT64)CAST(JSON_EXTRACT_SCALAR(nominationpools_rewardpools, '$.lastRecordedRewardCounter')BigQuery refers to the data format as FLOAT64, while in DuneSQL, it is termed DOUBLE.
    Handling Null ValuesIFNULL(prev_member_bonded, 0)COALESCE(prev_member_bonded, 0)In DuneSQL, BigQuery's IFNULL is equivalent to COALESCE.
    Calculating Local Time and Subtracting DaysTIMESTAMP_TRUNC(ts, DAY) >= TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))ts >= date(current_date - interval '30' day)In BigQuery, operations on dates require functions, but DuneSQL allows direct use of + and -.
    Using Hyperlinks in TablesSELECT concat(concat(concat("<a href='https://analytics.polkaholic.io/superset/dashboard/77/?account=", address_ss58), "'>"), if(address_name is null, concat(address_ss58, '</a>'), concat(address_name, '</a>')))CONCAT('<a target="_new" href="https://analytics.polkaholic.io/superset/dashboard/77/?account=', address_ss58, '">', address_ss58 ,'</a>') AS address_ss58DuneSQL enables string concatenation using CONCAT, making it straightforward compared to the multiple concat functions required in BigQuery.
    - + \ No newline at end of file diff --git a/docs/general/onboarding-status-and-key-dashboards.html b/docs/general/onboarding-status-and-key-dashboards.html index 81a70168e9db..49ef2a917549 100644 --- a/docs/general/onboarding-status-and-key-dashboards.html +++ b/docs/general/onboarding-status-and-key-dashboards.html @@ -19,7 +19,7 @@ - + @@ -30,7 +30,7 @@ powerful Dune Integration.

    The data must flow. As dashboard catalysts, we are looking forward to seeing more impressive dashboards developed by the community, leveraging this rich dataset to unlock new possibilities and insights.

    - + \ No newline at end of file diff --git a/docs/general/polkadot-ecosystem-overview.html b/docs/general/polkadot-ecosystem-overview.html index 4ae1c97bd1d3..43b8a332bf12 100644 --- a/docs/general/polkadot-ecosystem-overview.html +++ b/docs/general/polkadot-ecosystem-overview.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ Asset Hub Dashboards
  • For Polkadot relay-chain treasury, visit Polkadot Dashboards Governance
  • For Polkadot staking, visit Polkadot Dashboards Staking
  • For NFTs, visit Unique Dashboards
  • Activities Metrics

    Polkadot Treasury Flow

    Polkadot Network & Security

    XCM Metrics

    - + \ No newline at end of file diff --git a/docs/general/project-dashboards.html b/docs/general/project-dashboards.html index e37eb36a94e0..d0c9afd9850f 100644 --- a/docs/general/project-dashboards.html +++ b/docs/general/project-dashboards.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ goal is set up the JAM DUNA as a Wyoming DUNA in July 2024. Wyoming DUNAs provide significant legal advantages over DAOs, requiring a minimum 100 members.
  • DED: DED is a memecoin project originated in the DOT community and developed by the DED Foundation
  • - + \ No newline at end of file diff --git a/docs/getting-started.html b/docs/getting-started.html index 4936ed654cee..6def211d6dff 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -19,7 +19,7 @@ - + @@ -112,7 +112,7 @@ about Polkadot.
  • Sample Applications - Sample applications that are built on or currently being built for Polkadot.
  • Contributing Guide - Rules for contributing to the wiki.
  • Polkadot Knowledge Base - Troubleshooting resources for specific errors and problems.
  • - + \ No newline at end of file diff --git a/docs/glossary.html b/docs/glossary.html index aacbe3929227..ebd25adcfbbb 100644 --- a/docs/glossary.html +++ b/docs/glossary.html @@ -19,7 +19,7 @@ - + @@ -289,7 +289,7 @@ not relevant for parachain developers.

    Witness

    Cryptographic proof statements of data validity.

    Whitelist Pallet

    Allows one Origin to escalate the privilege level of another Origin for a certain operation. In terms of OpenGov, it allows the Fellowship to authorise a new origin (which we will call Whitelisted-Root) to be executed with Root-level privileges.

    - + \ No newline at end of file diff --git a/docs/governance-apps.html b/docs/governance-apps.html index 946b0bc8d4fa..2eaf3fac2ddf 100644 --- a/docs/governance-apps.html +++ b/docs/governance-apps.html @@ -19,7 +19,7 @@ - + @@ -53,7 +53,7 @@ this support guide..

    If you become a nomination pool member or a pool admin, you cannot participate in Governance with the bonded tokens in the pool, as they are held in a system account.

    - + \ No newline at end of file diff --git a/docs/grants.html b/docs/grants.html index 7e1f53687f00..0152bff552af 100644 --- a/docs/grants.html +++ b/docs/grants.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ Treasury or receive a tip for doing something cool in the community.

    Other Grant Programs

    Below is a list of other grant programs in the Polkadot/Substrate ecosystem.

    - + \ No newline at end of file diff --git a/docs/how-to-dyor.html b/docs/how-to-dyor.html index d2f1e38bd858..7fddb4c3bf53 100644 --- a/docs/how-to-dyor.html +++ b/docs/how-to-dyor.html @@ -19,7 +19,7 @@ - + @@ -217,7 +217,7 @@ aims to bring to the ecosystem.

    This does not fall under fact-checking and verifying claims, but it is important to mention: fully understanding what something does and its prospective impact is an integral part of making an informed decision, so do not overlook it.

    - + \ No newline at end of file diff --git a/docs/kusama-adversarial-cheatsheet.html b/docs/kusama-adversarial-cheatsheet.html index 45411e382254..1328299aca3c 100644 --- a/docs/kusama-adversarial-cheatsheet.html +++ b/docs/kusama-adversarial-cheatsheet.html @@ -19,14 +19,14 @@ - +

    Adversarial Cheatsheet

    Expect things to break on Kusama. To help you break some things, take a look at the following threat model.

    Hacker wants to …Security promise that should prevent the hackHacking IncentiveHacking DamageHacking value details
    Double spend tokens via getting the clients to accept a different chainIntegrity (System-wide)HighHighIf attackers are able to double spend tokens, they are able to get services without paying for them. This gives them a high monetary incentive to execute the attack.
    Cause system to mint tokens to his own accountIntegrity (System-wide) MediumLow - MediumIf an attacker is able to craft transactions that mint tokens to their account, then this provides a high monetary incentive to execute this attack.
    Validate malicious blocks to double spend tokensAvailability (System-wide) HighMediumIf an attacker is able to double spend tokens, they are able to get services without paying for them. This gives them a high monetary incentive to execute the attack.
    Undermine consensus mechanism to split chainIntegrity (System-wide)HighHigh"If an attacker is able to double spend tokens, they are able to get services without paying for them. This gives them a high monetary incentive to execute the attack. Betting on decrease in value of the cryptocurrency or competitors want to damage the reputation, so that the value of their blockchain increases.
    Tamper/manipulate blockchain history to invalidate transactions (e.g. a voting result)Integrity (System-wide)MediumMedium - HighAttacker can rollback undesired transactions by intentionally invalidating the block where transaction has happened. Attacker can force a governance decision (or even an on-chain update) that favors them.
    Undermine blockchain or consensus mechanism to damage the ecosystem's reputationAvailability (System-wide)HighHighBetting on decrease in value of the cryptocurrency or competitors want to damage the reputation, so that the value of their blockchain increases
    CensorshipAvailability (System-wide)MediumHighHackers are able to block undesirable types of transactions (e.g. industry competitor transactions or referendum votes). This could be achieved by colluding with other stakeholders or by otherwise obtaining more voting power.
    Deanonymize usersConfidentiality (Node)MediumMediumParties that want to de-anonymize users can use the information to oppress the opposition (e.g. political activists).
    Steal token from nodeIntegrity (Node)HighHighAttackers that are able to steal tokens from nodes can claim assets for themselves, which gives them a high monetary incentive to execute the attack.
    Steal token from node by leaking credentialsConfidentiality (Node)HighHighAttackers that are able to steal tokens from nodes can claim assets for themselves, which gives them a high monetary incentive to execute the attack.
    Prevent node from accessing the Polkadot networkAvailability (Node)LowLow - MediumRun a targeted denial-of-service attack out of revenge, monetary interests (in case of a competing coin exchange, etc.).
    Defraud other participantsIntegrity (Node)MediumLow - MediumAttacker can abuse other participants’ misunderstanding of Polkadot's security guarantees to defraud them. Also, if the reward for calling out bad behavior can be set up so that it is higher than the according punishment, a set of self-handled nodes can be set up to generate a source cycle. Other participants are not needed for this attack.
    Defraud other participantsIntegrity (System-wide)HighHighAn attacker could abuse bugs in Polkadot's economic system to defraud other participants. For example, an attacker could exploit a logic bug to not pay transaction fees.
    - + \ No newline at end of file diff --git a/docs/kusama-bug-bounty.html b/docs/kusama-bug-bounty.html index f2260f08a6ac..23a0f66db222 100644 --- a/docs/kusama-bug-bounty.html +++ b/docs/kusama-bug-bounty.html @@ -19,7 +19,7 @@ - + @@ -44,7 +44,7 @@ not to be disruptive or harmful to our users or us. Otherwise, your actions might be interpreted as an attack rather than an effort to be helpful.

    How to report a bug

    Please follow the instructions at web3.foundation/security-report/.

    - + \ No newline at end of file diff --git a/docs/kusama-claims.html b/docs/kusama-claims.html index 48d5c48bf392..41b06fd2cb89 100644 --- a/docs/kusama-claims.html +++ b/docs/kusama-claims.html @@ -19,7 +19,7 @@ - + @@ -98,7 +98,7 @@ Polkadot Support page.

    Third Party Claims Processes

    We do not recommend using a third-party app or process to perform your claim or acquire KSM.

    Claiming using a third-party process can lead to the loss of your allocation; therefore, we cannot recommend using any third-party apps to do so. Manually specifying your transaction data, as specified in our claims process, is the only way to be certain you will receive your allocation.

    - + \ No newline at end of file diff --git a/docs/kusama-coc.html b/docs/kusama-coc.html index 2abf5686c121..f690c669997f 100644 --- a/docs/kusama-coc.html +++ b/docs/kusama-coc.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ on feedback from the Kusama participants and/or the Polkadot community.

    Bugs

    Please understand that this network is, despite its success, an experiment with potential flaws, so it’s appreciated that community members help report any sort of exploits directly to the team before sharing publicly. Please see the bug bounty program.

    - + \ No newline at end of file diff --git a/docs/kusama-community.html b/docs/kusama-community.html index bfb0d71355f7..ece3d902acf8 100644 --- a/docs/kusama-community.html +++ b/docs/kusama-community.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ for technical questions on building with Substrate.
  • Smart Contracts & Parity Ink! - A room to discuss developing Substrate smart contracts using Parity Ink!
  • Social

    Blogs and tutorials

    Newsletters

    - + \ No newline at end of file diff --git a/docs/kusama-getting-started.html b/docs/kusama-getting-started.html index 292688670d03..815ad06d32af 100644 --- a/docs/kusama-getting-started.html +++ b/docs/kusama-getting-started.html @@ -19,7 +19,7 @@ - + @@ -55,7 +55,7 @@ here.

    While Kusama does not support smart contracts natively, building apps on it is still possible (e.g. RMRK.app). If you're interested in diving deeper into proper development, however, check out the builders guide.

    Additional Resources:

    - + \ No newline at end of file diff --git a/docs/kusama-index.html b/docs/kusama-index.html index 48d5f6b4155a..56521e4ff669 100644 --- a/docs/kusama-index.html +++ b/docs/kusama-index.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@

    Kusama

    Polkadot's Canary Network

    Kusama is a canary network for Polkadot; an earlier release of the code that is available first and holds real economic value. For developers, Kusama is a proving ground for runtime upgrades, on-chain governance, and parachains.

    No Promises.

    Kusama has a dedicated Wiki guide. Click on the image below to access it.

    guide
    Kusama Guide
    - + \ No newline at end of file diff --git a/docs/kusama-parameters.html b/docs/kusama-parameters.html index 4df642da4222..ee99ec571192 100644 --- a/docs/kusama-parameters.html +++ b/docs/kusama-parameters.html @@ -19,7 +19,7 @@ - + @@ -38,7 +38,7 @@ redirected into the Society's treasury to fund growth.

    Precision

    KSM have 12 decimals of precision. In other words, 1e12 (1_000_000_000_000, or one trillion) Plancks make up a single KSM.

    - + \ No newline at end of file diff --git a/docs/kusama-social-recovery.html b/docs/kusama-social-recovery.html index b030d81bfb20..5734306eda37 100644 --- a/docs/kusama-social-recovery.html +++ b/docs/kusama-social-recovery.html @@ -19,7 +19,7 @@ - + @@ -65,7 +65,7 @@ That is by using the Root origin. However, in order to use root permissions, you will need to either go through governance.

    Further Reading

    - + \ No newline at end of file diff --git a/docs/kusama-timeline.html b/docs/kusama-timeline.html index 63f4a3a22bad..8afafca0d87f 100644 --- a/docs/kusama-timeline.html +++ b/docs/kusama-timeline.html @@ -19,7 +19,7 @@ - + @@ -57,7 +57,7 @@ forkless upgradability provided by Substrate, chaos continues, and in the spirit of chaos, more teams are eager to deploy on Kusama. The path of Kusama deployment has paved the way to Polkadot's parachains as the technology became proven.

    - + \ No newline at end of file diff --git a/docs/learn-DOT.html b/docs/learn-DOT.html index c8182f875fe8..b85dda9b474d 100644 --- a/docs/learn-DOT.html +++ b/docs/learn-DOT.html @@ -19,7 +19,7 @@ - + @@ -85,7 +85,7 @@ market.

    Polkadot Mainnet DOT

    Polkadot Mainnet DOT are not freely given away. If you purchased DOT in the original 2017 offering, you may claim them via the Polkadot claims process. Alternatively, they are available on the open market.

    - + \ No newline at end of file diff --git a/docs/learn-account-abstraction.html b/docs/learn-account-abstraction.html index b281781ec554..7e7cb5f9ccf3 100644 --- a/docs/learn-account-abstraction.html +++ b/docs/learn-account-abstraction.html @@ -19,7 +19,7 @@ - + @@ -89,7 +89,7 @@ Bader Youssef - "Abstracting Away Account Abstraction on Polkadot"
  • Parity Blog Post by Joe Petrowski - "Building a Hot Wallet with Substrate Primitives"
  • FRAME Origin - Polkadot-SDK Docs
  • - + \ No newline at end of file diff --git a/docs/learn-account-advanced.html b/docs/learn-account-advanced.html index ff69b8b1e19c..bacbc3736886 100644 --- a/docs/learn-account-advanced.html +++ b/docs/learn-account-advanced.html @@ -19,7 +19,7 @@ - + @@ -204,7 +204,7 @@ directly in the browser on the new one.

    This has been tested on Brave and Chrome, but not other browsers.

    1. Go to Polkadot-JS Apps
    2. Go to JavaScript console on the browser (Available in Developer Tools)
    3. Type in the command:
    JSON.stringify(localStorage)
    1. Copy and paste the returned string to a text editor and save the file.
    2. Check that the string you pasted begins and ends with a tick mark ('). If not, add one to the beginning and end.
    3. Save and send that file with the copied string to the new computer.
    4. On the new computer, go to Polkadot-JS Apps
    5. Open the Javascript console on the browser (Available in Developer Tools)
    6. Set a variable raw equal to the string from the text file
    raw = ... copy-pasted json from original computer ...
    1. Run the following code on the console:
    accounts = JSON.parse(raw);
    for (var key in accounts) {
    if (accounts.hasOwnProperty(key)) {
    val = JSON.stringify(accounts[key]).replace(/\\/g,'').slice(1,-1);
    console.log(key + " -> " + val);
    localStorage.setItem(key, val);
    }
    }
    1. Refresh Polkadot-JS App browser and check the Accounts and Addresses pages. All of your accounts and addresses should now be available.
    - + \ No newline at end of file diff --git a/docs/learn-account-balances.html b/docs/learn-account-balances.html index 83bd25d57fd7..de9d809a5658 100644 --- a/docs/learn-account-balances.html +++ b/docs/learn-account-balances.html @@ -19,7 +19,7 @@ - + @@ -101,7 +101,7 @@ The same applies to proxies. The idea is that those actions require some network memory usage that is not given for free. In the example, we created a governance proxy, and the reserved funds for this are 0.0668 KSM. - + \ No newline at end of file diff --git a/docs/learn-account-multisig.html b/docs/learn-account-multisig.html index b839f6d6bd9e..6f7c4f56c6d3 100644 --- a/docs/learn-account-multisig.html +++ b/docs/learn-account-multisig.html @@ -19,7 +19,7 @@ - + @@ -44,7 +44,7 @@ the entities designated as the recipients come together in a new multisig under a matching threshold, they will immediately have access to these tokens.


    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about multi-signature accounts.

    - + \ No newline at end of file diff --git a/docs/learn-accounts.html b/docs/learn-accounts.html index bfc4617f08a8..93f09f68f964 100644 --- a/docs/learn-accounts.html +++ b/docs/learn-accounts.html @@ -19,7 +19,7 @@ - + @@ -93,7 +93,7 @@ It just means you want to keep your computer clean until you maybe need this folder again and recreate it. Your address is like this folder - it gets removed from the chain when nothing is in it but gets put back when it has the existential deposit.


    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about accounts.

    - + \ No newline at end of file diff --git a/docs/learn-advanced-index.html b/docs/learn-advanced-index.html index 449cc9fdced5..e27791046af7 100644 --- a/docs/learn-advanced-index.html +++ b/docs/learn-advanced-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-agile-coretime-index.html b/docs/learn-agile-coretime-index.html index 569dc1fe0437..c440f15a7337 100644 --- a/docs/learn-agile-coretime-index.html +++ b/docs/learn-agile-coretime-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-agile-coretime.html b/docs/learn-agile-coretime.html index ba82067750b6..982736ededa0 100644 --- a/docs/learn-agile-coretime.html +++ b/docs/learn-agile-coretime.html @@ -19,7 +19,7 @@ - + @@ -210,7 +210,7 @@ timeslices.
  • Interlacing: the action of dividing a region into the execution of different tasks for each block of a timeslice. The result regions will have the same start and end timeslice as the parent region, but different tasks will be executed at different blocks.
  • - + \ No newline at end of file diff --git a/docs/learn-architecture.html b/docs/learn-architecture.html index cd4a8925f5aa..95c9ed769e9a 100644 --- a/docs/learn-architecture.html +++ b/docs/learn-architecture.html @@ -19,7 +19,7 @@ - + @@ -84,7 +84,7 @@ They collect parachain transactions and produce state transition proofs for the validators on the Relay Chain. They can also send and receive messages from other parachains using XCMP.

    Parachain blocks themselves are produced by collators, whereas the relay chain validators only verify their validity (and later, their availability).

    - + \ No newline at end of file diff --git a/docs/learn-archive.html b/docs/learn-archive.html index 8ede5acbfe32..275ccfc0ea9a 100644 --- a/docs/learn-archive.html +++ b/docs/learn-archive.html @@ -19,14 +19,14 @@ - + - + \ No newline at end of file diff --git a/docs/learn-asset-conversion-assethub.html b/docs/learn-asset-conversion-assethub.html index d6ba8d28e43d..09263b142c70 100644 --- a/docs/learn-asset-conversion-assethub.html +++ b/docs/learn-asset-conversion-assethub.html @@ -19,7 +19,7 @@ - + @@ -60,7 +60,7 @@ experience bonuses here:

    • The exchange/custodian only needs to transact on one parachain and can access every other without any infrastructure lift.
    • For the user, they never actually need to “see” AssetHub. It’s entirely abstracted away behind either the parachain wallet/application or the exchange/custodian.
    - + \ No newline at end of file diff --git a/docs/learn-assets-index.html b/docs/learn-assets-index.html index 2b0e297c5fe0..850dfcc8ab81 100644 --- a/docs/learn-assets-index.html +++ b/docs/learn-assets-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-assets.html b/docs/learn-assets.html index 4d238e48f59a..483fd37fa869 100644 --- a/docs/learn-assets.html +++ b/docs/learn-assets.html @@ -19,7 +19,7 @@ - + @@ -125,7 +125,7 @@ create a 2-of-2 multisig from two pure proxies, and then set members from each group as proxies to those two accounts.

    - + \ No newline at end of file diff --git a/docs/learn-async-backing.html b/docs/learn-async-backing.html index 94e4d2874da7..2b2a324404a3 100644 --- a/docs/learn-async-backing.html +++ b/docs/learn-async-backing.html @@ -19,7 +19,7 @@ - + @@ -156,7 +156,7 @@ Synchronous and Asynchronous Backing - + \ No newline at end of file diff --git a/docs/learn-auction.html b/docs/learn-auction.html index 9a9665daaa30..1125f5e876fe 100644 --- a/docs/learn-auction.html +++ b/docs/learn-auction.html @@ -19,7 +19,7 @@ - + @@ -141,7 +141,7 @@ W3F research page on parachain allocation that goes more in depth to the mechanism
  • Research Update: The Case for Candle Auctions - W3F breakdown and research update about candle auctions
  • Front-Running, Smart Contracts, and Candle Auctions W3F Research team discusses how to remedy current blockchain auction setbacks with candle auctions
  • - + \ No newline at end of file diff --git a/docs/learn-basics-index.html b/docs/learn-basics-index.html index 70f863051123..ee123a2cb2cd 100644 --- a/docs/learn-basics-index.html +++ b/docs/learn-basics-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-bridge-hub.html b/docs/learn-bridge-hub.html index 6d9d9b4ad10b..80707765f073 100644 --- a/docs/learn-bridge-hub.html +++ b/docs/learn-bridge-hub.html @@ -19,7 +19,7 @@ - + @@ -64,7 +64,7 @@ delivery confirmation relay. For more information on relayers and the Bridge Hub design, read through the high level documentation on bridges on the Polkadot-SDK repository.

    - + \ No newline at end of file diff --git a/docs/learn-bridges.html b/docs/learn-bridges.html index 2f1a3ee4c96b..21de65731bb3 100644 --- a/docs/learn-bridges.html +++ b/docs/learn-bridges.html @@ -19,7 +19,7 @@ - + @@ -88,7 +88,7 @@ Edgeware chain (a Substrate-based chain) - now defunct and not maintained, but a good example.
  • XCLAIM - XCLAIM is a framework for achieving trustless and efficient cross-chain exchanges using cryptocurrency-backed assets.
  • Celer cBridge - a bridge to transfer assets from Ethereum & Binance Smart Chain to the Astar Polkadot EVM.
  • - + \ No newline at end of file diff --git a/docs/learn-collator.html b/docs/learn-collator.html index 875974ec85fc..f824883f4114 100644 --- a/docs/learn-collator.html +++ b/docs/learn-collator.html @@ -19,7 +19,7 @@ - + @@ -69,7 +69,7 @@ information can be found under the Cumulus section on the build parachain page.

    Guides and Tools

    - + \ No newline at end of file diff --git a/docs/learn-comparisons-avalanche.html b/docs/learn-comparisons-avalanche.html index f7cc32ebdb03..62737b4c5fad 100644 --- a/docs/learn-comparisons-avalanche.html +++ b/docs/learn-comparisons-avalanche.html @@ -19,7 +19,7 @@ - + @@ -113,7 +113,7 @@ need a recommended minimum of 5 validators, which make the costs of launch predictable. Avalanche has plans to implement shared security, interoperability, composability and on-chain governance features which are already offered by Polkadot.

    References

    1. The Avalanche Platform Whitepaper
    2. The Avalanche Consensus Whitepaper
    3. The AVAX Token Dynamics Paper
    4. Nakomoto vs Snow consensus
    - + \ No newline at end of file diff --git a/docs/learn-comparisons-cosmos.html b/docs/learn-comparisons-cosmos.html index e517365904bd..333a76bb41bf 100644 --- a/docs/learn-comparisons-cosmos.html +++ b/docs/learn-comparisons-cosmos.html @@ -19,7 +19,7 @@ - + @@ -130,7 +130,7 @@ receiving chain must trust the sending chain. Thus, each blockchain in the Cosmos network has its independent security mechanisms. Chains also have the option to share security with the Cosmos Hub and thereby leverage its economic security.

    - + \ No newline at end of file diff --git a/docs/learn-comparisons-ethereum-2.html b/docs/learn-comparisons-ethereum-2.html index 8ab3a97eee91..8ea55ddfc4cf 100644 --- a/docs/learn-comparisons-ethereum-2.html +++ b/docs/learn-comparisons-ethereum-2.html @@ -19,7 +19,7 @@ - + @@ -155,7 +155,7 @@ enacted autonomously via forkless upgrades.
  • Validator selection mechanisms differ as Polkadot can provide strong availability and validity guarantees with fewer validators per protocol.
  • - + \ No newline at end of file diff --git a/docs/learn-comparisons-index.html b/docs/learn-comparisons-index.html index a1f71a3e5c0a..3ac50b49f7bd 100644 --- a/docs/learn-comparisons-index.html +++ b/docs/learn-comparisons-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-comparisons-kusama.html b/docs/learn-comparisons-kusama.html index 4538850b1458..9e590d96c176 100644 --- a/docs/learn-comparisons-kusama.html +++ b/docs/learn-comparisons-kusama.html @@ -19,7 +19,7 @@ - + @@ -76,7 +76,7 @@ the future, we’re also likely to see Kusama bridged to Polkadot for cross-network interoperability. Web3 Foundation remains committed to both networks going forward, providing crucial support and guidance to teams building for the ecosystem.

    Explore more

    - + \ No newline at end of file diff --git a/docs/learn-comparisons-rollups.html b/docs/learn-comparisons-rollups.html index ce6dddc36eea..eb2c60d3478e 100644 --- a/docs/learn-comparisons-rollups.html +++ b/docs/learn-comparisons-rollups.html @@ -19,7 +19,7 @@ - + @@ -94,7 +94,7 @@ transition data.

    Despite these drawbacks, Polkadot remains upgradable through forkless upgrades, which allows the protocol to be easily upgradable to stay in line with future technological advances.

    - + \ No newline at end of file diff --git a/docs/learn-comparisons.html b/docs/learn-comparisons.html index 124b8385c1e5..761cbd05f8ec 100644 --- a/docs/learn-comparisons.html +++ b/docs/learn-comparisons.html @@ -19,7 +19,7 @@ - + @@ -61,7 +61,7 @@ Chain, and as the number of validators in the active set on Polkadot are increased, more parachains can be supported.

    - + \ No newline at end of file diff --git a/docs/learn-components-index.html b/docs/learn-components-index.html index 9d5da235db4a..e3d2d3009a58 100644 --- a/docs/learn-components-index.html +++ b/docs/learn-components-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-consensus.html b/docs/learn-consensus.html index a11e39029935..8761b89ddb4e 100644 --- a/docs/learn-consensus.html +++ b/docs/learn-consensus.html @@ -19,7 +19,7 @@ - + @@ -141,7 +141,7 @@ Bill Laboon.
  • Block Production and Finalization in Polkadot: Understanding the BABE and GRANDPA Protocols - An academic talk by Bill Laboon, given at MIT Cryptoeconomic Systems 2020, describing Polkadot's hybrid consensus model in-depth.
  • - + \ No newline at end of file diff --git a/docs/learn-crowdloans.html b/docs/learn-crowdloans.html index 7226995d0037..396923ddffe2 100644 --- a/docs/learn-crowdloans.html +++ b/docs/learn-crowdloans.html @@ -19,7 +19,7 @@ - + @@ -94,7 +94,7 @@ Apps page.

    Here is an example of the crowdloans in play during the very first Kusama auction.

    crowdloan dashboard

    Furthermore, check out this video on How to Participate in Crowdloans for steps on how to access available crowdloans on PolkadotJS apps.

    - + \ No newline at end of file diff --git a/docs/learn-cryptography.html b/docs/learn-cryptography.html index c136861684f2..9d2de7730f35 100644 --- a/docs/learn-cryptography.html +++ b/docs/learn-cryptography.html @@ -19,7 +19,7 @@ - + @@ -175,7 +175,7 @@ make passive attacks much harder if such a backdoor exists.

    However an alternative exists in the form of Curve25519. This algorithm has been proposed in 2006 by DJB [Curve25519]. Its main strengths are its speed, its constant-time run time (and resistance against side-channel attacks), and its lack of nebulous hard-coded constants.

    - + \ No newline at end of file diff --git a/docs/learn-dot-ksm-bridge.html b/docs/learn-dot-ksm-bridge.html index 6506969e8a74..d5f9b49764ee 100644 --- a/docs/learn-dot-ksm-bridge.html +++ b/docs/learn-dot-ksm-bridge.html @@ -19,7 +19,7 @@ - + @@ -58,7 +58,7 @@ through Kusama OpenGov.

    For more information on relayer rewards, check the relayers compensation scheme section on the relayer docs on the Polkadot-SDK repository.

    - + \ No newline at end of file diff --git a/docs/learn-elastic-scaling.html b/docs/learn-elastic-scaling.html index f3aaefac87ee..e7195390b6d7 100644 --- a/docs/learn-elastic-scaling.html +++ b/docs/learn-elastic-scaling.html @@ -19,7 +19,7 @@ - + @@ -59,7 +59,7 @@ parachain side, collators must produce more parablocks per unit of time, implying that technical specifications for collators will likely increase.

    For more advanced technical challenges, see the Elastic Scaling GitHub PR.

    - + \ No newline at end of file diff --git a/docs/learn-future-implementations-index.html b/docs/learn-future-implementations-index.html index 24e36fbc5dc8..760a507ca69d 100644 --- a/docs/learn-future-implementations-index.html +++ b/docs/learn-future-implementations-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-guides-accounts-multisig.html b/docs/learn-guides-accounts-multisig.html index 19f8cfe712df..a981d8a52791 100644 --- a/docs/learn-guides-accounts-multisig.html +++ b/docs/learn-guides-accounts-multisig.html @@ -19,7 +19,7 @@ - + @@ -93,7 +93,7 @@ Check the "How to use a multisig account" in the support docs on how to decode the multisig call data.

    - + \ No newline at end of file diff --git a/docs/learn-guides-accounts-proxy-pure.html b/docs/learn-guides-accounts-proxy-pure.html index b7e2732410e9..87aab1e41ae1 100644 --- a/docs/learn-guides-accounts-proxy-pure.html +++ b/docs/learn-guides-accounts-proxy-pure.html @@ -19,7 +19,7 @@ - + @@ -84,7 +84,7 @@ address but does not impact the pure proxy address. In Scenario Two, if signatories behind the pure proxies change, the address of the multisig stays the same. However, changing the number of signatories and threshold would not be possible.

    - + \ No newline at end of file diff --git a/docs/learn-guides-accounts-proxy.html b/docs/learn-guides-accounts-proxy.html index 64f10ee5dfe6..086fc2a64cbb 100644 --- a/docs/learn-guides-accounts-proxy.html +++ b/docs/learn-guides-accounts-proxy.html @@ -19,7 +19,7 @@ - + @@ -79,7 +79,7 @@ automatically ask for Charly's signature. Thus one proxy call will trigger the second one because Charly's is the only any proxy of P-C, and P-C cannot sign anything. While if we want to use Bob's account we will need to submit all three proxy calls.

    - + \ No newline at end of file diff --git a/docs/learn-guides-accounts.html b/docs/learn-guides-accounts.html index a908dc89069c..45befc5c8be8 100644 --- a/docs/learn-guides-accounts.html +++ b/docs/learn-guides-accounts.html @@ -19,7 +19,7 @@ - + @@ -127,7 +127,7 @@ encrypting/decrypting your wallet. If you cannot load a JSON file, please use the latest version of the wallet software. If you cannot load it, ensure that the wallet software uses the newest version of the Polkadot API.

    - + \ No newline at end of file diff --git a/docs/learn-guides-asset-conversion.html b/docs/learn-guides-asset-conversion.html index 345543fb017e..6208fb3f5e11 100644 --- a/docs/learn-guides-asset-conversion.html +++ b/docs/learn-guides-asset-conversion.html @@ -19,7 +19,7 @@ - + @@ -79,7 +79,7 @@ (u128 value of 400000000000 as it has 10 decimals).

    Remove Liquidity

    Below is the snapshot of the liquidity pool on the DOT ACP UI. after successful submission of the extrinsic above.

    Remove Liquidity Example

    - + \ No newline at end of file diff --git a/docs/learn-guides-assets-create.html b/docs/learn-guides-assets-create.html index d04bba80bb4d..7aae7b9fa7fe 100644 --- a/docs/learn-guides-assets-create.html +++ b/docs/learn-guides-assets-create.html @@ -19,7 +19,7 @@ - + @@ -64,7 +64,7 @@ an ID that has already been taken. After all the details are entered, click on the next button.

    Add Asset Metadata

    • Choose the admin, issuer and the freezer accounts for your asset and click on the create button.

    Asset managing accounts

    • Sign and submit the transaction (If you like to verify the transaction details before signing, you can click on the dropdown button pointed by the arrow in the snapshot below).

    Sign asset creating transaction

    If the transaction is successful, you should see the asset and its details displayed in the Network > Assets page on the Asset Hub.

    - + \ No newline at end of file diff --git a/docs/learn-guides-assets-ledger.html b/docs/learn-guides-assets-ledger.html index f39951d3bf1a..01354c42e591 100644 --- a/docs/learn-guides-assets-ledger.html +++ b/docs/learn-guides-assets-ledger.html @@ -19,7 +19,7 @@ - + @@ -98,7 +98,7 @@ here.
  • Transfer the desired amount as described above. If you want to send exactly the amount you want to teleport, don't forget take into account the fees for teleporting that will be deducted in the next step.
  • Teleport your tokens following the instructions you will find here.
  • Teleporting to a Ledger account from a non-Ledger account doesn't require these extra steps.

    Support

    If you need support, please visit the Polkadot Support page.

    - + \ No newline at end of file diff --git a/docs/learn-guides-assets.html b/docs/learn-guides-assets.html index b9ed99df6db9..cc0b107f9664 100644 --- a/docs/learn-guides-assets.html +++ b/docs/learn-guides-assets.html @@ -19,7 +19,7 @@ - + @@ -28,7 +28,7 @@ Polkadot-JS UI, you can contact the Polkadot Support Team. For more user-friendly tools see the wallets, apps and dashboard pages.
    - + \ No newline at end of file diff --git a/docs/learn-guides-bounties.html b/docs/learn-guides-bounties.html index 34eef284f5ea..2ac270ea0788 100644 --- a/docs/learn-guides-bounties.html +++ b/docs/learn-guides-bounties.html @@ -19,7 +19,7 @@ - + @@ -79,7 +79,7 @@ delay elapsed, follow the guidelines in the video tutorial below to learn how to claim a child bounty reward. Note that the extrinsic to claim the child bounty reward is permissionless, and anyone can initiate the claim on behalf of the beneficiary.

    - + \ No newline at end of file diff --git a/docs/learn-guides-bridges.html b/docs/learn-guides-bridges.html index 59c8d7a93974..111648bbfcfb 100644 --- a/docs/learn-guides-bridges.html +++ b/docs/learn-guides-bridges.html @@ -19,7 +19,7 @@ - + @@ -28,7 +28,7 @@ Polkadot-JS UI, you can contact the Polkadot Support Team. For more user-friendly tools see the wallets, apps and dashboard pages.
    - + \ No newline at end of file diff --git a/docs/learn-guides-coretime-marketplaces.html b/docs/learn-guides-coretime-marketplaces.html index 9eb1042eefd5..84915db2c453 100644 --- a/docs/learn-guides-coretime-marketplaces.html +++ b/docs/learn-guides-coretime-marketplaces.html @@ -19,7 +19,7 @@ - + @@ -38,7 +38,7 @@ Wallet and Polkadot-JS Extension. Select the account to be used for the coretime purchase and then, click on "buy core" button to sign and broadcast the transaction.

    Lastic-purchase-bulk-coretime

    Managing Cores with Lastic

    Lastic enables you to transfer your core to another account, utilize it for a parachain, split it up, change block production frequency, or assign it to a task.

    Lastic-manage-core

    - + \ No newline at end of file diff --git a/docs/learn-guides-coretime-parachains.html b/docs/learn-guides-coretime-parachains.html index e974c7b4c7c9..89fe78a71141 100644 --- a/docs/learn-guides-coretime-parachains.html +++ b/docs/learn-guides-coretime-parachains.html @@ -19,7 +19,7 @@ - + @@ -77,7 +77,7 @@ account if the provided funds will run out, ensuring the account is kept alive.

    With each successful on-demand extrinsic, the parachain head changes (you may have to zoom out on the browser for parachain head details to show up on Polkadot-JS UI).

    coretime-ondemand-parahead

    The successful collation can also be verified in the parachain collator logs. It can be noticed that with each parachain block, the state of adder-collator is incremented by 2.

    coretime-new-collation

    - + \ No newline at end of file diff --git a/docs/learn-guides-dot-ksm-bridge.html b/docs/learn-guides-dot-ksm-bridge.html index cee9a6e0b7d3..8a0ce4ad6f79 100644 --- a/docs/learn-guides-dot-ksm-bridge.html +++ b/docs/learn-guides-dot-ksm-bridge.html @@ -19,7 +19,7 @@ - + @@ -80,7 +80,7 @@ destination chain but will not be accepted by your account, and instead get trapped in the Asset Trap on the destination chain.

    Once arbitrary asset transfers are enabled by the Asset Hubs, a guide will be posted to this Wiki page.

    - + \ No newline at end of file diff --git a/docs/learn-guides-identity.html b/docs/learn-guides-identity.html index b1ee35b3ca81..c565ee644445 100644 --- a/docs/learn-guides-identity.html +++ b/docs/learn-guides-identity.html @@ -19,7 +19,7 @@ - + @@ -88,7 +88,7 @@ OpenGov, then wait for people to vote on it. For best results, write a post about your identity and intentions beforehand, and once the proposal is in the queue ask people to endorse it so that it gets ahead in the referendum queue.

    - + \ No newline at end of file diff --git a/docs/learn-guides-ledger.html b/docs/learn-guides-ledger.html index 1d7b10163619..87d502cdc6c6 100644 --- a/docs/learn-guides-ledger.html +++ b/docs/learn-guides-ledger.html @@ -19,7 +19,7 @@ - + @@ -82,7 +82,7 @@ Nano S and the Ledger Nano X, some extrinsics are not supported by the light version. The following repository by Zondax lists the currently supported extrinsics on the XL version of the Ledger app.

    - + \ No newline at end of file diff --git a/docs/learn-guides-nominator.html b/docs/learn-guides-nominator.html index 760c16ce67d6..d866c1c3cd5a 100644 --- a/docs/learn-guides-nominator.html +++ b/docs/learn-guides-nominator.html @@ -19,7 +19,7 @@ - + @@ -90,7 +90,7 @@ Subscan. Also, you can verify the bonding state under the Staking page on the Polkadot-JS UI.

    Step 3: Nominate a validator

    To nominate a validator, you can execute the following command:

    polkadot-js-api --seed "MNEMONIC_PHRASE" tx.staking.nominate '["VALIDATOR_ADDRESS"]' --ws WS_ENDPOINT
    polkadot-js-api --seed "xxxx xxxxx xxxx xxxxx" tx.staking.nominate '["CmD9vaMYoiKe7HiFnfkftwvhKbxN9bhyjcDrfFRGbifJEG8","E457XaKbj2yTB2URy8N4UuzmyuFRkcdxYs67UvSgVr7HyFb"]' --ws wss://kusama-rpc.polkadot.io

    After a few seconds, you should see the hash of the transaction, and if you would like to verify the nomination status, you can check that on the Polkadot-JS UI as well.

    - + \ No newline at end of file diff --git a/docs/learn-guides-polkadot-opengov.html b/docs/learn-guides-polkadot-opengov.html index 4377146c1647..3549c1a5f423 100644 --- a/docs/learn-guides-polkadot-opengov.html +++ b/docs/learn-guides-polkadot-opengov.html @@ -19,7 +19,7 @@ - + @@ -159,7 +159,7 @@ a decimal integer. The bitfield stores both the conviction and aye/nay boolean, where the boolean is represented using the MSB of the byte. This would mean that the seven remaining bits are grouped to store the conviction.

    - + \ No newline at end of file diff --git a/docs/learn-guides-staking-pools.html b/docs/learn-guides-staking-pools.html index c76ac1d6182a..07e333d85033 100644 --- a/docs/learn-guides-staking-pools.html +++ b/docs/learn-guides-staking-pools.html @@ -19,7 +19,7 @@ - + @@ -66,7 +66,7 @@ Polkadot-JS UI Extrinsic Tab and issue the following extrisics:

    • nominationPools.claimPayoutOthers extrinsic specifying ALICE's account. This will claim the rewards as a free balance on ALICE's account.

    pools-payoutOthers

    • nominationPools.bondExtraOthers extrinsic specifying ALICE's account and the option to bond:
      • the free balance currently available in ALICE's account (FreeBalance) or
      • the pool rewards (Rewards) unclaimed by ALICE.

    pools-bondExtraOthers

    - + \ No newline at end of file diff --git a/docs/learn-guides-staking.html b/docs/learn-guides-staking.html index 6eec6e21311d..ab012cbd2a19 100644 --- a/docs/learn-guides-staking.html +++ b/docs/learn-guides-staking.html @@ -19,7 +19,7 @@ - + @@ -28,7 +28,7 @@ Polkadot-JS UI, you can contact the Polkadot Support Team. For more user-friendly tools see the wallets, apps and dashboard pages.
    - + \ No newline at end of file diff --git a/docs/learn-guides-transfers.html b/docs/learn-guides-transfers.html index 3149a82c4c66..d1c0ee010c73 100644 --- a/docs/learn-guides-transfers.html +++ b/docs/learn-guides-transfers.html @@ -19,7 +19,7 @@ - + @@ -126,7 +126,7 @@ probably not the reason for your tokens having existing references.

    Existing Non-Native Assets

    Currently, Polkadot does not use the Assets Pallet, so this is probably not the reason for your tokens having existing references.

    - + \ No newline at end of file diff --git a/docs/learn-guides-treasury.html b/docs/learn-guides-treasury.html index 35c566ca8f82..eb46fecea53e 100644 --- a/docs/learn-guides-treasury.html +++ b/docs/learn-guides-treasury.html @@ -19,7 +19,7 @@ - + @@ -132,7 +132,7 @@ -day timeout
  • Once the referendum ends you can claim the preimage and decision deposits back
  • - + \ No newline at end of file diff --git a/docs/learn-guides-vault.html b/docs/learn-guides-vault.html index f117c2bf03c2..470b64a38288 100644 --- a/docs/learn-guides-vault.html +++ b/docs/learn-guides-vault.html @@ -19,7 +19,7 @@ - + @@ -86,7 +86,7 @@ chain and version is the version of the metadata.

    Add the renamed files to the /public/qr folder within the Metadata Portal repository.

    Run Portal

    Open the terminal within the Metadata Portal repository and run make updater. Then run make collector; this will create the _latest.apng files for each of the chains (removed by the command make cleaner). Finally, run yarn start to load the metadata portal on your localhost.

    - + \ No newline at end of file diff --git a/docs/learn-hyperbridge.html b/docs/learn-hyperbridge.html index 22cfc751f490..28c31845d705 100644 --- a/docs/learn-hyperbridge.html +++ b/docs/learn-hyperbridge.html @@ -19,7 +19,7 @@ - + @@ -89,7 +89,7 @@ repository of hyperbridge.
  • Interoperable State Machine Protocol (ISMP) Book - Guidebook of the ISMP
  • The Puzzle of Blockchain Interoperability
  • RFC-1: Agile Coretime - Agile periodic-sale-based model for assigning Coretime on the Polkadot Ubiquitous Computer.
  • ISMP, The Endgame for Parachain Interoperability | Sub0 2023
  • Research Summary: PlonK: Permutations over Lagrange-bases for Oecumenical Noninteractive arguments of Knowledge
  • - + \ No newline at end of file diff --git a/docs/learn-identity.html b/docs/learn-identity.html index ec014f0836df..080e2fc60cf3 100644 --- a/docs/learn-identity.html +++ b/docs/learn-identity.html @@ -19,7 +19,7 @@ - + @@ -76,7 +76,7 @@ is required for every sub-account.


    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about account identity.

    - + \ No newline at end of file diff --git a/docs/learn-implementations.html b/docs/learn-implementations.html index 77d409f3e70b..cd9b3e216cdf 100644 --- a/docs/learn-implementations.html +++ b/docs/learn-implementations.html @@ -19,7 +19,7 @@ - + @@ -57,7 +57,7 @@ collection of tools, interfaces, and libraries for Polkadot and Substrate.

    Other implementations that have received grants

    While the ecosystem continues to grow rapidly, the continued development of alternative implementations will only make Polkadot stronger. Consider becoming a contributor to the ecosystem, and learn about the how you can receive a grant for your development.

    - + \ No newline at end of file diff --git a/docs/learn-index.html b/docs/learn-index.html index c2bae44dbc34..09daa0614369 100644 --- a/docs/learn-index.html +++ b/docs/learn-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-inflation.html b/docs/learn-inflation.html index 1865740208b0..842c4c3d6d33 100644 --- a/docs/learn-inflation.html +++ b/docs/learn-inflation.html @@ -19,7 +19,7 @@ - + @@ -61,7 +61,7 @@ nominators, and 0% of token inflation is diverted to the treasury.
  • Green line: Annual rewards rate for stakers. For instance, 0.2 corresponds to 20% of annual returns on the staked tokens. You can determine the current annual staking rewards rate by looking at the top bar of the staking overview on -the Polkadot Staking Dashboard.
  • Assuming that the ideal staking rate is 60%, all of the inflation would go to the validators and +the Polkadot Staking Dashboard.

    Assuming that the ideal staking rate is 60%, all of the inflation would go to the validators and nominators if 60% of all DOT are staked. Any deviation from the 60% - positive or negative - sends the proportional remainder to the treasury. Deviations from the ideal staking rate are referred to as staking inefficiencies. Thus, the @@ -76,8 +76,8 @@ 47 / 300 = 0.157. The ideal staking rate is 0.75 - 0.157 = 0.593.

    If the amount of tokens staked goes below 59.3%, then staking rewards for nominators increase, incentivizing them to stake more tokens on the network. On the contrary, staking rewards drop if staked tokens exceed the ideal staking rate. This results from the change in the percentage of -staking rewards that go to the Treasury.

    - +staking rewards that go to the Treasury.

    + \ No newline at end of file diff --git a/docs/learn-jam-chain.html b/docs/learn-jam-chain.html index a902f7d61525..e14ccaf67a4c 100644 --- a/docs/learn-jam-chain.html +++ b/docs/learn-jam-chain.html @@ -19,7 +19,7 @@ - + @@ -229,7 +229,7 @@ capability to target coretime not only at parachains but also at arbitrary sets of work packages. This flexibility enhances the versatility and efficiency of resource allocation within the JAM ecosystem.

    - + \ No newline at end of file diff --git a/docs/learn-jam-faq.html b/docs/learn-jam-faq.html index e080b3cb0b72..d6dce48d7e75 100644 --- a/docs/learn-jam-faq.html +++ b/docs/learn-jam-faq.html @@ -19,7 +19,7 @@ - + @@ -90,7 +90,7 @@ learn more about JAM. You can also join discussions on the forum and the fellowship calls.
  • Read this blog post about the original talk by Gavin Wood at Token2049 in Dubai.
  • - + \ No newline at end of file diff --git a/docs/learn-jam.html b/docs/learn-jam.html index badfc46c86bd..7ba5390d71a8 100644 --- a/docs/learn-jam.html +++ b/docs/learn-jam.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-nft-pallets.html b/docs/learn-nft-pallets.html index af99df647b27..29c38b0829fe 100644 --- a/docs/learn-nft-pallets.html +++ b/docs/learn-nft-pallets.html @@ -19,7 +19,7 @@ - + @@ -118,7 +118,7 @@ balance-keeping chain for both fungible and non-fungibles.

    These NFTs can be viewed and interacted with on RMRK's Singular platform, by switching the top right menu from Kusama to the Asset Hub.

    nft-hub

    They can also be interacted with directly through the extrinsics tab of the Asset Hub:

    uniques.png

    - + \ No newline at end of file diff --git a/docs/learn-nft-projects.html b/docs/learn-nft-projects.html index 8bbfbe79c044..efad45150095 100644 --- a/docs/learn-nft-projects.html +++ b/docs/learn-nft-projects.html @@ -19,7 +19,7 @@ - + @@ -101,7 +101,7 @@ on, rather than entering the NFT space themselves as an end-product.

    Unique Network aims to make their marketplace technology open-source and whitelabel-friendly. In theory, it should be trivial to set up a new marketplace for your project using Unique's technology. Unique network aims to be a parachain on Polkadot, and Quartz is their Kusama counterpart.

    - + \ No newline at end of file diff --git a/docs/learn-nft.html b/docs/learn-nft.html index 8f0a009ca3e4..d4fdc0799b69 100644 --- a/docs/learn-nft.html +++ b/docs/learn-nft.html @@ -19,7 +19,7 @@ - + @@ -64,7 +64,7 @@ RMRK hackathon for porting RMRK NFTs into simplified IOUs on EVM chains

    References

    - + \ No newline at end of file diff --git a/docs/learn-nomination-pools.html b/docs/learn-nomination-pools.html index f4fbfe079b0c..3d874c0e0933 100644 --- a/docs/learn-nomination-pools.html +++ b/docs/learn-nomination-pools.html @@ -19,7 +19,7 @@ - + @@ -191,7 +191,7 @@ in the nomination pools and earn staking rewards. For additional information, see this blog post. Check the wiki doc on nomination pools for more information.

    NominatingJoining a Pool
    Minimum 250 DOT to nominate.Minimum 1 DOT to be a member.
    Rewards can be compounded automatically or sent to any account.Rewards can be manually claimed to the pool member's account and be bonded in the pool again to compound them.
    If the active validator gets slashed, all active nominators are subjected to slashing.If the active validator gets slashed, all pool members are subjected to slashing.
    Can bond and stake DOT indefinitely.Can bond and stake DOT until the pool exists.
    Unbonding period of 28 days. Can switch validators without unbonding.Unbonding period of 28 days. Need to unbond before switching to a different pool.
    Maximum uncapped.Maximum uncapped.
    Should bond more than the minimum active nomination in an era to be eligible to earn staking rewards, although it can depend on multiple other factors outlined in the linked document.A nomination pool earns rewards in an era if it satisfies all the conditions mentioned for the nominator (as the nomination pool is just a nominator from the NPoS system perspective).
    Staked tokens can be used for participation in Governance.Staked tokens cannot be used for participation in Governance.
    Rewards payout can be triggered permissionlessly by anyone (typically done by the validator).A pool member can self claim the rewards or can grant permission to any other account to claim and compound rewards on your behalf. See Claim Permissions.
    Bonded funds remain in your account.Bonded funds are transferred to a pool account which is administered by the network protocol and is not accessible to anyone else. See System Accounts for more information.
    Nominator manages the list of staked validators (up to 16).Nominations managed by the pool operator.
    - + \ No newline at end of file diff --git a/docs/learn-nominator.html b/docs/learn-nominator.html index 3255d8e3b5f8..f41d28dbf034 100644 --- a/docs/learn-nominator.html +++ b/docs/learn-nominator.html @@ -19,14 +19,14 @@ - +

    Nominator

    New to Staking?

    Start your staking journey or explore more information about staking on Polkadot's Home Page. You can learn how staking works by -reading this dedicated page.

    Discover the new Staking Dashboard that makes +reading this dedicated page.

    Discover the new Staking Dashboard that makes staking much easier and check this extensive article list to help you get started. @@ -89,7 +89,7 @@ can now unbond them immediately.

    If your bonded balance did not back any validators in the last 28 days on Polkadot (when the feature goes live), you are eligible to perform fast unstaking. The -staking dashboard will automatically check if you +staking dashboard will automatically check if you qualify. For more information, visit the "Fast Unstake" section in this support article.

    Setting-up Accounts

    Stash & Staking Proxy

    Nominators are recommended to set up separate stash and staking proxy accounts. Explanation and the reasoning for generating distinct accounts for this purpose is elaborated in the @@ -108,9 +108,9 @@ address. If you'd like to redirect payments to an account that is neither the staking proxy nor the stash account, set one up. Note that setting an exchange address as the recipient of the staking rewards is extremely unsafe.

    info

    Being a nominator is made simpler by using the -Staking Dashboard that will guide you step by -step through specifying rewards destination and bonded amount, and nominating validators (more on -this below). Note that staking proxies are not currently supported on the dashboard.

    Nominating with the Polkadot-JS UI

    Targets Page

    There are many factors to consider when deciding which of your nominations. One helpful tool to +Staking Dashboard that will guide you step by step +through specifying rewards destination and bonded amount, and nominating validators (more on this +below). Note that staking proxies are not currently supported on the dashboard.

    Nominating with the Polkadot-JS UI

    Targets Page

    There are many factors to consider when deciding which of your nominations. One helpful tool to choose validators is the Staking Targets table in the Polkadot-JS UI. This allows sorting validators using various metrics. Below are the relevant metrics shown as an example, followed by a brief description of each.

    validatorpayoutnominatorscomm.total stakeown stakereturn
    Arecently1 (active) 4 (all)3%1.6 MDOT8500 DOT17.8%
    • payout: How recently the validator made its last reward payout to nominators.

    • nominators: This column consists of two number values. The active count (left number) is @@ -239,8 +239,8 @@ higher, which can be viewed on Polkadot JS Apps > Network > Staking > Targets page.

    Minimum Active Nomination

    Guides

    - +stopping nominations and withdrawing tokens. + \ No newline at end of file diff --git a/docs/learn-offenses.html b/docs/learn-offenses.html index 2c375bea316f..b33e03276f00 100644 --- a/docs/learn-offenses.html +++ b/docs/learn-offenses.html @@ -19,7 +19,7 @@ - + @@ -120,7 +120,7 @@ DoS (Denial of Service) attacks. The consequences of closing channels may vary. In general, performing validator tasks under reduced reputation will be harder, resulting in lower validator rewards.

    - + \ No newline at end of file diff --git a/docs/learn-parachains-faq.html b/docs/learn-parachains-faq.html index 436a4d318516..62cec8d68235 100644 --- a/docs/learn-parachains-faq.html +++ b/docs/learn-parachains-faq.html @@ -19,7 +19,7 @@ - + @@ -110,7 +110,7 @@ initiate an auction, however, Root origin (via referendum) is needed to cancel an auction. Here is a proposal that gives a glimpse of what goes into planning auctions schedule - Proposed Polkadot Auction Schedule 2022.

    - + \ No newline at end of file diff --git a/docs/learn-parachains-index.html b/docs/learn-parachains-index.html index 50e9d3b8c63d..ed80cda619cf 100644 --- a/docs/learn-parachains-index.html +++ b/docs/learn-parachains-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-parachains-protocol.html b/docs/learn-parachains-protocol.html index ed5ec7808439..63c67ef8d76e 100644 --- a/docs/learn-parachains-protocol.html +++ b/docs/learn-parachains-protocol.html @@ -19,7 +19,7 @@ - + @@ -272,7 +272,7 @@ Parity analyst Joe Petrowski expounds on the validity checks that a parachain block must pass in order to progress the parachain.
  • Availability and Validity - Paper by the W3F Research Team that specifies the availability and validity protocol in detail.
  • - + \ No newline at end of file diff --git a/docs/learn-parachains.html b/docs/learn-parachains.html index fb2cc4b94334..fb2fcebc9c1a 100644 --- a/docs/learn-parachains.html +++ b/docs/learn-parachains.html @@ -19,7 +19,7 @@ - + @@ -219,7 +219,7 @@ its own. The Relay Chain provides security to attached parachains, but also provides a guarantee of secure message-passing between them."
  • The Path of a Parachain Block - A technical walk-through of how parachains interact with the Relay Chain.
  • - + \ No newline at end of file diff --git a/docs/learn-participants-index.html b/docs/learn-participants-index.html index 9cb27e6d22f5..ab9d5f62a36e 100644 --- a/docs/learn-participants-index.html +++ b/docs/learn-participants-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-phragmen.html b/docs/learn-phragmen.html index 27274e9a7d41..07bbdd59baab 100644 --- a/docs/learn-phragmen.html +++ b/docs/learn-phragmen.html @@ -19,7 +19,7 @@ - + @@ -268,7 +268,7 @@ This paper by Brill et al. is the source for the simple Phragmén method, along with proofs about its properties.
  • Offline Phragmén - Script to generate the Phragmén validator election outcome before the start of an era.
  • - + \ No newline at end of file diff --git a/docs/learn-polkadot-host.html b/docs/learn-polkadot-host.html index d9b3e97ed8a3..28f8e1c63315 100644 --- a/docs/learn-polkadot-host.html +++ b/docs/learn-polkadot-host.html @@ -19,7 +19,7 @@ - + @@ -45,7 +45,7 @@ Host is referred to as the Executor. For additional technical implementation details, check out this section of the Polkadot Spec.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-polkadot-js-guides.html b/docs/learn-polkadot-js-guides.html index 769b4a0bf638..849e330d29d0 100644 --- a/docs/learn-polkadot-js-guides.html +++ b/docs/learn-polkadot-js-guides.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ Ledger and Polkadot Vault for signing transactions. We do not provide support for third party applications.

    - + \ No newline at end of file diff --git a/docs/learn-polkadot-opengov-index.html b/docs/learn-polkadot-opengov-index.html index fe6d664f900a..1ec93cffce69 100644 --- a/docs/learn-polkadot-opengov-index.html +++ b/docs/learn-polkadot-opengov-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-polkadot-opengov-origins.html b/docs/learn-polkadot-opengov-origins.html index 26820752f9bd..018e96c4db13 100644 --- a/docs/learn-polkadot-opengov-origins.html +++ b/docs/learn-polkadot-opengov-origins.html @@ -19,7 +19,7 @@ - + @@ -94,7 +94,7 @@

    Big Spender

    Origin able to spend up to 1000000 DOT from the treasury at once.

    - + \ No newline at end of file diff --git a/docs/learn-polkadot-opengov-treasury.html b/docs/learn-polkadot-opengov-treasury.html index 584d201e7c88..499d484a9487 100644 --- a/docs/learn-polkadot-opengov-treasury.html +++ b/docs/learn-polkadot-opengov-treasury.html @@ -19,7 +19,7 @@ - + @@ -108,8 +108,8 @@ tasks’ curation, the curator will also be able to create child bounties for more granularity in the allocation of funds and as part of a nested iteration of the bounty mechanism.

    Child Bounties

    Child bounties are spawned from parent bounties. Child bounties are used to access funds directly from the parent bounty without going through an OpenGov referendum.


    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about bounties -and treasury.

    - +and treasury.

    + \ No newline at end of file diff --git a/docs/learn-polkadot-opengov.html b/docs/learn-polkadot-opengov.html index fb3145298eba..e45b493a38ae 100644 --- a/docs/learn-polkadot-opengov.html +++ b/docs/learn-polkadot-opengov.html @@ -19,7 +19,7 @@ - + @@ -292,7 +292,7 @@ allow voters to participate in OpenGov hands-free by delegating their voting power to trusted entities.

    Resources


    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about OpenGov.

    - + \ No newline at end of file diff --git a/docs/learn-polkadot-technical-fellowship.html b/docs/learn-polkadot-technical-fellowship.html index eaeb4a589b6c..c1174b56c3ad 100644 --- a/docs/learn-polkadot-technical-fellowship.html +++ b/docs/learn-polkadot-technical-fellowship.html @@ -19,7 +19,7 @@ - + @@ -79,7 +79,7 @@ Promotion of the Polkadot Fellowship members from rank 5 needs to be done through an OpenGov referendum. For more information, check the rank updates section on the fellowship dashboard.

    - + \ No newline at end of file diff --git a/docs/learn-polkadotjs.html b/docs/learn-polkadotjs.html index 1dd047e83fe0..e1bc827e3537 100644 --- a/docs/learn-polkadotjs.html +++ b/docs/learn-polkadotjs.html @@ -19,7 +19,7 @@ - + @@ -28,7 +28,7 @@ Polkadot-JS UI, you can contact the Polkadot Support Team. For more user-friendly tools see the wallets, apps and dashboard pages.
    - + \ No newline at end of file diff --git a/docs/learn-proxies-pure.html b/docs/learn-proxies-pure.html index 4edac4bfe5dd..e04b8ec93318 100644 --- a/docs/learn-proxies-pure.html +++ b/docs/learn-proxies-pure.html @@ -19,7 +19,7 @@ - + @@ -64,7 +64,7 @@ corporate-level management where the chance of replacing someone within a multisig can be high. Pure proxies allow keeping the same multisig when the signatories change.
    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about pure proxy accounts.

    - + \ No newline at end of file diff --git a/docs/learn-proxies.html b/docs/learn-proxies.html index 806855a7bd3c..9b6fbe438500 100644 --- a/docs/learn-proxies.html +++ b/docs/learn-proxies.html @@ -19,7 +19,7 @@ - + @@ -100,7 +100,7 @@


    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about proxy accounts. You can find information about creating and removing proxies, and more.

    - + \ No newline at end of file diff --git a/docs/learn-runtime-upgrades.html b/docs/learn-runtime-upgrades.html index a7524c63f948..e49f33b17f95 100644 --- a/docs/learn-runtime-upgrades.html +++ b/docs/learn-runtime-upgrades.html @@ -19,7 +19,7 @@ - + @@ -95,7 +95,7 @@ will be enacted.
  • referenda (Rejected) indicates that index's referendum has been rejected and will not be enacted.
  • When the runtime upgrades, there will be a system(CodeUpdated) event confirming the execution of the runtime upgrade.
  • - + \ No newline at end of file diff --git a/docs/learn-safrole.html b/docs/learn-safrole.html index a21a48021525..6c75629a017c 100644 --- a/docs/learn-safrole.html +++ b/docs/learn-safrole.html @@ -19,7 +19,7 @@ - + @@ -40,7 +40,7 @@ SAFROLE prevents forks can be found in Section 4.3, 4.8, and 6 of the JAM Graypaper.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-scams.html b/docs/learn-scams.html index 7dfc4e7ef075..dc86617b7570 100644 --- a/docs/learn-scams.html +++ b/docs/learn-scams.html @@ -19,7 +19,7 @@ - + @@ -88,7 +88,7 @@ for steps you should take to prevent further loss and contact Polkadot Support from the same page. Finally, make sure to read the present article carefully to learn how to avoid falling victim in the future.

    - + \ No newline at end of file diff --git a/docs/learn-spree.html b/docs/learn-spree.html index 78ce8c96c97c..aeecdacaf7d5 100644 --- a/docs/learn-spree.html +++ b/docs/learn-spree.html @@ -19,7 +19,7 @@ - + @@ -78,7 +78,7 @@ instances, and the next state root of the instance. They do this validation by checking it against the validate function as provided by the SPREE module API. Collators are expected to be able to provide this information to progress their parachains.

    - + \ No newline at end of file diff --git a/docs/learn-staking-advanced.html b/docs/learn-staking-advanced.html index 3e4c190a7837..3d9a1fc0c104 100644 --- a/docs/learn-staking-advanced.html +++ b/docs/learn-staking-advanced.html @@ -19,14 +19,14 @@ - +

    Advanced Staking Concepts

    New to Staking?

    Start your staking journey or explore more information about staking on Polkadot's Home Page. Discover the new -Staking Dashboard that makes staking much easier and +Staking Dashboard that makes staking much easier and check this extensive article list to help you get started. You can now stake on @@ -253,8 +253,8 @@ which is a fixed amount.

    Further Resources

    If you want to run a staking miner on your validator, refer to the repository provided in the -resources section below.

    - +resources section below.

    + \ No newline at end of file diff --git a/docs/learn-staking-index.html b/docs/learn-staking-index.html index 52d0997df00c..5c3879bc1003 100644 --- a/docs/learn-staking-index.html +++ b/docs/learn-staking-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-staking.html b/docs/learn-staking.html index 491a72fa5a15..51d0daae0065 100644 --- a/docs/learn-staking.html +++ b/docs/learn-staking.html @@ -19,7 +19,7 @@ - + @@ -28,7 +28,7 @@ Polkadot website and start your staking journey or explore more information about staking on Polkadot's Staking Page. Discover the new -Staking Dashboard that makes staking much easier and +Staking Dashboard that makes staking much easier and check this extensive article list to help you get started. The dashboard supports Ledger devices natively and @@ -165,7 +165,7 @@ beginner and would like to securely stake your tokens using the Polkadot-JS UI, refer to this support article. -

    Polkadot Staking Dashboard

    The Staking Dashboard provides a more +

    Polkadot Staking Dashboard

    The Staking Dashboard provides a more user-friendly alternative to staking. See the instructions in this support article to learn how to stake with the dashboard.

    Pools. Pools are "built" on top of NPoS to provide a very low barrier to entry to staking, @@ -266,7 +266,7 @@ can now unbond them immediately.

    If your bonded balance did not back any validators in the last days, you are eligible to perform fast unstaking. The -staking dashboard will automatically check if you +staking dashboard will automatically check if you qualify. For more information, visit the "Fast Unstake" section in this support article.

    Why and Why not to Stake?

    Pros of Staking


    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about staking.

    + \ No newline at end of file diff --git a/docs/learn-system-chains.html b/docs/learn-system-chains.html index d00ca5b07188..d22d34201eba 100644 --- a/docs/learn-system-chains.html +++ b/docs/learn-system-chains.html @@ -19,7 +19,7 @@ - + @@ -87,7 +87,7 @@ isolation provided by parachains.

    See the Bridges page for information on the latest bridge projects. Currently, a Bridge Hub parachain is in development that will be a portal for trust-minimized bridges to other networks.

    - + \ No newline at end of file diff --git a/docs/learn-teleport.html b/docs/learn-teleport.html index 43003f30707d..e13c53b2f57f 100644 --- a/docs/learn-teleport.html +++ b/docs/learn-teleport.html @@ -19,7 +19,7 @@ - + @@ -48,7 +48,7 @@ teleportation should result in the same circulating supply of the asset, and failing to uphold this condition will result in a change in the asset's total issuance (in the case of fungible tokens) or a complete loss/duplication of an NFT.

    - + \ No newline at end of file diff --git a/docs/learn-transaction-fees.html b/docs/learn-transaction-fees.html index 1318377bef0a..73f8a078f8c4 100644 --- a/docs/learn-transaction-fees.html +++ b/docs/learn-transaction-fees.html @@ -19,7 +19,7 @@ - + @@ -99,7 +99,7 @@ to free storage (e.g. clear their IDE).
  • Burns: A transaction may burn funds internally based on its logic. For example, a transaction may burn funds from the sender if it creates new storage entries, thus increasing the state size.
  • Limits: Some limits are part of the protocol. For example, nominators can only nominate 16 validators. This limits the complexity of Phragmén.
  • Learn More

    - + \ No newline at end of file diff --git a/docs/learn-transactions.html b/docs/learn-transactions.html index 5ee6446ad7c5..c1703853e9a3 100644 --- a/docs/learn-transactions.html +++ b/docs/learn-transactions.html @@ -19,7 +19,7 @@ - + @@ -96,7 +96,7 @@ the fee will go to the block producer, producers will include the transactions with the highest fees to maximize their reward.


    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about transfers.

    - + \ No newline at end of file diff --git a/docs/learn-validator.html b/docs/learn-validator.html index 9720635590d1..58ae928d5b53 100644 --- a/docs/learn-validator.html +++ b/docs/learn-validator.html @@ -19,7 +19,7 @@ - + @@ -94,7 +94,7 @@ statistics.
  • YieldScan - Staking yield maximization platform, designed to minimize effort.
  • Subscan Validators Page - Displays information on the current validators - not as tailored for validators as the other sites.
  • - + \ No newline at end of file diff --git a/docs/learn-video-tutorials.html b/docs/learn-video-tutorials.html index b36dfe8230e0..a73efc0212c7 100644 --- a/docs/learn-video-tutorials.html +++ b/docs/learn-video-tutorials.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@ - + \ No newline at end of file diff --git a/docs/learn-wasm.html b/docs/learn-wasm.html index bce2faf4f5b6..3c3905774360 100644 --- a/docs/learn-wasm.html +++ b/docs/learn-wasm.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ spec.
  • Wasmi - WebAssembly interpreter written in Rust.
  • Parity Wasm - WebAssembly serialization/deserialization in Rust.
  • Wasm utils - Collection of Wasm utilities used in Parity and Wasm contract development.
  • - + \ No newline at end of file diff --git a/docs/learn-xcm-index.html b/docs/learn-xcm-index.html index ab8077af6c85..ff135583d0db 100644 --- a/docs/learn-xcm-index.html +++ b/docs/learn-xcm-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-xcm-instructions.html b/docs/learn-xcm-instructions.html index 9c404ed0fb6b..66639c86f4e9 100644 --- a/docs/learn-xcm-instructions.html +++ b/docs/learn-xcm-instructions.html @@ -19,7 +19,7 @@ - + @@ -37,7 +37,7 @@ system and may not be transferred. It may only be unlocked with the receipt of the UnlockAsset instruction from this chain.

  • RequestUnlock(MultiAsset, MultiLocation) - Send an UnlockAsset instruction to the locker for the given asset.

  • - + \ No newline at end of file diff --git a/docs/learn-xcm-pallet.html b/docs/learn-xcm-pallet.html index ef482dc67d28..01cbf0e1e752 100644 --- a/docs/learn-xcm-pallet.html +++ b/docs/learn-xcm-pallet.html @@ -19,7 +19,7 @@ - + @@ -87,7 +87,7 @@ calculates the total fee based on the number of instructions.

    The Trader used to calculate the weight (time for computation in consensus) to include in the message. Fee calculation in XCM is highly configurable and, for this reason, subjective to whichever configuration is in place.

    - + \ No newline at end of file diff --git a/docs/learn-xcm-transport.html b/docs/learn-xcm-transport.html index e89c48ff6c8c..fdbba0ee4b11 100644 --- a/docs/learn-xcm-transport.html +++ b/docs/learn-xcm-transport.html @@ -19,7 +19,7 @@ - + @@ -69,7 +69,7 @@ asset transfer as intended.

    The collator now hands this block to the validator, which itself will verify that this message was processed. If the message was processed and all other aspects of the block are valid, the validator will include this block for parachain B into the Relay Chain.

    - + \ No newline at end of file diff --git a/docs/learn-xcm-usecases.html b/docs/learn-xcm-usecases.html index f373a89e2836..25b97b425236 100644 --- a/docs/learn-xcm-usecases.html +++ b/docs/learn-xcm-usecases.html @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ destination's sovereign account, and sends this instruction onwards to the destination. The destination receives the instruction and processes it, minting the derivative assets as a result of the process.

    1. DepositAsset

    The destination deposits the derivative assets minted to the receiving account.

    - + \ No newline at end of file diff --git a/docs/learn-xcm.html b/docs/learn-xcm.html index 6c76ceb06f18..7b3c81996d6b 100644 --- a/docs/learn-xcm.html +++ b/docs/learn-xcm.html @@ -19,7 +19,7 @@ - + @@ -92,7 +92,7 @@ Technical audit report by Quarkslab prepared for Parity.

  • XCM pallet code - The pallet that contains XCM logic from the Polkadot code repository

  • XCM Config & Pallet-XCM | Polkadot Deep Dives - A technical deep dive into pallet-xcm and the XCM configuration.

  • - + \ No newline at end of file diff --git a/docs/learn-xcvm.html b/docs/learn-xcvm.html index 4972506b7be7..62f419bec50e 100644 --- a/docs/learn-xcvm.html +++ b/docs/learn-xcvm.html @@ -19,7 +19,7 @@ - + @@ -111,7 +111,7 @@ xcm-simulator, which allows developers to experiment with building, executing, and simulating various XCM use scenarios.

    - + \ No newline at end of file diff --git a/docs/learn/learn-controller.html b/docs/learn/learn-controller.html index febf758f96f3..4742b624fa5a 100644 --- a/docs/learn/learn-controller.html +++ b/docs/learn/learn-controller.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ used less often and usually signed by the stash.

    stash-not-as-controller

    From a practical perspective, there were two accounts, and we needed to remember two passwords. From a security perspective, the party who wanted to control our staking actions was required to control two accounts.

    - + \ No newline at end of file diff --git a/docs/learn/learn-governance.html b/docs/learn/learn-governance.html index bb14c2bb38c7..30e15302ee77 100644 --- a/docs/learn/learn-governance.html +++ b/docs/learn/learn-governance.html @@ -19,7 +19,7 @@ - + @@ -242,7 +242,7 @@ proposals and referenda.

    * E.g. via pallets/democracy/storage/ReferendumInfoOf?key1=index&at=blockNumber on Sidecar.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn/learn-launch.html b/docs/learn/learn-launch.html index e06a0bf54255..ee28aff40809 100644 --- a/docs/learn/learn-launch.html +++ b/docs/learn/learn-launch.html @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ block number 1_205_128 on August 18, 2020, at 16:39 UTC.

    Core Functionality

    After five years of research and development and a multi-stage launch that began in May 2020, Polkadot launch was completed on December 18, 2021, with all auction-winning parachains producing blocks on the network.

    Check out these resources for further information:

    - + \ No newline at end of file diff --git a/docs/learn/learn-redenomination.html b/docs/learn/learn-redenomination.html index 9db10b13e40d..66d3c6fe5a28 100644 --- a/docs/learn/learn-redenomination.html +++ b/docs/learn/learn-redenomination.html @@ -19,7 +19,7 @@ - + @@ -84,7 +84,7 @@ Ecosystem Redenomination Guide for recommendations.

    Please reach out to support@polkadot.network if you need any assistance in making sure your software is compatible with the redenomination.

    - + \ No newline at end of file diff --git a/docs/learn/learn-treasury.html b/docs/learn/learn-treasury.html index 14af84f7aac1..54d7af3766d1 100644 --- a/docs/learn/learn-treasury.html +++ b/docs/learn/learn-treasury.html @@ -19,7 +19,7 @@ - + @@ -161,7 +161,7 @@ taking place. The time delay then allows chain participants time to respond. The response may take the form of governance measures or - in the most extreme cases a liquidation of their holdings and a migration to a minority fork. However, the possibility of this scenario is quite low.

    Further Reading

    - + \ No newline at end of file diff --git a/docs/learn/xcm.html b/docs/learn/xcm.html index 70f97bbb0169..90553889c33c 100644 --- a/docs/learn/xcm.html +++ b/docs/learn/xcm.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/config-deep-dive.html b/docs/learn/xcm/config-deep-dive.html index 535e50814b2b..9d299613582e 100644 --- a/docs/learn/xcm/config-deep-dive.html +++ b/docs/learn/xcm/config-deep-dive.html @@ -19,7 +19,7 @@ - + @@ -132,7 +132,7 @@ Statemine, or Trappist for examples of how to implement the xcm-executor config.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals-fees.html b/docs/learn/xcm/fundamentals-fees.html index fcf951251626..72d1b1c774e0 100644 --- a/docs/learn/xcm/fundamentals-fees.html +++ b/docs/learn/xcm/fundamentals-fees.html @@ -19,7 +19,7 @@ - + @@ -56,7 +56,7 @@ and charging execution fees.

    XCM pallet

    FRAME pallets, like the XCM pallet, specify weights for each extrinsic they expose. That means that when interacting with pallets that deal with XCM, there will be an additional fee at the beginning for calling the extrinsic locally.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals-multiasset.html b/docs/learn/xcm/fundamentals-multiasset.html index 63de16f89503..dbc6d34de56d 100644 --- a/docs/learn/xcm/fundamentals-multiasset.html +++ b/docs/learn/xcm/fundamentals-multiasset.html @@ -19,7 +19,7 @@ - + @@ -56,7 +56,7 @@ MultiAssets and WildMultiAsset allowing either a wildcard or a list of definite (i.e. not wildcard) assets to be specified.

    pub enum MultiAssetFilter {
    /// Specify the filter as being everything contained by the given `MultiAssets` inner.
    Definite(MultiAssets),
    /// Specify the filter as the given `WildMultiAsset` wildcard.
    Wild(WildMultiAsset),
    }

    Examples

    MultiAsset

    For more information about the MultiLocations used to define concrete assets, see MultiLocation and Junction.

    // Location Relay Chain
    // 100 Native Asset (three ways)
    MultiAsset {id: Concrete(MultiLocation {parents: 0, interior: Here}), fun: Fungible(100u128)};
    MultiAsset {id: Here.into(), fun: 100.into()};
    let _: MultiAsset = (Here, 100u128).into();

    // 100 Parachain's Native Asset
    let _: MultiAsset = (X1(Parachain(1000)), 100u128).into();
    // 100 Fungible assets in Parachain 1000 with id 1234
    let _: MultiAsset = (X2(Parachain(1000), GeneralIndex(1234)), 100u128).into();
    // Non Fungible asset with asset class 1234 containing only one nft instance in Parachain 1000
    let _: MultiAsset = (X2(Parachain(1000), GeneralIndex(1234)), Undefined).into();
    // Non Fungible asset with asset class 1234 and AssetInstance 1 in Parachain 1000
    let _: MultiAsset = (X2(Parachain(1000), GeneralIndex(1234)), Index(1)).into();

    MultiAssetFilter

    let a1: MultiAssets = MultiAssets::from(vec![MultiAsset {id: Here.into(), fun: 100u128.into()}]);
    let b1: MultiAssets = (Here, 100u128).into();
    assert_eq!(a1, b1);

    let a2: MultiAssetFilter = a1.into();
    let b2 = MultiAssetFilter::Definite((Here, 100u128).into());
    assert_eq!(a2, b2);

    let a3 = MultiAssetFilter::Wild(WildMultiAsset::All);
    let b3: MultiAssetFilter = All.into();
    assert_eq!(a3, b3);
    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals-summary.html b/docs/learn/xcm/fundamentals-summary.html index b7ee03e2bb29..1baa308332a8 100644 --- a/docs/learn/xcm/fundamentals-summary.html +++ b/docs/learn/xcm/fundamentals-summary.html @@ -19,14 +19,14 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals-xcvm.html b/docs/learn/xcm/fundamentals-xcvm.html index 3d0b9d68208d..bd2f4d8f3648 100644 --- a/docs/learn/xcm/fundamentals-xcvm.html +++ b/docs/learn/xcm/fundamentals-xcvm.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals.html b/docs/learn/xcm/fundamentals.html index 89e2ca03238f..30d98dea270e 100644 --- a/docs/learn/xcm/fundamentals.html +++ b/docs/learn/xcm/fundamentals.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals/multilocation-example.html b/docs/learn/xcm/fundamentals/multilocation-example.html index 848a50098fe4..9a52a069fc0d 100644 --- a/docs/learn/xcm/fundamentals/multilocation-example.html +++ b/docs/learn/xcm/fundamentals/multilocation-example.html @@ -19,14 +19,14 @@ - +

    Example

    In this example we show different MultiLocations for the system hierarchy in the image below. Example

    From the perspective of RelayA

    // ParaA
    let _: MultiLocation = Parachain(1000).into();
    // AccountId32 in Parachain A
    let _: MultiLocation = (Parachain(1000), AccountId32 { network: RELAY_A_NETWORK, id: [0u8; 32]}).into();
    // Asset in Parachain A
    let _: MultiLocation = (Parachain(1000), PalletInstance(1), GeneralIndex(1)).into();
    // Ethereum based account on Parachain B
    let _: MultiLocation = (Parachain(2000), AccountKey20 { network: RELAY_A_NETWORK, key: [0u8; 20] }).into();
    // Smart Contract
    let _: MultiLocation = (Parachain(2000), PalletInstance(1), AccountKey20 { network: RELAY_A_NETWORK, key: [0u8; 20] }).into();
    // RelayB
    let _: MultiLocation = (Parent, GlobalConsensus(RELAY_B_NETWORK)).into();
    // NFT on Parachain C
    let _: MultiLocation = (Parent, GlobalConsensus(RELAY_B_NETWORK), Parachain(1000), GeneralIndex(1)).into();

    From the perspective of Parachain C

    // Relay B
    let _: MultiLocation = Parent.into();
    // Plurality Example. Many more BodyId/BodyPart combos imaginable
    let _: MultiLocation = (Parent, Plurality { id: BodyId::Index(0), part: BodyPart::Members { count: 10 } }).into();
    // Account in Relay
    let _: MultiLocation = (Parent, AccountId32 { network: None, id: [0u8; 32] }).into();

    From the perspective of the Smart Contract

    // Asset in Parachain A
    let _: MultiLocation = (Parent, Parent, Parachain(1000), PalletInstance(1), GeneralIndex(1)).into();

    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals/multilocation-junctions.html b/docs/learn/xcm/fundamentals/multilocation-junctions.html index 52283e22a4f9..67db0107467f 100644 --- a/docs/learn/xcm/fundamentals/multilocation-junctions.html +++ b/docs/learn/xcm/fundamentals/multilocation-junctions.html @@ -19,7 +19,7 @@ - + @@ -59,7 +59,7 @@ relay chain from the perspective of the Polkadot relay chain as {parents: 1, interior: GlobalConsensus(Kusama)}. An example use case could be routing XCMs between global consensus networks using bridges.

    Multiple ways to create a MultiLocation

    // Current Location
    MultiLocation {parents: 0, interior: Here};
    MultiLocation::new(0, Here);
    MultiLocation::here();
    MultiLocation::default();
    let _: MultiLocation = Here.into();

    // Parent Location
    MultiLocation {parents: 1, interior: Here};
    MultiLocation::parent();
    let _: MultiLocation = Parent.into();

    // Conversion
    MultiLocation { parents: 2, interior: X2(Parachain(1), GeneralIndex(1))};
    let _: MultiLocation = (Parent, Parent, Parachain(1), GeneralIndex(1)).into();
    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals/multilocation-summary.html b/docs/learn/xcm/fundamentals/multilocation-summary.html index ae694290eaff..c5b555783c16 100644 --- a/docs/learn/xcm/fundamentals/multilocation-summary.html +++ b/docs/learn/xcm/fundamentals/multilocation-summary.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ .. are followed by some number of Junctions, all separated by /. The X1 and X2 variants are expressing the number of Junctions that we step down in the hierarchical structure (see Junctions for an explanation).

    // From: RelayA
    // To: ParaB
    // Location: Parachain(2000)
    MultiLocation {parents: 0, interior: X1(Parachain(2000))};
    // To: Account in ParaA
    // Location: Parachain(1000)/AccountId32(0x00..)
    MultiLocation {
    parents: 0,
    interior: X2(
    Parachain(1000),
    AccountId32{network: None, id: [0u8; 32]}
    )
    };

    // From: ParaB
    // To: RelayA
    // Location: ../Here
    MultiLocation {parents: 1, interior: Here};
    // To: Account in ParaA
    // Location: ../Parachain(1000)/AccountId32(0x00..)
    MultiLocation {
    parents: 1,
    interior: X2(
    Parachain(1000),
    AccountId32{network: None, id: [0u8; 32]}
    )
    };

    What's next:

    • More information about junctions
    • More MultiLocation examples
    • Expressing assets using Multilocations: [MultiAsset][../multiasset.md]
    - + \ No newline at end of file diff --git a/docs/learn/xcm/fundamentals/multilocation.html b/docs/learn/xcm/fundamentals/multilocation.html index c68f7e56f461..faf86c6e32f0 100644 --- a/docs/learn/xcm/fundamentals/multilocation.html +++ b/docs/learn/xcm/fundamentals/multilocation.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/introduction.html b/docs/learn/xcm/introduction.html index e332277e02d2..f28d9fb222b5 100644 --- a/docs/learn/xcm/introduction.html +++ b/docs/learn/xcm/introduction.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ open an issue. If you want to contribute to the format, check out the RFC process.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-assets.html b/docs/learn/xcm/journey-assets.html index d17b1fc2f757..99b43192cb8e 100644 --- a/docs/learn/xcm/journey-assets.html +++ b/docs/learn/xcm/journey-assets.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ relay chain. The assets are trapped because an error is thrown and the execution is halted. Parachain A claims the trapped assets and receives a report of the holding register.

    Parachain A sends the following message to the relay chain. The message errors because of the Trap instruction, so all assets in the Holding Register are trapped.

    let message = Xcm(vec![
    WithdrawAsset((Here, 10 * CENTS).into()),
    BuyExecution { fees: (Here, CENTS).into(), weight_limit: WeightLimit::Unlimited },
    Trap(0), // <-- Errors
    DepositAsset { // <-- Not executed because of error.
    assets: All.into(),
    beneficiary: AccountId32 {
    network: Some(parachain::RelayNetwork::get()),
    id: ALICE.into()
    }.into()
    }
    ]);

    Parachain A claims the assets, reports them to itself and deposits them in the Account of Alice.

    let claim_message = Xcm(vec![
    ClaimAsset { assets: (Here, 10 * CENTS).into(), ticket: Here.into() },
    ReportHolding {
    response_info: QueryResponseInfo {
    destination: Parachain(1).into(),
    query_id: QUERY_ID,
    max_weight: Weight::from_parts(1_000_000_000, 64*64) },
    assets: All.into()
    },
    DepositAsset {
    assets: All.into(),
    beneficiary: AccountId32 {
    network: Some(parachain::RelayNetwork::get()),
    id: ALICE.into()
    }.into()
    },
    ]);
    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-channels.html b/docs/learn/xcm/journey-channels.html index f279671e7714..7ef84c22d9bc 100644 --- a/docs/learn/xcm/journey-channels.html +++ b/docs/learn/xcm/journey-channels.html @@ -19,7 +19,7 @@ - + @@ -51,7 +51,7 @@ network), you would call with network: NetworkId::Kusama and destination: X1(Parachain(1000)). Alternatively, to export a message for execution on Polkadot, you would call with network: NetworkId:: Polkadot and destination: Here.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-expectations.html b/docs/learn/xcm/journey-expectations.html index 3806431315e6..e05bdfdf5607 100644 --- a/docs/learn/xcm/journey-expectations.html +++ b/docs/learn/xcm/journey-expectations.html @@ -19,7 +19,7 @@ - + @@ -44,7 +44,7 @@ the error handler, when a specific error is thrown.

        ExpectError(Option<(u32, Error)>)

    Example

    For the full example, check here.

    SetErrorHandler(Xcm(vec![
    ExpectError(Some((1, XcmError::VersionIncompatible))),
    ReportError(QueryResponseInfo {
    destination: Parachain(1).into(),
    query_id: QUERY_ID,
    max_weight: Weight::from_all(0),
    }),
    ])),
    // Pallet index is wrong, so throws `PalletNotFound` error.
    ExpectPallet {
    index: 100,
    name: "Balances".into(),
    module_name: "pallet_balances".into(),
    crate_major: 4,
    min_crate_minor: 0,
    },

    ExpectTransactStatus

    The ExpectTransactStatus instruction throws an ExpectationFalse error if the transact status register does not equal the expected transact status.

    Example

    For the full example, check here. The transact status is reported to Parachain(1) if the call in the Transact errors.

    SetErrorHandler(Xcm(vec![ReportTransactStatus(QueryResponseInfo {
    destination: Parachain(1).into(),
    query_id: QUERY_ID,
    max_weight: Weight::from_all(0),
    })])),
    Transact {
    origin_kind: OriginKind::SovereignAccount,
    require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024),
    call: call.encode().into(),
    },
    ExpectTransactStatus(MaybeErrorCode::Success),
    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-fees.html b/docs/learn/xcm/journey-fees.html index 9ffa1322a6c8..167664348cd4 100644 --- a/docs/learn/xcm/journey-fees.html +++ b/docs/learn/xcm/journey-fees.html @@ -19,7 +19,7 @@ - + @@ -62,7 +62,7 @@ throws an error, the error handler will be called and the weight for all the instructions that weren't executed is refunded. For the full example, check our repo.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-holding.html b/docs/learn/xcm/journey-holding.html index 00ab6d933229..5d777dd96326 100644 --- a/docs/learn/xcm/journey-holding.html +++ b/docs/learn/xcm/journey-holding.html @@ -19,7 +19,7 @@ - + @@ -47,7 +47,7 @@ results could differ.

    The Assets in the exchange in Parachain(1). This is a custom exchange implementation just for testing purposes.

    let assets_in_exchange = vec![(Parent, 10 * CENTS).into()];
    parachain::set_exchange_assets(assets_in_exchange);

    The message that is send:

    let message = Xcm(vec![
    WithdrawAsset((Here, 10 * CENTS).into()),
    BuyExecution { fees: (Here, CENTS).into(), weight_limit: WeightLimit::Unlimited },
    // Maximal field set to true.
    ExchangeAsset {
    give: Definite((Here, 5 * CENTS).into()),
    want: (Parent, 5 * CENTS).into(),
    maximal: true,
    },
    DepositAsset {
    assets: AllCounted(2).into(),
    beneficiary: AccountId32 {
    network: Some(parachain::RelayNetwork::get()),
    id: ALICE.into(),
    }
    .into(),
    },
    ]);

    Alice receives 5 CENTS worth of native assets (Here) and 5 CENTS worth of relay chain derivative assets (Parent).

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-locks.html b/docs/learn/xcm/journey-locks.html index 17c76992ecda..fe069d240b5b 100644 --- a/docs/learn/xcm/journey-locks.html +++ b/docs/learn/xcm/journey-locks.html @@ -19,7 +19,7 @@ - + @@ -55,7 +55,7 @@ pallet-balances: 10.
    ParaA::execute_with(|| {
    let message = Xcm(vec![
    LockAsset { asset: (Here, 10 * CENTS).into(), unlocker: (Parachain(2)).into() },
    LockAsset { asset: (Here, 5 * CENTS).into(), unlocker: (Parachain(3)).into() },
    ]);
    assert_ok!(ParachainPalletXcm::send_xcm(Here, Parent, message.clone()));
    });

    Relay::execute_with(|| {
    assert_eq!(
    relay_chain::Balances::locks(&parachain_sovereign_account_id(1)),
    vec![BalanceLock { id: *b"py/xcmlk", amount: 10 * CENTS, reasons: Reasons::All }]
    );
    });
    1. Parachain B and C receive the NoteUnlockable instruction.
    ParaB::execute_with(|| {
    assert_eq!(
    parachain::MsgQueue::received_dmp(),
    vec![Xcm(vec![NoteUnlockable {
    owner: (Parent, Parachain(1)).into(),
    asset: (Parent, 10 * CENTS).into()
    }])]
    );
    });

    ParaC::execute_with(|| {
    assert_eq!(
    parachain::MsgQueue::received_dmp(),
    vec![Xcm(vec![NoteUnlockable {
    owner: (Parent, Parachain(1)).into(),
    asset: (Parent, 5 * CENTS).into()
    }])]
    );
    });
    1. Parachain A sends a RequestUnlock instruction to Parachain B for 8 CENTS.
    ParaA::execute_with(|| {
    let message = Xcm(vec![RequestUnlock {
    asset: (Parent, 8 * CENTS).into(),
    locker: Parent.into(),
    }]);

    assert_ok!(ParachainPalletXcm::send_xcm(Here, (Parent, Parachain(2)), message.clone()));
    });
    1. Parachain B Unlocks a part of the funds by sending an UnlockAsset to the relay chain. we check the lock in the balances-pallet. Unlockers: B, C; Funds registered in pallet-xcm: 2, 5. Lock set in pallet-balances: 5.
    Relay::execute_with(|| {
    assert_eq!(
    relay_chain::Balances::locks(&parachain_sovereign_account_id(1)),
    vec![BalanceLock { id: *b"py/xcmlk", amount: 5 * CENTS, reasons: Reasons::All }]
    );
    });
    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-origin.html b/docs/learn/xcm/journey-origin.html index 157b408f5963..e0fb64149bb4 100644 --- a/docs/learn/xcm/journey-origin.html +++ b/docs/learn/xcm/journey-origin.html @@ -19,7 +19,7 @@ - + @@ -47,7 +47,7 @@ for certain values of X (thereby allowing sibling chains to use the same account IDs) or Parachain(X)/ (allowing a Relay-chain to use the account IDs native to its child parachains) or just Parent/ (allowing parachains to use AccountIds of the Relay-chain).

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-queries.html b/docs/learn/xcm/journey-queries.html index 19c90acc1aca..c30a7e2e4152 100644 --- a/docs/learn/xcm/journey-queries.html +++ b/docs/learn/xcm/journey-queries.html @@ -19,7 +19,7 @@ - + @@ -51,7 +51,7 @@ specified destination.

    ReportTransactStatus(QueryResponseInfo)

    Example

    For the full example, check here. Dispatches a call on the consensus system receiving this Xcm and reports back the status of the Transact Status Register.

    Xcm(vec![
    Transact {
    origin_kind: OriginKind::SovereignAccount,
    require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024),
    call: remark.encode().into(),
    },
    ReportTransactStatus(QueryResponseInfo {
    destination: Parachain(1).into(),
    query_id: QUERY_ID,
    max_weight: Weight::from_all(0),
    }),
    ]);
    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-register.html b/docs/learn/xcm/journey-register.html index 386d8d53fe3b..c8d4b1f4322f 100644 --- a/docs/learn/xcm/journey-register.html +++ b/docs/learn/xcm/journey-register.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ and error handler instruction are executed. These instructions are executed regardless of whether an error occurred.

    ClearError

    ClearError

    The ClearError instruction clears the Error Register by setting it to None.

    ClearTransactStatus

    ClearTransactStatus

    The ClearTransactStatus instruction sets the Transact Status Register to its default, cleared, value.

    SetTopic

    SetTopic([u8; 32])

    The SetTopic instruction sets the Topic Register.

    ClearTopic

    ClearTopic

    The ClearTopic instruction clears the Topic Register.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-summary.html b/docs/learn/xcm/journey-summary.html index ca27e0311be8..3f0792a31564 100644 --- a/docs/learn/xcm/journey-summary.html +++ b/docs/learn/xcm/journey-summary.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@ - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-transact.html b/docs/learn/xcm/journey-transact.html index 02815208d84e..022ff79df7e1 100644 --- a/docs/learn/xcm/journey-transact.html +++ b/docs/learn/xcm/journey-transact.html @@ -19,7 +19,7 @@ - + @@ -50,7 +50,7 @@ Parachain(1). This function requires the origin to be root. We enable the root origin for the relay chain by setting ParentAsSuperuser for the OriginConverter config type.

    let call = parachain::RuntimeCall::Balances(
    pallet_balances::Call::<parachain::Runtime>::set_balance {
    who: ALICE,
    new_free: 5 * AMOUNT,
    new_reserved: 0,
    },
    );

    let message = Xcm(vec![
    WithdrawAsset((Here, AMOUNT).into()),
    BuyExecution { fees: (Here, AMOUNT).into(), weight_limit: WeightLimit::Unlimited },
    Transact {
    origin_kind: OriginKind::Superuser,
    require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024),
    call: call.encode().into(),
    },
    ]);

    Example 2

    For the full example, check the repo.

    In this example, as Parachain(1), we create an NFT collection on the relay chain and we then mint an NFT with ID 1. The admin for the nft collection is parachain(1). The call looks as follows:

    let create_collection = relay_chain::RuntimeCall::Uniques(
    pallet_uniques::Call::<relay_chain::Runtime>::create {
    collection: 1u32,
    admin: parachain_sovereign_account_id(1),
    }
    );

    The owner of the NFT is Alice. The nft mint call looks as follows:

    let mint = relay_chain::RuntimeCall::Uniques(
    pallet_uniques::Call::<relay_chain::Runtime>::mint {
    collection: 1u32,
    item: 1u32,
    owner: ALICE,
    }
    );

    The xcm message contains the following instructions:

    1. Withdraw native assets from the Parachain(1)'s sovereign account.
    2. Buy weight with these assets.
    3. Create a collection with as admin and owner the sovereign account of Parachain(1).
    4. Mints an NFT in the collection with item ID 1 and as owner Alice.
    let message = Xcm(vec![
    WithdrawAsset((Here, AMOUNT).into()),
    BuyExecution { fees: (Here, AMOUNT).into(), weight_limit: WeightLimit::Unlimited },
    Transact {
    origin_kind: OriginKind::SovereignAccount,
    require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024),
    call: create_collection.encode().into(),
    },
    Transact {
    origin_kind: OriginKind::SovereignAccount,
    require_weight_at_most: Weight::from_parts(INITIAL_BALANCE as u64, 1024 * 1024),
    call: mint.encode().into(),
    },
    ]);

    Next:

    Check out the following instructions that interact with the Transact Status Register:

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey-version.html b/docs/learn/xcm/journey-version.html index 9f195a6a52cb..01407c9a5a9e 100644 --- a/docs/learn/xcm/journey-version.html +++ b/docs/learn/xcm/journey-version.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ send back its currently AdvertisedVersion and will keep the subscribed location up to date when the version changes. The subscribed location can unsubscribe to version changes by sending the UnsubscribeVersion instruction.

    SubscribeVersion {
    #[codec(compact)]
    query_id: QueryId,
    max_response_weight: Weight,
    }

    UnsubscribeVersion

    Check out the example.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey.html b/docs/learn/xcm/journey.html index 27eb4922a474..eb79bb728297 100644 --- a/docs/learn/xcm/journey.html +++ b/docs/learn/xcm/journey.html @@ -19,13 +19,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey/transfers-reserve.html b/docs/learn/xcm/journey/transfers-reserve.html index 65fd623318d2..45e053a69807 100644 --- a/docs/learn/xcm/journey/transfers-reserve.html +++ b/docs/learn/xcm/journey/transfers-reserve.html @@ -19,7 +19,7 @@ - + @@ -73,7 +73,7 @@ It's the sender the one who doesn't need to trust the destination, since it'll ever only be minting derivatives anyway, the sender/reserve controls the real assets and issuance.

    Next steps

    Next, we'll talk about a very important topic we mentioned before but skipped in this chapter, paying fees for the effects our XCMs have.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey/transfers-summary.html b/docs/learn/xcm/journey/transfers-summary.html index a01953f99f8e..afd92aa3b4fc 100644 --- a/docs/learn/xcm/journey/transfers-summary.html +++ b/docs/learn/xcm/journey/transfers-summary.html @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ paying for execution and depositing the rest to another account on the same system. The full example can be seen in the repo.

    Transferring between systems

    But what if you want to make a transfer from one system to another? There are two ways of doing this:

    • Asset teleportation
    • Reserve-backed transfers

    We'll be discussing both in the following chapters.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey/transfers-teleport.html b/docs/learn/xcm/journey/transfers-teleport.html index e7ffbee236b2..8248db3c536d 100644 --- a/docs/learn/xcm/journey/transfers-teleport.html +++ b/docs/learn/xcm/journey/transfers-teleport.html @@ -19,7 +19,7 @@ - + @@ -61,7 +61,7 @@ another system. We could do so with the following program:

    let message = Xcm(vec![
    WithdrawAsset((GeneralIndex(1), 42u32).into()),
    InitiateTeleport {
    assets: All.into(),
    dest: Parachain(1).into(),
    xcm: Xcm(vec![DepositAsset {
    assets: All.into(),
    beneficiary: Junction::AccountId32 {
    id: ALICE.into(),
    network: None,
    }.into()
    }]),
    },
    ]);

    Very little changes, in fact, only the MultiAsset we're referencing changes, like we would expect. All the teleportation logic stays the same. The example assumes an NFT with index 42 inside a collection with index 1.

    Next steps

    We'll look at reserve-backed transfers next.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/journey/transfers.html b/docs/learn/xcm/journey/transfers.html index 4c5aec07264f..5bd9255020df 100644 --- a/docs/learn/xcm/journey/transfers.html +++ b/docs/learn/xcm/journey/transfers.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/overview-architecture.html b/docs/learn/xcm/overview-architecture.html index 30263b19adf0..a123db9e0cbe 100644 --- a/docs/learn/xcm/overview-architecture.html +++ b/docs/learn/xcm/overview-architecture.html @@ -19,7 +19,7 @@ - + @@ -49,7 +49,7 @@ about later. It's the glue between XCM and FRAME, which is highly used in the Polkadot ecosystem.

    Simulator

    The simulator allows for testing XCMs fast, without needing to boot up several different nodes in a network, or test in production. It's a very useful tool which we'll use throughout this document to build and test different XCMs.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/overview-format.html b/docs/learn/xcm/overview-format.html index 9674cd408688..199c8483d212 100644 --- a/docs/learn/xcm/overview-format.html +++ b/docs/learn/xcm/overview-format.html @@ -19,7 +19,7 @@ - + @@ -38,7 +38,7 @@ changes. XCM communicates intentions; the actual interpretation and behaviour of each instruction in an XCM is defined by target's XCVM implementation.

    Both simple and more complex scenarios can be expressed, and developers are encouraged to design and implement diverse cross-consensus communication solutions.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/overview-intro.html b/docs/learn/xcm/overview-intro.html index 4c4b731618d6..fc706d9e6622 100644 --- a/docs/learn/xcm/overview-intro.html +++ b/docs/learn/xcm/overview-intro.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ propose changes, which end up in newer versions, the current one being v3. To keep up with the development of the format, or to propose changes, go to the XCM format repository.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/overview-summary.html b/docs/learn/xcm/overview-summary.html index 38afb498ea12..5232e427e11f 100644 --- a/docs/learn/xcm/overview-summary.html +++ b/docs/learn/xcm/overview-summary.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ interactions between them. XCM is meant to be used by developers to package these interactions into their runtime logic before exposing that functionality to end users.

    This chapter will cover what XCM is, what it isn't, and why it matters before exploring the different components that make up the XCM ecosystem.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/overview-xcvm.html b/docs/learn/xcm/overview-xcvm.html index ebeb29d989e2..9acb0eaa4b03 100644 --- a/docs/learn/xcm/overview-xcvm.html +++ b/docs/learn/xcm/overview-xcvm.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ putting them in and taking them from this register. This register is used by several of the instructions we will look at later, including DepositAsset and WithdrawAsset.

    For more information on other registers, see the All XCVM Registers section.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/overview.html b/docs/learn/xcm/overview.html index 363fab4526f9..d091ca8020c3 100644 --- a/docs/learn/xcm/overview.html +++ b/docs/learn/xcm/overview.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/quickstart-first-look.html b/docs/learn/xcm/quickstart-first-look.html index 5bdb38869f4f..00ce0195a02b 100644 --- a/docs/learn/xcm/quickstart-first-look.html +++ b/docs/learn/xcm/quickstart-first-look.html @@ -19,7 +19,7 @@ - + @@ -51,7 +51,7 @@ examples for every instruction in the journey through XCM chapter. First, it's important to learn the fundamentals, MultiLocation, MultiAsset, and other concepts in XCM. We'll talk about those next.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/quickstart-simulator.html b/docs/learn/xcm/quickstart-simulator.html index f82504bf9a82..5f5f5c896268 100644 --- a/docs/learn/xcm/quickstart-simulator.html +++ b/docs/learn/xcm/quickstart-simulator.html @@ -19,7 +19,7 @@ - + @@ -31,7 +31,7 @@ actually test your XCM-powered solution. We'll get into tools and best practices for testing in the testing chapter.

    We'll use the simulator throughout the documentation to show different XCMs in action. In the next section we will take a first look at an XCM.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/quickstart-summary.html b/docs/learn/xcm/quickstart-summary.html index 7d3f9a559ac3..3f70dc10d55c 100644 --- a/docs/learn/xcm/quickstart-summary.html +++ b/docs/learn/xcm/quickstart-summary.html @@ -19,7 +19,7 @@ - + @@ -29,7 +29,7 @@ installation guide.

    Running the Examples

    All examples in the documentation are located in the repository. Follow these steps to run the first-look example. First clone the repository:

    git clone git@github.com:paritytech/xcm-docs.git
    cd xcm-docs/examples

    To run the first-look example, run the following line:

    cargo test -p xcm-examples para_a_simple_transfer -- --nocapture

    It should show you the following output:

    running 1 test
    test first_look::tests::para_a_simple_transfer ... ok

    test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.01s
    - + \ No newline at end of file diff --git a/docs/learn/xcm/quickstart.html b/docs/learn/xcm/quickstart.html index 0e1547448644..b2b3b481b43f 100644 --- a/docs/learn/xcm/quickstart.html +++ b/docs/learn/xcm/quickstart.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/reference-glossary.html b/docs/learn/xcm/reference-glossary.html index 1d6d39402d61..1098198eb207 100644 --- a/docs/learn/xcm/reference-glossary.html +++ b/docs/learn/xcm/reference-glossary.html @@ -19,7 +19,7 @@ - + @@ -44,7 +44,7 @@ through the relay chain.

    HRMP (Horizontal Message Passing)

    Transport-layer protocol that allows a parachain to send messages to a sibling parachain going through the relay chain. It's a precursor to XCMP, also known as XCMP-lite. It uses a mixture of UMP and VMP.

    - + \ No newline at end of file diff --git a/docs/learn/xcm/reference-xcvm-registers.html b/docs/learn/xcm/reference-xcvm-registers.html index 203dc57c28d4..43021aebe090 100644 --- a/docs/learn/xcm/reference-xcvm-registers.html +++ b/docs/learn/xcm/reference-xcvm-registers.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@
    - + \ No newline at end of file diff --git a/docs/learn/xcm/references.html b/docs/learn/xcm/references.html index ece7894fda5d..36c1abedf660 100644 --- a/docs/learn/xcm/references.html +++ b/docs/learn/xcm/references.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn/xcm/testing.html b/docs/learn/xcm/testing.html index 6502a850de6e..79acabb504a9 100644 --- a/docs/learn/xcm/testing.html +++ b/docs/learn/xcm/testing.html @@ -19,7 +19,7 @@ - + @@ -40,7 +40,7 @@ messaging infrastructure as live networks, as the transport mechanism is being mocked out. Also, consensus related events are not tested, like disputes and staking. To test for these events, parachains can use E2E tests.

    End-to-End testing

    There are two frameworks being used in the ecosystem to do e2e testing:

    - + \ No newline at end of file diff --git a/docs/ledger.html b/docs/ledger.html index af58c433397c..5bf75eb8a22b 100644 --- a/docs/ledger.html +++ b/docs/ledger.html @@ -19,7 +19,7 @@ - + @@ -90,7 +90,7 @@ automatically detect the developer release and give the option to install the previous stable release.
    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about Ledger.

    - + \ No newline at end of file diff --git a/docs/maintain-archive.html b/docs/maintain-archive.html index 3ce97781eba5..e7d6bc52b89b 100644 --- a/docs/maintain-archive.html +++ b/docs/maintain-archive.html @@ -19,14 +19,14 @@ - + - + \ No newline at end of file diff --git a/docs/maintain-bootnode.html b/docs/maintain-bootnode.html index b043bd3934f2..c0bbc53225a0 100644 --- a/docs/maintain-bootnode.html +++ b/docs/maintain-bootnode.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ port 30311:

    /etc/nginx/sites-enabled/dot-bootnode

    server {
    listen 30312 ssl http2 default_server;
    server_name dot-bootnode.stakeworld.io;
    root /var/www/html;

    ssl_certificate "<your_cert";
    ssl_certificate_key "<your_key>";

    location / {
    proxy_buffers 16 4k;
    proxy_buffer_size 2k;
    proxy_pass http://localhost:30311;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
    }

    }

    Testing Bootnode Connection

    If we have the above node running with DNS name dot-bootnode.stakeworld.io, proxied with a valid certificate and node-id 12D3KooWAb5MyC1UJiEQJk4Hg4B2Vi3AJdqSUhTGYUqSnEqCFMFg then the following commands should give you a: "syncing 1 peers".

    tip

    You can add -lsub-libp2p=trace on the end to get libp2p trace logging for debugging purposes.

    p2p:

    polkadot --chain polkadot --base-path /tmp/node --name "Bootnode testnode" --reserved-only --reserved-nodes "/dns/dot-bootnode.stakeworld.io/tcp/30310/p2p/12D3KooWAb5MyC1UJiEQJk4Hg4B2Vi3AJdqSUhTGYUqSnEqCFMFg" --no-hardware-benchmarks

    p2p/ws:

    polkadot --chain polkadot --base-path /tmp/node --name "Bootnode testnode" --reserved-only --reserved-nodes "/dns/dot-bootnode.stakeworld.io/tcp/30311/ws/p2p/12D3KooWAb5MyC1UJiEQJk4Hg4B2Vi3AJdqSUhTGYUqSnEqCFMFg" --no-hardware-benchmarks

    p2p/wss:

    polkadot --chain polkadot --base-path /tmp/node --name "Bootnode testnode" --reserved-only --reserved-nodes "/dns/dot-bootnode.stakeworld.io/tcp/30312/wss/p2p/12D3KooWAb5MyC1UJiEQJk4Hg4B2Vi3AJdqSUhTGYUqSnEqCFMFg" --no-hardware-benchmarks
    - + \ No newline at end of file diff --git a/docs/maintain-collator-index.html b/docs/maintain-collator-index.html index 165059d73254..d18d0ebf2226 100644 --- a/docs/maintain-collator-index.html +++ b/docs/maintain-collator-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/maintain-endpoints.html b/docs/maintain-endpoints.html index e965b8c7cf1f..36932f382066 100644 --- a/docs/maintain-endpoints.html +++ b/docs/maintain-endpoints.html @@ -19,7 +19,7 @@ - + @@ -36,7 +36,7 @@ provide additional services such as higher rate limits, potentially more reliable and scalable service, and additional metrics.

    note

    The list of third party RPC endpoints above for Polkadot and Kusama is directly fetched from Polkdot-JS UI

    - + \ No newline at end of file diff --git a/docs/maintain-errors.html b/docs/maintain-errors.html index 5cd7c2009c24..2d91604db9ae 100644 --- a/docs/maintain-errors.html +++ b/docs/maintain-errors.html @@ -19,7 +19,7 @@ - + @@ -51,7 +51,7 @@ will wait to be executed at the correct place in the nonce sequence OR it will get discarded due to some other error (ex. the validity period expires).*

    Error Table

    The below table is a reference to the errors that exists in Polkadot. It is generated from the runtime's metadata.

    PalletErrorDocumentation
    System (0)
    InvalidSpecName (0)The name of specification does not match between the current runtime and the new runtime.
    SpecVersionNeedsToIncrease (1)The specification version is not allowed to decrease between the current runtime and the new runtime.
    FailedToExtractRuntimeVersion (2)Failed to extract the runtime version from the new runtime. Either calling Core_version or decoding RuntimeVersion failed.
    NonDefaultComposite (3)Suicide called when the account has non-default composite data.
    NonZeroRefCount (4)There is a non-zero reference count preventing the account from being purged.
    Scheduler (1)
    FailedToSchedule (0)Failed to schedule a call
    NotFound (1)Cannot find the scheduled call.
    TargetBlockNumberInPast (2)Given target block number is in the past.
    RescheduleNoChange (3)Reschedule failed because it does not change scheduled time.
    Balances (5)
    VestingBalance (0)Vesting balance too high to send value
    LiquidityRestrictions (1)Account liquidity restrictions prevent withdrawal
    Overflow (2)Got an overflow after adding
    InsufficientBalance (3)Balance too low to send value
    ExistentialDeposit (4)Value too low to create account due to existential deposit
    KeepAlive (5)Transfer/payment would kill account
    ExistingVestingSchedule (6)A vesting schedule already exists for this account
    DeadAccount (7)Beneficiary account must pre-exist
    Authorship (6)
    InvalidUncleParent (0)The uncle parent not in the chain.
    UnclesAlreadySet (1)Uncles already set in the block.
    TooManyUncles (2)Too many uncles.
    GenesisUncle (3)The uncle is genesis.
    TooHighUncle (4)The uncle is too high in chain.
    UncleAlreadyIncluded (5)The uncle is already included.
    OldUncle (6)The uncle isn't recent enough to be included.
    Staking (7)
    NotController (0)Not a controller account.
    NotStash (1)Not a stash account.
    AlreadyBonded (2)Stash is already bonded.
    AlreadyPaired (3)Controller is already paired.
    EmptyTargets (4)Targets cannot be empty.
    DuplicateIndex (5)Duplicate index.
    InvalidSlashIndex (6)Slash record index out of bounds.
    InsufficientValue (7)Can not bond with value less than minimum balance.
    NoMoreChunks (8)Can not schedule more unlock chunks.
    NoUnlockChunk (9)Can not rebond without unlocking chunks.
    FundedTarget (10)Attempting to target a stash that still has funds.
    InvalidEraToReward (11)Invalid era to reward.
    InvalidNumberOfNominations (12)Invalid number of nominations.
    NotSortedAndUnique (13)Items are not sorted and unique.
    AlreadyClaimed (14)Rewards for this era have already been claimed for this validator.
    OffchainElectionEarlySubmission (15)The submitted result is received out of the open window.
    OffchainElectionWeakSubmission (16)The submitted result is not as good as the one stored on chain.
    SnapshotUnavailable (17)The snapshot data of the current window is missing.
    OffchainElectionBogusWinnerCount (18)Incorrect number of winners were presented.
    OffchainElectionBogusWinner (19)One of the submitted winners is not an active candidate on chain (index is out of range in snapshot).
    OffchainElectionBogusCompact (20)Error while building the assignment type from the compact. This can happen if an index is invalid, or if the weights overflow.
    OffchainElectionBogusNominator (21)One of the submitted nominators is not an active nominator on chain.
    OffchainElectionBogusNomination (22)One of the submitted nominators has an edge to which they have not voted on chain.
    OffchainElectionSlashedNomination (23)One of the submitted nominators has an edge which is submitted before the last non-zero slash of the target.
    OffchainElectionBogusSelfVote (24)A self vote must only be originated from a validator to ONLY themselves.
    OffchainElectionBogusEdge (25)The submitted result has unknown edges that are not among the presented winners.
    OffchainElectionBogusScore (26)The claimed score does not match with the one computed from the data.
    OffchainElectionBogusElectionSize (27)The election size is invalid.
    CallNotAllowed (28)The call is not allowed at the given time due to restrictions of election period.
    IncorrectHistoryDepth (29)Incorrect previous history depth input provided.
    IncorrectSlashingSpans (30)Incorrect number of slashing spans provided.
    Session (9)
    InvalidProof (0)Invalid ownership proof.
    NoAssociatedValidatorId (1)No associated validator ID for account.
    DuplicatedKey (2)Registered duplicate key.
    NoKeys (3)No keys are associated with this account.
    Grandpa (11)
    PauseFailed (0)Attempt to signal GRANDPA pause when the authority set isn't live (either paused or already pending pause).
    ResumeFailed (1)Attempt to signal GRANDPA resume when the authority set isn't paused (either live or already pending resume).
    ChangePending (2)Attempt to signal GRANDPA change with one already pending.
    TooSoon (3)Cannot signal forced change so soon after last.
    InvalidKeyOwnershipProof (4)A key ownership proof provided as part of an equivocation report is invalid.
    InvalidEquivocationProof (5)An equivocation proof provided as part of an equivocation report is invalid.
    DuplicateOffenceReport (6)A given equivocation report is valid but already previously reported.
    Democracy (14)
    ValueLow (0)Value too low
    ProposalMissing (1)Proposal does not exist
    BadIndex (2)Unknown index
    AlreadyCanceled (3)Cannot cancel the same proposal twice
    DuplicateProposal (4)Proposal already made
    ProposalBlacklisted (5)Proposal still blacklisted
    NotSimpleMajority (6)Next external proposal not simple majority
    InvalidHash (7)Invalid hash
    NoProposal (8)No external proposal
    AlreadyVetoed (9)Identity may not veto a proposal twice
    NotDelegated (10)Not delegated
    DuplicatePreimage (11)Preimage already noted
    NotImminent (12)Not imminent
    TooEarly (13)Too early
    Imminent (14)Imminent
    PreimageMissing (15)Preimage not found
    ReferendumInvalid (16)Vote given for invalid referendum
    PreimageInvalid (17)Invalid preimage
    NoneWaiting (18)No proposals waiting
    NotLocked (19)The target account does not have a lock.
    NotExpired (20)The lock on the account to be unlocked has not yet expired.
    NotVoter (21)The given account did not vote on the referendum.
    NoPermission (22)The actor has no permission to conduct the action.
    AlreadyDelegating (23)The account is already delegating.
    Overflow (24)An unexpected integer overflow occurred.
    Underflow (25)An unexpected integer underflow occurred.
    InsufficientFunds (26)Too high a balance was provided that the account cannot afford.
    NotDelegating (27)The account is not currently delegating.
    VotesExist (28)The account currently has votes attached to it and the operation cannot succeed until these are removed, either through unvote or reap_vote.
    InstantNotAllowed (29)The instant referendum origin is currently disallowed.
    Nonsense (30)Delegation to oneself makes no sense.
    WrongUpperBound (31)Invalid upper bound.
    MaxVotesReached (32)Maximum number of votes reached.
    InvalidWitness (33)The provided witness data is wrong.
    TooManyProposals (34)Maximum number of proposals reached.
    Council (15)
    NotMember (0)Account is not a member
    DuplicateProposal (1)Duplicate proposals not allowed
    ProposalMissing (2)Proposal must exist
    WrongIndex (3)Mismatched index
    DuplicateVote (4)Duplicate vote ignored
    AlreadyInitialized (5)Members are already initialized!
    TooEarly (6)The close call was made too early, before the end of the voting.
    TooManyProposals (7)There can only be a maximum of MaxProposals active proposals.
    WrongProposalWeight (8)The given weight bound for the proposal was too low.
    WrongProposalLength (9)The given length bound for the proposal was too low.
    TechnicalCommittee (16)
    NotMember (0)Account is not a member
    DuplicateProposal (1)Duplicate proposals not allowed
    ProposalMissing (2)Proposal must exist
    WrongIndex (3)Mismatched index
    DuplicateVote (4)Duplicate vote ignored
    AlreadyInitialized (5)Members are already initialized!
    TooEarly (6)The close call was made too early, before the end of the voting.
    TooManyProposals (7)There can only be a maximum of MaxProposals active proposals.
    WrongProposalWeight (8)The given weight bound for the proposal was too low.
    WrongProposalLength (9)The given length bound for the proposal was too low.
    ElectionsPhragmen (17)
    UnableToVote (0)Cannot vote when no candidates or members exist.
    NoVotes (1)Must vote for at least one candidate.
    TooManyVotes (2)Cannot vote more than candidates.
    MaximumVotesExceeded (3)Cannot vote more than maximum allowed.
    LowBalance (4)Cannot vote with stake less than minimum balance.
    UnableToPayBond (5)Voter can not pay voting bond.
    MustBeVoter (6)Must be a voter.
    ReportSelf (7)Cannot report self.
    DuplicatedCandidate (8)Duplicated candidate submission.
    MemberSubmit (9)Member cannot re-submit candidacy.
    RunnerSubmit (10)Runner cannot re-submit candidacy.
    InsufficientCandidateFunds (11)Candidate does not have enough funds.
    NotMember (12)Not a member.
    InvalidCandidateCount (13)The provided count of number of candidates is incorrect.
    InvalidVoteCount (14)The provided count of number of votes is incorrect.
    InvalidRenouncing (15)The renouncing origin presented a wrong Renouncing parameter.
    InvalidReplacement (16)Prediction regarding replacement after member removal is wrong.
    Treasury (19)
    InsufficientProposersBalance (0)Proposer's balance is too low.
    InvalidIndex (1)No proposal or bounty at that index.
    ReasonTooBig (2)The reason given is just too big.
    AlreadyKnown (3)The tip was already found/started.
    UnknownTip (4)The tip hash is unknown.
    NotFinder (5)The account attempting to retract the tip is not the finder of the tip.
    StillOpen (6)The tip cannot be claimed/closed because there are not enough tippers yet.
    Premature (7)The tip cannot be claimed/closed because it's still in the countdown period.
    UnexpectedStatus (8)The bounty status is unexpected.
    RequireCurator (9)Require bounty curator.
    InvalidValue (10)Invalid bounty value.
    InvalidFee (11)Invalid bounty fee.
    PendingPayout (12)A bounty payout is pending. To cancel the bounty, you must unassign and slash the curator.
    Claims (24)
    InvalidEthereumSignature (0)Invalid Ethereum signature.
    SignerHasNoClaim (1)Ethereum address has no claim.
    SenderHasNoClaim (2)Account ID sending tx has no claim.
    PotUnderflow (3)There's not enough in the pot to pay out some unvested amount. Generally implies a logic error.
    InvalidStatement (4)A needed statement was not included.
    VestedBalanceExists (5)The account already has a vested balance.
    Vesting (25)
    NotVesting (0)The account given is not vesting.
    ExistingVestingSchedule (1)An existing vesting schedule already exists for this account that cannot be clobbered.
    AmountLow (2)Amount being transferred is too low to create a vesting schedule.
    Identity (28)
    TooManySubAccounts (0)Too many subs-accounts.
    NotFound (1)Account isn't found.
    NotNamed (2)Account isn't named.
    EmptyIndex (3)Empty index.
    FeeChanged (4)Fee is changed.
    NoIdentity (5)No identity found.
    StickyJudgement (6)Sticky judgement.
    JudgementGiven (7)Judgement given.
    InvalidJudgement (8)Invalid judgement.
    InvalidIndex (9)The index is invalid.
    InvalidTarget (10)The target is invalid.
    TooManyFields (11)Too many additional fields.
    TooManyRegistrars (12)Maximum amount of registrars reached. Cannot add any more.
    AlreadyClaimed (13)Account ID is already named.
    NotSub (14)Sender is not a sub-account.
    NotOwned (15)Sub-account isn't owned by sender.
    Proxy (29)
    TooMany (0)There are too many proxies registered or too many announcements pending.
    NotFound (1)Proxy registration not found.
    NotProxy (2)Sender is not a proxy of the account to be proxied.
    Unproxyable (3)A call which is incompatible with the proxy type's filter was attempted.
    Duplicate (4)Account is already a proxy.
    NoPermission (5)Call may not be made by proxy because it may escalate its privileges.
    Unannounced (6)Announcement, if made at all, was made too recently.
    Multisig (30)
    MinimumThreshold (0)Threshold must be 2 or greater.
    AlreadyApproved (1)Call is already approved by this signatory.
    NoApprovalsNeeded (2)Call doesn't need any (more) approvals.
    TooFewSignatories (3)There are too few signatories in the list.
    TooManySignatories (4)There are too many signatories in the list.
    SignatoriesOutOfOrder (5)The signatories were provided out of order; they should be ordered.
    SenderInSignatories (6)The sender was contained in the other signatories; it shouldn't be.
    NotFound (7)Multisig operation not found when attempting to cancel.
    NotOwner (8)Only the account that originally created the multisig is able to cancel it.
    NoTimepoint (9)No timepoint was given, yet the multisig operation is already underway.
    WrongTimepoint (10)A different timepoint was given to the multisig operation that is underway.
    UnexpectedTimepoint (11)A timepoint was given, yet no multisig operation is underway.
    WeightTooLow (12)The maximum weight information provided was too low.
    AlreadyStored (13)The data to be stored is already stored.
    - + \ No newline at end of file diff --git a/docs/maintain-guides-async-backing.html b/docs/maintain-guides-async-backing.html index 96de35917caa..c4944d380d97 100644 --- a/docs/maintain-guides-async-backing.html +++ b/docs/maintain-guides-async-backing.html @@ -19,7 +19,7 @@ - + @@ -91,7 +91,7 @@ Relay block number is kept track of by each parachain in pallet-parachain-system with the storage value LastRelayChainBlockNumber. This value can be obtained and used wherever timing based on block number is needed.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-chill.html b/docs/maintain-guides-how-to-chill.html index 1d2baf926a4c..b3b858aa9fc3 100644 --- a/docs/maintain-guides-how-to-chill.html +++ b/docs/maintain-guides-how-to-chill.html @@ -19,7 +19,7 @@ - + @@ -69,7 +69,7 @@ Polkadot is set to None eliminating the upper bound on the number of nominators on the network. Due to this, the chillOther extrinsic on Polkadot network has no effect as the chill threshold will never be met.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-monitor-your-node.html b/docs/maintain-guides-how-to-monitor-your-node.html index 7a93757541b9..f4a4a9226216 100644 --- a/docs/maintain-guides-how-to-monitor-your-node.html +++ b/docs/maintain-guides-how-to-monitor-your-node.html @@ -19,7 +19,7 @@ - + @@ -83,7 +83,7 @@ here. There are other interesting alerts you may find useful here.

    groups:
    - name: alert_rules
    rules:
    - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
    severity: critical
    annotations:
    summary: "Instance [{{ $labels.instance }}] down"
    description: "[{{ $labels.instance }}] of job [{{ $labels.job }}] has been down for more than 1 minute."

    Change the ownership of this file to prometheus instead of root by running:

    sudo chown prometheus:prometheus rules.yml

    To check the rules defined in the "rules.yml" is syntactically correct, run the following command:

    sudo -u prometheus promtool check rules rules.yml

    Finally, restart everything by running:

    sudo systemctl restart prometheus && sudo systemctl restart alertmanager

    Now if one of your target instances down, you will receive an alert on the AlertManager and Gmail like below.

    grafana-am-6

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-stop-validating.html b/docs/maintain-guides-how-to-stop-validating.html index c8ccb1200f78..823133aaf1f3 100644 --- a/docs/maintain-guides-how-to-stop-validating.html +++ b/docs/maintain-guides-how-to-stop-validating.html @@ -19,7 +19,7 @@ - + @@ -40,7 +40,7 @@ transfer your tokens.

    See Unbonding and Rebonding for more details.

    Unbond your tokens

    Unbonding your tokens can be done through the Network > Staking > Account actions page in PolkadotJS Apps by clicking the corresponding stash account dropdown and selecting "Unbond funds". This can also be done through the staking.unbond() extrinsic with the staking proxy account.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-systemd.html b/docs/maintain-guides-how-to-systemd.html index 2336b063195b..b1137623d87a 100644 --- a/docs/maintain-guides-how-to-systemd.html +++ b/docs/maintain-guides-how-to-systemd.html @@ -19,7 +19,7 @@ - + @@ -33,7 +33,7 @@ not recognize votes that didn't make it to disk, and will then cast conflicting votes. Delaying the restart will allow the network to progress past potentially conflicting votes, at which point other nodes will not accept them.

    To enable this to autostart on bootup run:

    systemctl enable polkadot-validator.service

    Start it manually with:

    systemctl start polkadot-validator.service

    You can check that it's working with:

    systemctl status polkadot-validator.service

    You can tail the logs with journalctl like so:

    journalctl -f -u polkadot-validator
    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-upgrade.html b/docs/maintain-guides-how-to-upgrade.html index 20daf4c37a82..181404b573c7 100644 --- a/docs/maintain-guides-how-to-upgrade.html +++ b/docs/maintain-guides-how-to-upgrade.html @@ -19,7 +19,7 @@ - + @@ -50,7 +50,7 @@ Validator A.
  • Take note of the Session that this extrinsic was executed in.
  • Again, it is imperative that Validator B is kept running until the current session finishes and two further full sessions have elapsed.

    Once this time has elapsed, Validator A will take over. You can safely stop Validator B.

    NOTE: To verify that the Session has changed, make sure that a block in the new Session is finalized. You should see log messages like the ones below to confirm the change:

    2019-10-28 21:44:13 Applying authority set change scheduled at block #450092
    2019-10-28 21:44:13 Applying GRANDPA set change to new set with 20 authorities
    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-validate-kusama.html b/docs/maintain-guides-how-to-validate-kusama.html index 6baca3ef5755..1f444f071b55 100644 --- a/docs/maintain-guides-how-to-validate-kusama.html +++ b/docs/maintain-guides-how-to-validate-kusama.html @@ -19,7 +19,7 @@ - + @@ -68,7 +68,7 @@ validator payout document.

    Run a Kusama Validator

    Running a validator on the Kusama network is identical to running a Polkadot validator. Check out the Polkadot guide on how to setup a validator.

    Make sure to adjust the Polkadot guide to run a Kusama network validator (the instructions will also be available in the Polkadot Validator guide):

    • When starting the node pass --chain=kusama CLI flag
    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-validate-polkadot.html b/docs/maintain-guides-how-to-validate-polkadot.html index 5a049b86fd57..69117cbdbfdd 100644 --- a/docs/maintain-guides-how-to-validate-polkadot.html +++ b/docs/maintain-guides-how-to-validate-polkadot.html @@ -19,7 +19,7 @@ - + @@ -145,7 +145,7 @@ 2,377,756.492 DOT. For a live view at current validator stats, you may look to Subscan or the -Staking Dashboard.

    If you are validator who intends to get DOT/KSM nominations from the community, you will need to +Staking Dashboard.

    If you are validator who intends to get DOT/KSM nominations from the community, you will need to show some skin in the game. For that, you need to bond some DOT/KSM as own stake. Make sure not to bond all your DOT balance since you will be unable to pay transaction fees from your bonded balance.

    Controller accounts are deprecated. Use Staking Proxy.

    Controller accounts are deprecated. For more information, see this discussion. @@ -261,8 +261,8 @@ trusted code on the host.

    VPS List

    Beware of the Terms and Conditions and Acceptable Use Policies for each VPS

    provider

    You may be locked out of your account and your server shut down if you come in violation. For instance, Digital Ocean lists "Mining of Cryptocurrencies" under the Network Abuse section of their Acceptable Use Policy and requires -explicit permission to do so. This may extend to other cryptocurrency activity.

    - +explicit permission to do so. This may extend to other cryptocurrency activity.

    + \ No newline at end of file diff --git a/docs/maintain-guides-secure-validator.html b/docs/maintain-guides-secure-validator.html index cc1c2364678d..7d9e3fcd31ae 100644 --- a/docs/maintain-guides-secure-validator.html +++ b/docs/maintain-guides-secure-validator.html @@ -19,7 +19,7 @@ - + @@ -68,7 +68,7 @@ hardware. The provisioning of the validator machine should be automated and defined in code. This code should be kept in private version control, reviewed, audited, and tested.

  • Session keys should be generated and provided in a secure way.

  • Polkadot should be started at boot and restarted if stopped for any reason (supervisor process).

  • Polkadot should run as a non-root user.

  • Monitoring

    • There should be an on-call rotation for managing the alerts.

    • There should be a clear protocol with actions to perform for each level of each alert and an escalation policy.

    Resources

    - + \ No newline at end of file diff --git a/docs/maintain-guides-society-kusama.html b/docs/maintain-guides-society-kusama.html index bb2a4c5655bc..9ababcb2d4a4 100644 --- a/docs/maintain-guides-society-kusama.html +++ b/docs/maintain-guides-society-kusama.html @@ -19,7 +19,7 @@ - + @@ -93,7 +93,7 @@ extrinsic's parameters go to Element 1 ("proposal") -> "value" -> "params" -> Element 2 ("rules") and copy the value corresponding to the key "value". You can use a hex-to-UTF8 converter to then display the text. Note that the text is formatted with Markdown.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-validator-community.html b/docs/maintain-guides-validator-community.html index 37182b40acd1..4a8cb3e02edd 100644 --- a/docs/maintain-guides-validator-community.html +++ b/docs/maintain-guides-validator-community.html @@ -19,7 +19,7 @@ - + @@ -164,7 +164,7 @@ monitoring, observability services, staking dashboards, wallets, command-line utilities, or porting implementations to other languages. Additionally, this may also be eligible to be funded via a Web3 Foundation Grant.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-validator-payout.html b/docs/maintain-guides-validator-payout.html index b0e292710f7d..98fea55d7427 100644 --- a/docs/maintain-guides-validator-payout.html +++ b/docs/maintain-guides-validator-payout.html @@ -19,7 +19,7 @@ - + @@ -91,7 +91,7 @@ brackets ([]) next to each validator. Note that since the validator payment is public knowledge, having a low or non-existent validator payment may attract more stake from nominators, since they know they will receive a larger reward.

    Validator Set Size (v): 4
    Validator 1 Stake (v1) [20% commission]: 18 DOT (9 validator, 9 nominator)
    Validator 2 Stake (v2) [40% commission]: 9 DOT (3 validator, 6 nominator)
    Validator 3 Stake (v3) [10% commission]: 8 DOT (4 validator, 4 nominator)
    Validator 4 Stake (v4) [ 0% commission]: 6 DOT (1 validator, 5 nominator)
    Payout (p): 8 DOT

    Payout for each validator (v1 - v4):
    p / v = 8 / 4 = 2 DOT

    v1:
    (0.2 * 2) = 0.4 DOT -> validator payment
    (2 - 0.4) = 1.6 -> shared between all stake
    (9 / 18) * 1.6 = 0.8 -> validator stake share
    (9 / 18) * 1.6 = 0.8 -> nominator stake share
    v1 validator total reward: 0.4 + 0.8 = 1.2 DOT
    v1 nominator reward: 0.8 DOT

    v2:
    (0.4 * 2) = 0.8 DOT -> validator payment
    (2 - 0.8) = 1.2 -> shared between all stake
    (3 / 9) * 1.2 = 0.4 -> validator stake share
    (6 / 9) * 1.2 = 0.8 -> nominator stake share
    v2 validator total reward: 0.8 + 0.4 = 1.2 DOT
    v2 nominator reward: 0.8 DOT

    v3:
    (0.1 * 2) = 0.2 DOT -> validator payment
    (2 - 0.2) = 1.8 -> shared between all stake
    (4 / 8) * 1.8 = 0.9 -> validator stake share
    (4 / 8) * 1.8 = 0.9 -> nominator stake share
    v3 validator total reward: 0.2 + 0.9 DOT = 1.1 DOT
    v3 nominator reward: 0.9 DOT

    v4:
    (0 * 2) = 0 DOT -> validator payment
    (2 - 0) = 2.0 -> shared between all stake
    (1 / 6) * 2 = 0.33 -> validator stake share
    (5 / 6) * 2 = 1.67 -> nominator stake share
    v4 validator total reward: 0 + 0.33 DOT = 0.33 DOT
    v4 nominator reward: 1.67 DOT
    - + \ No newline at end of file diff --git a/docs/maintain-index.html b/docs/maintain-index.html index fc09b29cd8ff..abdf07daab9d 100644 --- a/docs/maintain-index.html +++ b/docs/maintain-index.html @@ -19,7 +19,7 @@ - + @@ -29,7 +29,7 @@ information and guides to set up a node and run the network.

    Polkadot's Canary Network Kusama

    For more information about being a Kusama maintainer, see the pages below:

    - + \ No newline at end of file diff --git a/docs/maintain-networks.html b/docs/maintain-networks.html index daf2ed9a30c7..1bc58ca39846 100644 --- a/docs/maintain-networks.html +++ b/docs/maintain-networks.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ the public Telemetry service.

    You can verify that your node is connected by navigating to the correct network on the dashboard and finding the name of your node.

    There is a built-in search function on the nodes page. Simply start typing keystrokes in the main window to make it available.

    - + \ No newline at end of file diff --git a/docs/maintain-node-index.html b/docs/maintain-node-index.html index eefe3535c820..bad7d9bc5f4d 100644 --- a/docs/maintain-node-index.html +++ b/docs/maintain-node-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/maintain-polkadot-parameters.html b/docs/maintain-polkadot-parameters.html index a933bf9a539b..2aaa70634fbc 100644 --- a/docs/maintain-polkadot-parameters.html +++ b/docs/maintain-polkadot-parameters.html @@ -19,7 +19,7 @@ - + @@ -39,7 +39,7 @@ Plancks make up a DOT.

    The denomination of DOT was changed from 12 decimals of precision at block #1,248,328 in an event known as Denomination Day. See Redenomination for details.

    - + \ No newline at end of file diff --git a/docs/maintain-rpc.html b/docs/maintain-rpc.html index 355a47754425..1397dbd62b58 100644 --- a/docs/maintain-rpc.html +++ b/docs/maintain-rpc.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ node. Activate the "Development" toggle and input your node's address - either the domain or the IP address. Remember to prefix with wss://, and if you're using the 443 port, append :443 like so: wss://example.com:443.

    A sync-in-progress chain connected to Polkadot-JS UI

    Now you have a secure remote connect setup for your Substrate node.

    - + \ No newline at end of file diff --git a/docs/maintain-sync.html b/docs/maintain-sync.html index e59a45274526..3254972fbdf1 100644 --- a/docs/maintain-sync.html +++ b/docs/maintain-sync.html @@ -19,7 +19,7 @@ - + @@ -90,7 +90,7 @@ on localhost by default. If you would like to connect to your node's services (rpc, and prometheus) you need to ensure that you run you node with the --rpc-external, and --prometheus-external commands.

    docker run -p 9944:9944 -p 9615:9615 parity/polkadot:v0.9.13 --name "calling_home_from_a_docker_container" --rpc-external --prometheus-external
    - + \ No newline at end of file diff --git a/docs/maintain-validator-index.html b/docs/maintain-validator-index.html index 408213ba0b80..2997d44ef762 100644 --- a/docs/maintain-validator-index.html +++ b/docs/maintain-validator-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/maintain-wss.html b/docs/maintain-wss.html index 83d74213f47b..58ba3156b065 100644 --- a/docs/maintain-wss.html +++ b/docs/maintain-wss.html @@ -19,7 +19,7 @@ - + @@ -43,7 +43,7 @@ node. Activate the "Development" toggle and input your node's address - either the domain or the IP address. Remember to prefix with wss:// and if you're using the 443 port, append :443, like so: wss://example.com:443.

    A sync-in-progress chain connected to Polkadot-JS UI

    Now you have a secure remote connect setup for your Substrate node.

    - + \ No newline at end of file diff --git a/docs/maintain/maintain-guides-democracy.html b/docs/maintain/maintain-guides-democracy.html index 106014f8de4a..3fa89fb96584 100644 --- a/docs/maintain/maintain-guides-democracy.html +++ b/docs/maintain/maintain-guides-democracy.html @@ -19,7 +19,7 @@ - + @@ -157,7 +157,7 @@ pallet, and you will specify the index of the referendum that is being voted, the judgement (i.e. "Aye" for approval or "Nay" for rejection), and the conviction, just like a normal vote.

    For more material on adding and removing Governance proxies, as well as other types, please see the Proxy page.

    - + \ No newline at end of file diff --git a/docs/maintain/maintain-guides-how-to-join-council.html b/docs/maintain/maintain-guides-how-to-join-council.html index 863f72b3b42a..8c97da9f5a7c 100644 --- a/docs/maintain/maintain-guides-how-to-join-council.html +++ b/docs/maintain/maintain-guides-how-to-join-council.html @@ -19,7 +19,7 @@ - + @@ -44,7 +44,7 @@ the row "Members".

    council members list

    Now you are able to participate on the council by making motions or voting proposals. To join in on the active discussions, join the Polkadot Direction channel.

    - + \ No newline at end of file diff --git a/docs/maintain/maintain-guides-how-to-vote-councillor.html b/docs/maintain/maintain-guides-how-to-vote-councillor.html index 816a8c4b7d55..4b3908366ecb 100644 --- a/docs/maintain/maintain-guides-how-to-vote-councillor.html +++ b/docs/maintain/maintain-guides-how-to-vote-councillor.html @@ -19,7 +19,7 @@ - + @@ -47,7 +47,7 @@ Polkadot-JS Apps Dashboard.

    Under the "Council overview" tab, click on "Vote".

    polkadotjs_removeVoter

    Issue the "Unvote all" option.

    When the transaction is included in a block you should have your reserved tokens made liquid again and your vote will no longer be counting for any councillors in the elections starting in the next term.

    - + \ No newline at end of file diff --git a/docs/metadata.html b/docs/metadata.html index b20c937e1627..63d1672d1afd 100644 --- a/docs/metadata.html +++ b/docs/metadata.html @@ -19,7 +19,7 @@ - + @@ -29,7 +29,7 @@ The dropdown below allows you to update the chain selection to visualize. You can search all sub-categories using the provided search field. The information is categorized by the chains Pallets, RPC and Runtime information.

    - + \ No newline at end of file diff --git a/docs/multisig-apps.html b/docs/multisig-apps.html index 0adac049dc4d..841ecb8f7811 100644 --- a/docs/multisig-apps.html +++ b/docs/multisig-apps.html @@ -19,7 +19,7 @@ - + @@ -71,7 +71,7 @@ the Polkadot Blockchain.
  • Whether you're interacting with smart contracts, parachains, or other advanced features, PolkaSafe's MultiSig capabilities ensure every extrinsic is secure and efficient.
  • User-Centric Design: Every feature, from initiating a transaction to diving deep into extrinsics, is designed for clarity and ease.
  • - + \ No newline at end of file diff --git a/docs/parachains-apps.html b/docs/parachains-apps.html index 470b81ac9d20..0cabd673dd14 100644 --- a/docs/parachains-apps.html +++ b/docs/parachains-apps.html @@ -19,7 +19,7 @@ - + @@ -98,7 +98,7 @@ tokens (LST) “vTokens”, as well as remote exchange, and swapping of vTokens from any chain. The DApp aims to simplify the cross-chain experience by providing a seamless interface for users to interact with vTokens across different chains natively.

    - + \ No newline at end of file diff --git a/docs/parity-data-dashboards.html b/docs/parity-data-dashboards.html index 5710681264f8..a5fabfbabff5 100644 --- a/docs/parity-data-dashboards.html +++ b/docs/parity-data-dashboards.html @@ -19,7 +19,7 @@ - + @@ -55,7 +55,7 @@ history and is continuously expanding.

    DotLake Batch Architecture

    DotLake Batch Architecture

    Real-Time Architecture

    Real-Time Architecture

    Support: Data Requests, Collaborations, Parachain Onboarding etc.

    The Parity Data Team is very eager to collaborate with the Ecosystem. If you have any questions, data requests that you need help with, interest in partnerships or you are a Parachain team and want your chain onboarded to the platform - please get in contact with data-team@parity.io.

    - + \ No newline at end of file diff --git a/docs/polkadot-direction.html b/docs/polkadot-direction.html index cb41fe2b9306..b5feff7f2986 100644 --- a/docs/polkadot-direction.html +++ b/docs/polkadot-direction.html @@ -19,7 +19,7 @@ - + @@ -140,7 +140,7 @@ decentralizing the network is ensuring experts on which the maintenance of the system relies upon are incentivized and recruited over time by the Polkadot network and not by organizations within the Polkadot ecosystem. - + \ No newline at end of file diff --git a/docs/polkadot-v1.html b/docs/polkadot-v1.html index b808907fce2f..5f4981d5aa2a 100644 --- a/docs/polkadot-v1.html +++ b/docs/polkadot-v1.html @@ -19,7 +19,7 @@ - + @@ -109,7 +109,7 @@ could become.

    Polkadot is perfecting its implementation through RFCs to continue being a decentralized, secure, ubiquitous computing engine to power the next generation of Web3 applications.

    - + \ No newline at end of file diff --git a/docs/polkadot-vault.html b/docs/polkadot-vault.html index 4ba645b0357f..783612fb0163 100644 --- a/docs/polkadot-vault.html +++ b/docs/polkadot-vault.html @@ -19,7 +19,7 @@ - + @@ -86,7 +86,7 @@ this article for detailed instructions. If you choose this approach, you should trust the provider you choose.


    Polkadot-JS Guides

    If you are an advanced user, see the Polkadot-JS guides about Polkadot Vault.

    - + \ No newline at end of file diff --git a/docs/polkadot-vision-index.html b/docs/polkadot-vision-index.html index 5ad2f36faadb..aa37d57851cf 100644 --- a/docs/polkadot-vision-index.html +++ b/docs/polkadot-vision-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/polkadotjs-ui.html b/docs/polkadotjs-ui.html index f0efdc929496..72e1862a52da 100644 --- a/docs/polkadotjs-ui.html +++ b/docs/polkadotjs-ui.html @@ -19,7 +19,7 @@ - + @@ -74,7 +74,7 @@ nomination pool settings (nomination and roles) and use non-transfer proxies, destroy assets, and much more.

    Beginner's Guide to Polkadot-JS

    - + \ No newline at end of file diff --git a/docs/polkadotjs.html b/docs/polkadotjs.html index 3d57ce9fe69c..07d27c55474f 100644 --- a/docs/polkadotjs.html +++ b/docs/polkadotjs.html @@ -19,7 +19,7 @@ - + @@ -57,7 +57,7 @@ wallet app like Metamask, i.e. it does not allow you to transact or do anything else other than adding and managing accounts. However, it provides a simple interface for interacting with extension-compliant dApps such as the Polkadot-JS UI -and the Polkadot Staking Dashboard. Check +and the Polkadot Staking Dashboard. Check wallets and extensions page for wallets that are capable of transacting on-chain directly.

    Metadata Updates

    The browser extension is a tool that interacts with the Polkadot network, but it is disconnected from it when it is not in use. It is important you @@ -96,8 +96,8 @@ are “true” because a sufficient number of validators have agreed about validity.

    Unsigned transactions are information that does not require a signature but will require some sort of spam prevention, whereas signed transactions are issued by the originator account of a transaction which contains a signature of that account, which will be subject to a fee to include it -on the chain.

    - +on the chain.

    + \ No newline at end of file diff --git a/docs/programs-index.html b/docs/programs-index.html index 6485815b5c42..a9d900756d3e 100644 --- a/docs/programs-index.html +++ b/docs/programs-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/research.html b/docs/research.html index 1b97965b3c42..1a17fd2b8297 100644 --- a/docs/research.html +++ b/docs/research.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ – Gives an outline of Nominated Proof of Stake in Polkadot. Author: Alfonzo Cevallos
  • Messaging Protocol Workshop Outcomes – An initiative to design and implement a privacy-preserving communication system for decentralized applications.
  • - + \ No newline at end of file diff --git a/docs/staking-apps.html b/docs/staking-apps.html index 4027ec13a541..163a9805b9f7 100644 --- a/docs/staking-apps.html +++ b/docs/staking-apps.html @@ -19,14 +19,14 @@ - +

    Polkadot Staking Dashboard

    The Polkadot Staking Dashboard is a web3 application dedicated to native non-custodial staking on the Polkadot relay chain. The dashboard allows to stake as a solo nominator or as a nomination pool member. @@ -50,8 +50,8 @@ data is collected at the last block of every session.

    source: https://github.com/turboflakes/apps

    SubWallet Earning

    SubWallet Web Dashboard is the all-in-one solution to manage assets and stake on multiple networks in the Polkadot, Kusama and Polkadot SDK (Substrate) ecosystems.

    The Web Dashboard features an Earning tab which allows users to stake DOT easily via native nomination pools, as well as in liquid staking and lending protocols, without having to manage -multiple applications with different interfaces and experiences.

    - +multiple applications with different interfaces and experiences.

    + \ No newline at end of file diff --git a/docs/staking-dashboard.html b/docs/staking-dashboard.html index f123a981b346..d3220e647e7d 100644 --- a/docs/staking-dashboard.html +++ b/docs/staking-dashboard.html @@ -19,12 +19,12 @@ - +
    -

    Polkadot Staking Dashboard

    Preliminary Notes

    The Polkadot Staking Dashboard supports +

    Polkadot Staking Dashboard

    Preliminary Notes

    The Polkadot Staking Dashboard supports proxy accounts and you can import your staking proxy (for nominators) or non-transfer proxy (for nomination pool admins and @@ -43,10 +43,10 @@ ). For more information about staking on Polkadot visit the staking page and the -advanced staking page.

    Using the Polkadot Staking Dashboard

    The Polkadot Staking Dashboard is a tool only -dedicated to staking on Polkadot, -Kusama (Polkadot's canary network) and -Westend (Polkadot's test network).

    The dashboard is not a wallet, meaning that you cannot transfer funds between accounts. To fund +advanced staking page.

    Using the Polkadot Staking Dashboard

    The Polkadot Staking Dashboard is a tool only dedicated +to staking on Polkadot, Kusama +(Polkadot's canary network) and Westend +(Polkadot's test network).

    The dashboard is not a wallet, meaning that you cannot transfer funds between accounts. To fund accounts, you can use wallets and extension. You can participate in staking by being a nominator or a member of a nomination pool. Once you have a funded account, you need to @@ -159,8 +159,8 @@ or apply the following filters:

    • Include only active validators
    • Exclude validators that have 100% commission, blocked nominations, and have missing identity.

    Support

    Support for the Staking Dashboard is available at the official Polkadot support website.

    Network

    Under Network, you can connect to either Polkadot, Kusama, or Westend through public RPC nodes or light clients for a true Web3 experience. For more information about light clients, see -this page.

    - +this page.

    + \ No newline at end of file diff --git a/docs/start-building.html b/docs/start-building.html index 04c930c3499b..c6588c3fbdcd 100644 --- a/docs/start-building.html +++ b/docs/start-building.html @@ -19,7 +19,7 @@ - + @@ -52,7 +52,7 @@ this Medium article and the original Polkadot Forum post.

    - + \ No newline at end of file diff --git a/docs/stay-safe-index.html b/docs/stay-safe-index.html index 80dc3d106ce8..c1f9dee8bde0 100644 --- a/docs/stay-safe-index.html +++ b/docs/stay-safe-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/thousand-contributors.html b/docs/thousand-contributors.html index fdcb1936969b..30cf901f7ecb 100644 --- a/docs/thousand-contributors.html +++ b/docs/thousand-contributors.html @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ the account shared with us.

    Submission reviews

    The review process follows the present pipeline in the 1KC public GitHub project.

    Learn more about the program and its components on the official 1KC repository

    - + \ No newline at end of file diff --git a/docs/thousand-validators.html b/docs/thousand-validators.html index 75613c33fd0e..f851e4b9761f 100644 --- a/docs/thousand-validators.html +++ b/docs/thousand-validators.html @@ -19,7 +19,7 @@ - + @@ -87,7 +87,7 @@ things time to resolve; if they don't, leave a message in the dedicated matrix room or open an issue on GitHub.
  • The 1000 validators website is not up to date? See these resources for more up-to-date information.
  • Resources

    To extract and display the 1KV Programme scores there are various tools listed below.

    ResourceGithub sourceInfo
    SubVT telegram bot for polkadot and kusamagithubTelegram bot with overviews and alerts for various polkadot and kusama related events, including 1KV events.
    SubVT ios and android appgithubSubVT app version for mobile phones.
    Validator earnings overviewgithubOverview of validators' earnings.
    Math Crypto's Insightsgithub1KV-oriented scoring overview of Kusama and Polkadot.
    One-T for polkadot and kusamagithubA performance report bot for the Polkadot and Kusama network with special focus on the 1KV programme.
    One-T parachains overviewgithubOne-T's parachain overview.
    Metaspan's 1KV overviewgithubOverview of 1KV programme, including the newly introduced endpoints, see here for available endpoints.
    Decentradot's 1KV overviewgithubOverview of the 1KV programme, including the newly introduced endpoints.
    Hirish 1KV overviewgithub?Overview of the 1KV Programme.
    - + \ No newline at end of file diff --git a/docs/transaction-attacks.html b/docs/transaction-attacks.html index 8a7d3378e4b8..bf00a5dd1c6b 100644 --- a/docs/transaction-attacks.html +++ b/docs/transaction-attacks.html @@ -19,7 +19,7 @@ - + @@ -66,7 +66,7 @@ transfer will fail).

    Defense against Attacks

    danger

    If you can't verify the transaction or you suspect you are signing something different than what you intended, don't sign it!

    To avoid being victim of an attack:

    • Use only trusted extensions, sites and software in general.
    • Use cold storage options (Ledger, Signer) and verify them. Trust what these devices tell you over what is shown in the app or the browser extension.
    • Update Signer metadata only from trusted sources (or do it yourself).
    • Accept metadata updates for the extension only from trusted apps.
    - + \ No newline at end of file diff --git a/docs/wallets-and-extensions.html b/docs/wallets-and-extensions.html index 10815e906e66..7b26094260da 100644 --- a/docs/wallets-and-extensions.html +++ b/docs/wallets-and-extensions.html @@ -19,7 +19,7 @@ - + @@ -100,7 +100,7 @@ balance changes, view your total balance in multiple fiat currencies, secured by your personal Telegram cloud and manual backups.

    Use Telenova on any of your devices — be it mobile or desktop — within the same Telegram account, and start exploring the Polkadot ecosystem today!

    - + \ No newline at end of file diff --git a/docs/wallets-index.html b/docs/wallets-index.html index 3a7e65e66062..4662e5779dc8 100644 --- a/docs/wallets-index.html +++ b/docs/wallets-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/web3-and-polkadot.html b/docs/web3-and-polkadot.html index 4ee24ab18b29..04d15de170cd 100644 --- a/docs/web3-and-polkadot.html +++ b/docs/web3-and-polkadot.html @@ -19,7 +19,7 @@ - + @@ -154,7 +154,7 @@ all blockchains attached to it. For more information, see the Polkadot 1.0 page and the section about XCM and Accords in Polkadot Direction page.

    - + \ No newline at end of file diff --git a/index.html b/index.html index d650e6063a03..ffc1be6d8107 100644 --- a/index.html +++ b/index.html @@ -19,13 +19,13 @@ - +

    Learn about Polkadot’s canary network Kusama

    Kusama is Polkadot’s “canary network”, a scalable, multi-chain network for radical innovation and early stage Polkadot deployments. For developers, Kusama is a proving ground for all things Polkadot I.e runtime upgrades, on-chain governance, parachains, etc.

    language

    Help improve this wiki

    This wiki was started by and is maintained by Web3 Foundation. It is an open-source-ish project and aims to be the most extensive resource of knowledge on Polkadot and the Polkadot ecosystem.

    - + \ No newline at end of file diff --git a/search.html b/search.html index bd57b1f139d5..f9c9f0127d51 100644 --- a/search.html +++ b/search.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file