From 768bfe4601c15d6afe99412095802dbc489f3767 Mon Sep 17 00:00:00 2001 From: Polkadot Wiki CI Date: Sat, 14 Oct 2023 00:16:04 +0000 Subject: [PATCH] Deploy website - based on 720bc5fe66da3661d5aa295f5d42a750cbc1d0b6 --- 404.html | 4 ++-- assets/js/1ae2b102.c965ef47.js | 1 - assets/js/1ae2b102.e890f619.js | 1 + assets/js/48d75399.a1e674d1.js | 1 + assets/js/48d75399.d02a17da.js | 1 - assets/js/b21dd8a7.06ba09e6.js | 1 - assets/js/b21dd8a7.b887110e.js | 1 + assets/js/f4200fe5.025c4bbe.js | 1 - assets/js/f4200fe5.895b93fd.js | 1 + assets/js/f7acb151.daef5619.js | 1 - assets/js/f7acb151.ff0cc0e3.js | 1 + ...ntime~main.2c8f5a5f.js => runtime~main.97b1dc82.js} | 2 +- docs/ambassadors.html | 4 ++-- docs/bug-bounty.html | 4 ++-- docs/build-data.html | 4 ++-- docs/build-guide.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-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-info.html | 10 +++++----- docs/build-smart-contracts.html | 4 ++-- docs/build-ss58-registry.html | 4 ++-- docs/build-storage.html | 4 ++-- docs/build-substrate.html | 4 ++-- docs/build-tools-index.html | 4 ++-- docs/build-transaction-construction.html | 4 ++-- docs/builders-program.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/dev-heroes.html | 4 ++-- docs/faq.html | 8 ++++---- docs/general-index.html | 4 ++-- docs/getting-started.html | 4 ++-- docs/glossary.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-generation.html | 4 ++-- docs/learn-account-multisig.html | 4 ++-- docs/learn-accounts-index.html | 4 ++-- docs/learn-accounts.html | 4 ++-- docs/learn-advanced-index.html | 4 ++-- docs/learn-architecture-index.html | 4 ++-- docs/learn-architecture.html | 4 ++-- docs/learn-archive-index.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-balance-transfers.html | 4 ++-- docs/learn-basics-index.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 | 8 ++++---- docs/learn-comparisons.html | 4 ++-- docs/learn-components-index.html | 4 ++-- docs/learn-consensus.html | 4 ++-- docs/learn-controller.html | 4 ++-- docs/learn-crowdloans.html | 4 ++-- docs/learn-cryptography.html | 4 ++-- docs/learn-extrinsics.html | 4 ++-- docs/learn-future-implementations-index.html | 4 ++-- docs/learn-governance.html | 4 ++-- docs/learn-guides-assets-create.html | 6 +++--- docs/learn-guides-assets-index.html | 4 ++-- docs/learn-guides-assets-ledger.html | 4 ++-- docs/learn-guides-identity.html | 4 ++-- docs/learn-guides-index.html | 4 ++-- docs/learn-guides-polkadot-opengov.html | 4 ++-- docs/learn-guides-staking-index.html | 4 ++-- docs/learn-guides-staking-pools.html | 4 ++-- docs/learn-guides-staking.html | 4 ++-- docs/learn-guides-treasury.html | 4 ++-- docs/learn-guides-vault.html | 4 ++-- docs/learn-identity.html | 4 ++-- docs/learn-implementations.html | 4 ++-- docs/learn-index.html | 4 ++-- docs/learn-inflation.html | 4 ++-- docs/learn-launch.html | 4 ++-- docs/learn-nft-index.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 | 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-parathreads.html | 4 ++-- docs/learn-participants-index.html | 4 ++-- docs/learn-phragmen.html | 4 ++-- docs/learn-polkadot-host.html | 4 ++-- docs/learn-polkadot-opengov-treasury.html | 4 ++-- docs/learn-polkadot-opengov.html | 4 ++-- docs/learn-proxies-pure.html | 4 ++-- docs/learn-proxies.html | 4 ++-- docs/learn-redenomination.html | 4 ++-- docs/learn-runtime-upgrades.html | 4 ++-- docs/learn-sassafras.html | 4 ++-- docs/learn-scams.html | 4 ++-- docs/learn-spree.html | 4 ++-- docs/learn-staking-advanced.html | 4 ++-- docs/learn-staking-index.html | 4 ++-- docs/learn-staking.html | 4 ++-- docs/learn-system-chains.html | 4 ++-- docs/learn-teleport.html | 4 ++-- docs/learn-transaction-fees.html | 4 ++-- docs/learn-transactions-index.html | 4 ++-- docs/learn-treasury.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/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 ++-- docs/learn/xcm/fundamentals/multilocation-example.html | 4 ++-- .../xcm/fundamentals/multilocation-junctions.html | 4 ++-- docs/learn/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-bootnode.html | 4 ++-- docs/maintain-endpoints.html | 4 ++-- docs/maintain-errors.html | 4 ++-- docs/maintain-guides-avoid-slashing.html | 4 ++-- docs/maintain-guides-democracy.html | 4 ++-- docs/maintain-guides-how-to-chill.html | 4 ++-- docs/maintain-guides-how-to-join-council.html | 4 ++-- docs/maintain-guides-how-to-monitor-your-node.html | 4 ++-- docs/maintain-guides-how-to-nominate-kusama.html | 4 ++-- docs/maintain-guides-how-to-nominate-polkadot.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 ++-- docs/maintain-guides-how-to-validate-polkadot.html | 4 ++-- docs/maintain-guides-how-to-vote-councillor.html | 4 ++-- docs/maintain-guides-polkadot-opengov.html | 4 ++-- 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-polkadot-parameters.html | 4 ++-- docs/maintain-rpc.html | 4 ++-- docs/maintain-sync.html | 6 +++--- docs/maintain-wss.html | 4 ++-- docs/metadata.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 | 4 ++-- docs/programmes-index.html | 4 ++-- docs/research.html | 4 ++-- docs/staking-dashboard.html | 4 ++-- docs/start-building.html | 4 ++-- docs/stay-safe-index.html | 4 ++-- docs/thousand-contributors.html | 4 ++-- docs/thousand-validators.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 ++-- 237 files changed, 467 insertions(+), 467 deletions(-) delete mode 100644 assets/js/1ae2b102.c965ef47.js create mode 100644 assets/js/1ae2b102.e890f619.js create mode 100644 assets/js/48d75399.a1e674d1.js delete mode 100644 assets/js/48d75399.d02a17da.js delete mode 100644 assets/js/b21dd8a7.06ba09e6.js create mode 100644 assets/js/b21dd8a7.b887110e.js delete mode 100644 assets/js/f4200fe5.025c4bbe.js create mode 100644 assets/js/f4200fe5.895b93fd.js delete mode 100644 assets/js/f7acb151.daef5619.js create mode 100644 assets/js/f7acb151.ff0cc0e3.js rename assets/js/{runtime~main.2c8f5a5f.js => runtime~main.97b1dc82.js} (83%) diff --git a/404.html b/404.html index 0708ede3684f..3417ace9a5bf 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/1ae2b102.c965ef47.js b/assets/js/1ae2b102.c965ef47.js deleted file mode 100644 index 72cee8549645..000000000000 --- a/assets/js/1ae2b102.c965ef47.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[4537],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>u});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(34200),l=a(67425);function c(e,t,a){return d.apply(this,arguments)}function d(){return(d=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var i,l,c,d,h;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 c=new r.U(i),e.next=21,s.G.create({provider:c});case 21:d=e.sent,(h=a.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=h[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+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,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"percentage":(0,l.Percentage)(e,n);break;case"arrayLength":(0,l.ArrayLength)(e,n);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,d=(0,i.useState)(""),u=d[0],p=d[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?h(r.toString(),l,t,p):p(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://statemine-rpc.polkadot.io/";break;case"statemint":e="wss://statemint-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,c(t,a,p);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?h(o,l,t,p):p(o);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:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,a,n){var o=void 0;if("polkadot"===a||"statemint"===a)o=3;else{if("kusama"!==a&&"statemine"!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");o=6}e=parseFloat(e),n((e=Number.isInteger(e/t[a].precision)?e/t[a].precision+" "+t[a].symbol:(e/t[a].precision).toFixed(o)+" "+t[a].symbol).toString())},Precise:function(e,a,n){n(e=(e=parseFloat(e))/t[a].precision+" "+t[a].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},Percentage:function(e,t){t((e/=1e7).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},1799:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"build-protocol-info",title:"Polkadot Protocol Information",sidebar_label:"Polkadot Protocol",description:"Characteristics about the Polkadot protocol, and what you need to consider when building.",keywords:["build","protocol","extrinsics","events","transaction"],slug:"../build-protocol-info"},c=void 0,d={unversionedId:"build/build-protocol-info",id:"build/build-protocol-info",title:"Polkadot Protocol Information",description:"Characteristics about the Polkadot protocol, and what you need to consider when building.",source:"@site/../docs/build/build-protocol-info.md",sourceDirName:"build",slug:"/build-protocol-info",permalink:"/docs/build-protocol-info",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-protocol-info.md",tags:[],version:"current",lastUpdatedBy:"Radha",lastUpdatedAt:1694978677,formattedLastUpdatedAt:"Sep 17, 2023",frontMatter:{id:"build-protocol-info",title:"Polkadot Protocol Information",sidebar_label:"Polkadot Protocol",description:"Characteristics about the Polkadot protocol, and what you need to consider when building.",keywords:["build","protocol","extrinsics","events","transaction"],slug:"../build-protocol-info"},sidebar:"docs",previous:{title:"Integration Initiation",permalink:"/docs/build-integration"},next:{title:"Integrating Assets",permalink:"/docs/build-integrate-assets"}},h={},u=[{value:"Tokens",id:"tokens",level:2},{value:"Redenomination",id:"redenomination",level:3},{value:"Addresses",id:"addresses",level:2},{value:"Cryptography",id:"cryptography",level:3},{value:"Existential Deposit",id:"existential-deposit",level:2},{value:"Free vs. Reserved vs. Locked vs. Vesting Balance",id:"free-vs-reserved-vs-locked-vs-vesting-balance",level:2},{value:"Extrinsics and Events",id:"extrinsics-and-events",level:2},{value:"Block Format",id:"block-format",level:3},{value:"Extrinsics",id:"extrinsics",level:3},{value:"Transaction Mortality",id:"transaction-mortality",level:3},{value:"Unique Identifiers for Extrinsics",id:"unique-identifiers-for-extrinsics",level:3},{value:"Events",id:"events",level:3},{value:"Fees",id:"fees",level:3},{value:"Encoding",id:"encoding",level:3},{value:"Runtime Upgrades",id:"runtime-upgrades",level:2},{value:"Transaction Version Upgrades",id:"transaction-version-upgrades",level:3},{value:"Smart Contracts",id:"smart-contracts",level:2},{value:"Other Networks",id:"other-networks",level:2},{value:"Other F.A.Q.",id:"other-faq",level:2}],p={toc:u},k="wrapper";function m(e){var t=e.components,a=(0,o.Z)(e,s);return(0,i.kt)(k,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"This page serves as a high-level introduction to the Polkadot protocol with terminology that may be\nspecific to Polkadot, notable differences to other chains that you may have worked with, and\npractical information for dealing with the chain."),(0,i.kt)("h2",{id:"tokens"},"Tokens"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Token decimals:"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Polkadot (DOT): 10"),(0,i.kt)("li",{parentName:"ul"},"Kusama (KSM): 12"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Base unit:"),' "Planck"'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Balance type:")," ",(0,i.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/std/u128/index.html"},(0,i.kt)("inlineCode",{parentName:"a"},"u128")))),(0,i.kt)("h3",{id:"redenomination"},"Redenomination"),(0,i.kt)("p",null,'Polkadot conducted a poll, which ended on 27 July 2020 (block 888_888), in which the stakeholders\ndecided to redenominate the DOT token. The redenomination does not change the number of base units\n(called "plancks" in Polkadot) in the network. The only change is that a single DOT token will be\n1e10 plancks instead of the original 1e12 plancks. See the Polkadot blog posts explaining the\n',(0,i.kt)("a",{parentName:"p",href:"https://medium.com/polkadot-network/the-first-polkadot-vote-1fc1b8bd357b"},"details")," and the\n",(0,i.kt)("a",{parentName:"p",href:"https://medium.com/polkadot-network/the-results-are-in-8f6b1ca2a4e6"},"results")," of the vote."),(0,i.kt)("p",null,"The redenomination took effect 72 hours after transfers were enabled, at block 1_248_326, which\noccurred at approximately 16:50 UTC on 21 Aug 2020. You can find more information about the\nredenomination ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-redenomination"},"here"),"."),(0,i.kt)("h2",{id:"addresses"},"Addresses"),(0,i.kt)("p",null,"In Polkadot (and most Substrate chains), user accounts are identified by a 32-byte (256-bit)\n",(0,i.kt)("inlineCode",{parentName:"p"},"AccountId"),". This is often, but not always, the public key of a cryptographic key pair."),(0,i.kt)("p",null,'Polkadot (and Substrate) use the SS58 address format. This is a broad "meta-format" designed to\nhandle many different cryptographic schemes and chains. It has much in common with Bitcoin\'s\nBase58Check format such as a version prefix, a hash-based checksum suffix, and base-58 encoding.'),(0,i.kt)("p",null,"See the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/main-docs/fundamentals/accounts-addresses-keys/#address-encoding-and-chain-specific-addresses"},"SS58 page"),"\nin the Substrate documentation for encoding information and a more comprehensive list of network\nprefixes."),(0,i.kt)("admonition",{title:"Do not use regular expressions (regex) to validate addresses",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Always verify using the prefix and checksum of the address. Substrate API Sidecar provides an\n",(0,i.kt)("inlineCode",{parentName:"p"},"accounts/{accountId}/validate")," path that returns a boolean ",(0,i.kt)("inlineCode",{parentName:"p"},"isValid")," response for a provided\naddress.")),(0,i.kt)("p",null,"Relevant SS58 prefixes for this guide:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Polkadot: 0"),(0,i.kt)("li",{parentName:"ul"},"Kusama: 2"),(0,i.kt)("li",{parentName:"ul"},"Westend: 42")),(0,i.kt)("h3",{id:"cryptography"},"Cryptography"),(0,i.kt)("p",null,"Polkadot supports the following ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography"},"cryptographic")," key pairs and\nsigning algorithms:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Ed25519"),(0,i.kt)("li",{parentName:"ul"},"Sr25519 - Schnorr signatures on the Ristretto group"),(0,i.kt)("li",{parentName:"ul"},"ECDSA signatures on secp256k1")),(0,i.kt)("p",null,"Note that the address for a secp256k1 key is the SS58 encoding of the ",(0,i.kt)("em",{parentName:"p"},"hash of the public key")," in\norder to reduce the public key from 33 bytes to 32 bytes."),(0,i.kt)("h2",{id:"existential-deposit"},"Existential Deposit"),(0,i.kt)("p",null,"Polkadot, and most Substrate-based chains, use an ",(0,i.kt)("em",{parentName:"p"},"existential deposit")," (ED) to prevent dust\naccounts from bloating chain state. If an account drops below the ED, it will be ",(0,i.kt)("em",{parentName:"p"},"reaped,")," i.e.\ncompletely removed from storage and the nonce reset. Polkadot's ED is\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),",\n","\nwhile Kusama's is\n",(0,i.kt)(r.Z,{network:"kusama",path:"consts.balances.existentialDeposit",defaultValue:333333333,filter:"humanReadable",mdxType:"RPC"}),".\n","\nYou can always verify the existential deposit by checking the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"chain state")," for the constant\n",(0,i.kt)("inlineCode",{parentName:"p"},"balances.existentialDeposit"),"."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For more information about the existential deposit visit the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts#existential-deposit-and-reaping"},"dedicated section")," in the Accounts\npage.")),(0,i.kt)("p",null,"Likewise, if you send a transfer with value below the ED to a new account, it will fail. Custodial\nwallets should set a minimum withdrawal amount that is greater than the ED to guarantee successful\nwithdrawals."),(0,i.kt)("p",null,"Wallets and custodians who track account nonces for auditing purposes should take care not to have\naccounts reaped, as users could refund the address and try making transactions from it. The Balances\npallet provides a ",(0,i.kt)("inlineCode",{parentName:"p"},"transfer_keep_alive")," function that will return an error and abort rather than\nmake the transfer if doing so would result in reaping the sender's account."),(0,i.kt)("admonition",{title:"The existential deposit is a property of the Relay Chain",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Your account on the Relay Chain has no direct impact on parachains as you have seperate accounts on\neach parachain. Still, parachains are able to define an existential deposit of their own, but this\nis seperate to that of the Relay Chain ED.")),(0,i.kt)("admonition",{title:"Existential deposit for the Asset Hub",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The Asset Hub parachain has a lower existential deposit (0.1 DOT) than the Relay Chain (1 DOT) as\nwell as lower transaction fees. It is highly recommended to handle balance transfers on the Asset\nHub. Asset Hub integration is discussed in the next page of the guide.")),(0,i.kt)("h2",{id:"free-vs-reserved-vs-locked-vs-vesting-balance"},"Free vs. Reserved vs. Locked vs. Vesting Balance"),(0,i.kt)("p",null,"Account balance information is stored in\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_balances/struct.AccountData.html"},(0,i.kt)("inlineCode",{parentName:"a"},"AccountData")),".\nPolkadot primarily deals with two types of balances: free and reserved."),(0,i.kt)("p",null,'For most operations, free balance is what you are interested in. It is the "power" of an account in\nstaking and governance, for example. Reserved balance represents funds that have been set aside by\nsome operation and still belong to the account holder, but cannot be used.'),(0,i.kt)("p",null,"Locks are an abstraction over free balance that prevent spending for certain purposes. Several locks\ncan operate on the same account, but they overlap rather than add. Locks are automatically added\nonto accounts when tasks are done on the network (e.g. leasing a parachain slot or voting), these\nare not customizable. For example, an account could have a free balance of 200 DOT with two locks on\nit: 150 DOT for ",(0,i.kt)("inlineCode",{parentName:"p"},"Transfer")," purposes and 100 DOT for ",(0,i.kt)("inlineCode",{parentName:"p"},"Reserve")," purposes. The account could not make a\ntransfer that brings its free balance below 150 DOT, but an operation could result in reserving DOT\nsuch that the free balance is below 150, but above 100 DOT."),(0,i.kt)("p",null,"Bonding tokens for staking and voting in governance referenda both utilize locks."),(0,i.kt)("p",null,"Vesting is another abstraction that uses locks on free balance. Vesting sets a lock that decreases\nover time until all the funds are transferable."),(0,i.kt)("p",null,"More info:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/frame_support/traits/trait.LockableCurrency.html"},"Lockable Currency")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/frame_support/traits/struct.WithdrawReasons.html"},"Lock Withdraw Reasons")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_vesting/struct.VestingInfo.html"},"Vesting Info"))),(0,i.kt)("h2",{id:"extrinsics-and-events"},"Extrinsics and Events"),(0,i.kt)("h3",{id:"block-format"},"Block Format"),(0,i.kt)("p",null,"A Polkadot block consists of a block header and a block body. The block body is made up of\nextrinsics representing the generalization of the concept of transactions. Extrinsics can contain\nany external data the underlying chain wishes to validate and track."),(0,i.kt)("p",null,"The block header is a 5-tuple containing the following elements:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"parent_hash"),": a 32-byte Blake2b hash of the SCALE encoded parent block header."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"number"),": an integer representing the index of the current block in the chain. It is equal to the\nnumber of the ancestor blocks. The genesis state has number 0."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"state_root"),": the root of the Merkle tree, used as storage for the system."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"extrinsics_root"),": field which is reserved for the Runtime to validate the integrity of the\nextrinsics composing the block body."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"digest"),": field used to store any chain-specific auxiliary data, which could help the light\nclients interact with the block without the need of accessing the full storage as well as\nconsensus-related data including the block signature.")),(0,i.kt)("p",null,"A node creating or receiving a block must gossip that block to the network (i.e. to the other\nnodes). Other nodes within the network will track this announcement and can request information\nabout the block. Additional details on the process are outlined\n",(0,i.kt)("a",{parentName:"p",href:"https://spec.polkadot.network/#sect-msg-block-announce"},"here")," in the Polkadot Spec."),(0,i.kt)("h3",{id:"extrinsics"},"Extrinsics"),(0,i.kt)("p",null,"An extrinsic is a ",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/scale-codec/"},"SCALE encoded")," array consisting\nof a ",(0,i.kt)("inlineCode",{parentName:"p"},"version number"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"signature"),", and varying ",(0,i.kt)("inlineCode",{parentName:"p"},"data")," types indicating the resulting runtime\nfunction to be called, including the parameters required for that function to be executed."),(0,i.kt)("p",null,"Extrinsics constitute information from the outside world and take on three forms:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Inherents"),(0,i.kt)("li",{parentName:"ul"},"Signed Transactions"),(0,i.kt)("li",{parentName:"ul"},"Unsigned Transactions")),(0,i.kt)("p",null,"As an infrastructure provider, you will deal almost exclusively with signed transactions. You will,\nhowever, see other extrinsics within the blocks that you decode. Find more information in the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/main-docs/build/tx-weights-fees/"},"Substrate documentation"),"."),(0,i.kt)("p",null,"Inherent extrinsics are unsigned and contain information that is not provably true, but validators\nagree on based on some measure of reasonability. For example, a timestamp cannot be proved, but\nvalidators can agree that it is within some time difference on their system clock. Inherents are\nbroadcasted as part of the produced blocks rather than being gossiped as individual extrinsics."),(0,i.kt)("p",null,"Signed transactions contain a signature of the account that issued the transaction and stands to pay\na fee to have the transaction included on chain. Because the value of including signed transactions\non-chain can be recognized prior to execution, they can be gossiped on the network between nodes\nwith a low risk of spam. Signed transactions fit the concept of a transaction in Ethereum or\nBitcoin."),(0,i.kt)("p",null,"Some transactions cannot be signed by a fee-paying account and use unsigned transactions. For\nexample, when a user claims their DOT from the Ethereum DOT indicator contract to a new DOT address,\nthe new address doesn't yet have any funds with which to pay fees."),(0,i.kt)("p",null,"The Polkadot Host does not specify or limit the internals of each extrinsics and those are defined\nand dealt with by the Runtime."),(0,i.kt)("h3",{id:"transaction-mortality"},"Transaction Mortality"),(0,i.kt)("p",null,'Extrinsics can be mortal or immortal. The transaction payload includes a block number and block hash\ncheckpoint from which a transaction is valid and a validity period (also called "era" in some\nplaces) that represents the number of blocks after the checkpoint for which the transaction is\nvalid. If the extrinsic is not included in a block within this validity window, it will be discarded\nfrom the transaction queue.'),(0,i.kt)("p",null,"The chain only stores a limited number of prior block hashes as reference. You can query this\nparameter, called ",(0,i.kt)("inlineCode",{parentName:"p"},"BlockHashCount"),", from the chain state or metadata. This parameter is set to\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.system.blockHashCount",defaultValue:4096,mdxType:"RPC"}),"\nblocks (about seven hours) at genesis. If the validity period is larger than the number of blocks\nstored on-chain, then the transaction will only be valid as long as there is a block to check it\nagainst, i.e. the minimum value of validity period and block hash count."),(0,i.kt)("p",null,'Setting the block checkpoint to zero, using the genesis hash, and a validity period of zero will\nmake the transaction "immortal".'),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"NOTE:")," If an account is reaped and a user re-funds the account, then they could replay an\nimmortal transaction. Always default to using a mortal extrinsic."),(0,i.kt)("h3",{id:"unique-identifiers-for-extrinsics"},"Unique Identifiers for Extrinsics"),(0,i.kt)("admonition",{title:"Transaction Hash is not a unique identifier",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"The assumption that a transaction's hash is a unique identifier is the number one mistake that\nindexing services and custodians make. This error will cause major issues for your users. Make sure\nthat you read this section carefully.")),(0,i.kt)("p",null,"Many infrastructure providers on existing blockchains, e.g. Ethereum, consider a transaction's hash\nas a unique identifier. In Substrate-based chains like Polkadot, a transaction's hash only serves as\na fingerprint of the information within a transaction, and there are times when two transactions\nwith the same hash are both valid. In the case that one is invalid, the network properly handles the\ntransaction and does not charge a transaction fee to the sender nor consider the transaction in the\nblock's fullness."),(0,i.kt)("p",null,"Imagine this contrived example with a ",(0,i.kt)("a",{parentName:"p",href:"#existential-deposit"},"reaped account"),". The first and last\ntransactions are identical, and both valid."),(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"},"Index"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Hash"),(0,i.kt)("th",{parentName:"tr",align:"left"},"Origin"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Nonce"),(0,i.kt)("th",{parentName:"tr",align:"left"},"Call"),(0,i.kt)("th",{parentName:"tr",align:"left"},"Results"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"0"),(0,i.kt)("td",{parentName:"tr",align:"center"},"0x01"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Account A"),(0,i.kt)("td",{parentName:"tr",align:"center"},"0"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Transfer 5 DOT to B"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Account A reaped")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"1"),(0,i.kt)("td",{parentName:"tr",align:"center"},"0x02"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Account B"),(0,i.kt)("td",{parentName:"tr",align:"center"},"4"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Transfer 7 DOT to A"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Account A created (nonce = 0)")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"2"),(0,i.kt)("td",{parentName:"tr",align:"center"},"0x01"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Account A"),(0,i.kt)("td",{parentName:"tr",align:"center"},"0"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Transfer 5 DOT to B"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Successful transaction")))),(0,i.kt)("p",null,"In addition, not every extrinsic in a Substrate-based chain comes from an account as a\npublic/private key pair; Substrate, rather, has the concept of dispatch \u201corigin\u201d, which could be\ncreated from a public key account, but could also form from other means such as governance. These\norigins do not have a nonce associated with them the way that an account does. For example,\ngovernance might dispatch the same call with the same arguments multiple times, like \u201cincrease the\nvalidator set by 10%.\u201d This dispatch information (and therefore its hash) would be the same, and the\nhash would be a reliable representative of the call, but its execution would have different effects\ndepending on the chain\u2019s state at the time of dispatch."),(0,i.kt)("p",null,"The correct way to uniquely identify an extrinsic on a Substrate-based chain is to use the block ID\n(height or hash) and the extrinsic's index. Substrate defines a block as a header and an array of\nextrinsics; therefore, an index in the array at a canonical height will always uniquely identify a\ntransaction. This methodology is reflected in the Substrate codebase itself, for example to\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_multisig/struct.Timepoint.html"},"reference a previous transaction"),"\nfrom the Multisig pallet."),(0,i.kt)("h3",{id:"events"},"Events"),(0,i.kt)("p",null,"While extrinsics represent information from the outside world, events represent information from the\nchain. Extrinsics can trigger events. For example, the Staking pallet emits a ",(0,i.kt)("inlineCode",{parentName:"p"},"Reward")," event when\nclaiming staking rewards to tell the user how much the account was credited."),(0,i.kt)("p",null,"If you want to monitor deposits into an address, keep in mind that several transactions can initiate\na balance transfer (such as ",(0,i.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," and a ",(0,i.kt)("inlineCode",{parentName:"p"},"utility.batch")," transaction with a\ntransfer inside of it). Only monitoring ",(0,i.kt)("inlineCode",{parentName:"p"},"balances.transfer")," transactions will not be sufficient.\nMake sure that you monitor events in each block for events that contain your addresses of interest.\nMonitor events instead of transaction names to ensure that you can properly credit deposits."),(0,i.kt)("h3",{id:"fees"},"Fees"),(0,i.kt)("p",null,"Polkadot uses weight-based fees that, unlike gas, are charged ",(0,i.kt)("em",{parentName:"p"},"pre-dispatch."),' Users can also add a\n"tip" to increase transaction priority during congested periods. See the\n',(0,i.kt)("a",{parentName:"p",href:"/docs/learn-transaction-fees"},"transaction fee")," page for more info."),(0,i.kt)("h3",{id:"encoding"},"Encoding"),(0,i.kt)("p",null,"Parity's integration tools should allow you to deal with decoded data. If you'd like to bypass them\nand interact directly with the chain data or implement your own codec, Polkadot encodes block and\ntransaction data using the ",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/scale-codec/"},"SCALE codec"),"."),(0,i.kt)("h2",{id:"runtime-upgrades"},"Runtime Upgrades"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/learn-runtime-upgrades"},"Runtime upgrades")," allow Polkadot to change the logic of the\nchain without the need for a hard fork. A hard fork would require node operators to manually upgrade\ntheir nodes to the latest runtime version. In a distributed system, this is a complex process to\ncoordinate and communicate. Polkadot can upgrade without a hard fork. The existing runtime logic is\nfollowed to update the Wasm runtime stored on the blockchain to a new version. The upgrade is then\nincluded in the blockchain itself, meaning that all the nodes on the network execute it."),(0,i.kt)("p",null,"Generally there is no need to upgrade your nodes manually before the runtime upgrade as they will\nautomatically start to follow the new logic of the chain. Nodes only need to be updated when the\nruntime requires new host functions or there is a change in networking or consensus."),(0,i.kt)("p",null,"Transactions constructed for a given runtime version will not work on later versions. Therefore, a\ntransaction constructed based on a runtime version will not be valid in later runtime versions. If\nyou don't think you can submit a transaction before the upgrade, it is better to wait and construct\nit after the upgrade takes place."),(0,i.kt)("p",null,"Although upgrading your nodes is generally not necessary to follow an upgrade, we recommend\nfollowing the Polkadot releases and upgrading in a timely manner, especially for high priority or\ncritical releases."),(0,i.kt)("h3",{id:"transaction-version-upgrades"},"Transaction Version Upgrades"),(0,i.kt)("p",null,"Apart the ",(0,i.kt)("inlineCode",{parentName:"p"},"runtime_version")," there is also the ",(0,i.kt)("inlineCode",{parentName:"p"},"transaction_version")," which denotes how to correctly\nencode/decode calls for a given runtime (useful for hardware wallets). The reason\n",(0,i.kt)("inlineCode",{parentName:"p"},"transaction_version")," is separate from ",(0,i.kt)("inlineCode",{parentName:"p"},"runtime_version")," is that it explicitly notes that the call\ninterface is broken/not compatible."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"transaction_version")," is updated in the cases mentioned in the\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/sp_version/struct.RuntimeVersion.html#structfield.transaction_version"},"Substrate docs"),".\nSo when a new transaction version is introduced (during a runtime upgrade), it indicates a breaking\nchange to transaction serialization. In that case, any custom application/tool that constructs &\nsigns transactions should also be updated in order to be compatible with the new transaction\nversion. It is the responsibility of the maintainers of the custom application/tool to keep up with\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"transaction_version")," updates. However, if you do not want to keep monitoring these changes\nyourself, you can also use the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/txwrapper-core"},"txwrapper-core")," tool\nthat handles these breaking changes for you and allows you to construct transactions using the\nfunction names and chain metadata."),(0,i.kt)("h2",{id:"smart-contracts"},"Smart Contracts"),(0,i.kt)("p",null,"The Polkadot Relay Chain does not support smart contracts."),(0,i.kt)("h2",{id:"other-networks"},"Other Networks"),(0,i.kt)("p",null,"Besides running a private network, Polkadot has two other networks where you could test\ninfrastructure prior to deploying to the Polkadot mainnet."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Kusama Canary Network:")," Kusama is Polkadot's cutting-edge cousin. Many risky features are\ndeployed to Kusama prior to making their way into Polkadot."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Westend Testnet:")," Westend is Polkadot's testnet and uses the Polkadot runtime."),(0,i.kt)("h2",{id:"other-faq"},"Other F.A.Q."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Can an account's balance change without a corresponding, on-chain transaction?")),(0,i.kt)("p",null,"No, but not all balance changes are in a ",(0,i.kt)("em",{parentName:"p"},"transaction,")," some are in ",(0,i.kt)("em",{parentName:"p"},"events.")," You will need to run\nan archive node and listen for events and transactions to track all account activity. This\nespecially applies to ",(0,i.kt)("em",{parentName:"p"},"locking")," operations if you are calculating balance as the spendable balance,\ni.e. free balance minus the maximum lock."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},'What chain depth is considered "safe"?')),(0,i.kt)("p",null,"Polkadot uses a deterministic finality mechanism. Once a block is finalized, it cannot be reverted\nexcept by a hard fork. Kusama has had hard forks that had to revert four finalized blocks in order\nto cancel a runtime upgrade. Using a finalized depth of ten blocks should be safe."),(0,i.kt)("p",null,"Note that block production and finality are isolated processes in Polkadot, and the chain can have a\nlong unfinalized head."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Do users need to interact with any smart contracts?")),(0,i.kt)("p",null,"No, users interact directly with the chain's logic."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Does Polkadot have state rent?")),(0,i.kt)("p",null,"No, Polkadot uses the existential deposit to prevent dust accounts and other economic mechanisms\nlike locking or reserving tokens for operations that utilize state."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"What is an external source to see the current chain height?")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS explorer")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkascan.io/"},"Polkascan block explorer")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.subscan.io/"},"Subscan block explorer"))))}m.isMDXComponent=!0},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/1ae2b102.e890f619.js b/assets/js/1ae2b102.e890f619.js new file mode 100644 index 000000000000..af2fc27d2d8b --- /dev/null +++ b/assets/js/1ae2b102.e890f619.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[4537],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>u});var n=a(74165),o=a(15861),i=a(67294),r=a(87152),s=a(34200),l=a(67425);function c(e,t,a){return d.apply(this,arguments)}function d(){return(d=(0,o.Z)((0,n.Z)().mark((function e(t,a,o){var i,l,c,d,h;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 c=new r.U(i),e.next=21,s.G.create({provider:c});case 21:d=e.sent,(h=a.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=h[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+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,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"percentage":(0,l.Percentage)(e,n);break;case"arrayLength":(0,l.ArrayLength)(e,n);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,d=(0,i.useState)(""),u=d[0],p=d[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?h(r.toString(),l,t,p):p(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://statemine-rpc.polkadot.io/";break;case"statemint":e="wss://statemint-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,c(t,a,p);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?h(o,l,t,p):p(o);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:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,a,n){var o=void 0;if("polkadot"===a||"statemint"===a)o=3;else{if("kusama"!==a&&"statemine"!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");o=6}e=parseFloat(e),n((e=Number.isInteger(e/t[a].precision)?e/t[a].precision+" "+t[a].symbol:(e/t[a].precision).toFixed(o)+" "+t[a].symbol).toString())},Precise:function(e,a,n){n(e=(e=parseFloat(e))/t[a].precision+" "+t[a].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},Percentage:function(e,t){t((e/=1e7).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},1799:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"build-protocol-info",title:"Polkadot Protocol Information",sidebar_label:"Polkadot Protocol",description:"Characteristics about the Polkadot protocol, and what you need to consider when building.",keywords:["build","protocol","extrinsics","events","transaction"],slug:"../build-protocol-info"},c=void 0,d={unversionedId:"build/build-protocol-info",id:"build/build-protocol-info",title:"Polkadot Protocol Information",description:"Characteristics about the Polkadot protocol, and what you need to consider when building.",source:"@site/../docs/build/build-protocol-info.md",sourceDirName:"build",slug:"/build-protocol-info",permalink:"/docs/build-protocol-info",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-protocol-info.md",tags:[],version:"current",lastUpdatedBy:"vuittont60",lastUpdatedAt:1697188456,formattedLastUpdatedAt:"Oct 13, 2023",frontMatter:{id:"build-protocol-info",title:"Polkadot Protocol Information",sidebar_label:"Polkadot Protocol",description:"Characteristics about the Polkadot protocol, and what you need to consider when building.",keywords:["build","protocol","extrinsics","events","transaction"],slug:"../build-protocol-info"},sidebar:"docs",previous:{title:"Integration Initiation",permalink:"/docs/build-integration"},next:{title:"Integrating Assets",permalink:"/docs/build-integrate-assets"}},h={},u=[{value:"Tokens",id:"tokens",level:2},{value:"Redenomination",id:"redenomination",level:3},{value:"Addresses",id:"addresses",level:2},{value:"Cryptography",id:"cryptography",level:3},{value:"Existential Deposit",id:"existential-deposit",level:2},{value:"Free vs. Reserved vs. Locked vs. Vesting Balance",id:"free-vs-reserved-vs-locked-vs-vesting-balance",level:2},{value:"Extrinsics and Events",id:"extrinsics-and-events",level:2},{value:"Block Format",id:"block-format",level:3},{value:"Extrinsics",id:"extrinsics",level:3},{value:"Transaction Mortality",id:"transaction-mortality",level:3},{value:"Unique Identifiers for Extrinsics",id:"unique-identifiers-for-extrinsics",level:3},{value:"Events",id:"events",level:3},{value:"Fees",id:"fees",level:3},{value:"Encoding",id:"encoding",level:3},{value:"Runtime Upgrades",id:"runtime-upgrades",level:2},{value:"Transaction Version Upgrades",id:"transaction-version-upgrades",level:3},{value:"Smart Contracts",id:"smart-contracts",level:2},{value:"Other Networks",id:"other-networks",level:2},{value:"Other F.A.Q.",id:"other-faq",level:2}],p={toc:u},k="wrapper";function m(e){var t=e.components,a=(0,o.Z)(e,s);return(0,i.kt)(k,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"This page serves as a high-level introduction to the Polkadot protocol with terminology that may be\nspecific to Polkadot, notable differences to other chains that you may have worked with, and\npractical information for dealing with the chain."),(0,i.kt)("h2",{id:"tokens"},"Tokens"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Token decimals:"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Polkadot (DOT): 10"),(0,i.kt)("li",{parentName:"ul"},"Kusama (KSM): 12"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Base unit:"),' "Planck"'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Balance type:")," ",(0,i.kt)("a",{parentName:"li",href:"https://doc.rust-lang.org/std/u128/index.html"},(0,i.kt)("inlineCode",{parentName:"a"},"u128")))),(0,i.kt)("h3",{id:"redenomination"},"Redenomination"),(0,i.kt)("p",null,'Polkadot conducted a poll, which ended on 27 July 2020 (block 888_888), in which the stakeholders\ndecided to redenominate the DOT token. The redenomination does not change the number of base units\n(called "plancks" in Polkadot) in the network. The only change is that a single DOT token will be\n1e10 plancks instead of the original 1e12 plancks. See the Polkadot blog posts explaining the\n',(0,i.kt)("a",{parentName:"p",href:"https://medium.com/polkadot-network/the-first-polkadot-vote-1fc1b8bd357b"},"details")," and the\n",(0,i.kt)("a",{parentName:"p",href:"https://medium.com/polkadot-network/the-results-are-in-8f6b1ca2a4e6"},"results")," of the vote."),(0,i.kt)("p",null,"The redenomination took effect 72 hours after transfers were enabled, at block 1_248_326, which\noccurred at approximately 16:50 UTC on 21 Aug 2020. You can find more information about the\nredenomination ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-redenomination"},"here"),"."),(0,i.kt)("h2",{id:"addresses"},"Addresses"),(0,i.kt)("p",null,"In Polkadot (and most Substrate chains), user accounts are identified by a 32-byte (256-bit)\n",(0,i.kt)("inlineCode",{parentName:"p"},"AccountId"),". This is often, but not always, the public key of a cryptographic key pair."),(0,i.kt)("p",null,'Polkadot (and Substrate) use the SS58 address format. This is a broad "meta-format" designed to\nhandle many different cryptographic schemes and chains. It has much in common with Bitcoin\'s\nBase58Check format such as a version prefix, a hash-based checksum suffix, and base-58 encoding.'),(0,i.kt)("p",null,"See the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/main-docs/fundamentals/accounts-addresses-keys/#address-encoding-and-chain-specific-addresses"},"SS58 page"),"\nin the Substrate documentation for encoding information and a more comprehensive list of network\nprefixes."),(0,i.kt)("admonition",{title:"Do not use regular expressions (regex) to validate addresses",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Always verify using the prefix and checksum of the address. Substrate API Sidecar provides an\n",(0,i.kt)("inlineCode",{parentName:"p"},"accounts/{accountId}/validate")," path that returns a boolean ",(0,i.kt)("inlineCode",{parentName:"p"},"isValid")," response for a provided\naddress.")),(0,i.kt)("p",null,"Relevant SS58 prefixes for this guide:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Polkadot: 0"),(0,i.kt)("li",{parentName:"ul"},"Kusama: 2"),(0,i.kt)("li",{parentName:"ul"},"Westend: 42")),(0,i.kt)("h3",{id:"cryptography"},"Cryptography"),(0,i.kt)("p",null,"Polkadot supports the following ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-cryptography"},"cryptographic")," key pairs and\nsigning algorithms:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Ed25519"),(0,i.kt)("li",{parentName:"ul"},"Sr25519 - Schnorr signatures on the Ristretto group"),(0,i.kt)("li",{parentName:"ul"},"ECDSA signatures on secp256k1")),(0,i.kt)("p",null,"Note that the address for a secp256k1 key is the SS58 encoding of the ",(0,i.kt)("em",{parentName:"p"},"hash of the public key")," in\norder to reduce the public key from 33 bytes to 32 bytes."),(0,i.kt)("h2",{id:"existential-deposit"},"Existential Deposit"),(0,i.kt)("p",null,"Polkadot, and most Substrate-based chains, use an ",(0,i.kt)("em",{parentName:"p"},"existential deposit")," (ED) to prevent dust\naccounts from bloating chain state. If an account drops below the ED, it will be ",(0,i.kt)("em",{parentName:"p"},"reaped,")," i.e.\ncompletely removed from storage and the nonce reset. Polkadot's ED is\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),",\n","\nwhile Kusama's is\n",(0,i.kt)(r.Z,{network:"kusama",path:"consts.balances.existentialDeposit",defaultValue:333333333,filter:"humanReadable",mdxType:"RPC"}),".\n","\nYou can always verify the existential deposit by checking the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/#/chainstate"},"chain state")," for the constant\n",(0,i.kt)("inlineCode",{parentName:"p"},"balances.existentialDeposit"),"."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"For more information about the existential deposit visit the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-accounts#existential-deposit-and-reaping"},"dedicated section")," in the Accounts\npage.")),(0,i.kt)("p",null,"Likewise, if you send a transfer with value below the ED to a new account, it will fail. Custodial\nwallets should set a minimum withdrawal amount that is greater than the ED to guarantee successful\nwithdrawals."),(0,i.kt)("p",null,"Wallets and custodians who track account nonces for auditing purposes should take care not to have\naccounts reaped, as users could refund the address and try making transactions from it. The Balances\npallet provides a ",(0,i.kt)("inlineCode",{parentName:"p"},"transfer_keep_alive")," function that will return an error and abort rather than\nmake the transfer if doing so would result in reaping the sender's account."),(0,i.kt)("admonition",{title:"The existential deposit is a property of the Relay Chain",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Your account on the Relay Chain has no direct impact on parachains as you have separate accounts on\neach parachain. Still, parachains are able to define an existential deposit of their own, but this\nis separate to that of the Relay Chain ED.")),(0,i.kt)("admonition",{title:"Existential deposit for the Asset Hub",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The Asset Hub parachain has a lower existential deposit (0.1 DOT) than the Relay Chain (1 DOT) as\nwell as lower transaction fees. It is highly recommended to handle balance transfers on the Asset\nHub. Asset Hub integration is discussed in the next page of the guide.")),(0,i.kt)("h2",{id:"free-vs-reserved-vs-locked-vs-vesting-balance"},"Free vs. Reserved vs. Locked vs. Vesting Balance"),(0,i.kt)("p",null,"Account balance information is stored in\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_balances/struct.AccountData.html"},(0,i.kt)("inlineCode",{parentName:"a"},"AccountData")),".\nPolkadot primarily deals with two types of balances: free and reserved."),(0,i.kt)("p",null,'For most operations, free balance is what you are interested in. It is the "power" of an account in\nstaking and governance, for example. Reserved balance represents funds that have been set aside by\nsome operation and still belong to the account holder, but cannot be used.'),(0,i.kt)("p",null,"Locks are an abstraction over free balance that prevent spending for certain purposes. Several locks\ncan operate on the same account, but they overlap rather than add. Locks are automatically added\nonto accounts when tasks are done on the network (e.g. leasing a parachain slot or voting), these\nare not customizable. For example, an account could have a free balance of 200 DOT with two locks on\nit: 150 DOT for ",(0,i.kt)("inlineCode",{parentName:"p"},"Transfer")," purposes and 100 DOT for ",(0,i.kt)("inlineCode",{parentName:"p"},"Reserve")," purposes. The account could not make a\ntransfer that brings its free balance below 150 DOT, but an operation could result in reserving DOT\nsuch that the free balance is below 150, but above 100 DOT."),(0,i.kt)("p",null,"Bonding tokens for staking and voting in governance referenda both utilize locks."),(0,i.kt)("p",null,"Vesting is another abstraction that uses locks on free balance. Vesting sets a lock that decreases\nover time until all the funds are transferable."),(0,i.kt)("p",null,"More info:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/frame_support/traits/trait.LockableCurrency.html"},"Lockable Currency")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/frame_support/traits/struct.WithdrawReasons.html"},"Lock Withdraw Reasons")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_vesting/struct.VestingInfo.html"},"Vesting Info"))),(0,i.kt)("h2",{id:"extrinsics-and-events"},"Extrinsics and Events"),(0,i.kt)("h3",{id:"block-format"},"Block Format"),(0,i.kt)("p",null,"A Polkadot block consists of a block header and a block body. The block body is made up of\nextrinsics representing the generalization of the concept of transactions. Extrinsics can contain\nany external data the underlying chain wishes to validate and track."),(0,i.kt)("p",null,"The block header is a 5-tuple containing the following elements:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"parent_hash"),": a 32-byte Blake2b hash of the SCALE encoded parent block header."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"number"),": an integer representing the index of the current block in the chain. It is equal to the\nnumber of the ancestor blocks. The genesis state has number 0."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"state_root"),": the root of the Merkle tree, used as storage for the system."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"extrinsics_root"),": field which is reserved for the Runtime to validate the integrity of the\nextrinsics composing the block body."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"digest"),": field used to store any chain-specific auxiliary data, which could help the light\nclients interact with the block without the need of accessing the full storage as well as\nconsensus-related data including the block signature.")),(0,i.kt)("p",null,"A node creating or receiving a block must gossip that block to the network (i.e. to the other\nnodes). Other nodes within the network will track this announcement and can request information\nabout the block. Additional details on the process are outlined\n",(0,i.kt)("a",{parentName:"p",href:"https://spec.polkadot.network/#sect-msg-block-announce"},"here")," in the Polkadot Spec."),(0,i.kt)("h3",{id:"extrinsics"},"Extrinsics"),(0,i.kt)("p",null,"An extrinsic is a ",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/scale-codec/"},"SCALE encoded")," array consisting\nof a ",(0,i.kt)("inlineCode",{parentName:"p"},"version number"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"signature"),", and varying ",(0,i.kt)("inlineCode",{parentName:"p"},"data")," types indicating the resulting runtime\nfunction to be called, including the parameters required for that function to be executed."),(0,i.kt)("p",null,"Extrinsics constitute information from the outside world and take on three forms:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Inherents"),(0,i.kt)("li",{parentName:"ul"},"Signed Transactions"),(0,i.kt)("li",{parentName:"ul"},"Unsigned Transactions")),(0,i.kt)("p",null,"As an infrastructure provider, you will deal almost exclusively with signed transactions. You will,\nhowever, see other extrinsics within the blocks that you decode. Find more information in the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/main-docs/build/tx-weights-fees/"},"Substrate documentation"),"."),(0,i.kt)("p",null,"Inherent extrinsics are unsigned and contain information that is not provably true, but validators\nagree on based on some measure of reasonability. For example, a timestamp cannot be proved, but\nvalidators can agree that it is within some time difference on their system clock. Inherents are\nbroadcasted as part of the produced blocks rather than being gossiped as individual extrinsics."),(0,i.kt)("p",null,"Signed transactions contain a signature of the account that issued the transaction and stands to pay\na fee to have the transaction included on chain. Because the value of including signed transactions\non-chain can be recognized prior to execution, they can be gossiped on the network between nodes\nwith a low risk of spam. Signed transactions fit the concept of a transaction in Ethereum or\nBitcoin."),(0,i.kt)("p",null,"Some transactions cannot be signed by a fee-paying account and use unsigned transactions. For\nexample, when a user claims their DOT from the Ethereum DOT indicator contract to a new DOT address,\nthe new address doesn't yet have any funds with which to pay fees."),(0,i.kt)("p",null,"The Polkadot Host does not specify or limit the internals of each extrinsics and those are defined\nand dealt with by the Runtime."),(0,i.kt)("h3",{id:"transaction-mortality"},"Transaction Mortality"),(0,i.kt)("p",null,'Extrinsics can be mortal or immortal. The transaction payload includes a block number and block hash\ncheckpoint from which a transaction is valid and a validity period (also called "era" in some\nplaces) that represents the number of blocks after the checkpoint for which the transaction is\nvalid. If the extrinsic is not included in a block within this validity window, it will be discarded\nfrom the transaction queue.'),(0,i.kt)("p",null,"The chain only stores a limited number of prior block hashes as reference. You can query this\nparameter, called ",(0,i.kt)("inlineCode",{parentName:"p"},"BlockHashCount"),", from the chain state or metadata. This parameter is set to\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.system.blockHashCount",defaultValue:4096,mdxType:"RPC"}),"\nblocks (about seven hours) at genesis. If the validity period is larger than the number of blocks\nstored on-chain, then the transaction will only be valid as long as there is a block to check it\nagainst, i.e. the minimum value of validity period and block hash count."),(0,i.kt)("p",null,'Setting the block checkpoint to zero, using the genesis hash, and a validity period of zero will\nmake the transaction "immortal".'),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"NOTE:")," If an account is reaped and a user re-funds the account, then they could replay an\nimmortal transaction. Always default to using a mortal extrinsic."),(0,i.kt)("h3",{id:"unique-identifiers-for-extrinsics"},"Unique Identifiers for Extrinsics"),(0,i.kt)("admonition",{title:"Transaction Hash is not a unique identifier",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"The assumption that a transaction's hash is a unique identifier is the number one mistake that\nindexing services and custodians make. This error will cause major issues for your users. Make sure\nthat you read this section carefully.")),(0,i.kt)("p",null,"Many infrastructure providers on existing blockchains, e.g. Ethereum, consider a transaction's hash\nas a unique identifier. In Substrate-based chains like Polkadot, a transaction's hash only serves as\na fingerprint of the information within a transaction, and there are times when two transactions\nwith the same hash are both valid. In the case that one is invalid, the network properly handles the\ntransaction and does not charge a transaction fee to the sender nor consider the transaction in the\nblock's fullness."),(0,i.kt)("p",null,"Imagine this contrived example with a ",(0,i.kt)("a",{parentName:"p",href:"#existential-deposit"},"reaped account"),". The first and last\ntransactions are identical, and both valid."),(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"},"Index"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Hash"),(0,i.kt)("th",{parentName:"tr",align:"left"},"Origin"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Nonce"),(0,i.kt)("th",{parentName:"tr",align:"left"},"Call"),(0,i.kt)("th",{parentName:"tr",align:"left"},"Results"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"0"),(0,i.kt)("td",{parentName:"tr",align:"center"},"0x01"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Account A"),(0,i.kt)("td",{parentName:"tr",align:"center"},"0"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Transfer 5 DOT to B"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Account A reaped")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"1"),(0,i.kt)("td",{parentName:"tr",align:"center"},"0x02"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Account B"),(0,i.kt)("td",{parentName:"tr",align:"center"},"4"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Transfer 7 DOT to A"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Account A created (nonce = 0)")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"2"),(0,i.kt)("td",{parentName:"tr",align:"center"},"0x01"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Account A"),(0,i.kt)("td",{parentName:"tr",align:"center"},"0"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Transfer 5 DOT to B"),(0,i.kt)("td",{parentName:"tr",align:"left"},"Successful transaction")))),(0,i.kt)("p",null,"In addition, not every extrinsic in a Substrate-based chain comes from an account as a\npublic/private key pair; Substrate, rather, has the concept of dispatch \u201corigin\u201d, which could be\ncreated from a public key account, but could also form from other means such as governance. These\norigins do not have a nonce associated with them the way that an account does. For example,\ngovernance might dispatch the same call with the same arguments multiple times, like \u201cincrease the\nvalidator set by 10%.\u201d This dispatch information (and therefore its hash) would be the same, and the\nhash would be a reliable representative of the call, but its execution would have different effects\ndepending on the chain\u2019s state at the time of dispatch."),(0,i.kt)("p",null,"The correct way to uniquely identify an extrinsic on a Substrate-based chain is to use the block ID\n(height or hash) and the extrinsic's index. Substrate defines a block as a header and an array of\nextrinsics; therefore, an index in the array at a canonical height will always uniquely identify a\ntransaction. This methodology is reflected in the Substrate codebase itself, for example to\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_multisig/struct.Timepoint.html"},"reference a previous transaction"),"\nfrom the Multisig pallet."),(0,i.kt)("h3",{id:"events"},"Events"),(0,i.kt)("p",null,"While extrinsics represent information from the outside world, events represent information from the\nchain. Extrinsics can trigger events. For example, the Staking pallet emits a ",(0,i.kt)("inlineCode",{parentName:"p"},"Reward")," event when\nclaiming staking rewards to tell the user how much the account was credited."),(0,i.kt)("p",null,"If you want to monitor deposits into an address, keep in mind that several transactions can initiate\na balance transfer (such as ",(0,i.kt)("inlineCode",{parentName:"p"},"balances.transferKeepAlive")," and a ",(0,i.kt)("inlineCode",{parentName:"p"},"utility.batch")," transaction with a\ntransfer inside of it). Only monitoring ",(0,i.kt)("inlineCode",{parentName:"p"},"balances.transfer")," transactions will not be sufficient.\nMake sure that you monitor events in each block for events that contain your addresses of interest.\nMonitor events instead of transaction names to ensure that you can properly credit deposits."),(0,i.kt)("h3",{id:"fees"},"Fees"),(0,i.kt)("p",null,"Polkadot uses weight-based fees that, unlike gas, are charged ",(0,i.kt)("em",{parentName:"p"},"pre-dispatch."),' Users can also add a\n"tip" to increase transaction priority during congested periods. See the\n',(0,i.kt)("a",{parentName:"p",href:"/docs/learn-transaction-fees"},"transaction fee")," page for more info."),(0,i.kt)("h3",{id:"encoding"},"Encoding"),(0,i.kt)("p",null,"Parity's integration tools should allow you to deal with decoded data. If you'd like to bypass them\nand interact directly with the chain data or implement your own codec, Polkadot encodes block and\ntransaction data using the ",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/scale-codec/"},"SCALE codec"),"."),(0,i.kt)("h2",{id:"runtime-upgrades"},"Runtime Upgrades"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/learn-runtime-upgrades"},"Runtime upgrades")," allow Polkadot to change the logic of the\nchain without the need for a hard fork. A hard fork would require node operators to manually upgrade\ntheir nodes to the latest runtime version. In a distributed system, this is a complex process to\ncoordinate and communicate. Polkadot can upgrade without a hard fork. The existing runtime logic is\nfollowed to update the Wasm runtime stored on the blockchain to a new version. The upgrade is then\nincluded in the blockchain itself, meaning that all the nodes on the network execute it."),(0,i.kt)("p",null,"Generally there is no need to upgrade your nodes manually before the runtime upgrade as they will\nautomatically start to follow the new logic of the chain. Nodes only need to be updated when the\nruntime requires new host functions or there is a change in networking or consensus."),(0,i.kt)("p",null,"Transactions constructed for a given runtime version will not work on later versions. Therefore, a\ntransaction constructed based on a runtime version will not be valid in later runtime versions. If\nyou don't think you can submit a transaction before the upgrade, it is better to wait and construct\nit after the upgrade takes place."),(0,i.kt)("p",null,"Although upgrading your nodes is generally not necessary to follow an upgrade, we recommend\nfollowing the Polkadot releases and upgrading in a timely manner, especially for high priority or\ncritical releases."),(0,i.kt)("h3",{id:"transaction-version-upgrades"},"Transaction Version Upgrades"),(0,i.kt)("p",null,"Apart the ",(0,i.kt)("inlineCode",{parentName:"p"},"runtime_version")," there is also the ",(0,i.kt)("inlineCode",{parentName:"p"},"transaction_version")," which denotes how to correctly\nencode/decode calls for a given runtime (useful for hardware wallets). The reason\n",(0,i.kt)("inlineCode",{parentName:"p"},"transaction_version")," is separate from ",(0,i.kt)("inlineCode",{parentName:"p"},"runtime_version")," is that it explicitly notes that the call\ninterface is broken/not compatible."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"transaction_version")," is updated in the cases mentioned in the\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/sp_version/struct.RuntimeVersion.html#structfield.transaction_version"},"Substrate docs"),".\nSo when a new transaction version is introduced (during a runtime upgrade), it indicates a breaking\nchange to transaction serialization. In that case, any custom application/tool that constructs &\nsigns transactions should also be updated in order to be compatible with the new transaction\nversion. It is the responsibility of the maintainers of the custom application/tool to keep up with\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"transaction_version")," updates. However, if you do not want to keep monitoring these changes\nyourself, you can also use the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/txwrapper-core"},"txwrapper-core")," tool\nthat handles these breaking changes for you and allows you to construct transactions using the\nfunction names and chain metadata."),(0,i.kt)("h2",{id:"smart-contracts"},"Smart Contracts"),(0,i.kt)("p",null,"The Polkadot Relay Chain does not support smart contracts."),(0,i.kt)("h2",{id:"other-networks"},"Other Networks"),(0,i.kt)("p",null,"Besides running a private network, Polkadot has two other networks where you could test\ninfrastructure prior to deploying to the Polkadot mainnet."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Kusama Canary Network:")," Kusama is Polkadot's cutting-edge cousin. Many risky features are\ndeployed to Kusama prior to making their way into Polkadot."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Westend Testnet:")," Westend is Polkadot's testnet and uses the Polkadot runtime."),(0,i.kt)("h2",{id:"other-faq"},"Other F.A.Q."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Can an account's balance change without a corresponding, on-chain transaction?")),(0,i.kt)("p",null,"No, but not all balance changes are in a ",(0,i.kt)("em",{parentName:"p"},"transaction,")," some are in ",(0,i.kt)("em",{parentName:"p"},"events.")," You will need to run\nan archive node and listen for events and transactions to track all account activity. This\nespecially applies to ",(0,i.kt)("em",{parentName:"p"},"locking")," operations if you are calculating balance as the spendable balance,\ni.e. free balance minus the maximum lock."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},'What chain depth is considered "safe"?')),(0,i.kt)("p",null,"Polkadot uses a deterministic finality mechanism. Once a block is finalized, it cannot be reverted\nexcept by a hard fork. Kusama has had hard forks that had to revert four finalized blocks in order\nto cancel a runtime upgrade. Using a finalized depth of ten blocks should be safe."),(0,i.kt)("p",null,"Note that block production and finality are isolated processes in Polkadot, and the chain can have a\nlong unfinalized head."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Do users need to interact with any smart contracts?")),(0,i.kt)("p",null,"No, users interact directly with the chain's logic."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Does Polkadot have state rent?")),(0,i.kt)("p",null,"No, Polkadot uses the existential deposit to prevent dust accounts and other economic mechanisms\nlike locking or reserving tokens for operations that utilize state."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"What is an external source to see the current chain height?")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS explorer")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkascan.io/"},"Polkascan block explorer")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.subscan.io/"},"Subscan block explorer"))))}m.isMDXComponent=!0},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/48d75399.a1e674d1.js b/assets/js/48d75399.a1e674d1.js new file mode 100644 index 000000000000..56279c8ab824 --- /dev/null +++ b/assets/js/48d75399.a1e674d1.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[4620],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var o=a(74165),n=a(15861),i=a(67294),r=a(87152),s=a(34200),l=a(67425);function h(e,t,a){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var i,l,h,d,c;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 h=new r.U(i),e.next=21,s.G.create({provider:h});case 21:d=e.sent,(c=a.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(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"percentage":(0,l.Percentage)(e,o);break;case"arrayLength":(0,l.ArrayLength)(e,o);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,d=(0,i.useState)(""),p=d[0],u=d[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://statemine-rpc.polkadot.io/";break;case"statemint":e="wss://statemint-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,h(t,a,u);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(n,l,t,u):u(n);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:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,a,o){var n=void 0;if("polkadot"===a||"statemint"===a)n=3;else{if("kusama"!==a&&"statemine"!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");n=6}e=parseFloat(e),o((e=Number.isInteger(e/t[a].precision)?e/t[a].precision+" "+t[a].symbol:(e/t[a].precision).toFixed(n)+" "+t[a].symbol).toString())},Precise:function(e,a,o){o(e=(e=parseFloat(e))/t[a].precision+" "+t[a].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},Percentage:function(e,t){t((e/=1e7).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},17384:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>h,default:()=>k,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"faq",title:"Frequently Asked Questions (FAQs)",sidebar_label:"FAQ",description:"FAQs to Help you Navigate on Polkadot.",keywords:["FAQ","questions"],slug:"../faq"},h=void 0,d={unversionedId:"general/faq",id:"general/faq",title:"Frequently Asked Questions (FAQs)",description:"FAQs to Help you Navigate on Polkadot.",source:"@site/../docs/general/faq.md",sourceDirName:"general",slug:"/faq",permalink:"/docs/faq",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/faq.md",tags:[],version:"current",lastUpdatedBy:"vuittont60",lastUpdatedAt:1697188456,formattedLastUpdatedAt:"Oct 13, 2023",frontMatter:{id:"faq",title:"Frequently Asked Questions (FAQs)",sidebar_label:"FAQ",description:"FAQs to Help you Navigate on Polkadot.",keywords:["FAQ","questions"],slug:"../faq"},sidebar:"docs",previous:{title:"Metadata Explorer",permalink:"/docs/metadata"},next:{title:"Glossary",permalink:"/docs/glossary"}},c={},p=[{value:"Polkadot Launch",id:"polkadot-launch",level:2},{value:"Polkadot Roadmap",id:"polkadot-roadmap",level:2},{value:"Validators",id:"validators",level:2},{value:"How do I apply to be a validator?",id:"how-do-i-apply-to-be-a-validator",level:3},{value:"How are validators rewarded?",id:"how-are-validators-rewarded",level:3},{value:"What is the minimum stake necessary to be elected as an active validator?",id:"what-is-the-minimum-stake-necessary-to-be-elected-as-an-active-validator",level:3},{value:"Why will Polkadot have only 1000 validators while other projects have hundreds of thousands?",id:"why-will-polkadot-have-only-1000-validators-while-other-projects-have-hundreds-of-thousands",level:3},{value:"Relay Chain",id:"relay-chain",level:2},{value:"What is the block time of the Relay Chain?",id:"what-is-the-block-time-of-the-relay-chain",level:3},{value:"Does Polkadot have smart contracts?",id:"does-polkadot-have-smart-contracts",level:3},{value:"How will the Polkadot Relay Chain connect to external chains in the ecosystem?",id:"how-will-the-polkadot-relay-chain-connect-to-external-chains-in-the-ecosystem",level:3},{value:"What is Polkadot's Transactions Per Second (TPS)?",id:"what-is-polkadots-transactions-per-second-tps",level:3},{value:"DOT",id:"dot",level:2},{value:"What is the difference between DOT (old) and new DOT?",id:"what-is-the-difference-between-dot-old-and-new-dot",level:3},{value:"What is the inflation rate of the DOT?",id:"what-is-the-inflation-rate-of-the-dot",level:3},{value:"Why can't crowdloaned DOT be staked?",id:"why-cant-crowdloaned-dot-be-staked",level:3},{value:"Governance",id:"governance",level:2},{value:"What prevents Polkadot governance from failing?",id:"what-prevents-polkadot-governance-from-failing",level:3},{value:"What prevents Polkadot governance from becoming plutocratic?",id:"what-prevents-polkadot-governance-from-becoming-plutocratic",level:3},{value:"Parachains",id:"parachains",level:2},{value:"How do parachain economics work?",id:"how-do-parachain-economics-work",level:3},{value:"Are parachains ephemeral? What happens when a parachain loses the next auction?",id:"are-parachains-ephemeral-what-happens-when-a-parachain-loses-the-next-auction",level:3},{value:"Networking",id:"networking",level:2},{value:"What is libp2p?",id:"what-is-libp2p",level:3},{value:"Does Polkadot use libp2p?",id:"does-polkadot-use-libp2p",level:3},{value:"How does libp2p differ from IPFS?",id:"how-does-libp2p-differ-from-ipfs",level:3},{value:"Kusama",id:"kusama",level:2},{value:"What is the minimum amount of KSM / DOT I can have in my account?",id:"what-is-the-minimum-amount-of-ksm--dot-i-can-have-in-my-account",level:3},{value:"What are the transfer fees for Kusama?",id:"what-are-the-transfer-fees-for-kusama",level:3},{value:"Answered by Gav series",id:"answered-by-gav-series",level:2}],u={toc:p},m="wrapper";function k(e){var t=e.components,a=(0,n.Z)(e,s);return(0,i.kt)(m,(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"This FAQ focuses on technical questions for users interested in developing applications for\nPolkadot. If you have a more general question, you may wish to search for the answer on our support\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Knowledge Base")," or the main\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/faq"},"Polkadot network FAQ"),". If you have a question that is not answered,\nplease feel free to ask on the Polkadot Watercooler\n",(0,i.kt)("a",{parentName:"p",href:"https://app.element.io/#/room/#polkadot-watercooler:web3.foundation"},"Element channel")," or contact\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network"},"Polkadot Support"),".")),(0,i.kt)("h2",{id:"polkadot-launch"},"Polkadot Launch"),(0,i.kt)("p",null,"The Genesis block of the Polkadot network was launched on May 26, 2020 at 15:36:21 UTC, as a Proof\nof Authority (PoA) network, with governance controlled by the single Sudo (super-user) account.\nDuring this time, validators started joining the network and signaling their intention to\nparticipate in consensus."),(0,i.kt)("p",null,"The network evolved to become a Proof of Stake (PoS) network on June 18, 2020. With the chain\nsecured by the decentralized community of validators, the Sudo module was removed on July 20, 2020,\ntransitioning the governance of the chain into the hands of the token (DOT) holders. This is the\npoint where Polkadot became decentralized."),(0,i.kt)("p",null,"The final step of the transition to full-functioning Polkadot was the enabling of transfer\nfunctionality, which occurred on Polkadot at block number 1_205_128 on August 18, 2020, at 16:39\nUTC."),(0,i.kt)("p",null,"On August 21, 2020, Redenomination of DOT occurred. From this date, one DOT (old) equals 100 new\nDOT."),(0,i.kt)("h2",{id:"polkadot-roadmap"},"Polkadot Roadmap"),(0,i.kt)("p",null,"For more information on the Polkadot roadmap please visit the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/technology/#roadmap"},"official Polkadot website"),"."),(0,i.kt)("h2",{id:"validators"},"Validators"),(0,i.kt)("h3",{id:"how-do-i-apply-to-be-a-validator"},"How do I apply to be a validator?"),(0,i.kt)("p",null,"There is no central authority that decides on validators, so there is not per se an ",(0,i.kt)("em",{parentName:"p"},"application"),"\nthat you can fill out. Registering as a validator is permissionless; in order to become one you must\nonly set up a validator node and mark your intention to validate on chain. For detailed instruction\non how to do this you can consult the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-kusama"},"Kusama validator guide")," on validating\nfor Kusama or the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot"},"Polkadot validator guide")," for validating\non Polkadot."),(0,i.kt)("p",null,"However, once you've set up a validator and have registered your intention it does not mean that you\nwill be included in the ",(0,i.kt)("em",{parentName:"p"},"active set")," right away. The validators are elected to the active set based\non the results of an election algorithm known as ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n's method"),".\nPhragm\xe9n's method tries to accomplish two goals: 1) select ",(0,i.kt)("inlineCode",{parentName:"p"},"n")," members from a larger set based on\nstake-weighted votes and 2) equalize the stake backing each validator as much as possible."),(0,i.kt)("p",null,"You will likely want to campaign your validator to the community in order to get more backing. You\nare looking for ",(0,i.kt)("em",{parentName:"p"},"nominators")," that will put up their tokens to increase the stake for your validator.\nFor validators who cannot acquire the minimum stake from the community, Parity and Web3 Foundation\nalso run a joint program called ",(0,i.kt)("a",{parentName:"p",href:"/docs/thousand-validators"},"Thousand Validators")," that will nominate\nvalidators if they apply and fit the requirements."),(0,i.kt)("h3",{id:"how-are-validators-rewarded"},"How are validators rewarded?"),(0,i.kt)("p",null,"Validators are rewarded from the inflation of the Relay Chain, transaction fees, and tips. However,\nthey only take a percentage of the former two. More details can be read on the page for\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"validator payouts"),"."),(0,i.kt)("h3",{id:"what-is-the-minimum-stake-necessary-to-be-elected-as-an-active-validator"},"What is the minimum stake necessary to be elected as an active validator?"),(0,i.kt)("p",null,"The minimum stake that is necessary to be elected as an active validator is dynamic and can change\nover time. It depends not only on how much stake is being put behind each validator, but also the\nsize of the active set and how many validators are waiting in the pool."),(0,i.kt)("p",null,"There are a few ways to estimate the minimum stake."),(0,i.kt)("p",null,"One way can be to navigate to the\n",(0,i.kt)("a",{parentName:"p",href:"https://ipfs.io/ipns/polkadot.dotapps.io/#/staking/targets"},"Polkadot Apps Targets tab"),'. The value\nat the top of the screen saying "Lowest" is the least staked validator. You need at least this\nmuch + 1 to enter the set.'),(0,i.kt)("p",null,"You can also use some tools some to perform estimations."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate-debug-kit/tree/master/offline-election"},"Offline Election"),"\ncan provide exact results of running an election on the current set of validators using the same\nRust code that is ran in Polkadot.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://github.com/w3f/validator-stats"},"Validator stats script")," can give you an estimate that is\nbased on the currently elected set, as well as some statistics about Kusama validators."))),(0,i.kt)("h3",{id:"why-will-polkadot-have-only-1000-validators-while-other-projects-have-hundreds-of-thousands"},"Why will Polkadot have only 1000 validators while other projects have hundreds of thousands?"),(0,i.kt)("p",null,"Polkadot's goal to have 1000 validators is set to be something that is practically achievable in the\nshort term with high confidence of good performance in a live environment. Furthermore, validators\nin Polkadot are not the only stakers, and if we consider the number of stakers that can be possible\non Polkadot the number can scale up to hundreds of thousands. Since validators are performing\ncritical consensus work to maintain the security of the chain including all of its shards, a more\nmodest number of validators is estimated to start. Upon later improvements, such as implementing\nsignature aggregation for finalization messages, the number of validators could reasonably scale up.\nHowever, increasing validators above one thousand remains a goal for later iterations of Polkadot."),(0,i.kt)("p",null,"It is also worth mentioning that one thousand validators is more than the number of validators of\nsimilar PoS chains with comparable levels of economic security as Polkadot. The closest contenders\nare operating with around 150 validators, while Polkadot is already securely running with\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.validatorCount",defaultValue:297,mdxType:"RPC"}),"\n","\nvalidators."),(0,i.kt)("p",null,"Additionally, other projects sometimes have a different definition of ",(0,i.kt)("em",{parentName:"p"},"validator"),' that approximates\nmore closely to remote signing keys without the full operation of a validating node. On Polkadot,\neach validator is running their own validating node and performing full verification of the Relay\nChain, voting on finality, producing blocks in their decided slots, and verifying parachain state\ntransitions. Other projects may consider validators and "validating nodes" as separate entities.'),(0,i.kt)("p",null,"Finally, individuals may participate in the block production process indirectly by\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"nominating")," validators. In this way, individuals who are not running a\nnode can still share in staking rewards."),(0,i.kt)("h2",{id:"relay-chain"},"Relay Chain"),(0,i.kt)("h3",{id:"what-is-the-block-time-of-the-relay-chain"},"What is the block time of the Relay Chain?"),(0,i.kt)("p",null,"Both the Kusama and Polkadot networks are currently operating at a rate of one block every six\nseconds."),(0,i.kt)("p",null,"This may be changed in the future. It may go as low as two to three seconds after optimizations, or\npotentially increase in order to handle the capacity of the parachain networking in a live\nenvironment."),(0,i.kt)("h3",{id:"does-polkadot-have-smart-contracts"},"Does Polkadot have smart contracts?"),(0,i.kt)("p",null,"No - and yes. The Polkadot Relay Chain does not implement smart contracts natively. The reason for\nnot having smart contracts on the Relay Chain is part of the design philosophy for Polkadot that\ndictates that the Relay Chain should be the minimal logic required to accomplish its job."),(0,i.kt)("p",null,"However, Polkadot will be a platform for other chains that ",(0,i.kt)("em",{parentName:"p"},"do")," implement smart contracts. It's\npossible for parachains to enable smart contract functionality and then benefit from the security\nand interoperability features of Polkadot. Additionally, existing smart contract chains can connect\nto Polkadot as a parachain, or via a bridge."),(0,i.kt)("p",null,"While the Polkadot Relay Chain does not implement smart contracts directly, undoubtedly there will\nbe parachains that do. So it's better to say that the Polkadot ",(0,i.kt)("em",{parentName:"p"},"ecosystem"),' has smart contracts\nversus "Polkadot has smart contracts."'),(0,i.kt)("h3",{id:"how-will-the-polkadot-relay-chain-connect-to-external-chains-in-the-ecosystem"},"How will the Polkadot Relay Chain connect to external chains in the ecosystem?"),(0,i.kt)("p",null,"One of the cornerstone interoperability technologies being researched and developed for deployment\non Polkadot is cross-chain bridges. Bridges come in a variety of flavors with varying levels of\ntrust associated with them. Polkadot is predominantly researching the trust-minimized flavor that\nimposes economic costs on the operators of the bridge, and therefore makes it economically secure.\nBridge efforts are being worked on in concert with other projects in the ecosystem. Eventually,\nthere will be bridges between Polkadot and most of the other major chains."),(0,i.kt)("h3",{id:"what-is-polkadots-transactions-per-second-tps"},"What is Polkadot's Transactions Per Second (TPS)?"),(0,i.kt)("p",null,"Polkadot is a heterogeneous sharded network comprising a relay chain and numerous parachains, which\nare all individual blockchains built on ",(0,i.kt)("a",{parentName:"p",href:"https://substrate.io/"},"Substrate")," executing in parallel.\nHence, the Transactions Per Second (TPS) of Polkadot is a number that encompasses all the\ntransactions on the relay chain as well as parachains. As the transactions on these Substrate-based\nblockchains are ",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/build/tx-weights-fees/"},"weights based"),", it makes sense to\nuse TPS as a measure for the network performance if all the transactions carry the same weight.\n",(0,i.kt)("a",{parentName:"p",href:"https://twitter.com/gavofyork/status/1270025498580656134"},"Performance benchmark tests")," show that\nSubstrate-based blockchains can achieve over 1000 TPS for balance transfer transactions. Assuming\nPolkadot is running over 100 parachains; the projected TPS is well over 100,000. With\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-async-backing"},"asynchronous backing upgrade"),", the TPS is expected to increase\ntenfold to 1,000,000."),(0,i.kt)("p",null,"It is essential to realize that TPS is inherently a subjective measurement with numerous factors\nthat can contribute to it. It's hard to gauge the usefulness of TPS in isolation (when compared to\nother chains), as it depends on what a transaction does for a particular network. To view how\nPolkadot measures TPS see the Polkadot sTPS\n(",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-stps/blob/main/docs/introduction.md"},"Standard Transaction Per Second"),")\nto consider precisely how benchmarking was performed for Polkadot."),(0,i.kt)("h2",{id:"dot"},"DOT"),(0,i.kt)("h3",{id:"what-is-the-difference-between-dot-old-and-new-dot"},"What is the difference between DOT (old) and new DOT?"),(0,i.kt)("p",null,"The DOT (old) unit on Polkadot was at twelve decimal places, otherwise known as 1e12 Plancks. On 21\nAugust, 2020, Denomination Day, the DOT (old) value was redenominated to 1e10 (10_000_000_000, or\nten billion) Plancks, meaning that the new DOT was valued at ten decimal places. Following the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-redenomination"},"redenomination"),", the new DOT is called DOT."),(0,i.kt)("h3",{id:"what-is-the-inflation-rate-of-the-dot"},"What is the inflation rate of the DOT?"),(0,i.kt)("p",null,"The inflation rate is approximately 10% per year."),(0,i.kt)("p",null,"A portion of the inflation is rewarded to validators for performing their duties, while another\nportion may go directly to the treasury. The exact percentage that goes into both varies and is\nbased on the amount of DOT that are staked. Please see the article on\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking/#inflation"},"inflation")," for more information."),(0,i.kt)("h3",{id:"why-cant-crowdloaned-dot-be-staked"},"Why can't crowdloaned DOT be staked?"),(0,i.kt)("p",null,"DOTs contributed to a successful crowdloan campaign by a parachain are bonded for the entire lease\nperiod, which is two years on Polkadot. The crowdloaned DOT cannot be used for any other DOT utility\nfunctionalities like staking and democracy. In exchange to the lost staking rewards or liquidity of\nDOTs, the parachain team may offer rewards to the contributor."),(0,i.kt)("p",null,"The utility of crowdloaned DOT is to provide a lease for a parachain. The utility of staked DOT is\nto secure the network through a reward/slash mechanism. Allowing crowdloaned DOT to be staked\nresults in complex consequences like applying a slash on crowdloaned DOT that was meant to be bonded\nfor the entire lease period of a parachain. In a way, the inaccessibility of crowdloaned DOTs and\nthe lack of staking rewards for the entire lease duration encourages the contributors to back\nprojects that are valuable to the ecosystem."),(0,i.kt)("h2",{id:"governance"},"Governance"),(0,i.kt)("h3",{id:"what-prevents-polkadot-governance-from-failing"},"What prevents Polkadot governance from failing?"),(0,i.kt)("p",null,"Polkadot's governance has already been shown to work. Examples can be found in the runtime upgrades\nthat have successfully taken place through on the testnets as well as in a real economic environment\non ",(0,i.kt)("a",{parentName:"p",href:"https://guide.kusama.network"},"Kusama")," and Polkadot itself."),(0,i.kt)("p",null,"It is fair to say that the field of on-chain blockchain governance is still new, and no one can\nclaim to know exactly what the optimal version of on-chain governance is yet. However, Polkadot\ntakes a brave step forward in pioneering thought-through mechanisms for evolving a blockchain."),(0,i.kt)("p",null,"Blockchains need a method to adapt and evolve. Therefore, an on-chain governance system was\nnecessary for the long-term success of Polkadot. Ultimately, it is the token holders that are\nresponsible for preventing Polkadot's governance from failing by using their economic value and\nconviction to sway the progression of the protocol."),(0,i.kt)("h3",{id:"what-prevents-polkadot-governance-from-becoming-plutocratic"},"What prevents Polkadot governance from becoming plutocratic?"),(0,i.kt)("p",null,"A savvy reader might have noticed that the answer to the previous question endowed the token holder\nwith the ultimate responsibility to ensure that Polkadot's governance does not fail. By following\nthe train of this assertion, one might assume that Polkadot's governance is susceptible to becoming\nruled by a few large token holders (called ",(0,i.kt)("em",{parentName:"p"},"whales")," in trading parlance) and therefore become a mere\nplutocracy (rule of the rich)."),(0,i.kt)("p",null,"There are several other mechanisms that are built-in to the governance system to resist this\nplutocratic tendency. One of these mechanisms is called conviction voting, and imbues greater voting\npower to token holders who are willing to lock their tokens on the protocol for longer lengths of\ntime. Longer lock-ups display ",(0,i.kt)("em",{parentName:"p"},"conviction")," in a vote. Conviction voting could allow a highly\ndetermined minority to overrule the vote of an apathetic majority in certain situations. Another\nmechanism is known as Adaptive Quorum Biasing. This makes proposals have a varying threshold for\napproval or rejection based on what part of the governance protocol the proposal originated in. For\ndetails on the subtleties of Polkadot's governance system, please see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-governance"},"governance page"),"."),(0,i.kt)("h2",{id:"parachains"},"Parachains"),(0,i.kt)("h3",{id:"how-do-parachain-economics-work"},"How do parachain economics work?"),(0,i.kt)("p",null,"Parachains have the flexibility to implement their own monetary system or incentive structure for\ncollators. However, this is not strictly necessary. Since the collator's job is to continue to give\nrecent state transitions to the validators on the Relay Chain who validate each transition, the\nsecurity of the parachain and the Polkadot network is completely separate from parachain economics.\nParachains need collators to continue to progress, so it wouldn't be unreasonable to see them\nincentivize collator nodes in some way, but the specific mechanism is completely up to parachain\nimplementers."),(0,i.kt)("h3",{id:"are-parachains-ephemeral-what-happens-when-a-parachain-loses-the-next-auction"},"Are parachains ephemeral? What happens when a parachain loses the next auction?"),(0,i.kt)("p",null,"Parachains are not ephemeral. As long as someone is keeping the data for a parachain, the parachain\ncan move between being a parachain, a parathread, or a separate sovereign chain at different points\nof its lifetime. Especially with parathreads, parachains can be decommissioned to only produce\nblocks when their usage and throughput makes it necessary."),(0,i.kt)("p",null,"When a parachain loses an auction for renewal, that parachain has a few options. In most cases,\nbecoming a parathread instead would be a suitable choice. Parathreads are still secured by the Relay\nChain, but don't need to hold a parachain slot and can produce a block when its economically\nfeasible for them. For more on parachains please see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains"},"parachains page")," and for more on parathreads see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parathreads"},"the parathreads page"),"."),(0,i.kt)("h2",{id:"networking"},"Networking"),(0,i.kt)("h3",{id:"what-is-libp2p"},"What is libp2p?"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://libp2p.io"},"Libp2p")," is a modular and extensible networking stack that is used by IPFS,\nSubstrate, and many other projects. It is a collection of peer-to-peer protocols for finding peers\nand connecting to them. Its modules have logic for content routing, peer routing, peer discovery,\ndifferent transports, and NAT traversals. It is intended to be used by applications for building\nlarge scale peer-to-peer networks by only selecting the parts of the protocol suite that are needed."),(0,i.kt)("p",null,"The Rust implementation of the specification was built and primarily maintained by a team of\ncontributors at Parity Technologies. The Go and JavaScript versions are maintained by Protocol Labs\nas well as community contributors. A ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/status-im/nim-libp2p"},"Nim")," version of the\nlibrary also exists. Libp2p as a whole is an open source project that is actively developed and\nexpanded on various code repositories hosted on ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/libp2p"},"their GitHub"),"."),(0,i.kt)("h3",{id:"does-polkadot-use-libp2p"},"Does Polkadot use libp2p?"),(0,i.kt)("p",null,"Yes, since Polkadot is built with Substrate. Substrate uses a networking protocol that is based on\nlibp2p (specifically the Rust libp2p library). However, Substrate uses a mix of standard libp2p\nprotocols and protocols that are homegrown and not official libp2p standards. Of the standards\nprotocols, those which are shared with other implementations of libp2p such as IPFS, are\nconnection-checking (ping), asking for information on a peer (identity), and Kademlia random walks\n(kad)."),(0,i.kt)("p",null,"Of the protocols that are custom to Substrate, there are the legacy Substrate stream, a\nrequest-response for getting information on blocks (sync), a light client protocol, a notification\nprotocol for transactions, and block announcement. For detailed information on how Substrate uses\nlibp2p and the standard and custom protocols, please see the\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/sc_network/index.html"},"networking documentation"),"."),(0,i.kt)("h3",{id:"how-does-libp2p-differ-from-ipfs"},"How does libp2p differ from IPFS?"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"https://ipfs.io/"},"Interplanetary File System"),' (IPFS) is a peer-to-peer hypermedia protocol used\nprimarily for storage of files. It allows one to upload a file onto the network and share it with\nits content addressable URI. IPFS, like Substrate, is an application of libp2p and exists higher on\nthe technology stack. Although both IPFS and Substrate use libp2p, it cannot be said that Substrate\n"uses" IPFS since besides sharing the underlying library for networking there is no native\nintegration between the two applications.'),(0,i.kt)("h2",{id:"kusama"},"Kusama"),(0,i.kt)("h3",{id:"what-is-the-minimum-amount-of-ksm--dot-i-can-have-in-my-account"},"What is the minimum amount of KSM / DOT I can have in my account?"),(0,i.kt)("p",null,"Please see information about ",(0,i.kt)("a",{parentName:"p",href:"/docs/build-protocol-info"},"Existential Deposits"),"."),(0,i.kt)("h3",{id:"what-are-the-transfer-fees-for-kusama"},"What are the transfer fees for Kusama?"),(0,i.kt)("p",null,"It is important to note that the cost of transferring KSM is dynamic. Currently, the minimum cost of\ntransferring KSM is 0.01 KSM (the base fee), although this can be changed via governance. However,\nactual transaction fees will vary based on a variety of factors. Specifically, fee calculation\nfollows the following formula:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"base_fee + (tx_length * length_fee) + WeightToFee(weight)\n")),(0,i.kt)("p",null,"Please see the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/how-to-guides/weights/calculate-fees/"},"fee calculation")," page in\nthe Substrate documentation for more detailed information."),(0,i.kt)("h2",{id:"answered-by-gav-series"},"Answered by Gav series"),(0,i.kt)("p",null,'The "Answered by Gav" series is a collection of posts uploaded to Reddit of questions that have been\nasked in the Polkadot Watercooler Riot channel and answered by Polkadot founder Gavin Wood.'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/b87d96/answered_by_gav_reason_for_using_asynchronous/"},"Reason for using asynchronous rather than synchronous communication? Difference in terms of TPS?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/b87awr/answered_by_gav_how_exactly_do_validators_in_an/"},"How exactly do validators in an ETH parachain keep moving around and how is communication between zones trustless?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/b87bua/answered_by_gav_what_are_the_main_issues_with/"},"What are the main issues with Bitcoin integration and will it ever be possible? Same problem with other POW chains? Is Polkadot only going to work with POS chains? How is it trust-less in comparison to Cosmos though?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/b87cjz/answered_by_gav_what_are_the_current_thoughts/"},"What are the current thoughts around governance especially since projects have to be voted in to receive the parachains security?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/b87ds8/answered_by_gav_also_is_there_any_detailed/"},"Also is there any detailed overview of how exactly a token transfer from ETH could be exchanged with another chain's currency?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/bcqrx9/answered_by_gav_can_i_run_multiple_validators/"},"Can I run multiple Validators with the same Session Key?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/bcqwit/answered_by_gav_how_to_tackle_the_concentration/"},"How to tackle the concentration risk of Validators in data centers?"))))}k.isMDXComponent=!0},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/48d75399.d02a17da.js b/assets/js/48d75399.d02a17da.js deleted file mode 100644 index c1b7c43c6a56..000000000000 --- a/assets/js/48d75399.d02a17da.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[4620],{47940:(e,t,a)=>{"use strict";a.d(t,{Z:()=>p});var o=a(74165),n=a(15861),i=a(67294),r=a(87152),s=a(34200),l=a(67425);function h(e,t,a){return d.apply(this,arguments)}function d(){return(d=(0,n.Z)((0,o.Z)().mark((function e(t,a,n){var i,l,h,d,c;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 h=new r.U(i),e.next=21,s.G.create({provider:h});case 21:d=e.sent,(c=a.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=c[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return l=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return l=(l=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+a);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(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"percentage":(0,l.Percentage)(e,o);break;case"arrayLength":(0,l.ArrayLength)(e,o);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,d=(0,i.useState)(""),p=d[0],u=d[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://statemine-rpc.polkadot.io/";break;case"statemint":e="wss://statemint-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,h(t,a,u);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?c(n,l,t,u):u(n);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:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,a,o){var n=void 0;if("polkadot"===a||"statemint"===a)n=3;else{if("kusama"!==a&&"statemine"!==a)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");n=6}e=parseFloat(e),o((e=Number.isInteger(e/t[a].precision)?e/t[a].precision+" "+t[a].symbol:(e/t[a].precision).toFixed(n)+" "+t[a].symbol).toString())},Precise:function(e,a,o){o(e=(e=parseFloat(e))/t[a].precision+" "+t[a].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},Percentage:function(e,t){t((e/=1e7).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},17384:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>h,default:()=>k,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var o=a(87462),n=a(63366),i=(a(67294),a(3905)),r=a(47940),s=["components"],l={id:"faq",title:"Frequently Asked Questions (FAQs)",sidebar_label:"FAQ",description:"FAQs to Help you Navigate on Polkadot.",keywords:["FAQ","questions"],slug:"../faq"},h=void 0,d={unversionedId:"general/faq",id:"general/faq",title:"Frequently Asked Questions (FAQs)",description:"FAQs to Help you Navigate on Polkadot.",source:"@site/../docs/general/faq.md",sourceDirName:"general",slug:"/faq",permalink:"/docs/faq",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/general/faq.md",tags:[],version:"current",lastUpdatedBy:"bader y",lastUpdatedAt:1694180446,formattedLastUpdatedAt:"Sep 8, 2023",frontMatter:{id:"faq",title:"Frequently Asked Questions (FAQs)",sidebar_label:"FAQ",description:"FAQs to Help you Navigate on Polkadot.",keywords:["FAQ","questions"],slug:"../faq"},sidebar:"docs",previous:{title:"Metadata Explorer",permalink:"/docs/metadata"},next:{title:"Glossary",permalink:"/docs/glossary"}},c={},p=[{value:"Polkadot Launch",id:"polkadot-launch",level:2},{value:"Polkadot Roadmap",id:"polkadot-roadmap",level:2},{value:"Validators",id:"validators",level:2},{value:"How do I apply to be a validator?",id:"how-do-i-apply-to-be-a-validator",level:3},{value:"How are validators rewarded?",id:"how-are-validators-rewarded",level:3},{value:"What is the minimum stake necessary to be elected as an active validator?",id:"what-is-the-minimum-stake-necessary-to-be-elected-as-an-active-validator",level:3},{value:"Why will Polkadot have only 1000 validators while other projects have hundreds of thousands?",id:"why-will-polkadot-have-only-1000-validators-while-other-projects-have-hundreds-of-thousands",level:3},{value:"Relay Chain",id:"relay-chain",level:2},{value:"What is the block time of the Relay Chain?",id:"what-is-the-block-time-of-the-relay-chain",level:3},{value:"Does Polkadot have smart contracts?",id:"does-polkadot-have-smart-contracts",level:3},{value:"How will the Polkadot Relay Chain connect to external chains in the ecosystem?",id:"how-will-the-polkadot-relay-chain-connect-to-external-chains-in-the-ecosystem",level:3},{value:"What is Polkadot's Transactions Per Second (TPS)?",id:"what-is-polkadots-transactions-per-second-tps",level:3},{value:"DOT",id:"dot",level:2},{value:"What is the difference between DOT (old) and new DOT?",id:"what-is-the-difference-between-dot-old-and-new-dot",level:3},{value:"What is the inflation rate of the DOT?",id:"what-is-the-inflation-rate-of-the-dot",level:3},{value:"Why can't crowdloaned DOT be staked?",id:"why-cant-crowdloaned-dot-be-staked",level:3},{value:"Governance",id:"governance",level:2},{value:"What prevents Polkadot governance from failing?",id:"what-prevents-polkadot-governance-from-failing",level:3},{value:"What prevents Polkadot governance from becoming plutocratic?",id:"what-prevents-polkadot-governance-from-becoming-plutocratic",level:3},{value:"Parachains",id:"parachains",level:2},{value:"How do parachain economics work?",id:"how-do-parachain-economics-work",level:3},{value:"Are parachains ephemeral? What happens when a parachain loses the next auction?",id:"are-parachains-ephemeral-what-happens-when-a-parachain-loses-the-next-auction",level:3},{value:"Networking",id:"networking",level:2},{value:"What is libp2p?",id:"what-is-libp2p",level:3},{value:"Does Polkadot use libp2p?",id:"does-polkadot-use-libp2p",level:3},{value:"How does libp2p differ from IPFS?",id:"how-does-libp2p-differ-from-ipfs",level:3},{value:"Kusama",id:"kusama",level:2},{value:"What is the minimum amount of KSM / DOT I can have in my account?",id:"what-is-the-minimum-amount-of-ksm--dot-i-can-have-in-my-account",level:3},{value:"What are the transfer fees for Kusama?",id:"what-are-the-transfer-fees-for-kusama",level:3},{value:"Answered by Gav series",id:"answered-by-gav-series",level:2}],u={toc:p},m="wrapper";function k(e){var t=e.components,a=(0,n.Z)(e,s);return(0,i.kt)(m,(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"This FAQ focuses on technical questions for users interested in developing applications for\nPolkadot. If you have a more general question, you may wish to search for the answer on our support\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/home"},"Knowledge Base")," or the main\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/faq"},"Polkadot network FAQ"),". If you have a question that is not answered,\nplease feel free to ask on the Polkadot Watercooler\n",(0,i.kt)("a",{parentName:"p",href:"https://app.element.io/#/room/#polkadot-watercooler:web3.foundation"},"Element channel")," or contact\n",(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network"},"Polkadot Support"),".")),(0,i.kt)("h2",{id:"polkadot-launch"},"Polkadot Launch"),(0,i.kt)("p",null,"The Genesis block of the Polkadot network was launched on May 26, 2020 at 15:36:21 UTC, as a Proof\nof Authority (PoA) network, with governance controlled by the single Sudo (super-user) account.\nDuring this time, validators started joining the network and signaling their intention to\nparticipate in consensus."),(0,i.kt)("p",null,"The network evolved to become a Proof of Stake (PoS) network on June 18, 2020. With the chain\nsecured by the decentralized community of validators, the Sudo module was removed on July 20, 2020,\ntransitioning the governance of the chain into the hands of the token (DOT) holders. This is the\npoint where Polkadot became decentralized."),(0,i.kt)("p",null,"The final step of the transition to full-functioning Polkadot was the enabling of transfer\nfunctionality, which occurred on Polkadot at block number 1_205_128 on August 18, 2020, at 16:39\nUTC."),(0,i.kt)("p",null,"On August 21, 2020, Redenomination of DOT occurred. From this date, one DOT (old) equals 100 new\nDOT."),(0,i.kt)("h2",{id:"polkadot-roadmap"},"Polkadot Roadmap"),(0,i.kt)("p",null,"For more information on the Polkadot roadmap please visit the\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/technology/#roadmap"},"official Polkadot website"),"."),(0,i.kt)("h2",{id:"validators"},"Validators"),(0,i.kt)("h3",{id:"how-do-i-apply-to-be-a-validator"},"How do I apply to be a validator?"),(0,i.kt)("p",null,"There is no central authority that decides on validators, so there is not per se an ",(0,i.kt)("em",{parentName:"p"},"application"),"\nthat you can fill out. Registering as a validator is permissionless; in order to become one you must\nonly set up a validator node and mark your intention to validate on chain. For detailed instruction\non how to do this you can consult the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-kusama"},"Kusama validator guide")," on validating\nfor Kusama or the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-how-to-validate-polkadot"},"Polkadot validator guide")," for validating\non Polkadot."),(0,i.kt)("p",null,"However, once you've set up a validator and have registered your intention it does not mean that you\nwill be included in the ",(0,i.kt)("em",{parentName:"p"},"active set")," right away. The validators are elected to the active set based\non the results of an election algorithm known as ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"Phragm\xe9n's method"),".\nPhragm\xe9n's method tries to accomplish two goals: 1) select ",(0,i.kt)("inlineCode",{parentName:"p"},"n")," members from a larger set based on\nstake-weighted votes and 2) equalize the stake backing each validator as much as possible."),(0,i.kt)("p",null,"You will likely want to campaign your validator to the community in order to get more backing. You\nare looking for ",(0,i.kt)("em",{parentName:"p"},"nominators")," that will put up their tokens to increase the stake for your validator.\nFor validators who cannot acquire the minimum stake from the community, Parity and Web3 Foundation\nalso run a joint program called ",(0,i.kt)("a",{parentName:"p",href:"/docs/thousand-validators"},"Thousand Validators")," that will nominate\nvalidators if they apply and fit the requirements."),(0,i.kt)("h3",{id:"how-are-validators-rewarded"},"How are validators rewarded?"),(0,i.kt)("p",null,"Validators are rewarded from the inflation of the Relay Chain, transaction fees, and tips. However,\nthey only take a percentage of the former two. More details can be read on the page for\n",(0,i.kt)("a",{parentName:"p",href:"/docs/maintain-guides-validator-payout"},"validator payouts"),"."),(0,i.kt)("h3",{id:"what-is-the-minimum-stake-necessary-to-be-elected-as-an-active-validator"},"What is the minimum stake necessary to be elected as an active validator?"),(0,i.kt)("p",null,"The minimum stake that is necessary to be elected as an active validator is dynamic and can change\nover time. It depends not only on how much stake is being put behind each validator, but also the\nsize of the active set and how many validators are waiting in the pool."),(0,i.kt)("p",null,"There are a few ways to estimate the minimum stake."),(0,i.kt)("p",null,"One way can be to navigate to the\n",(0,i.kt)("a",{parentName:"p",href:"https://ipfs.io/ipns/polkadot.dotapps.io/#/staking/targets"},"Polkadot Apps Targets tab"),'. The value\nat the top of the screen saying "Lowest" is the least staked validator. You need at least this\nmuch + 1 to enter the set.'),(0,i.kt)("p",null,"You can also use some tools some to perform estimations."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate-debug-kit/tree/master/offline-election"},"Offline Election"),"\ncan provide exact results of running an election on the current set of validators using the same\nRust code that is ran in Polkadot.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://github.com/w3f/validator-stats"},"Validator stats script")," can give you an estimate that is\nbased on the currently elected set, as well as some statistics about Kusama validators."))),(0,i.kt)("h3",{id:"why-will-polkadot-have-only-1000-validators-while-other-projects-have-hundreds-of-thousands"},"Why will Polkadot have only 1000 validators while other projects have hundreds of thousands?"),(0,i.kt)("p",null,"Polkadot's goal to have 1000 validators is set to be something that is practically achievable in the\nshort term with high confidence of good performance in a live environment. Furthermore, validators\nin Polkadot are not the only stakers, and if we consider the number of stakers that can be possible\non Polkadot the number can scale up to hundreds of thousands. Since validators are performing\ncritical consensus work to maintain the security of the chain including all of its shards, a more\nmodest number of validators is estimated to start. Upon later improvements, such as implementing\nsignature aggregation for finalization messages, the number of validators could reasonably scale up.\nHowever, increasing validators above one thousand remains a goal for later iterations of Polkadot."),(0,i.kt)("p",null,"It is also worth mentioning that one thousand validators is more than the number of validators of\nsimilar PoS chains with comparable levels of economic security as Polkadot. The closest contenders\nare operating with around 150 validators, while Polkadot is already securely running with\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.validatorCount",defaultValue:297,mdxType:"RPC"}),"\n","\nvalidators."),(0,i.kt)("p",null,"Additionally, other projects sometimes have a different definition of ",(0,i.kt)("em",{parentName:"p"},"validator"),' that approximates\nmore closely to remote signing keys without the full operation of a validating node. On Polkadot,\neach validator is running their own validating node and performing full verification of the Relay\nChain, voting on finality, producing blocks in their decided slots, and verifying parachain state\ntransitions. Other projects may consider validators and "validating nodes" as separate entities.'),(0,i.kt)("p",null,"Finally, individuals may participate in the block production process indirectly by\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator"},"nominating")," validators. In this way, individuals who are not running a\nnode can still share in staking rewards."),(0,i.kt)("h2",{id:"relay-chain"},"Relay Chain"),(0,i.kt)("h3",{id:"what-is-the-block-time-of-the-relay-chain"},"What is the block time of the Relay Chain?"),(0,i.kt)("p",null,"Both the Kusama and Polkadot networks are currently operating at a rate of one block every six\nseconds."),(0,i.kt)("p",null,"This may be changed in the future. It may go as low as two to three seconds after optimizations, or\npotentially increase in order to handle the capacity of the parachain networking in a live\nenvironment."),(0,i.kt)("h3",{id:"does-polkadot-have-smart-contracts"},"Does Polkadot have smart contracts?"),(0,i.kt)("p",null,"No - and yes. The Polkadot Relay Chain does not implement smart contracts natively. The reason for\nnot having smart contracts on the Relay Chain is part of the design philosophy for Polkadot that\ndictates that the Relay Chain should be the minimal logic required to accomplish its job."),(0,i.kt)("p",null,"However, Polkadot will be a platform for other chains that ",(0,i.kt)("em",{parentName:"p"},"do")," implement smart contracts. It's\npossible for parachains to enable smart contract functionality and then benefit from the security\nand interoperability features of Polkadot. Additionally, existing smart contract chains can connect\nto Polkadot as a parachain, or via a bridge."),(0,i.kt)("p",null,"While the Polkadot Relay Chain does not implement smart contracts directly, undoubtedly there will\nbe parachains that do. So it's better to say that the Polkadot ",(0,i.kt)("em",{parentName:"p"},"ecosystem"),' has smart contracts\nversus "Polkadot has smart contracts."'),(0,i.kt)("h3",{id:"how-will-the-polkadot-relay-chain-connect-to-external-chains-in-the-ecosystem"},"How will the Polkadot Relay Chain connect to external chains in the ecosystem?"),(0,i.kt)("p",null,"One of the cornerstone interoperability technologies being researched and developed for deployment\non Polkadot is cross-chain bridges. Bridges come in a variety of flavors with varying levels of\ntrust associated with them. Polkadot is predominantly researching the trust-minimized flavor that\nimposes economic costs on the operators of the bridge, and therefore makes it economically secure.\nBridge efforts are being worked on in concert with other projects in the ecosystem. Eventually,\nthere will be bridges between Polkadot and most of the other major chains."),(0,i.kt)("h3",{id:"what-is-polkadots-transactions-per-second-tps"},"What is Polkadot's Transactions Per Second (TPS)?"),(0,i.kt)("p",null,"Polkadot is a heterogeneous sharded network comprising a relay chain and numerous parachains, which\nare all individual blockchains built on ",(0,i.kt)("a",{parentName:"p",href:"https://substrate.io/"},"Substrate")," executing in parallel.\nHence, the Transactions Per Second (TPS) of Polkadot is a number that encompasses all the\ntransactions on the relay chain as well as parachains. As the transactions on these Substrate-based\nblockchains are ",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/build/tx-weights-fees/"},"weights based"),", it makes sense to\nuse TPS as a measure for the network performance if all the transactions carry the same weight.\n",(0,i.kt)("a",{parentName:"p",href:"https://twitter.com/gavofyork/status/1270025498580656134"},"Performance benchmark tests")," show that\nSubstrate-based blockchains can achieve over 1000 TPS for balance transfer transactions. Assuming\nPolkadot is running over 100 parachains; the projected TPS is well over 100,000. With\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-async-backing"},"asynchronous backing upgrade"),", the TPS is expected to increase\ntenfold to 1,000,000."),(0,i.kt)("p",null,"It is essential to realize that TPS is inherently a subjective measurement with numerous factors\nthat can contribute to it. It's hard to gauge the usefulness of TPS in isolation (when compared to\nother chains), as it depends on what a transaction does for a particular network. To view how\nPolkadot measures TPS see the Polkadot sTPS\n(",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot-stps/blob/main/docs/introduction.md"},"Standard Transaction Per Second"),")\nto consider precisely how benchmarking was performed for Polkadot."),(0,i.kt)("h2",{id:"dot"},"DOT"),(0,i.kt)("h3",{id:"what-is-the-difference-between-dot-old-and-new-dot"},"What is the difference between DOT (old) and new DOT?"),(0,i.kt)("p",null,"The DOT (old) unit on Polkadot was at twelve decimal places, otherwise known as 1e12 Plancks. On 21\nAugust, 2020, Denomination Day, the DOT (old) value was redenominated to 1e10 (10_000_000_000, or\nten billion) Plancks, meaning that the new DOT was valued at ten decimal places. Following the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-redenomination"},"redenomination"),", the new DOT is called DOT."),(0,i.kt)("h3",{id:"what-is-the-inflation-rate-of-the-dot"},"What is the inflation rate of the DOT?"),(0,i.kt)("p",null,"The inflation rate is approximately 10% per year."),(0,i.kt)("p",null,"A portion of the inflation is rewarded to validators for performing their duties, while another\nportion may go directly to the treasury. The exact percentage that goes into both varies and is\nbased on the amount of DOT that are staked. Please see the article on\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking/#inflation"},"inflation")," for more information."),(0,i.kt)("h3",{id:"why-cant-crowdloaned-dot-be-staked"},"Why can't crowdloaned DOT be staked?"),(0,i.kt)("p",null,"DOTs contributed to a sucessful crowdloan campaign by a parachain are bonded for the entire lease\nperiod, which is two years on Polkadot. The crowdloaned DOT cannot be used for any other DOT utility\nfunctionalities like staking and democracy. In exchange to the lost staking rewards or liquidity of\nDOTs, the parachain team may offer rewards to the contributor."),(0,i.kt)("p",null,"The utility of crowdloaned DOT is to provide a lease for a parachain. The utility of staked DOT is\nto secure the network through a reward/slash mechanism. Allowing crowdloaned DOT to be staked\nresults in complex consequences like applying a slash on crowdloaned DOT that was meant to be bonded\nfor the entire lease period of a parachain. In a way, the inaccessibility of crowdloaned DOTs and\nthe lack of staking rewards for the entire lease duration encourages the contributors to back\nprojects that are valuable to the ecosystem."),(0,i.kt)("h2",{id:"governance"},"Governance"),(0,i.kt)("h3",{id:"what-prevents-polkadot-governance-from-failing"},"What prevents Polkadot governance from failing?"),(0,i.kt)("p",null,"Polkadot's governance has already been shown to work. Examples can be found in the runtime upgrades\nthat have successfully taken place through on the testnets as well as in a real economic environment\non ",(0,i.kt)("a",{parentName:"p",href:"https://guide.kusama.network"},"Kusama")," and Polkadot itself."),(0,i.kt)("p",null,"It is fair to say that the field of on-chain blockchain governance is still new, and no one can\nclaim to know exactly what the optimal version of on-chain governance is yet. However, Polkadot\ntakes a brave step forward in pioneering thought-through mechanisms for evolving a blockchain."),(0,i.kt)("p",null,"Blockchains need a method to adapt and evolve. Therefore, an on-chain governance system was\nnecessary for the long-term success of Polkadot. Ultimately, it is the token holders that are\nresponsible for preventing Polkadot's governance from failing by using their economic value and\nconviction to sway the progression of the protocol."),(0,i.kt)("h3",{id:"what-prevents-polkadot-governance-from-becoming-plutocratic"},"What prevents Polkadot governance from becoming plutocratic?"),(0,i.kt)("p",null,"A savvy reader might have noticed that the answer to the previous question endowed the token holder\nwith the ultimate responsibility to ensure that Polkadot's governance does not fail. By following\nthe train of this assertion, one might assume that Polkadot's governance is susceptible to becoming\nruled by a few large token holders (called ",(0,i.kt)("em",{parentName:"p"},"whales")," in trading parlance) and therefore become a mere\nplutocracy (rule of the rich)."),(0,i.kt)("p",null,"There are several other mechanisms that are built-in to the governance system to resist this\nplutocratic tendency. One of these mechanisms is called conviction voting, and imbues greater voting\npower to token holders who are willing to lock their tokens on the protocol for longer lengths of\ntime. Longer lock-ups display ",(0,i.kt)("em",{parentName:"p"},"conviction")," in a vote. Conviction voting could allow a highly\ndetermined minority to overrule the vote of an apathetic majority in certain situations. Another\nmechanism is known as Adaptive Quorum Biasing. This makes proposals have a varying threshold for\napproval or rejection based on what part of the governance protocol the proposal originated in. For\ndetails on the subtleties of Polkadot's governance system, please see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-governance"},"governance page"),"."),(0,i.kt)("h2",{id:"parachains"},"Parachains"),(0,i.kt)("h3",{id:"how-do-parachain-economics-work"},"How do parachain economics work?"),(0,i.kt)("p",null,"Parachains have the flexibility to implement their own monetary system or incentive structure for\ncollators. However, this is not strictly necessary. Since the collator's job is to continue to give\nrecent state transitions to the validators on the Relay Chain who validate each transition, the\nsecurity of the parachain and the Polkadot network is completely separate from parachain economics.\nParachains need collators to continue to progress, so it wouldn't be unreasonable to see them\nincentivize collator nodes in some way, but the specific mechanism is completely up to parachain\nimplementers."),(0,i.kt)("h3",{id:"are-parachains-ephemeral-what-happens-when-a-parachain-loses-the-next-auction"},"Are parachains ephemeral? What happens when a parachain loses the next auction?"),(0,i.kt)("p",null,"Parachains are not ephemeral. As long as someone is keeping the data for a parachain, the parachain\ncan move between being a parachain, a parathread, or a separate sovereign chain at different points\nof its lifetime. Especially with parathreads, parachains can be decommissioned to only produce\nblocks when their usage and throughput makes it necessary."),(0,i.kt)("p",null,"When a parachain loses an auction for renewal, that parachain has a few options. In most cases,\nbecoming a parathread instead would be a suitable choice. Parathreads are still secured by the Relay\nChain, but don't need to hold a parachain slot and can produce a block when its economically\nfeasible for them. For more on parachains please see the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains"},"parachains page")," and for more on parathreads see\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parathreads"},"the parathreads page"),"."),(0,i.kt)("h2",{id:"networking"},"Networking"),(0,i.kt)("h3",{id:"what-is-libp2p"},"What is libp2p?"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://libp2p.io"},"Libp2p")," is a modular and extensible networking stack that is used by IPFS,\nSubstrate, and many other projects. It is a collection of peer-to-peer protocols for finding peers\nand connecting to them. Its modules have logic for content routing, peer routing, peer discovery,\ndifferent transports, and NAT traversals. It is intended to be used by applications for building\nlarge scale peer-to-peer networks by only selecting the parts of the protocol suite that are needed."),(0,i.kt)("p",null,"The Rust implementation of the specification was built and primarily maintained by a team of\ncontributors at Parity Technologies. The Go and JavaScript versions are maintained by Protocol Labs\nas well as community contributors. A ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/status-im/nim-libp2p"},"Nim")," version of the\nlibrary also exists. Libp2p as a whole is an open source project that is actively developed and\nexpanded on various code repositories hosted on ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/libp2p"},"their GitHub"),"."),(0,i.kt)("h3",{id:"does-polkadot-use-libp2p"},"Does Polkadot use libp2p?"),(0,i.kt)("p",null,"Yes, since Polkadot is built with Substrate. Substrate uses a networking protocol that is based on\nlibp2p (specifically the Rust libp2p library). However, Substrate uses a mix of standard libp2p\nprotocols and protocols that are homegrown and not official libp2p standards. Of the standards\nprotocols, those which are shared with other implementations of libp2p such as IPFS, are\nconnection-checking (ping), asking for information on a peer (identity), and Kademlia random walks\n(kad)."),(0,i.kt)("p",null,"Of the protocols that are custom to Substrate, there are the legacy Substrate stream, a\nrequest-response for getting information on blocks (sync), a light client protocol, a notification\nprotocol for transactions, and block announcement. For detailed information on how Substrate uses\nlibp2p and the standard and custom protocols, please see the\n",(0,i.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/sc_network/index.html"},"networking documentation"),"."),(0,i.kt)("h3",{id:"how-does-libp2p-differ-from-ipfs"},"How does libp2p differ from IPFS?"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"https://ipfs.io/"},"Interplanetary File System"),' (IPFS) is a peer-to-peer hypermedia protocol used\nprimarily for storage of files. It allows one to upload a file onto the network and share it with\nits content addressable URI. IPFS, like Substrate, is an application of libp2p and exists higher on\nthe technology stack. Although both IPFS and Substrate use libp2p, it cannot be said that Substrate\n"uses" IPFS since besides sharing the underlying library for networking there is no native\nintegration between the two applications.'),(0,i.kt)("h2",{id:"kusama"},"Kusama"),(0,i.kt)("h3",{id:"what-is-the-minimum-amount-of-ksm--dot-i-can-have-in-my-account"},"What is the minimum amount of KSM / DOT I can have in my account?"),(0,i.kt)("p",null,"Please see information about ",(0,i.kt)("a",{parentName:"p",href:"/docs/build-protocol-info"},"Existential Deposits"),"."),(0,i.kt)("h3",{id:"what-are-the-transfer-fees-for-kusama"},"What are the transfer fees for Kusama?"),(0,i.kt)("p",null,"It is important to note that the cost of transferring KSM is dynamic. Currently, the minimum cost of\ntransferring KSM is 0.01 KSM (the base fee), although this can be changed via governance. However,\nactual transaction fees will vary based on a variety of factors. Specifically, fee calculation\nfollows the following formula:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"base_fee + (tx_length * length_fee) + WeightToFee(weight)\n")),(0,i.kt)("p",null,"Please see the\n",(0,i.kt)("a",{parentName:"p",href:"https://docs.substrate.io/reference/how-to-guides/weights/calculate-fees/"},"fee calculation")," page in\nthe Substrate documentation for more detailed information."),(0,i.kt)("h2",{id:"answered-by-gav-series"},"Answered by Gav series"),(0,i.kt)("p",null,'The "Answered by Gav" series is a collection of posts uploaded to Reddit of questions that have been\nasked in the Polkadot Watercooler Riot channel and answered by Polkadot founder Gavin Wood.'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/b87d96/answered_by_gav_reason_for_using_asynchronous/"},"Reason for using asynchronous rather than synchronous communication? Difference in terms of TPS?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/b87awr/answered_by_gav_how_exactly_do_validators_in_an/"},"How exactly do validators in an ETH parachain keep moving around and how is communication between zones trustless?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/b87bua/answered_by_gav_what_are_the_main_issues_with/"},"What are the main issues with Bitcoin integration and will it ever be possible? Same problem with other POW chains? Is Polkadot only going to work with POS chains? How is it trust-less in comparison to Cosmos though?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/b87cjz/answered_by_gav_what_are_the_current_thoughts/"},"What are the current thoughts around governance especially since projects have to be voted in to receive the parachains security?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/b87ds8/answered_by_gav_also_is_there_any_detailed/"},"Also is there any detailed overview of how exactly a token transfer from ETH could be exchanged with another chain's currency?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/bcqrx9/answered_by_gav_can_i_run_multiple_validators/"},"Can I run multiple Validators with the same Session Key?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/dot/comments/bcqwit/answered_by_gav_how_to_tackle_the_concentration/"},"How to tackle the concentration risk of Validators in data centers?"))))}k.isMDXComponent=!0},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/b21dd8a7.06ba09e6.js b/assets/js/b21dd8a7.06ba09e6.js deleted file mode 100644 index b6260de05e50..000000000000 --- a/assets/js/b21dd8a7.06ba09e6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1494],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(a),d=o,m=u["".concat(s,".").concat(d)]||u[d]||h[d]||i;return a?n.createElement(m,r(r({ref:t},c),{},{components:a})):n.createElement(m,r({ref:t},c))}));function m(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,r=new Array(i);r[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>p,toc:()=>u});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=["components"],l={id:"learn-comparisons-rollups",title:"Layer Two and Rollups",sidebar_label:"Layer Two and Rollups",description:"Comparison between various Rollup and L2 Protocols.",keywords:["rollups","polkadot","scalability","shared","security","parachain","ethereum"],slug:"../learn-comparisons-rollups"},s=void 0,p={unversionedId:"learn/learn-comparisons-rollups",id:"learn/learn-comparisons-rollups",title:"Layer Two and Rollups",description:"Comparison between various Rollup and L2 Protocols.",source:"@site/../docs/learn/learn-comparison-rollups.md",sourceDirName:"learn",slug:"/learn-comparisons-rollups",permalink:"/docs/learn-comparisons-rollups",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-comparison-rollups.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1688135081,formattedLastUpdatedAt:"Jun 30, 2023",frontMatter:{id:"learn-comparisons-rollups",title:"Layer Two and Rollups",sidebar_label:"Layer Two and Rollups",description:"Comparison between various Rollup and L2 Protocols.",keywords:["rollups","polkadot","scalability","shared","security","parachain","ethereum"],slug:"../learn-comparisons-rollups"},sidebar:"docs",previous:{title:"Other Comparisons",permalink:"/docs/learn-comparisons"},next:{title:"Videos",permalink:"/docs/learn-video-tutorials"}},c={},u=[{value:"Optimistic Rollups",id:"optimistic-rollups",level:2},{value:"Zero-knowledge Rollups",id:"zero-knowledge-rollups",level:2},{value:"Polkadot - Native Shared Security",id:"polkadot---native-shared-security",level:2}],h={toc:u},d="wrapper";function m(e){var t=e.components,a=(0,o.Z)(e,r);return(0,i.kt)(d,(0,n.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"This comparison covers general information regarding two widely used rollup mechanisms that are used\nto scale (usually EVM-based) blockchains and compares and contrasts how Polkadot achieves\nscalability.")),(0,i.kt)("p",null,"Layer two (L2) networks are popular as being the way forward for blockchain scalability by\noff-loading the majority of computation from layer one (L1) networks. L2 solutions utilize the L1\nnetwork's security and functionality to build an additional layer that is often faster, reduces\nfees, and solves other platform-specific issues. In many cases, L2 solutions focus on utilizing\nblock space on a particular blockchain efficiently and cost-effectively."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Rollups"),' are an L2 scaling solution. At the most basic level, a rollup L2 solution is responsible\nfor "rolling up" transactions by batching them before publishing them to the L1 chain, usually\nthrough a network of ',(0,i.kt)("strong",{parentName:"p"},"sequencers"),". This mechanism could include thousands of transactions in a\nsingle rollup."),(0,i.kt)("p",null,"Polkadot implements this functionality at the\nnative level (i.e. without using L2 scaling solutions), allowing for shared security and scalability\nof the relay chain and respective parachains. Shared security is a concept that has similar goals to\nEVM-based optimistic and zero-knowledge rollups. Still, instead of being implemented as a secondary\nlayer, Polkadot guarantees native security and\nscalability for each of its parachains through the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"Parachains Protocol"),".\nPolkadot handles the coordination of data from\nparachains into an aggregated, representative state, somewhat similar to L2 rollups."),(0,i.kt)("h2",{id:"optimistic-rollups"},"Optimistic Rollups"),(0,i.kt)("p",null,"Optimistic rollups are an interactive scaling method for L1 blockchains. They assume\n",(0,i.kt)("em",{parentName:"p"},"optimistically")," that every proposed transaction is valid by default."),(0,i.kt)("p",null,"In the case of mitigating potentially invalid transactions, optimistic rollups introduce a\n",(0,i.kt)("em",{parentName:"p"},"challenge period")," during which participants may challenge a suspect rollup. A fraud-proving scheme\nis in place to allow for several ",(0,i.kt)("em",{parentName:"p"},"fraud proofs")," to be submitted. Those proofs could make the rollup\nvalid or invalid. During the challenge period, state changes may be disputed, resolved, or included\nif no challenge is presented (and the required proofs are in place)."),(0,i.kt)("p",null,"While optimistic rollups provide scalability, they have both benefits and drawbacks to their\napproach:"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Benefits:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"They are not limited by the type of state change - any state change can be included, meaning\nexisting apps do not have to account for it."),(0,i.kt)("li",{parentName:"ul"},"They can be parallelized for scalability."),(0,i.kt)("li",{parentName:"ul"},"A substantial amount of data can fit within a single rollup\n(",(0,i.kt)("a",{parentName:"li",href:"https://ethereum.org/en/developers/docs/scaling/optimistic-rollups/#scaling-ethereum-with-optimistic-rollups"},"in the case of Ethereum, for example"),",\ntens of thousands of transactions in a single state transition).")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Drawbacks:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Transaction censorship and centralization are of concern, where sequencers/L2 nodes can be\ncompromised."),(0,i.kt)("li",{parentName:"ul"},"Challenge periods could take a substantial amount of time to pass, increasing time for the rollup\nto finalize onto the L1 network."),(0,i.kt)("li",{parentName:"ul"},"Due to their generalist nature of including any state change for their parent network, optimistic\nrollups can run into gas limitations or cause network congestion in the case of Ethereum.")),(0,i.kt)("p",null,"Optimistic rollups are often used in the Ethereum ecosystem. Examples of optimistic EVM-based rollup\nsolutions include:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.optimism.io/"},"Optimisim")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://bridge.arbitrum.io/"},"Arbitrum")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://unipig.exchange/welcome"},"Unipig"))),(0,i.kt)("h2",{id:"zero-knowledge-rollups"},"Zero-knowledge Rollups"),(0,i.kt)("p",null,"Zero-knowledge rollups (often called ZK rollups) are a non-interactive method that utilizes\nzero-knowledge proofs to compute the validity of a particular set of state changes. Whereas\noptimistic rollups relied on fraud proofs, ZK rollups rely on cryptographic validation in the form\nof ZK proofs."),(0,i.kt)("p",null,"Zero-knowledge rollups are significantly faster in finalization, as the cryptographic validity proof\nhandles the nuance of ensuring a rollup is valid. However, the ZK rollups often suffer from\nperformance due to their complexity and difficult implementation into resource-constrained\nenvironments. Because Turing completeness is also challenging to achieve due to this computational\noverhead, their ability to be generalized (in terms of blockspace) is reduced. However, they have a\npromising future in solving some of the problems of optimistic rollups and addressing secure\nscalability."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Benefits:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"They only require a small amount of data availability. Often, the proof is enough to ensure\nvalidity."),(0,i.kt)("li",{parentName:"ul"},"They can be proven trustlessly."),(0,i.kt)("li",{parentName:"ul"},"Because the proof is immediately available, finality is also instantaneous."),(0,i.kt)("li",{parentName:"ul"},"They have a promising future overall, as they have not reached maturity yet.")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Drawbacks:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"They suffer from the same problems that other L2 solutions have regarding the centralization of L2\noperators."),(0,i.kt)("li",{parentName:"ul"},"They are computationally expensive, and ZK circuits are difficult to implement."),(0,i.kt)("li",{parentName:"ul"},"The potential for congestion is still a factor, as the amount of data could still be problematic.")),(0,i.kt)("h2",{id:"polkadot---native-shared-security"},"Polkadot - Native Shared Security"),(0,i.kt)("p",null,"Whereas rollups are considered solutions for L2 protocols,\nPolkadot include this functionality natively\nthrough its ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"Parachains Protocol"),". The Parachains Protocol, which is\nhow Polkadot handles network's ",(0,i.kt)("strong",{parentName:"p"},"sharding")," is\nmeant to accomplish the combined goals of providing security, scalability, and availability."),(0,i.kt)("p",null,"It enables parachains to verify their collective state and communicate with one another. Parachains\nhave similarities to aspects of optimistic and ZK rollups, which are reflected in how\nPolkadot handles the validity and availability\nof the parachain state. ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"Collators"),", a key part of\nPolkadot's architecture, are in principle\nsimilar to sequencers, as collators pass data with a proof-of-validity (PoV) function for liveness\nand communication with the relay chain."),(0,i.kt)("p",null,"Each shard, or parachain, is equipped with a unique state transition function (STF). This function\nensures that communication to the relay chain remains valid. Each STF, called runtime, is written in\n",(0,i.kt)("a",{parentName:"p",href:"https://wiki.polkadot.network/docs/learn-wasm"},"Wasm"),". Any state transition function is valid if it\ncompiles to Wasm and abides by the Parachains Protocol."),(0,i.kt)("p",null,"Each STF runs a validity proof. The proof (",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"the Approval Protocol"),")\nis interactive, unlike ZK rollups, which are non-interactive. Additionally, unlike ZK rollups, there\nare no difficulties in creating parachains with Turing-complete logic. Each parachain is also a\nfull-fledged state machine (usually in the form of a blockchain). Similarly to optimistic rollups,\nthe Parachain Protocol also has cases where disputes and resolutions of potentially harmful para\nblocks (blocks representing the parachain) can take place, in which case validators are slashed if a\nbad parablock is found."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Benefits:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Protocol level sharding, shared security, and interoperability."),(0,i.kt)("li",{parentName:"ul"},"Each shard has a low barrier of entry in terms of development, as anything that compiles to Wasm\nis a valid target."),(0,i.kt)("li",{parentName:"ul"},"Fast Finality (usually under a minute on Polkadot)."),(0,i.kt)("li",{parentName:"ul"},"Data availability is built-in through validators and mechanisms like\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-parachains-protocol#erasure-codes"},"erasure coding"),"."),(0,i.kt)("li",{parentName:"ul"},"No L2 implies less of a risk of incurring centralization issues for sequencers or other L2\noperators.")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Drawbacks:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Execution of code in Wasm could be a performance bottleneck, as it is slower than making native\ncalls."),(0,i.kt)("li",{parentName:"ul"},"The relay chain sets a\n",(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/polkadot/book/protocol-overview.html?highlight=10#protocol-overview"},"hard limit"),"\non the size and weights of the PoV (Proof of Validity) blocks which contain the parachain state\ntransition data.")),(0,i.kt)("p",null,"Despite these drawbacks, Polkadot remains\nupgradable through forkless upgrades, which allows the protocol to be easily upgradable to stay in\nline with future technological advances."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b21dd8a7.b887110e.js b/assets/js/b21dd8a7.b887110e.js new file mode 100644 index 000000000000..60dda901a65c --- /dev/null +++ b/assets/js/b21dd8a7.b887110e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1494],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(a),d=o,m=u["".concat(s,".").concat(d)]||u[d]||h[d]||i;return a?n.createElement(m,r(r({ref:t},p),{},{components:a})):n.createElement(m,r({ref:t},p))}));function m(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,r=new Array(i);r[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>c,toc:()=>u});var n=a(87462),o=a(63366),i=(a(67294),a(3905)),r=["components"],l={id:"learn-comparisons-rollups",title:"Layer Two and Rollups",sidebar_label:"Layer Two and Rollups",description:"Comparison between various Rollup and L2 Protocols.",keywords:["rollups","polkadot","scalability","shared","security","parachain","ethereum"],slug:"../learn-comparisons-rollups"},s=void 0,c={unversionedId:"learn/learn-comparisons-rollups",id:"learn/learn-comparisons-rollups",title:"Layer Two and Rollups",description:"Comparison between various Rollup and L2 Protocols.",source:"@site/../docs/learn/learn-comparison-rollups.md",sourceDirName:"learn",slug:"/learn-comparisons-rollups",permalink:"/docs/learn-comparisons-rollups",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-comparison-rollups.md",tags:[],version:"current",lastUpdatedBy:"vuittont60",lastUpdatedAt:1697188456,formattedLastUpdatedAt:"Oct 13, 2023",frontMatter:{id:"learn-comparisons-rollups",title:"Layer Two and Rollups",sidebar_label:"Layer Two and Rollups",description:"Comparison between various Rollup and L2 Protocols.",keywords:["rollups","polkadot","scalability","shared","security","parachain","ethereum"],slug:"../learn-comparisons-rollups"},sidebar:"docs",previous:{title:"Other Comparisons",permalink:"/docs/learn-comparisons"},next:{title:"Videos",permalink:"/docs/learn-video-tutorials"}},p={},u=[{value:"Optimistic Rollups",id:"optimistic-rollups",level:2},{value:"Zero-knowledge Rollups",id:"zero-knowledge-rollups",level:2},{value:"Polkadot - Native Shared Security",id:"polkadot---native-shared-security",level:2}],h={toc:u},d="wrapper";function m(e){var t=e.components,a=(0,o.Z)(e,r);return(0,i.kt)(d,(0,n.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"This comparison covers general information regarding two widely used rollup mechanisms that are used\nto scale (usually EVM-based) blockchains and compares and contrasts how Polkadot achieves\nscalability.")),(0,i.kt)("p",null,"Layer two (L2) networks are popular as being the way forward for blockchain scalability by\noff-loading the majority of computation from layer one (L1) networks. L2 solutions utilize the L1\nnetwork's security and functionality to build an additional layer that is often faster, reduces\nfees, and solves other platform-specific issues. In many cases, L2 solutions focus on utilizing\nblock space on a particular blockchain efficiently and cost-effectively."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Rollups"),' are an L2 scaling solution. At the most basic level, a rollup L2 solution is responsible\nfor "rolling up" transactions by batching them before publishing them to the L1 chain, usually\nthrough a network of ',(0,i.kt)("strong",{parentName:"p"},"sequencers"),". This mechanism could include thousands of transactions in a\nsingle rollup."),(0,i.kt)("p",null,"Polkadot implements this functionality at the\nnative level (i.e. without using L2 scaling solutions), allowing for shared security and scalability\nof the relay chain and respective parachains. Shared security is a concept that has similar goals to\nEVM-based optimistic and zero-knowledge rollups. Still, instead of being implemented as a secondary\nlayer, Polkadot guarantees native security and\nscalability for each of its parachains through the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"Parachains Protocol"),".\nPolkadot handles the coordination of data from\nparachains into an aggregated, representative state, somewhat similar to L2 rollups."),(0,i.kt)("h2",{id:"optimistic-rollups"},"Optimistic Rollups"),(0,i.kt)("p",null,"Optimistic rollups are an interactive scaling method for L1 blockchains. They assume\n",(0,i.kt)("em",{parentName:"p"},"optimistically")," that every proposed transaction is valid by default."),(0,i.kt)("p",null,"In the case of mitigating potentially invalid transactions, optimistic rollups introduce a\n",(0,i.kt)("em",{parentName:"p"},"challenge period")," during which participants may challenge a suspect rollup. A fraud-proving scheme\nis in place to allow for several ",(0,i.kt)("em",{parentName:"p"},"fraud proofs")," to be submitted. Those proofs could make the rollup\nvalid or invalid. During the challenge period, state changes may be disputed, resolved, or included\nif no challenge is presented (and the required proofs are in place)."),(0,i.kt)("p",null,"While optimistic rollups provide scalability, they have both benefits and drawbacks to their\napproach:"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Benefits:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"They are not limited by the type of state change - any state change can be included, meaning\nexisting apps do not have to account for it."),(0,i.kt)("li",{parentName:"ul"},"They can be parallelized for scalability."),(0,i.kt)("li",{parentName:"ul"},"A substantial amount of data can fit within a single rollup\n(",(0,i.kt)("a",{parentName:"li",href:"https://ethereum.org/en/developers/docs/scaling/optimistic-rollups/#scaling-ethereum-with-optimistic-rollups"},"in the case of Ethereum, for example"),",\ntens of thousands of transactions in a single state transition).")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Drawbacks:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Transaction censorship and centralization are of concern, where sequencers/L2 nodes can be\ncompromised."),(0,i.kt)("li",{parentName:"ul"},"Challenge periods could take a substantial amount of time to pass, increasing time for the rollup\nto finalize onto the L1 network."),(0,i.kt)("li",{parentName:"ul"},"Due to their generalist nature of including any state change for their parent network, optimistic\nrollups can run into gas limitations or cause network congestion in the case of Ethereum.")),(0,i.kt)("p",null,"Optimistic rollups are often used in the Ethereum ecosystem. Examples of optimistic EVM-based rollup\nsolutions include:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.optimism.io/"},"Optimism")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://bridge.arbitrum.io/"},"Arbitrum")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://unipig.exchange/welcome"},"Unipig"))),(0,i.kt)("h2",{id:"zero-knowledge-rollups"},"Zero-knowledge Rollups"),(0,i.kt)("p",null,"Zero-knowledge rollups (often called ZK rollups) are a non-interactive method that utilizes\nzero-knowledge proofs to compute the validity of a particular set of state changes. Whereas\noptimistic rollups relied on fraud proofs, ZK rollups rely on cryptographic validation in the form\nof ZK proofs."),(0,i.kt)("p",null,"Zero-knowledge rollups are significantly faster in finalization, as the cryptographic validity proof\nhandles the nuance of ensuring a rollup is valid. However, the ZK rollups often suffer from\nperformance due to their complexity and difficult implementation into resource-constrained\nenvironments. Because Turing completeness is also challenging to achieve due to this computational\noverhead, their ability to be generalized (in terms of blockspace) is reduced. However, they have a\npromising future in solving some of the problems of optimistic rollups and addressing secure\nscalability."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Benefits:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"They only require a small amount of data availability. Often, the proof is enough to ensure\nvalidity."),(0,i.kt)("li",{parentName:"ul"},"They can be proven trustlessly."),(0,i.kt)("li",{parentName:"ul"},"Because the proof is immediately available, finality is also instantaneous."),(0,i.kt)("li",{parentName:"ul"},"They have a promising future overall, as they have not reached maturity yet.")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Drawbacks:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"They suffer from the same problems that other L2 solutions have regarding the centralization of L2\noperators."),(0,i.kt)("li",{parentName:"ul"},"They are computationally expensive, and ZK circuits are difficult to implement."),(0,i.kt)("li",{parentName:"ul"},"The potential for congestion is still a factor, as the amount of data could still be problematic.")),(0,i.kt)("h2",{id:"polkadot---native-shared-security"},"Polkadot - Native Shared Security"),(0,i.kt)("p",null,"Whereas rollups are considered solutions for L2 protocols,\nPolkadot include this functionality natively\nthrough its ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"Parachains Protocol"),". The Parachains Protocol, which is\nhow Polkadot handles network's ",(0,i.kt)("strong",{parentName:"p"},"sharding")," is\nmeant to accomplish the combined goals of providing security, scalability, and availability."),(0,i.kt)("p",null,"It enables parachains to verify their collective state and communicate with one another. Parachains\nhave similarities to aspects of optimistic and ZK rollups, which are reflected in how\nPolkadot handles the validity and availability\nof the parachain state. ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-collator"},"Collators"),", a key part of\nPolkadot's architecture, are in principle\nsimilar to sequencers, as collators pass data with a proof-of-validity (PoV) function for liveness\nand communication with the relay chain."),(0,i.kt)("p",null,"Each shard, or parachain, is equipped with a unique state transition function (STF). This function\nensures that communication to the relay chain remains valid. Each STF, called runtime, is written in\n",(0,i.kt)("a",{parentName:"p",href:"https://wiki.polkadot.network/docs/learn-wasm"},"Wasm"),". Any state transition function is valid if it\ncompiles to Wasm and abides by the Parachains Protocol."),(0,i.kt)("p",null,"Each STF runs a validity proof. The proof (",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-parachains-protocol"},"the Approval Protocol"),")\nis interactive, unlike ZK rollups, which are non-interactive. Additionally, unlike ZK rollups, there\nare no difficulties in creating parachains with Turing-complete logic. Each parachain is also a\nfull-fledged state machine (usually in the form of a blockchain). Similarly to optimistic rollups,\nthe Parachain Protocol also has cases where disputes and resolutions of potentially harmful para\nblocks (blocks representing the parachain) can take place, in which case validators are slashed if a\nbad parablock is found."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Benefits:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Protocol level sharding, shared security, and interoperability."),(0,i.kt)("li",{parentName:"ul"},"Each shard has a low barrier of entry in terms of development, as anything that compiles to Wasm\nis a valid target."),(0,i.kt)("li",{parentName:"ul"},"Fast Finality (usually under a minute on Polkadot)."),(0,i.kt)("li",{parentName:"ul"},"Data availability is built-in through validators and mechanisms like\n",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-parachains-protocol#erasure-codes"},"erasure coding"),"."),(0,i.kt)("li",{parentName:"ul"},"No L2 implies less of a risk of incurring centralization issues for sequencers or other L2\noperators.")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Drawbacks:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Execution of code in Wasm could be a performance bottleneck, as it is slower than making native\ncalls."),(0,i.kt)("li",{parentName:"ul"},"The relay chain sets a\n",(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/polkadot/book/protocol-overview.html?highlight=10#protocol-overview"},"hard limit"),"\non the size and weights of the PoV (Proof of Validity) blocks which contain the parachain state\ntransition data.")),(0,i.kt)("p",null,"Despite these drawbacks, Polkadot remains\nupgradable through forkless upgrades, which allows the protocol to be easily upgradable to stay in\nline with future technological advances."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f4200fe5.025c4bbe.js b/assets/js/f4200fe5.025c4bbe.js deleted file mode 100644 index 002d4b6fd4e4..000000000000 --- a/assets/js/f4200fe5.025c4bbe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2909],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>h});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(a),m=o,h=d["".concat(s,".").concat(m)]||d[m]||c[m]||r;return a?n.createElement(h,l(l({ref:t},p),{},{components:a})):n.createElement(h,l({ref:t},p))}));function h(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,l=new Array(r);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[d]="string"==typeof e?e:o,l[1]=i;for(var u=2;u{a.d(t,{Z:()=>l});var n=a(67294),o=a(86010);const r={tabItem:"tabItem_Ymn6"};function l(e){var t=e.children,a=e.hidden,l=e.className;return n.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,l),hidden:a},t)}},74866:(e,t,a)=>{a.d(t,{Z:()=>v});var n=a(87462),o=a(67294),r=a(86010),l=a(12466),i=a(16550),s=a(91980),u=a(67392),p=a(50012);function d(e){return function(e){var t,a;return null!=(t=null==(a=o.Children.map(e,(function(e){if(!e||(0,o.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function c(e){var t=e.values,a=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:d(a);return function(e){var t=(0,u.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function m(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function h(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId,r=(0,i.k6)(),l=function(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:a,groupId:n});return[(0,s._X)(l),(0,o.useCallback)((function(e){if(l){var t=new URLSearchParams(r.location.search);t.set(l,e),r.replace(Object.assign({},r.location,{search:t.toString()}))}}),[l,r])]}function k(e){var t,a,n,r,l=e.defaultValue,i=e.queryString,s=void 0!==i&&i,u=e.groupId,d=c(e),k=(0,o.useState)((function(){return function(e){var t,a=e.defaultValue,n=e.tabValues;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!m({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}var o=null!=(t=n.find((function(e){return e.default})))?t:n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:l,tabValues:d})})),b=k[0],f=k[1],g=h({queryString:s,groupId:u}),y=g[0],N=g[1],v=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),a=(0,p.Nk)(t),n=a[0],r=a[1],[n,(0,o.useCallback)((function(e){t&&r.set(e)}),[t,r])]),w=v[0],T=v[1],C=function(){var e=null!=y?y:w;return m({value:e,tabValues:d})?e:null}();return(0,o.useLayoutEffect)((function(){C&&f(C)}),[C]),{selectedValue:b,selectValue:(0,o.useCallback)((function(e){if(!m({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);f(e),N(e),T(e)}),[N,T,d]),tabValues:d}}var b=a(72389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){var t=e.className,a=e.block,i=e.selectedValue,s=e.selectValue,u=e.tabValues,p=[],d=(0,l.o5)().blockElementScrollPositionUntilNextRender,c=function(e){var t=e.currentTarget,a=p.indexOf(t),n=u[a].value;n!==i&&(d(t),s(n))},m=function(e){var t,a=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":var n,o=p.indexOf(e.currentTarget)+1;a=null!=(n=p[o])?n:p[0];break;case"ArrowLeft":var r,l=p.indexOf(e.currentTarget)-1;a=null!=(r=p[l])?r:p[p.length-1]}null==(t=a)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t)},u.map((function(e){var t=e.value,a=e.label,l=e.attributes;return o.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:function(e){return p.push(e)},onKeyDown:m,onClick:c},l,{className:(0,r.Z)("tabs__item",f.tabItem,null==l?void 0:l.className,{"tabs__item--active":i===t})}),null!=a?a:t)})))}function y(e){var t=e.lazy,a=e.children,n=e.selectedValue,r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){var l=r.find((function(e){return e.props.value===n}));return l?(0,o.cloneElement)(l,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})})))}function N(e){var t=k(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",f.tabList)},o.createElement(g,(0,n.Z)({},e,t)),o.createElement(y,(0,n.Z)({},e,t)))}function v(e){var t=(0,b.Z)();return o.createElement(N,(0,n.Z)({key:String(t)},e))}},31101:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>b,frontMatter:()=>u,metadata:()=>d,toc:()=>m});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),l=a(74866),i=a(85162),s=["components"],u={id:"maintain-sync",title:"Set up a Full Node",sidebar_label:"Set up a Full Node",description:"Steps on how to set up a full node.",keywords:["node","full node","sync","setup node"],slug:"../maintain-sync"},p=void 0,d={unversionedId:"maintain/maintain-sync",id:"maintain/maintain-sync",title:"Set up a Full Node",description:"Steps on how to set up a full node.",source:"@site/../docs/maintain/maintain-sync.md",sourceDirName:"maintain",slug:"/maintain-sync",permalink:"/docs/maintain-sync",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/maintain-sync.md",tags:[],version:"current",lastUpdatedBy:"github-actions[bot]",lastUpdatedAt:1695017532,formattedLastUpdatedAt:"Sep 18, 2023",frontMatter:{id:"maintain-sync",title:"Set up a Full Node",sidebar_label:"Set up a Full Node",description:"Steps on how to set up a full node.",keywords:["node","full node","sync","setup node"],slug:"../maintain-sync"},sidebar:"docs",previous:{title:"Node Endpoints",permalink:"/docs/maintain-endpoints"},next:{title:"Set up a Boot Node",permalink:"/docs/maintain-bootnode"}},c={},m=[{value:"Types of Nodes",id:"types-of-nodes",level:3},{value:"Setup Instructions",id:"setup-instructions",level:2},{value:"Debian-based (Debian, Ubuntu)",id:"debian-based-debian-ubuntu",level:3},{value:"RPM-based (Fedora, CentOS)",id:"rpm-based-fedora-centos",level:3},{value:"Get Substrate",id:"get-substrate",level:2},{value:"Clone and Build",id:"clone-and-build",level:2},{value:"Run",id:"run",level:2},{value:"Running an Archive Node",id:"running-an-archive-node",level:2},{value:"Using Docker",id:"using-docker",level:2}],h={toc:m},k="wrapper";function b(e){var t=e.components,a=(0,o.Z)(e,s);return(0,r.kt)(k,(0,n.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"If you're building dApps or products on a Substrate-based chain like Polkadot, Kusama, or a custom\nSubstrate implementation, you want the ability to run a node-as-a-back-end. After all, relying on\nyour infrastructure is always better than a third-party-hosted one in this brave new decentralized\nworld."),(0,r.kt)("p",null,"This guide will show you how to connect to ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.network/"},"Polkadot network"),", but the\nsame process applies to any other ",(0,r.kt)("a",{parentName:"p",href:"https://substrate.io"},"Substrate"),"-based chain. First, let's\nclarify the term ",(0,r.kt)("em",{parentName:"p"},"full node"),"."),(0,r.kt)("h3",{id:"types-of-nodes"},"Types of Nodes"),(0,r.kt)("p",null,"A blockchain's growth comes from a ",(0,r.kt)("em",{parentName:"p"},"genesis block"),", ",(0,r.kt)("em",{parentName:"p"},"extrinsics"),", and ",(0,r.kt)("em",{parentName:"p"},"events"),"."),(0,r.kt)("p",null,"When a validator seals block 1, it takes the blockchain's state at block 0. It then applies all\npending changes on top of it and emits the events resulting from these changes. Later, the chain\u2019s\nstate at block one is used the same way to build the chain\u2019s state at block 2, and so on. Once\ntwo-thirds of the validators agree on a specific block being valid, it is finalized."),(0,r.kt)("p",null,"An ",(0,r.kt)("strong",{parentName:"p"},"archive node")," keeps all the past blocks and their states. An archive node makes it convenient\nto query the past state of the chain at any point in time. Finding out what an account's balance at\na particular block was or which extrinsics resulted in a specific state change are fast operations\nwhen using an archive node. However, an archive node takes up a lot of disk space - around Kusama's\n12 millionth block, this was around 660 GB."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"On the ",(0,r.kt)("a",{parentName:"p",href:"https://paranodes.io/DBSize"},"Paranodes")," or ",(0,r.kt)("a",{parentName:"p",href:"https://stakeworld.io/docs/dbsize"},"Stakeworld"),"\nwebsites, you can find lists of the database sizes of Polkadot and Kusama nodes.")),(0,r.kt)("p",null,"Archive nodes are used by utilities that need past information - like block explorers, council\nscanners, discussion platforms like ",(0,r.kt)("a",{parentName:"p",href:"https://polkassembly.io"},"Polkassembly"),", and others. They need\nto be able to look at past on-chain data."),(0,r.kt)("p",null,"A ",(0,r.kt)("strong",{parentName:"p"},"full node")," prunes historical states: all finalized blocks' states older than a configurable\nnumber except the genesis block's state. This is 256 blocks from the last finalized one by default.\nA pruned node this way requires much less space than an archive node."),(0,r.kt)("p",null,"A full node could eventually rebuild every block's state without additional information and become\nan archive node. This still needs to be implemented at the time of writing. If you need to query\nhistorical blocks' states past what you pruned, you must purge your database and resync your node,\nstarting in archive mode. Alternatively, you can use a backup or snapshot of a trusted source to\navoid needing to sync from genesis with the network and only need the states of blocks past that\nsnapshot."),(0,r.kt)("p",null,"Full nodes allow you to read the current state of the chain and to submit and validate extrinsics\ndirectly on the network without relying on a centralized infrastructure provider."),(0,r.kt)("p",null,"Another type of node is a ",(0,r.kt)("strong",{parentName:"p"},"light node"),". A light node has only the runtime and the current state\nbut does not store past blocks and so cannot read historical data without requesting it from a node\nthat has it. Light nodes are useful for resource-restricted devices. An interesting use-case of\nlight nodes is a browser extension, which is a node in its own right, running the runtime in WASM\nformat, as well as a full or light node that is completely encapsulated in WASM and can be\nintegrated into web apps: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/smoldot#wasm-light-node"},"https://github.com/paritytech/smoldot#wasm-light-node"),"."),(0,r.kt)("admonition",{title:"Substrate Connect",type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate-connect"},"Substrate Connect")," provides a way to interact with\nsubstrate-based blockchains in the browser without using an RPC server. It is a light node that runs\nentirely in Javascript. Substrate Connect uses a\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/smoldot"},"smoldot WASM light client")," to securely connect to the\nblockchain network without relying on specific 3rd parties. Substrate Connect is available on Chrome\nand Firefox as a ",(0,r.kt)("a",{parentName:"p",href:"https://substrate.io/developers/substrate-connect/"},"browser extension"),".")),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"setup-instructions"},"Setup Instructions"),(0,r.kt)("p",null,"This is not recommended if you're a validator. Please see the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-secure-validator"},"secure validator setup")," if you are running validator."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"The bash commands that are provided to run against ",(0,r.kt)("strong",{parentName:"mdxAdmonitionTitle"},"your node")," use ",(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Polkadot")," as the"),(0,r.kt)("p",{parentName:"admonition"},"default chain"),(0,r.kt)("p",{parentName:"admonition"},"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"--chain")," flag if you follow the setup instructions to setup a ",(0,r.kt)("inlineCode",{parentName:"p"},"Kusama")," node. For example:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./target/release/polkadot --name "Your Node\'s Name" --chain kusama\n'))),(0,r.kt)(l.Z,{groupId:"operating-systems",values:[{label:"macOS",value:"mac"},{label:"Windows",value:"win"},{label:"Linux (standalone)",value:"linux-standalone"},{label:"Linux (package)",value:"linux-package"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"mac",mdxType:"TabItem"},(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install Homebrew within the terminal by running:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Then, run:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"brew install openssl cmake llvm protobuf\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install Rust by running:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"After Rust is installed, update and add the nightly version:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Ensure the current shell has cargo\nsource ~/.cargo/env\n\n# Update the Rust toolchain\nrustup default stable\nrustup update\n\n# Add the nightly and WebAssembly targets:\nrustup update nightly\nrustup target add wasm32-unknown-unknown --toolchain nightly\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Verify your installation by running the following:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"rustup show\n\n# You should see output similar to:\n\nactive toolchain\n----------------\n\nstable-aarch64-apple-darwin (default)\nrustc 1.68.1 (8460ca823 2023-03-20)\n")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"rustup +nightly show\n\n# You should see output similar to:\n\ninstalled targets for active toolchain\n--------------------------------------\n\naarch64-apple-darwin\nwasm32-unknown-unknown\n\nactive toolchain\n----------------\n\nnightly-aarch64-apple-darwin (overridden by +toolchain on the command line)\nrustc 1.71.0-nightly (9ecda8de8 2023-04-30)\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Once Rust is configured, run the following command to clone and build the Polkadot code:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/paritytech/polkadot polkadot\ncd polkadot\n./scripts/init.sh\ncargo build --release\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Start your node:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./target/release/polkadot --name "Your Node\'s Name"\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Find your node on ",(0,r.kt)("a",{parentName:"p",href:"https://telemetry.polkadot.io/#list/Polkadot"},"Telemetry"))))),(0,r.kt)(i.Z,{value:"win",mdxType:"TabItem"},(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/windows/wsl/install-win10"},"WSL"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/windows/wsl/install-win10"},"Ubuntu")," (same webpage).")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Determine the latest version of the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/releases"},"Polkadot binary"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Download the correct Polkadot binary within Ubuntu by running the following command. Replace\n",(0,r.kt)("inlineCode",{parentName:"p"},"*VERSION*")," with the tag of the latest version from the last step (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"v0.8.22"),"):"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -sL https://github.com/paritytech/polkadot/releases/download/*VERSION*/polkadot -o polkadot\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Then, run the following:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo chmod +x polkadot\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Start your node:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./polkadot --name "Your Node\'s Name"\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Find your node on ",(0,r.kt)("a",{parentName:"p",href:"https://telemetry.polkadot.io/#list/Polkadot"},"Telemetry"))))),(0,r.kt)(i.Z,{value:"linux-standalone",mdxType:"TabItem"},(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Determine the latest version of the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/releases"},"Polkadot binary"),"."),(0,r.kt)("admonition",{parentName:"li",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The nature of pre-built binaries means that they may not work on your particular architecture or\nLinux distribution. If you see an error like ",(0,r.kt)("inlineCode",{parentName:"p"},"cannot execute binary file: Exec format error")," it\nlikely means the binary is not compatible with your system. You will either need to compile the\n",(0,r.kt)("a",{parentName:"p",href:"#clone-and-build"},(0,r.kt)("strong",{parentName:"a"},"source code"))," or use ",(0,r.kt)("a",{parentName:"p",href:"#using-docker"},(0,r.kt)("strong",{parentName:"a"},"Docker")),"."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Download the correct Polkadot binary within Ubuntu by running the following command. Replace\n",(0,r.kt)("inlineCode",{parentName:"p"},"*VERSION*")," with the tag of the latest version from the last step (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"v0.8.22"),"):"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -sL https://github.com/paritytech/polkadot/releases/download/*VERSION*/polkadot -o polkadot\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Run the following: ",(0,r.kt)("inlineCode",{parentName:"p"},"sudo chmod +x polkadot"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Run the following:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./target/release/polkadot --name "Your Node\'s Name"\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Find your node on ",(0,r.kt)("a",{parentName:"p",href:"https://telemetry.polkadot.io/#list/Polkadot"},"Telemetry"))))),(0,r.kt)(i.Z,{value:"linux-package",mdxType:"TabItem"},(0,r.kt)("p",null,"You can also install Polkadot from one of our package repositories."),(0,r.kt)("p",null,"Installation from the Debian or rpm repositories will create a ",(0,r.kt)("inlineCode",{parentName:"p"},"systemd")," service that can be used to\nrun a Polkadot node. The service is disabled by default, and can be started by running\n",(0,r.kt)("inlineCode",{parentName:"p"},"systemctl start polkadot")," on demand (use ",(0,r.kt)("inlineCode",{parentName:"p"},"systemctl enable polkadot")," to make it auto-start after\nreboot). By default, it will run as the ",(0,r.kt)("inlineCode",{parentName:"p"},"polkadot")," user. Command-line flags passed to the binary can\nbe customized by editing ",(0,r.kt)("inlineCode",{parentName:"p"},"/etc/default/polkadot"),". This file will not be overwritten on updating\npolkadot."),(0,r.kt)("h3",{id:"debian-based-debian-ubuntu"},"Debian-based (Debian, Ubuntu)"),(0,r.kt)("p",null,"Currently supports Debian 10 (Buster) and Ubuntu 20.04 (Focal), and derivatives. Run the following\ncommands as the ",(0,r.kt)("inlineCode",{parentName:"p"},"root")," user."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# 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\n")),(0,r.kt)("p",null,"If you don't want polkadot package to be automatically updated when you update packages on your\nserver, you can issue the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-mark hold polkadot\n")),(0,r.kt)("h3",{id:"rpm-based-fedora-centos"},"RPM-based (Fedora, CentOS)"),(0,r.kt)("p",null,"Currently supports Fedora 32 and CentOS 8, and derivatives."),(0,r.kt)("pre",null,(0,r.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,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"If you choose to use a custom folder for the polkadot home by passing ",(0,r.kt)("inlineCode",{parentName:"p"},"--base-path '/custom-path'"),",\nyou will need to issue following command:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo mkdir /etc/systemd/system/polkadot.service.d\n")),(0,r.kt)("p",{parentName:"admonition"},"And create a new file inside this folder:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo -e /etc/systemd/system/polkadot.service.d/custom.conf\n")),(0,r.kt)("p",{parentName:"admonition"},"With the following content:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre"},"[Service]\nReadWritePaths=/custom-path\n")),(0,r.kt)("p",{parentName:"admonition"},"And finally issue a reload to have your modifications applied by systemd:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"systemctl daemon-reload\n"))))),(0,r.kt)("h2",{id:"get-substrate"},"Get Substrate"),(0,r.kt)("p",null,"Follow instructions as outlined ",(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/quick-start/"},"here")," - note that Windows\nusers will have their work cut out for them. It's better to use a virtual machine instead."),(0,r.kt)("p",null,"Test if the installation was successful by running ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo --version"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"\u03bb cargo --version\ncargo 1.41.0 (626f0f40e 2019-12-03)\n")),(0,r.kt)("h2",{id:"clone-and-build"},"Clone and Build"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot"},"paritytech/polkadot")," repo's master branch contains the\nlatest Polkadot code."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/paritytech/polkadot polkadot\ncd polkadot\n./scripts/init.sh\ncargo build --release\n")),(0,r.kt)("p",null,"Alternatively, if you wish to use a specific release, you can check out a specific tag (",(0,r.kt)("inlineCode",{parentName:"p"},"v0.8.3")," in\nthe example below):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/paritytech/polkadot polkadot\ncd polkadot\ngit checkout tags/v0.8.3\n./scripts/init.sh\ncargo build --release\n")),(0,r.kt)("h2",{id:"run"},"Run"),(0,r.kt)("p",null,"The built binary will be in the ",(0,r.kt)("inlineCode",{parentName:"p"},"target/release")," folder, called ",(0,r.kt)("inlineCode",{parentName:"p"},"polkadot"),"."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Polkadot"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./target/release/polkadot --name "Your Node\'s Name"\n')),(0,r.kt)("p",null,"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"--help")," flag to determine which flags you can use when running the node. For example, if\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-wss"},"connecting to your node remotely"),", you'll probably want to use ",(0,r.kt)("inlineCode",{parentName:"p"},"--rpc-external"),"\nand ",(0,r.kt)("inlineCode",{parentName:"p"},"--rpc-cors all"),"."),(0,r.kt)("p",null,"The syncing process will take a while, depending on your capacity, processing power, disk speed and\nRAM. On a \\$10 DigitalOcean droplet, the process can complete in some 36 hours."),(0,r.kt)("p",null,"Congratulations, you're now syncing with Polkadot. Keep in mind that the process is identical when\nusing any other Substrate chain."),(0,r.kt)("h2",{id:"running-an-archive-node"},"Running an Archive Node"),(0,r.kt)("p",null,"When running as a simple sync node (above), only the state of the past 256 blocks will be kept. It\ndefaults to ",(0,r.kt)("a",{parentName:"p",href:"#types-of-nodes"},"archive mode")," when validating. To support the full state, use the\n",(0,r.kt)("inlineCode",{parentName:"p"},"--pruning")," flag:"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Polkadot"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./target/release/polkadot --name "My node\'s name" --pruning archive\n')),(0,r.kt)("p",null,"It is possible to almost quadruple synchronization speed by using an additional flag:\n",(0,r.kt)("inlineCode",{parentName:"p"},"--wasm-execution Compiled"),". Note that this uses much more CPU and RAM, so it should be turned off\nafter the node syncs."),(0,r.kt)("h2",{id:"using-docker"},"Using Docker"),(0,r.kt)("p",null,"Finally, you can use Docker to run your node in a container. Doing this is more advanced, so it's\nbest left up to those already familiar with docker or who have completed the other set-up\ninstructions in this guide. Be aware that when you run polkadot in docker, the process only listens\non localhost by default. If you would like to connect to your node's services (rpc, and prometheus)\nyou need to ensure that you run you node with the ",(0,r.kt)("inlineCode",{parentName:"p"},"--rpc-external"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"--prometheus-external"),"\ncommands."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-zsh"},'docker run -p 9944:9944 -p 9615:9615 parity/polkadot:v0.9.13 --name "calling_home_from_a_docker_container" --rpc-external --prometheus-external\n')))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f4200fe5.895b93fd.js b/assets/js/f4200fe5.895b93fd.js new file mode 100644 index 000000000000..5ee3e29c81a7 --- /dev/null +++ b/assets/js/f4200fe5.895b93fd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2909],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>h});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(a),m=o,h=d["".concat(s,".").concat(m)]||d[m]||c[m]||r;return a?n.createElement(h,l(l({ref:t},p),{},{components:a})):n.createElement(h,l({ref:t},p))}));function h(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,l=new Array(r);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[d]="string"==typeof e?e:o,l[1]=i;for(var u=2;u{a.d(t,{Z:()=>l});var n=a(67294),o=a(86010);const r={tabItem:"tabItem_Ymn6"};function l(e){var t=e.children,a=e.hidden,l=e.className;return n.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,l),hidden:a},t)}},74866:(e,t,a)=>{a.d(t,{Z:()=>v});var n=a(87462),o=a(67294),r=a(86010),l=a(12466),i=a(16550),s=a(91980),u=a(67392),p=a(50012);function d(e){return function(e){var t,a;return null!=(t=null==(a=o.Children.map(e,(function(e){if(!e||(0,o.isValidElement)(e)&&(t=e.props)&&"object"==typeof t&&"value"in t)return e;var t;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes,default:t.default}}))}function c(e){var t=e.values,a=e.children;return(0,o.useMemo)((function(){var e=null!=t?t:d(a);return function(e){var t=(0,u.l)(e,(function(e,t){return e.value===t.value}));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function m(e){var t=e.value;return e.tabValues.some((function(e){return e.value===t}))}function h(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId,r=(0,i.k6)(),l=function(e){var t=e.queryString,a=void 0!==t&&t,n=e.groupId;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:a,groupId:n});return[(0,s._X)(l),(0,o.useCallback)((function(e){if(l){var t=new URLSearchParams(r.location.search);t.set(l,e),r.replace(Object.assign({},r.location,{search:t.toString()}))}}),[l,r])]}function k(e){var t,a,n,r,l=e.defaultValue,i=e.queryString,s=void 0!==i&&i,u=e.groupId,d=c(e),k=(0,o.useState)((function(){return function(e){var t,a=e.defaultValue,n=e.tabValues;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!m({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}var o=null!=(t=n.find((function(e){return e.default})))?t:n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:l,tabValues:d})})),b=k[0],f=k[1],g=h({queryString:s,groupId:u}),y=g[0],N=g[1],v=(t=function(e){return e?"docusaurus.tab."+e:null}({groupId:u}.groupId),a=(0,p.Nk)(t),n=a[0],r=a[1],[n,(0,o.useCallback)((function(e){t&&r.set(e)}),[t,r])]),w=v[0],T=v[1],C=function(){var e=null!=y?y:w;return m({value:e,tabValues:d})?e:null}();return(0,o.useLayoutEffect)((function(){C&&f(C)}),[C]),{selectedValue:b,selectValue:(0,o.useCallback)((function(e){if(!m({value:e,tabValues:d}))throw new Error("Can't select invalid tab value="+e);f(e),N(e),T(e)}),[N,T,d]),tabValues:d}}var b=a(72389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){var t=e.className,a=e.block,i=e.selectedValue,s=e.selectValue,u=e.tabValues,p=[],d=(0,l.o5)().blockElementScrollPositionUntilNextRender,c=function(e){var t=e.currentTarget,a=p.indexOf(t),n=u[a].value;n!==i&&(d(t),s(n))},m=function(e){var t,a=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":var n,o=p.indexOf(e.currentTarget)+1;a=null!=(n=p[o])?n:p[0];break;case"ArrowLeft":var r,l=p.indexOf(e.currentTarget)-1;a=null!=(r=p[l])?r:p[p.length-1]}null==(t=a)||t.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t)},u.map((function(e){var t=e.value,a=e.label,l=e.attributes;return o.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:function(e){return p.push(e)},onKeyDown:m,onClick:c},l,{className:(0,r.Z)("tabs__item",f.tabItem,null==l?void 0:l.className,{"tabs__item--active":i===t})}),null!=a?a:t)})))}function y(e){var t=e.lazy,a=e.children,n=e.selectedValue,r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){var l=r.find((function(e){return e.props.value===n}));return l?(0,o.cloneElement)(l,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map((function(e,t){return(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})})))}function N(e){var t=k(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",f.tabList)},o.createElement(g,(0,n.Z)({},e,t)),o.createElement(y,(0,n.Z)({},e,t)))}function v(e){var t=(0,b.Z)();return o.createElement(N,(0,n.Z)({key:String(t)},e))}},31101:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>b,frontMatter:()=>u,metadata:()=>d,toc:()=>m});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),l=a(74866),i=a(85162),s=["components"],u={id:"maintain-sync",title:"Set up a Full Node",sidebar_label:"Set up a Full Node",description:"Steps on how to set up a full node.",keywords:["node","full node","sync","setup node"],slug:"../maintain-sync"},p=void 0,d={unversionedId:"maintain/maintain-sync",id:"maintain/maintain-sync",title:"Set up a Full Node",description:"Steps on how to set up a full node.",source:"@site/../docs/maintain/maintain-sync.md",sourceDirName:"maintain",slug:"/maintain-sync",permalink:"/docs/maintain-sync",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/maintain/maintain-sync.md",tags:[],version:"current",lastUpdatedBy:"vuittont60",lastUpdatedAt:1697188456,formattedLastUpdatedAt:"Oct 13, 2023",frontMatter:{id:"maintain-sync",title:"Set up a Full Node",sidebar_label:"Set up a Full Node",description:"Steps on how to set up a full node.",keywords:["node","full node","sync","setup node"],slug:"../maintain-sync"},sidebar:"docs",previous:{title:"Node Endpoints",permalink:"/docs/maintain-endpoints"},next:{title:"Set up a Boot Node",permalink:"/docs/maintain-bootnode"}},c={},m=[{value:"Types of Nodes",id:"types-of-nodes",level:3},{value:"Setup Instructions",id:"setup-instructions",level:2},{value:"Debian-based (Debian, Ubuntu)",id:"debian-based-debian-ubuntu",level:3},{value:"RPM-based (Fedora, CentOS)",id:"rpm-based-fedora-centos",level:3},{value:"Get Substrate",id:"get-substrate",level:2},{value:"Clone and Build",id:"clone-and-build",level:2},{value:"Run",id:"run",level:2},{value:"Running an Archive Node",id:"running-an-archive-node",level:2},{value:"Using Docker",id:"using-docker",level:2}],h={toc:m},k="wrapper";function b(e){var t=e.components,a=(0,o.Z)(e,s);return(0,r.kt)(k,(0,n.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"If you're building dApps or products on a Substrate-based chain like Polkadot, Kusama, or a custom\nSubstrate implementation, you want the ability to run a node-as-a-back-end. After all, relying on\nyour infrastructure is always better than a third-party-hosted one in this brave new decentralized\nworld."),(0,r.kt)("p",null,"This guide will show you how to connect to ",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.network/"},"Polkadot network"),", but the\nsame process applies to any other ",(0,r.kt)("a",{parentName:"p",href:"https://substrate.io"},"Substrate"),"-based chain. First, let's\nclarify the term ",(0,r.kt)("em",{parentName:"p"},"full node"),"."),(0,r.kt)("h3",{id:"types-of-nodes"},"Types of Nodes"),(0,r.kt)("p",null,"A blockchain's growth comes from a ",(0,r.kt)("em",{parentName:"p"},"genesis block"),", ",(0,r.kt)("em",{parentName:"p"},"extrinsics"),", and ",(0,r.kt)("em",{parentName:"p"},"events"),"."),(0,r.kt)("p",null,"When a validator seals block 1, it takes the blockchain's state at block 0. It then applies all\npending changes on top of it and emits the events resulting from these changes. Later, the chain\u2019s\nstate at block one is used the same way to build the chain\u2019s state at block 2, and so on. Once\ntwo-thirds of the validators agree on a specific block being valid, it is finalized."),(0,r.kt)("p",null,"An ",(0,r.kt)("strong",{parentName:"p"},"archive node")," keeps all the past blocks and their states. An archive node makes it convenient\nto query the past state of the chain at any point in time. Finding out what an account's balance at\na particular block was or which extrinsics resulted in a specific state change are fast operations\nwhen using an archive node. However, an archive node takes up a lot of disk space - around Kusama's\n12 millionth block, this was around 660 GB."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"On the ",(0,r.kt)("a",{parentName:"p",href:"https://paranodes.io/DBSize"},"Paranodes")," or ",(0,r.kt)("a",{parentName:"p",href:"https://stakeworld.io/docs/dbsize"},"Stakeworld"),"\nwebsites, you can find lists of the database sizes of Polkadot and Kusama nodes.")),(0,r.kt)("p",null,"Archive nodes are used by utilities that need past information - like block explorers, council\nscanners, discussion platforms like ",(0,r.kt)("a",{parentName:"p",href:"https://polkassembly.io"},"Polkassembly"),", and others. They need\nto be able to look at past on-chain data."),(0,r.kt)("p",null,"A ",(0,r.kt)("strong",{parentName:"p"},"full node")," prunes historical states: all finalized blocks' states older than a configurable\nnumber except the genesis block's state. This is 256 blocks from the last finalized one by default.\nA pruned node this way requires much less space than an archive node."),(0,r.kt)("p",null,"A full node could eventually rebuild every block's state without additional information and become\nan archive node. This still needs to be implemented at the time of writing. If you need to query\nhistorical blocks' states past what you pruned, you must purge your database and resync your node,\nstarting in archive mode. Alternatively, you can use a backup or snapshot of a trusted source to\navoid needing to sync from genesis with the network and only need the states of blocks past that\nsnapshot."),(0,r.kt)("p",null,"Full nodes allow you to read the current state of the chain and to submit and validate extrinsics\ndirectly on the network without relying on a centralized infrastructure provider."),(0,r.kt)("p",null,"Another type of node is a ",(0,r.kt)("strong",{parentName:"p"},"light node"),". A light node has only the runtime and the current state\nbut does not store past blocks and so cannot read historical data without requesting it from a node\nthat has it. Light nodes are useful for resource-restricted devices. An interesting use-case of\nlight nodes is a browser extension, which is a node in its own right, running the runtime in WASM\nformat, as well as a full or light node that is completely encapsulated in WASM and can be\nintegrated into web apps: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/smoldot#wasm-light-node"},"https://github.com/paritytech/smoldot#wasm-light-node"),"."),(0,r.kt)("admonition",{title:"Substrate Connect",type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate-connect"},"Substrate Connect")," provides a way to interact with\nsubstrate-based blockchains in the browser without using an RPC server. It is a light node that runs\nentirely in Javascript. Substrate Connect uses a\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/smoldot"},"smoldot WASM light client")," to securely connect to the\nblockchain network without relying on specific 3rd parties. Substrate Connect is available on Chrome\nand Firefox as a ",(0,r.kt)("a",{parentName:"p",href:"https://substrate.io/developers/substrate-connect/"},"browser extension"),".")),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"setup-instructions"},"Setup Instructions"),(0,r.kt)("p",null,"This is not recommended if you're a validator. Please see the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-secure-validator"},"secure validator setup")," if you are running validator."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"The bash commands that are provided to run against ",(0,r.kt)("strong",{parentName:"mdxAdmonitionTitle"},"your node")," use ",(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Polkadot")," as the"),(0,r.kt)("p",{parentName:"admonition"},"default chain"),(0,r.kt)("p",{parentName:"admonition"},"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"--chain")," flag if you follow the setup instructions to setup a ",(0,r.kt)("inlineCode",{parentName:"p"},"Kusama")," node. For example:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./target/release/polkadot --name "Your Node\'s Name" --chain kusama\n'))),(0,r.kt)(l.Z,{groupId:"operating-systems",values:[{label:"macOS",value:"mac"},{label:"Windows",value:"win"},{label:"Linux (standalone)",value:"linux-standalone"},{label:"Linux (package)",value:"linux-package"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"mac",mdxType:"TabItem"},(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install Homebrew within the terminal by running:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Then, run:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"brew install openssl cmake llvm protobuf\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install Rust by running:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"After Rust is installed, update and add the nightly version:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Ensure the current shell has cargo\nsource ~/.cargo/env\n\n# Update the Rust toolchain\nrustup default stable\nrustup update\n\n# Add the nightly and WebAssembly targets:\nrustup update nightly\nrustup target add wasm32-unknown-unknown --toolchain nightly\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Verify your installation by running the following:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"rustup show\n\n# You should see output similar to:\n\nactive toolchain\n----------------\n\nstable-aarch64-apple-darwin (default)\nrustc 1.68.1 (8460ca823 2023-03-20)\n")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"rustup +nightly show\n\n# You should see output similar to:\n\ninstalled targets for active toolchain\n--------------------------------------\n\naarch64-apple-darwin\nwasm32-unknown-unknown\n\nactive toolchain\n----------------\n\nnightly-aarch64-apple-darwin (overridden by +toolchain on the command line)\nrustc 1.71.0-nightly (9ecda8de8 2023-04-30)\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Once Rust is configured, run the following command to clone and build the Polkadot code:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/paritytech/polkadot polkadot\ncd polkadot\n./scripts/init.sh\ncargo build --release\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Start your node:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./target/release/polkadot --name "Your Node\'s Name"\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Find your node on ",(0,r.kt)("a",{parentName:"p",href:"https://telemetry.polkadot.io/#list/Polkadot"},"Telemetry"))))),(0,r.kt)(i.Z,{value:"win",mdxType:"TabItem"},(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/windows/wsl/install-win10"},"WSL"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/windows/wsl/install-win10"},"Ubuntu")," (same webpage).")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Determine the latest version of the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/releases"},"Polkadot binary"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Download the correct Polkadot binary within Ubuntu by running the following command. Replace\n",(0,r.kt)("inlineCode",{parentName:"p"},"*VERSION*")," with the tag of the latest version from the last step (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"v0.8.22"),"):"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -sL https://github.com/paritytech/polkadot/releases/download/*VERSION*/polkadot -o polkadot\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Then, run the following:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo chmod +x polkadot\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Start your node:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./polkadot --name "Your Node\'s Name"\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Find your node on ",(0,r.kt)("a",{parentName:"p",href:"https://telemetry.polkadot.io/#list/Polkadot"},"Telemetry"))))),(0,r.kt)(i.Z,{value:"linux-standalone",mdxType:"TabItem"},(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Determine the latest version of the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/releases"},"Polkadot binary"),"."),(0,r.kt)("admonition",{parentName:"li",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The nature of pre-built binaries means that they may not work on your particular architecture or\nLinux distribution. If you see an error like ",(0,r.kt)("inlineCode",{parentName:"p"},"cannot execute binary file: Exec format error")," it\nlikely means the binary is not compatible with your system. You will either need to compile the\n",(0,r.kt)("a",{parentName:"p",href:"#clone-and-build"},(0,r.kt)("strong",{parentName:"a"},"source code"))," or use ",(0,r.kt)("a",{parentName:"p",href:"#using-docker"},(0,r.kt)("strong",{parentName:"a"},"Docker")),"."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Download the correct Polkadot binary within Ubuntu by running the following command. Replace\n",(0,r.kt)("inlineCode",{parentName:"p"},"*VERSION*")," with the tag of the latest version from the last step (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"v0.8.22"),"):"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -sL https://github.com/paritytech/polkadot/releases/download/*VERSION*/polkadot -o polkadot\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Run the following: ",(0,r.kt)("inlineCode",{parentName:"p"},"sudo chmod +x polkadot"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Run the following:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./target/release/polkadot --name "Your Node\'s Name"\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Find your node on ",(0,r.kt)("a",{parentName:"p",href:"https://telemetry.polkadot.io/#list/Polkadot"},"Telemetry"))))),(0,r.kt)(i.Z,{value:"linux-package",mdxType:"TabItem"},(0,r.kt)("p",null,"You can also install Polkadot from one of our package repositories."),(0,r.kt)("p",null,"Installation from the Debian or rpm repositories will create a ",(0,r.kt)("inlineCode",{parentName:"p"},"systemd")," service that can be used to\nrun a Polkadot node. The service is disabled by default, and can be started by running\n",(0,r.kt)("inlineCode",{parentName:"p"},"systemctl start polkadot")," on demand (use ",(0,r.kt)("inlineCode",{parentName:"p"},"systemctl enable polkadot")," to make it auto-start after\nreboot). By default, it will run as the ",(0,r.kt)("inlineCode",{parentName:"p"},"polkadot")," user. Command-line flags passed to the binary can\nbe customized by editing ",(0,r.kt)("inlineCode",{parentName:"p"},"/etc/default/polkadot"),". This file will not be overwritten on updating\npolkadot."),(0,r.kt)("h3",{id:"debian-based-debian-ubuntu"},"Debian-based (Debian, Ubuntu)"),(0,r.kt)("p",null,"Currently supports Debian 10 (Buster) and Ubuntu 20.04 (Focal), and derivatives. Run the following\ncommands as the ",(0,r.kt)("inlineCode",{parentName:"p"},"root")," user."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# 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\n")),(0,r.kt)("p",null,"If you don't want polkadot package to be automatically updated when you update packages on your\nserver, you can issue the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-mark hold polkadot\n")),(0,r.kt)("h3",{id:"rpm-based-fedora-centos"},"RPM-based (Fedora, CentOS)"),(0,r.kt)("p",null,"Currently supports Fedora 32 and CentOS 8, and derivatives."),(0,r.kt)("pre",null,(0,r.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,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"If you choose to use a custom folder for the polkadot home by passing ",(0,r.kt)("inlineCode",{parentName:"p"},"--base-path '/custom-path'"),",\nyou will need to issue following command:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo mkdir /etc/systemd/system/polkadot.service.d\n")),(0,r.kt)("p",{parentName:"admonition"},"And create a new file inside this folder:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo -e /etc/systemd/system/polkadot.service.d/custom.conf\n")),(0,r.kt)("p",{parentName:"admonition"},"With the following content:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre"},"[Service]\nReadWritePaths=/custom-path\n")),(0,r.kt)("p",{parentName:"admonition"},"And finally issue a reload to have your modifications applied by systemd:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"systemctl daemon-reload\n"))))),(0,r.kt)("h2",{id:"get-substrate"},"Get Substrate"),(0,r.kt)("p",null,"Follow instructions as outlined ",(0,r.kt)("a",{parentName:"p",href:"https://docs.substrate.io/quick-start/"},"here")," - note that Windows\nusers will have their work cut out for them. It's better to use a virtual machine instead."),(0,r.kt)("p",null,"Test if the installation was successful by running ",(0,r.kt)("inlineCode",{parentName:"p"},"cargo --version"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"\u03bb cargo --version\ncargo 1.41.0 (626f0f40e 2019-12-03)\n")),(0,r.kt)("h2",{id:"clone-and-build"},"Clone and Build"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot"},"paritytech/polkadot")," repo's master branch contains the\nlatest Polkadot code."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/paritytech/polkadot polkadot\ncd polkadot\n./scripts/init.sh\ncargo build --release\n")),(0,r.kt)("p",null,"Alternatively, if you wish to use a specific release, you can check out a specific tag (",(0,r.kt)("inlineCode",{parentName:"p"},"v0.8.3")," in\nthe example below):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/paritytech/polkadot polkadot\ncd polkadot\ngit checkout tags/v0.8.3\n./scripts/init.sh\ncargo build --release\n")),(0,r.kt)("h2",{id:"run"},"Run"),(0,r.kt)("p",null,"The built binary will be in the ",(0,r.kt)("inlineCode",{parentName:"p"},"target/release")," folder, called ",(0,r.kt)("inlineCode",{parentName:"p"},"polkadot"),"."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Polkadot"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./target/release/polkadot --name "Your Node\'s Name"\n')),(0,r.kt)("p",null,"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"--help")," flag to determine which flags you can use when running the node. For example, if\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-wss"},"connecting to your node remotely"),", you'll probably want to use ",(0,r.kt)("inlineCode",{parentName:"p"},"--rpc-external"),"\nand ",(0,r.kt)("inlineCode",{parentName:"p"},"--rpc-cors all"),"."),(0,r.kt)("p",null,"The syncing process will take a while, depending on your capacity, processing power, disk speed and\nRAM. On a \\$10 DigitalOcean droplet, the process can complete in some 36 hours."),(0,r.kt)("p",null,"Congratulations, you're now syncing with Polkadot. Keep in mind that the process is identical when\nusing any other Substrate chain."),(0,r.kt)("h2",{id:"running-an-archive-node"},"Running an Archive Node"),(0,r.kt)("p",null,"When running as a simple sync node (above), only the state of the past 256 blocks will be kept. It\ndefaults to ",(0,r.kt)("a",{parentName:"p",href:"#types-of-nodes"},"archive mode")," when validating. To support the full state, use the\n",(0,r.kt)("inlineCode",{parentName:"p"},"--pruning")," flag:"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Polkadot"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'./target/release/polkadot --name "My node\'s name" --pruning archive\n')),(0,r.kt)("p",null,"It is possible to almost quadruple synchronization speed by using an additional flag:\n",(0,r.kt)("inlineCode",{parentName:"p"},"--wasm-execution Compiled"),". Note that this uses much more CPU and RAM, so it should be turned off\nafter the node syncs."),(0,r.kt)("h2",{id:"using-docker"},"Using Docker"),(0,r.kt)("p",null,"Finally, you can use Docker to run your node in a container. Doing this is more advanced, so it's\nbest left up to those already familiar with docker or who have completed the other set-up\ninstructions in this guide. Be aware that when you run polkadot in docker, the process only listens\non localhost by default. If you would like to connect to your node's services (rpc, and prometheus)\nyou need to ensure that you run you node with the ",(0,r.kt)("inlineCode",{parentName:"p"},"--rpc-external"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"--prometheus-external"),"\ncommands."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-zsh"},'docker run -p 9944:9944 -p 9615:9615 parity/polkadot:v0.9.13 --name "calling_home_from_a_docker_container" --rpc-external --prometheus-external\n')))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f7acb151.daef5619.js b/assets/js/f7acb151.daef5619.js deleted file mode 100644 index b33aecc0dbd7..000000000000 --- a/assets/js/f7acb151.daef5619.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[5483],{47940:(e,t,s)=>{"use strict";s.d(t,{Z:()=>p});var a=s(74165),n=s(15861),o=s(67294),r=s(87152),i=s(34200),u=s(67425);function l(e,t,s){return c.apply(this,arguments)}function c(){return(c=(0,n.Z)((0,a.Z)().mark((function e(t,s,n){var o,u,l,c,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=void 0,u=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return 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 l=new r.U(o),e.next=21,i.G.create({provider:l});case 21:c=e.sent,(d=s.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return u=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return u=(u=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+s);case 35:return e.abrupt("return",u);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,s,a){switch(t){case"humanReadable":(0,u.HumanReadable)(e,s,a);break;case"precise":(0,u.Precise)(e,s,a);break;case"blocksToDays":(0,u.BlocksToDays)(e,a);break;case"percentage":(0,u.Percentage)(e,a);break;case"arrayLength":(0,u.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,s=e.path,r=e.defaultValue,i=e.filter,u=void 0===i?void 0:i,c=(0,o.useState)(""),p=c[0],h=c[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==u?d(r.toString(),u,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://statemine-rpc.polkadot.io/";break;case"statemint":e="wss://statemint-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l(t,s,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==u?d(n,u,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t={polkadot:{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,a){var n=void 0;if("polkadot"===s||"statemint"===s)n=3;else{if("kusama"!==s&&"statemine"!==s)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");n=6}e=parseFloat(e),a((e=Number.isInteger(e/t[s].precision)?e/t[s].precision+" "+t[s].symbol:(e/t[s].precision).toFixed(n)+" "+t[s].symbol).toString())},Precise:function(e,s,a){a(e=(e=parseFloat(e))/t[s].precision+" "+t[s].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},Percentage:function(e,t){t((e/=1e7).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},49736:(e,t,s)=>{"use strict";s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>b,frontMatter:()=>u,metadata:()=>c,toc:()=>p});var a=s(87462),n=s(63366),o=(s(67294),s(3905)),r=s(47940),i=["components"],u={id:"learn-guides-assets-create",title:"Creating Assets with the Asset Hub",sidebar_label:"Creating Assets",description:"Advanced How-to Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint"],slug:"../learn-guides-assets-create"},l=void 0,c={unversionedId:"learn/learn-guides-assets-create",id:"learn/learn-guides-assets-create",title:"Creating Assets with the Asset Hub",description:"Advanced How-to Guides about Creating Assets.",source:"@site/../docs/learn/learn-guides-assets-create.md",sourceDirName:"learn",slug:"/learn-guides-assets-create",permalink:"/docs/learn-guides-assets-create",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets-create.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1688135081,formattedLastUpdatedAt:"Jun 30, 2023",frontMatter:{id:"learn-guides-assets-create",title:"Creating Assets with the Asset Hub",sidebar_label:"Creating Assets",description:"Advanced How-to Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint"],slug:"../learn-guides-assets-create"},sidebar:"docs",previous:{title:"Asset Hub",permalink:"/docs/learn-guides-assets-index"},next:{title:"Asset Hub Ledger App",permalink:"/docs/learn-guides-assets-ledger"}},d={},p=[{value:"Creating Assets on the Asset Hub",id:"creating-assets-on-the-asset-hub",level:2}],h={toc:p},k="wrapper";function b(e){var t=e.components,u=(0,n.Z)(e,i);return(0,o.kt)(k,(0,a.Z)({},h,u,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The Asset Hub is a generic assets system parachain which provides functionality for deploying and\ntransferring assets \u2014 both Fungible and Non-Fungible Tokens (NFTs). The native token of the Asset\nhub is DOT. The Existential Deposit (ED),\ntransaction fees, and the deposits for proxy/multisig operations are about 1/10th of the values on\nthe Relay chains. For example, the Existential Deposit of an Asset Hub account is\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.balances.existentialDeposit",defaultValue:1e9,filter:"humanReadable",mdxType:"RPC"}),",\n","\nwhen compared to\n",(0,o.kt)(r.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"})," on Polkadot\n",".\nApart from the core protocol token DOT, the\nassets held on the Asset Hub can be broadly categorized as"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Assets backed by an on-chain protocol\u2019s utility"),(0,o.kt)("li",{parentName:"ul"},"Assets with off-chain backing"),(0,o.kt)("li",{parentName:"ul"},"Assets without any backing")),(0,o.kt)("p",null,"For additional background on the Asset Hub check out\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-"},"this support article"),"."),(0,o.kt)("h2",{id:"creating-assets-on-the-asset-hub"},"Creating Assets on the Asset Hub"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Before minting assets on the Asset Hub, we recommend that you try out this tutorial on Westmint,\nwhich is a parachain on Westend. The WND tokens (Westies) are free and are available through a\n",(0,o.kt)("a",{parentName:"p",href:"https://wiki.polkadot.network/docs/learn-DOT#getting-westies"},"faucet"),"."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"The images in the guides below are for Polkadot, but they also apply to Kusama."))),(0,o.kt)("p",null,"To create an asset on the Asset Hub, you would need a deposit of\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.assetDeposit",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand around\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.metadataDepositBase",defaultValue:20068e5,filter:"humanReadable",mdxType:"RPC"}),"\n","\nfor the metadata. Before you create an asset on the Asset Hub, ensure that your Asset Hub account\nbalance is a bit more than the sum of those two deposits, which should seamlessly account for the\nrequired deposits and transaction fees. You can send\nDOT from a\nPolkadot account to a the Asset Hub account\nusing the teleport functionality. For instructions on teleporting\nDOT, check this\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-teleport"},"tutorial on Teleports"),"."),(0,o.kt)("p",null,"Assuming you have the required DOT balance on\nyour Asset Hub account, the following instructions should let you successfully create an asset on\nthe Asset Hub"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Access the Asset Hub through ",(0,o.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),"."),(0,o.kt)("li",{parentName:"ul"},"Navigate to Network > Assets.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Navigate to Assets page",src:s(85353).Z,width:"1710",height:"554"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Click on the create button and you will be presented with a pop-up window. Choose the creator\naccount, name of the asset to be displayed on the Asset Hub, the asset's symbol, number of\ndecimals for the asset, the minimum balance required to hold this asset on an Asset Hub account\nand the most important field of your asset - the unique asset ID. The UI would not let you enter\nan ID that has already been taken. After all the details are entered, click on the next button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Add Asset Metadata",src:s(3910).Z,width:"1510",height:"798"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Choose the admin, issuer and the freezer accounts for your asset and click on the create button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Asset managing accounts",src:s(25965).Z,width:"1518",height:"510"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Sign and submit the transaction (If you like to verify the transaction details before signing, you\ncan click on the dropdown button pointed by the arrow in the snapshot below).")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Sign asset creating transaction",src:s(39764).Z,width:"1520",height:"610"})),(0,o.kt)("p",null,"If the transaction is successful, you should see the asset and its details displayed in the\nNetwork > Assets page on the Asset Hub."))}b.isMDXComponent=!0},85353:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-0-71cbceb69c712729d7920b4575ab8f46.png"},3910:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-1-6f406281abdca9f5c2941ebd4d9479fd.png"},25965:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-2-2fd6118841d0c4e037d5f51c6b1010e1.png"},39764:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-3-3952e84a1b7c80239e8fb1f907af2583.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/f7acb151.ff0cc0e3.js b/assets/js/f7acb151.ff0cc0e3.js new file mode 100644 index 000000000000..851ced1f06f8 --- /dev/null +++ b/assets/js/f7acb151.ff0cc0e3.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[5483],{47940:(e,t,s)=>{"use strict";s.d(t,{Z:()=>p});var a=s(74165),n=s(15861),o=s(67294),r=s(87152),i=s(34200),u=s(67425);function l(e,t,s){return c.apply(this,arguments)}function c(){return(c=(0,n.Z)((0,a.Z)().mark((function e(t,s,n){var o,u,l,c,d;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=void 0,u=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return 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 l=new r.U(o),e.next=21,i.G.create({provider:l});case 21:c=e.sent,(d=s.split(".")).forEach((function(e){e in c&&(c=c[e])})),e.t1=d[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return u=c.toString(),e.abrupt("break",35);case 29:return e.next=31,c();case 31:return u=(u=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+d[0]+") in "+s);case 35:return e.abrupt("return",u);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function d(e,t,s,a){switch(t){case"humanReadable":(0,u.HumanReadable)(e,s,a);break;case"precise":(0,u.Precise)(e,s,a);break;case"blocksToDays":(0,u.BlocksToDays)(e,a);break;case"percentage":(0,u.Percentage)(e,a);break;case"arrayLength":(0,u.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const p=function(e){var t=e.network,s=e.path,r=e.defaultValue,i=e.filter,u=void 0===i?void 0:i,c=(0,o.useState)(""),p=c[0],h=c[1];return t=t.toLowerCase(),(0,o.useEffect)((function(){void 0!==u?d(r.toString(),u,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://statemine-rpc.polkadot.io/";break;case"statemint":e="wss://statemint-rpc.polkadot.io/";break;default:console.log("Unknown network provided, "+t)}if(void 0===e)console.log("Failed to connect to a valid websocket, applying default");else{var o=function(){var e=(0,n.Z)((0,a.Z)().mark((function e(){var n;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l(t,s,h);case 2:if(void 0!==(n=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==u?d(n,u,t,h):h(n);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{o()}catch(i){console.log(i)}}}),[]),p}},67425:e=>{var t={polkadot:{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,a){var n=void 0;if("polkadot"===s||"statemint"===s)n=3;else{if("kusama"!==s&&"statemine"!==s)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");n=6}e=parseFloat(e),a((e=Number.isInteger(e/t[s].precision)?e/t[s].precision+" "+t[s].symbol:(e/t[s].precision).toFixed(n)+" "+t[s].symbol).toString())},Precise:function(e,s,a){a(e=(e=parseFloat(e))/t[s].precision+" "+t[s].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},Percentage:function(e,t){t((e/=1e7).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},49736:(e,t,s)=>{"use strict";s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>b,frontMatter:()=>u,metadata:()=>c,toc:()=>p});var a=s(87462),n=s(63366),o=(s(67294),s(3905)),r=s(47940),i=["components"],u={id:"learn-guides-assets-create",title:"Creating Assets with the Asset Hub",sidebar_label:"Creating Assets",description:"Advanced How-to Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint"],slug:"../learn-guides-assets-create"},l=void 0,c={unversionedId:"learn/learn-guides-assets-create",id:"learn/learn-guides-assets-create",title:"Creating Assets with the Asset Hub",description:"Advanced How-to Guides about Creating Assets.",source:"@site/../docs/learn/learn-guides-assets-create.md",sourceDirName:"learn",slug:"/learn-guides-assets-create",permalink:"/docs/learn-guides-assets-create",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-guides-assets-create.md",tags:[],version:"current",lastUpdatedBy:"Radha",lastUpdatedAt:1697176471,formattedLastUpdatedAt:"Oct 13, 2023",frontMatter:{id:"learn-guides-assets-create",title:"Creating Assets with the Asset Hub",sidebar_label:"Creating Assets",description:"Advanced How-to Guides about Creating Assets.",keywords:["asset hub","assets","statemine","statemint"],slug:"../learn-guides-assets-create"},sidebar:"docs",previous:{title:"Asset Hub",permalink:"/docs/learn-guides-assets-index"},next:{title:"Asset Hub Ledger App",permalink:"/docs/learn-guides-assets-ledger"}},d={},p=[{value:"Creating Assets on the Asset Hub",id:"creating-assets-on-the-asset-hub",level:2}],h={toc:p},k="wrapper";function b(e){var t=e.components,u=(0,n.Z)(e,i);return(0,o.kt)(k,(0,a.Z)({},h,u,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The Asset Hub is a generic assets system parachain which provides functionality for deploying and\ntransferring assets \u2014 both Fungible and Non-Fungible Tokens (NFTs). The native token of the Asset\nhub is DOT. The Existential Deposit (ED),\ntransaction fees, and the deposits for proxy/multisig operations are about 1/10th of the values on\nthe Relay chains. For example, the Existential Deposit of an Asset Hub account is\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.balances.existentialDeposit",defaultValue:1e9,filter:"humanReadable",mdxType:"RPC"}),",\n","\nwhen compared to\n",(0,o.kt)(r.Z,{network:"polkadot",path:"consts.balances.existentialDeposit",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"})," on Polkadot\n",".\nApart from the core protocol token DOT, the\nassets held on the Asset Hub can be broadly categorized as"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Assets backed by an on-chain protocol\u2019s utility"),(0,o.kt)("li",{parentName:"ul"},"Assets with off-chain backing"),(0,o.kt)("li",{parentName:"ul"},"Assets without any backing")),(0,o.kt)("p",null,"For additional background on the Asset Hub check out\n",(0,o.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-"},"this support article"),"."),(0,o.kt)("h2",{id:"creating-assets-on-the-asset-hub"},"Creating Assets on the Asset Hub"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Before minting assets on the Asset Hub, we recommend that you try out this tutorial on Westmint,\nwhich is a parachain on Westend. The WND tokens (Westies) are free and are available through a\n",(0,o.kt)("a",{parentName:"p",href:"https://wiki.polkadot.network/docs/learn-DOT#getting-westies"},"faucet"),"."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"The images in the guides below are for Polkadot, but they also apply to Kusama."))),(0,o.kt)("p",null,"To create an asset on the Asset Hub, you would need a deposit of\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.assetDeposit",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"\n","\nand around\n",(0,o.kt)(r.Z,{network:"statemint",path:"consts.assets.metadataDepositBase",defaultValue:20068e5,filter:"humanReadable",mdxType:"RPC"}),"\n","\nfor the metadata. Before you create an asset on the Asset Hub, ensure that your Asset Hub account\nbalance is a bit more than the sum of those two deposits, which should seamlessly account for the\nrequired deposits and transaction fees. You can send\nDOT from a\nPolkadot account to a the Asset Hub account\nusing the teleport functionality. For instructions on teleporting\nDOT, check this\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-teleport"},"tutorial on Teleports"),"."),(0,o.kt)("p",null,"Assuming you have the required DOT balance on\nyour Asset Hub account, the following instructions should let you successfully create an asset on\nthe Asset Hub"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Access the Asset Hub through ",(0,o.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS UI"),"."),(0,o.kt)("li",{parentName:"ul"},"Navigate to Network > Assets.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Navigate to Assets page",src:s(85353).Z,width:"1710",height:"554"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Click on the create button and you will be presented with a pop-up window. Choose the creator\naccount, name of the asset to be displayed on the Asset Hub, the asset's symbol, number of\ndecimals for the asset, the minimum balance required to hold this asset on an Asset Hub account\nand the most important field of your asset - the unique asset ID. The UI would not let you enter\nan ID that has already been taken. After all the details are entered, click on the next button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Add Asset Metadata",src:s(3910).Z,width:"1510",height:"798"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Choose the admin, issuer and the freezer accounts for your asset and click on the create button.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Asset managing accounts",src:s(25965).Z,width:"1518",height:"510"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Sign and submit the transaction (If you like to verify the transaction details before signing, you\ncan click on the dropdown button pointed by the arrow in the snapshot below).")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Sign asset creating transaction",src:s(39764).Z,width:"1520",height:"610"})),(0,o.kt)("p",null,"If the transaction is successful, you should see the asset and its details displayed in the\nNetwork > Assets page on the Asset Hub."))}b.isMDXComponent=!0},85353:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-0-71cbceb69c712729d7920b4575ab8f46.png"},3910:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-1-6f406281abdca9f5c2941ebd4d9479fd.png"},25965:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-2-2fd6118841d0c4e037d5f51c6b1010e1.png"},39764:(e,t,s)=>{"use strict";s.d(t,{Z:()=>a});const a=s.p+"assets/images/hub-asset-3-3952e84a1b7c80239e8fb1f907af2583.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.2c8f5a5f.js b/assets/js/runtime~main.97b1dc82.js similarity index 83% rename from assets/js/runtime~main.2c8f5a5f.js rename to assets/js/runtime~main.97b1dc82.js index 919cfdf2854f..9c711afe59c9 100644 --- a/assets/js/runtime~main.2c8f5a5f.js +++ b/assets/js/runtime~main.97b1dc82.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,c,a,d={},b={};function r(e){var f=b[e];if(void 0!==f)return f.exports;var c=b[e]={id:e,loaded:!1,exports:{}};return d[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=d,e=[],r.O=(f,c,a,d)=>{if(!c){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,a,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},c=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 d=Object.create(null);r.r(d);var b={};f=f||[null,c({}),c([]),c(c)];for(var t=2&a&&e;"object"==typeof t&&!~f.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var c in f)r.o(f,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:f[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,c)=>(r.f[c](e,f),f)),[])),r.u=e=>"assets/js/"+({1:"f4fb6e9c",6:"408829bd",12:"1d6d4797",53:"935f2afb",63:"9f319605",192:"f189ca9f",217:"c7a044bb",250:"f2717f8e",315:"9528ac88",502:"2d429218",537:"3829cf1d",601:"0c06bca3",609:"d569989b",626:"79d4be33",657:"386bfe51",691:"145746f5",785:"04a995e6",810:"23498fd5",1062:"f90fa732",1083:"899aadcc",1090:"cfd53ea4",1211:"73c3bebc",1213:"25f2bd2a",1239:"f359a251",1288:"fabebe44",1299:"74df6a22",1372:"b61f6dc7",1415:"4d76887f",1419:"f750c690",1446:"5136ee31",1481:"4dff184a",1486:"8dd7cee0",1494:"b21dd8a7",1506:"c977dfe8",1529:"ffe9c3c9",1585:"33b0bcab",1592:"b336bb09",1598:"7fbac68a",1678:"fa343ad1",1686:"f7191335",1703:"a5002e4a",1723:"0df78d26",1748:"987d08ef",1774:"9e6341e5",1786:"d9ef69a7",1825:"48074a08",1872:"78e1e977",1953:"1ed3671a",1957:"df154d69",1966:"f47489cd",1979:"0cb62240",2008:"4f031749",2042:"dd32e389",2078:"84f79495",2117:"21877fa5",2136:"ecb495b7",2169:"1646726c",2194:"6151e7ce",2242:"f3027c84",2248:"da9f79cb",2354:"493c7fdf",2399:"8d3a1bf8",2483:"d6d2b2d5",2505:"9a101178",2507:"7c78c461",2508:"918b38b6",2552:"863c4753",2609:"db0b42b0",2633:"e2e89062",2665:"f4130007",2677:"ece9fdae",2704:"f3bde756",2712:"c2c6a3a6",2754:"78868b16",2758:"9e3f6a8a",2791:"7d54ab5a",2884:"5d69d9d4",2909:"f4200fe5",2914:"2be0d940",2949:"2ea50c63",3066:"af40287e",3132:"85afe03a",3262:"8a8a7d05",3330:"e31fc461",3332:"3497b7c6",3347:"32dac8d4",3348:"7ccc428f",3356:"f14351c1",3484:"5c90fc9b",3513:"41b7b3e8",3554:"d5909206",3599:"21899dd2",3620:"f137ce68",3635:"75a6958b",3665:"f1585bfb",3667:"b0cbc1d4",3668:"b225a2ce",3669:"dbbd9e76",3757:"bea375d6",3842:"ff6596ea",3933:"cda87995",3944:"fac80962",3945:"f8518919",4004:"ec3b6a32",4097:"eef3f1dd",4105:"702d5d94",4174:"a7c27f4d",4195:"c4f5d8e4",4355:"19ed4d4c",4363:"f2c21b54",4379:"c662f00a",4428:"991ceaa9",4445:"4d9b9869",4476:"f4003c83",4507:"a7b37b86",4537:"1ae2b102",4541:"3e56470e",4543:"295fff6c",4566:"694e7470",4620:"48d75399",4634:"54338ffb",4666:"f41c4e9d",4672:"43ee4f22",4696:"1dc05242",4909:"f0855ff9",4916:"c1bbdb2a",5005:"320c8a05",5011:"7e9389ad",5013:"c41801b5",5103:"db039c7f",5157:"d27ae88d",5281:"31bd35e0",5422:"b3719d54",5483:"f7acb151",5492:"1882e65d",5526:"0c68fb82",5548:"d6b0148d",5651:"9e2042f5",5704:"b9b4ec9e",5989:"fbf58567",6104:"c7c5ba1a",6140:"32e8da05",6220:"d01f45b7",6253:"a29dc56e",6255:"452ad91d",6277:"a62d9768",6294:"bbba852d",6312:"dbc4065c",6357:"43cda9e8",6373:"ceaa29cb",6482:"49816380",6585:"13b7bafa",6598:"ca9fe671",6689:"f2521980",6730:"fea93377",6776:"666ba125",6827:"279fb1d6",6862:"60e73337",6918:"29a046f3",6920:"ccc1222e",6946:"4642ab5c",7022:"543610b9",7061:"feea648c",7202:"4a8eb552",7211:"f44ed8f8",7280:"fbea1897",7288:"6f1a81b8",7313:"db3d6c4d",7368:"bb8b1738",7388:"bd701914",7466:"a5b3561d",7485:"d3db551a",7633:"b940de31",7654:"c07c2447",7683:"cc44e8fd",7714:"591eca19",7778:"41871d53",7799:"8b670b2b",7823:"9e76b49d",7830:"15985664",7837:"0a3f0c9b",7858:"d6a97e7e",7908:"33bbe353",7918:"17896441",7920:"1a4e3797",7940:"ad762f86",7961:"a2800a5b",8034:"fecdcc34",8067:"69b97ecd",8080:"77a2b809",8115:"8247eba8",8138:"694672cd",8139:"386099fc",8178:"9a679a70",8215:"30d868e8",8236:"ffd76171",8270:"12331e8b",8355:"c91a9c06",8361:"824749c6",8618:"e4f3654b",8648:"71ed82b9",8702:"a74a59a0",8757:"83d4859f",8791:"ab138bf8",8831:"3bd77df4",8855:"d3a753cf",8860:"766a10e1",8866:"98a30fd8",8876:"31c99aa1",8901:"b48c599b",9062:"b38833d4",9071:"60738e36",9112:"a4b71220",9126:"924835c1",9217:"64c7e1cc",9226:"2f3b630e",9247:"8167490d",9276:"e344dd79",9315:"6d2ffbf3",9323:"131c7f55",9383:"a996ffc3",9478:"c7a2145e",9514:"1be78505",9548:"f95cee6f",9626:"32c9742a",9764:"dc776cbc",9779:"cd144357",9802:"1e15616a",9806:"51fbc2c9",9817:"14eb3368",9905:"b0cb055f",9993:"482bfb5c"}[e]||e)+"."+{1:"5563b650",6:"1f73546c",12:"1d49c46e",53:"989b826e",63:"4e5acc1b",192:"2ac0e4f9",217:"0102c432",250:"11cfd82d",315:"5a1a76c0",502:"b0bc7324",537:"2aa85719",601:"fdd54faa",609:"7ea29085",626:"04fdcb9b",657:"f5513d14",691:"057bf6a6",785:"8b77bad6",810:"a76eb85f",1062:"f79ad7a8",1083:"ac5baa92",1090:"26932415",1211:"ff50cb20",1213:"fee6731f",1239:"393038ea",1288:"a5dae372",1299:"7dda7011",1372:"4867e413",1415:"68f49da4",1419:"3038c1cd",1446:"2265d608",1481:"ee5894bb",1486:"b802faeb",1494:"06ba09e6",1506:"13ff4738",1529:"5e89d63c",1585:"e1ec66d3",1592:"5581008d",1598:"c2253902",1678:"fd4b34be",1686:"6d75f37a",1703:"11033614",1723:"679d1be0",1748:"4e45b476",1774:"1c405b46",1786:"6a2d15ec",1825:"7886665d",1872:"342366ba",1953:"e4392cf0",1957:"d99c9092",1966:"da9f44ad",1979:"6d282955",2008:"d9fd5038",2042:"58ff2936",2078:"17164550",2117:"17c8218b",2136:"dbf5ae7f",2169:"4fbb62fc",2194:"dc7e4b47",2242:"ed88ff37",2248:"f8b898cb",2354:"06d84356",2399:"5a96a9d0",2483:"e1906e64",2505:"93f7a5dc",2507:"1df35914",2508:"fef65b10",2552:"6484aed3",2609:"c959d9e0",2633:"07cb844a",2665:"5df8cc2a",2677:"6a600a13",2704:"c83746c5",2712:"3547dfc9",2754:"82d7eade",2758:"7a12fb0f",2791:"e6f92028",2859:"f06cf7d7",2884:"3b223315",2909:"025c4bbe",2914:"480a9951",2949:"7738f0eb",3066:"2d6ba895",3132:"85a16703",3262:"c248e7da",3330:"f8f9d28c",3332:"59059207",3347:"cbbdbed4",3348:"ec74ef03",3356:"92ca1efd",3484:"e60b3258",3513:"e0fe0ede",3554:"6dc12371",3599:"e4d7458a",3620:"c1d05422",3635:"380802aa",3665:"fb1d42b5",3667:"b8d02200",3668:"b34aa74c",3669:"127bb89f",3757:"bc4ede3b",3842:"e0217335",3933:"72a66ef4",3944:"a4c24ce9",3945:"b5d18aaa",4004:"5b01424d",4097:"075dba12",4105:"3b4a799e",4174:"93985089",4195:"66467c10",4355:"2d9fa8b7",4363:"e88e5818",4379:"2d13fe17",4428:"67f2e04e",4445:"75e079a4",4476:"5948c0f4",4507:"bed350d5",4537:"c965ef47",4541:"978ae83c",4543:"d644a3e2",4566:"ab0d60ad",4620:"d02a17da",4634:"1cdb4851",4666:"abf3d2b4",4672:"7513894d",4696:"27d5f43b",4909:"3ae4713d",4916:"4b3a7688",4972:"2c004fcc",5005:"2dd41bcb",5011:"98b0975e",5013:"da533e91",5103:"3f268ad3",5157:"899f2267",5281:"6761b31b",5422:"8c5403fb",5483:"daef5619",5492:"7b10a32b",5526:"20b79d53",5548:"e68f018e",5651:"701df6e6",5704:"70bd0ba6",5989:"0fdc298d",6104:"5ca45843",6140:"952b82c2",6220:"8b344451",6253:"fe535738",6255:"8509f60e",6277:"a769d3bc",6294:"b077023f",6312:"ed91dbbd",6316:"86a075e6",6357:"6a6a3bfc",6373:"b8a24443",6482:"502a0b67",6495:"4071f460",6585:"69ef2e32",6598:"5f760aa9",6689:"60ffe859",6730:"52c45925",6776:"0a7bd7c5",6780:"35cedf78",6827:"3fb13981",6862:"494b1047",6918:"61dac2e1",6920:"a34cbecc",6945:"96d36007",6946:"62348511",7022:"083a8378",7061:"89e327b0",7202:"795d2adc",7211:"bf56e06e",7280:"47e41d56",7288:"59752a80",7313:"7630b651",7368:"77d8ddea",7388:"53d48c10",7466:"6c38d255",7485:"82d47cfd",7633:"522211f9",7654:"95c0cbce",7683:"7de880dc",7714:"a69296c3",7724:"05bda7f2",7778:"8da5b4da",7799:"5d0c65da",7823:"6c8a30f2",7830:"a2703576",7837:"b9260b47",7858:"f9862ed2",7908:"0da511b2",7918:"7dd2ce47",7920:"56c00901",7940:"e5c7d8f2",7961:"c0d1b031",8034:"dca0d1af",8067:"af36ecc3",8080:"1adae4dd",8115:"2ebb714e",8138:"11462c7d",8139:"f33f53cf",8178:"62f5ed0b",8215:"775d309b",8236:"63fecdb9",8270:"1dd5ba80",8355:"caef1eb9",8361:"5c7bc601",8618:"f5896277",8648:"34316a10",8702:"a65a145b",8757:"4f1ee155",8791:"00a01805",8831:"16eb75ba",8855:"9d00af7a",8860:"48171767",8866:"4bdda915",8876:"a30609d2",8894:"ba661129",8901:"cc3ae736",9062:"9cc9144f",9071:"0695351a",9112:"38b794db",9126:"f0242db8",9217:"d87f81ce",9226:"3d3d91d5",9247:"a0154dc8",9276:"c9f1c397",9315:"d5006aa3",9323:"faa9a3ec",9383:"dec8392d",9447:"8074d0f3",9478:"8f4b04f5",9487:"ca8bca46",9514:"693800c6",9548:"f095b5ce",9626:"b43c6d01",9764:"012ce7bf",9779:"4c7efdf9",9802:"11684b0f",9806:"c3977137",9817:"beb63dbf",9905:"3e1ce1bd",9993:"98eb3afc"}[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,f)=>Object.prototype.hasOwnProperty.call(e,f),a={},r.l=(e,f,c,d)=>{if(a[e])a[e].push(f);else{var b,t;if(void 0!==c)for(var o=document.getElementsByTagName("script"),n=0;n{b.onerror=b.onload=null,clearTimeout(u);var d=a[e];if(delete a[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(c))),f)return f(c)},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",f4fb6e9c:"1","408829bd":"6","1d6d4797":"12","935f2afb":"53","9f319605":"63",f189ca9f:"192",c7a044bb:"217",f2717f8e:"250","9528ac88":"315","2d429218":"502","3829cf1d":"537","0c06bca3":"601",d569989b:"609","79d4be33":"626","386bfe51":"657","145746f5":"691","04a995e6":"785","23498fd5":"810",f90fa732:"1062","899aadcc":"1083",cfd53ea4:"1090","73c3bebc":"1211","25f2bd2a":"1213",f359a251:"1239",fabebe44:"1288","74df6a22":"1299",b61f6dc7:"1372","4d76887f":"1415",f750c690:"1419","5136ee31":"1446","4dff184a":"1481","8dd7cee0":"1486",b21dd8a7:"1494",c977dfe8:"1506",ffe9c3c9:"1529","33b0bcab":"1585",b336bb09:"1592","7fbac68a":"1598",fa343ad1:"1678",f7191335:"1686",a5002e4a:"1703","0df78d26":"1723","987d08ef":"1748","9e6341e5":"1774",d9ef69a7:"1786","48074a08":"1825","78e1e977":"1872","1ed3671a":"1953",df154d69:"1957",f47489cd:"1966","0cb62240":"1979","4f031749":"2008",dd32e389:"2042","84f79495":"2078","21877fa5":"2117",ecb495b7:"2136","1646726c":"2169","6151e7ce":"2194",f3027c84:"2242",da9f79cb:"2248","493c7fdf":"2354","8d3a1bf8":"2399",d6d2b2d5:"2483","9a101178":"2505","7c78c461":"2507","918b38b6":"2508","863c4753":"2552",db0b42b0:"2609",e2e89062:"2633",f4130007:"2665",ece9fdae:"2677",f3bde756:"2704",c2c6a3a6:"2712","78868b16":"2754","9e3f6a8a":"2758","7d54ab5a":"2791","5d69d9d4":"2884",f4200fe5:"2909","2be0d940":"2914","2ea50c63":"2949",af40287e:"3066","85afe03a":"3132","8a8a7d05":"3262",e31fc461:"3330","3497b7c6":"3332","32dac8d4":"3347","7ccc428f":"3348",f14351c1:"3356","5c90fc9b":"3484","41b7b3e8":"3513",d5909206:"3554","21899dd2":"3599",f137ce68:"3620","75a6958b":"3635",f1585bfb:"3665",b0cbc1d4:"3667",b225a2ce:"3668",dbbd9e76:"3669",bea375d6:"3757",ff6596ea:"3842",cda87995:"3933",fac80962:"3944",f8518919:"3945",ec3b6a32:"4004",eef3f1dd:"4097","702d5d94":"4105",a7c27f4d:"4174",c4f5d8e4:"4195","19ed4d4c":"4355",f2c21b54:"4363",c662f00a:"4379","991ceaa9":"4428","4d9b9869":"4445",f4003c83:"4476",a7b37b86:"4507","1ae2b102":"4537","3e56470e":"4541","295fff6c":"4543","694e7470":"4566","48d75399":"4620","54338ffb":"4634",f41c4e9d:"4666","43ee4f22":"4672","1dc05242":"4696",f0855ff9:"4909",c1bbdb2a:"4916","320c8a05":"5005","7e9389ad":"5011",c41801b5:"5013",db039c7f:"5103",d27ae88d:"5157","31bd35e0":"5281",b3719d54:"5422",f7acb151:"5483","1882e65d":"5492","0c68fb82":"5526",d6b0148d:"5548","9e2042f5":"5651",b9b4ec9e:"5704",fbf58567:"5989",c7c5ba1a:"6104","32e8da05":"6140",d01f45b7:"6220",a29dc56e:"6253","452ad91d":"6255",a62d9768:"6277",bbba852d:"6294",dbc4065c:"6312","43cda9e8":"6357",ceaa29cb:"6373","13b7bafa":"6585",ca9fe671:"6598",f2521980:"6689",fea93377:"6730","666ba125":"6776","279fb1d6":"6827","60e73337":"6862","29a046f3":"6918",ccc1222e:"6920","4642ab5c":"6946","543610b9":"7022",feea648c:"7061","4a8eb552":"7202",f44ed8f8:"7211",fbea1897:"7280","6f1a81b8":"7288",db3d6c4d:"7313",bb8b1738:"7368",bd701914:"7388",a5b3561d:"7466",d3db551a:"7485",b940de31:"7633",c07c2447:"7654",cc44e8fd:"7683","591eca19":"7714","41871d53":"7778","8b670b2b":"7799","9e76b49d":"7823","0a3f0c9b":"7837",d6a97e7e:"7858","33bbe353":"7908","1a4e3797":"7920",ad762f86:"7940",a2800a5b:"7961",fecdcc34:"8034","69b97ecd":"8067","77a2b809":"8080","8247eba8":"8115","694672cd":"8138","386099fc":"8139","9a679a70":"8178","30d868e8":"8215",ffd76171:"8236","12331e8b":"8270",c91a9c06:"8355","824749c6":"8361",e4f3654b:"8618","71ed82b9":"8648",a74a59a0:"8702","83d4859f":"8757",ab138bf8:"8791","3bd77df4":"8831",d3a753cf:"8855","766a10e1":"8860","98a30fd8":"8866","31c99aa1":"8876",b48c599b:"8901",b38833d4:"9062","60738e36":"9071",a4b71220:"9112","924835c1":"9126","64c7e1cc":"9217","2f3b630e":"9226","8167490d":"9247",e344dd79:"9276","6d2ffbf3":"9315","131c7f55":"9323",a996ffc3:"9383",c7a2145e:"9478","1be78505":"9514",f95cee6f:"9548","32c9742a":"9626",dc776cbc:"9764",cd144357:"9779","1e15616a":"9802","51fbc2c9":"9806","14eb3368":"9817",b0cb055f:"9905","482bfb5c":"9993"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,c)=>{var a=r.o(e,f)?e[f]:void 0;if(0!==a)if(a)c.push(a[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((c,d)=>a=e[f]=[c,d]));c.push(a[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(c=>{if(r.o(e,f)&&(0!==(a=e[f])&&(e[f]=void 0),a)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,a[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,c)=>{var a,d,[b,t,o]=c,n=0;if(b.some((f=>0!==e[f]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(f&&f(c);n{"use strict";var e,c,f,a,d={},b={};function r(e){var c=b[e];if(void 0!==c)return c.exports;var f=b[e]={id:e,loaded:!1,exports:{}};return d[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=d,e=[],r.O=(c,f,a,d)=>{if(!f){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[f,a,d]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},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 d=Object.create(null);r.r(d);var b={};c=c||[null,f({}),f([]),f(f)];for(var t=2&a&&e;"object"==typeof t&&!~c.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((c=>b[c]=()=>e[c]));return b.default=()=>e,r.d(d,b),d},r.d=(e,c)=>{for(var f in c)r.o(c,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:c[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,f)=>(r.f[f](e,c),c)),[])),r.u=e=>"assets/js/"+({1:"f4fb6e9c",6:"408829bd",12:"1d6d4797",53:"935f2afb",63:"9f319605",192:"f189ca9f",217:"c7a044bb",250:"f2717f8e",315:"9528ac88",502:"2d429218",537:"3829cf1d",601:"0c06bca3",609:"d569989b",626:"79d4be33",657:"386bfe51",691:"145746f5",785:"04a995e6",810:"23498fd5",1062:"f90fa732",1083:"899aadcc",1090:"cfd53ea4",1211:"73c3bebc",1213:"25f2bd2a",1239:"f359a251",1288:"fabebe44",1299:"74df6a22",1372:"b61f6dc7",1415:"4d76887f",1419:"f750c690",1446:"5136ee31",1481:"4dff184a",1486:"8dd7cee0",1494:"b21dd8a7",1506:"c977dfe8",1529:"ffe9c3c9",1585:"33b0bcab",1592:"b336bb09",1598:"7fbac68a",1678:"fa343ad1",1686:"f7191335",1703:"a5002e4a",1723:"0df78d26",1748:"987d08ef",1774:"9e6341e5",1786:"d9ef69a7",1825:"48074a08",1872:"78e1e977",1953:"1ed3671a",1957:"df154d69",1966:"f47489cd",1979:"0cb62240",2008:"4f031749",2042:"dd32e389",2078:"84f79495",2117:"21877fa5",2136:"ecb495b7",2169:"1646726c",2194:"6151e7ce",2242:"f3027c84",2248:"da9f79cb",2354:"493c7fdf",2399:"8d3a1bf8",2483:"d6d2b2d5",2505:"9a101178",2507:"7c78c461",2508:"918b38b6",2552:"863c4753",2609:"db0b42b0",2633:"e2e89062",2665:"f4130007",2677:"ece9fdae",2704:"f3bde756",2712:"c2c6a3a6",2754:"78868b16",2758:"9e3f6a8a",2791:"7d54ab5a",2884:"5d69d9d4",2909:"f4200fe5",2914:"2be0d940",2949:"2ea50c63",3066:"af40287e",3132:"85afe03a",3262:"8a8a7d05",3330:"e31fc461",3332:"3497b7c6",3347:"32dac8d4",3348:"7ccc428f",3356:"f14351c1",3484:"5c90fc9b",3513:"41b7b3e8",3554:"d5909206",3599:"21899dd2",3620:"f137ce68",3635:"75a6958b",3665:"f1585bfb",3667:"b0cbc1d4",3668:"b225a2ce",3669:"dbbd9e76",3757:"bea375d6",3842:"ff6596ea",3933:"cda87995",3944:"fac80962",3945:"f8518919",4004:"ec3b6a32",4097:"eef3f1dd",4105:"702d5d94",4174:"a7c27f4d",4195:"c4f5d8e4",4355:"19ed4d4c",4363:"f2c21b54",4379:"c662f00a",4428:"991ceaa9",4445:"4d9b9869",4476:"f4003c83",4507:"a7b37b86",4537:"1ae2b102",4541:"3e56470e",4543:"295fff6c",4566:"694e7470",4620:"48d75399",4634:"54338ffb",4666:"f41c4e9d",4672:"43ee4f22",4696:"1dc05242",4909:"f0855ff9",4916:"c1bbdb2a",5005:"320c8a05",5011:"7e9389ad",5013:"c41801b5",5103:"db039c7f",5157:"d27ae88d",5281:"31bd35e0",5422:"b3719d54",5483:"f7acb151",5492:"1882e65d",5526:"0c68fb82",5548:"d6b0148d",5651:"9e2042f5",5704:"b9b4ec9e",5989:"fbf58567",6104:"c7c5ba1a",6140:"32e8da05",6220:"d01f45b7",6253:"a29dc56e",6255:"452ad91d",6277:"a62d9768",6294:"bbba852d",6312:"dbc4065c",6357:"43cda9e8",6373:"ceaa29cb",6482:"49816380",6585:"13b7bafa",6598:"ca9fe671",6689:"f2521980",6730:"fea93377",6776:"666ba125",6827:"279fb1d6",6862:"60e73337",6918:"29a046f3",6920:"ccc1222e",6946:"4642ab5c",7022:"543610b9",7061:"feea648c",7202:"4a8eb552",7211:"f44ed8f8",7280:"fbea1897",7288:"6f1a81b8",7313:"db3d6c4d",7368:"bb8b1738",7388:"bd701914",7466:"a5b3561d",7485:"d3db551a",7633:"b940de31",7654:"c07c2447",7683:"cc44e8fd",7714:"591eca19",7778:"41871d53",7799:"8b670b2b",7823:"9e76b49d",7830:"15985664",7837:"0a3f0c9b",7858:"d6a97e7e",7908:"33bbe353",7918:"17896441",7920:"1a4e3797",7940:"ad762f86",7961:"a2800a5b",8034:"fecdcc34",8067:"69b97ecd",8080:"77a2b809",8115:"8247eba8",8138:"694672cd",8139:"386099fc",8178:"9a679a70",8215:"30d868e8",8236:"ffd76171",8270:"12331e8b",8355:"c91a9c06",8361:"824749c6",8618:"e4f3654b",8648:"71ed82b9",8702:"a74a59a0",8757:"83d4859f",8791:"ab138bf8",8831:"3bd77df4",8855:"d3a753cf",8860:"766a10e1",8866:"98a30fd8",8876:"31c99aa1",8901:"b48c599b",9062:"b38833d4",9071:"60738e36",9112:"a4b71220",9126:"924835c1",9217:"64c7e1cc",9226:"2f3b630e",9247:"8167490d",9276:"e344dd79",9315:"6d2ffbf3",9323:"131c7f55",9383:"a996ffc3",9478:"c7a2145e",9514:"1be78505",9548:"f95cee6f",9626:"32c9742a",9764:"dc776cbc",9779:"cd144357",9802:"1e15616a",9806:"51fbc2c9",9817:"14eb3368",9905:"b0cb055f",9993:"482bfb5c"}[e]||e)+"."+{1:"5563b650",6:"1f73546c",12:"1d49c46e",53:"989b826e",63:"4e5acc1b",192:"2ac0e4f9",217:"0102c432",250:"11cfd82d",315:"5a1a76c0",502:"b0bc7324",537:"2aa85719",601:"fdd54faa",609:"7ea29085",626:"04fdcb9b",657:"f5513d14",691:"057bf6a6",785:"8b77bad6",810:"a76eb85f",1062:"f79ad7a8",1083:"ac5baa92",1090:"26932415",1211:"ff50cb20",1213:"fee6731f",1239:"393038ea",1288:"a5dae372",1299:"7dda7011",1372:"4867e413",1415:"68f49da4",1419:"3038c1cd",1446:"2265d608",1481:"ee5894bb",1486:"b802faeb",1494:"b887110e",1506:"13ff4738",1529:"5e89d63c",1585:"e1ec66d3",1592:"5581008d",1598:"c2253902",1678:"fd4b34be",1686:"6d75f37a",1703:"11033614",1723:"679d1be0",1748:"4e45b476",1774:"1c405b46",1786:"6a2d15ec",1825:"7886665d",1872:"342366ba",1953:"e4392cf0",1957:"d99c9092",1966:"da9f44ad",1979:"6d282955",2008:"d9fd5038",2042:"58ff2936",2078:"17164550",2117:"17c8218b",2136:"dbf5ae7f",2169:"4fbb62fc",2194:"dc7e4b47",2242:"ed88ff37",2248:"f8b898cb",2354:"06d84356",2399:"5a96a9d0",2483:"e1906e64",2505:"93f7a5dc",2507:"1df35914",2508:"fef65b10",2552:"6484aed3",2609:"c959d9e0",2633:"07cb844a",2665:"5df8cc2a",2677:"6a600a13",2704:"c83746c5",2712:"3547dfc9",2754:"82d7eade",2758:"7a12fb0f",2791:"e6f92028",2859:"f06cf7d7",2884:"3b223315",2909:"895b93fd",2914:"480a9951",2949:"7738f0eb",3066:"2d6ba895",3132:"85a16703",3262:"c248e7da",3330:"f8f9d28c",3332:"59059207",3347:"cbbdbed4",3348:"ec74ef03",3356:"92ca1efd",3484:"e60b3258",3513:"e0fe0ede",3554:"6dc12371",3599:"e4d7458a",3620:"c1d05422",3635:"380802aa",3665:"fb1d42b5",3667:"b8d02200",3668:"b34aa74c",3669:"127bb89f",3757:"bc4ede3b",3842:"e0217335",3933:"72a66ef4",3944:"a4c24ce9",3945:"b5d18aaa",4004:"5b01424d",4097:"075dba12",4105:"3b4a799e",4174:"93985089",4195:"66467c10",4355:"2d9fa8b7",4363:"e88e5818",4379:"2d13fe17",4428:"67f2e04e",4445:"75e079a4",4476:"5948c0f4",4507:"bed350d5",4537:"e890f619",4541:"978ae83c",4543:"d644a3e2",4566:"ab0d60ad",4620:"a1e674d1",4634:"1cdb4851",4666:"abf3d2b4",4672:"7513894d",4696:"27d5f43b",4909:"3ae4713d",4916:"4b3a7688",4972:"2c004fcc",5005:"2dd41bcb",5011:"98b0975e",5013:"da533e91",5103:"3f268ad3",5157:"899f2267",5281:"6761b31b",5422:"8c5403fb",5483:"ff0cc0e3",5492:"7b10a32b",5526:"20b79d53",5548:"e68f018e",5651:"701df6e6",5704:"70bd0ba6",5989:"0fdc298d",6104:"5ca45843",6140:"952b82c2",6220:"8b344451",6253:"fe535738",6255:"8509f60e",6277:"a769d3bc",6294:"b077023f",6312:"ed91dbbd",6316:"86a075e6",6357:"6a6a3bfc",6373:"b8a24443",6482:"502a0b67",6495:"4071f460",6585:"69ef2e32",6598:"5f760aa9",6689:"60ffe859",6730:"52c45925",6776:"0a7bd7c5",6780:"35cedf78",6827:"3fb13981",6862:"494b1047",6918:"61dac2e1",6920:"a34cbecc",6945:"96d36007",6946:"62348511",7022:"083a8378",7061:"89e327b0",7202:"795d2adc",7211:"bf56e06e",7280:"47e41d56",7288:"59752a80",7313:"7630b651",7368:"77d8ddea",7388:"53d48c10",7466:"6c38d255",7485:"82d47cfd",7633:"522211f9",7654:"95c0cbce",7683:"7de880dc",7714:"a69296c3",7724:"05bda7f2",7778:"8da5b4da",7799:"5d0c65da",7823:"6c8a30f2",7830:"a2703576",7837:"b9260b47",7858:"f9862ed2",7908:"0da511b2",7918:"7dd2ce47",7920:"56c00901",7940:"e5c7d8f2",7961:"c0d1b031",8034:"dca0d1af",8067:"af36ecc3",8080:"1adae4dd",8115:"2ebb714e",8138:"11462c7d",8139:"f33f53cf",8178:"62f5ed0b",8215:"775d309b",8236:"63fecdb9",8270:"1dd5ba80",8355:"caef1eb9",8361:"5c7bc601",8618:"f5896277",8648:"34316a10",8702:"a65a145b",8757:"4f1ee155",8791:"00a01805",8831:"16eb75ba",8855:"9d00af7a",8860:"48171767",8866:"4bdda915",8876:"a30609d2",8894:"ba661129",8901:"cc3ae736",9062:"9cc9144f",9071:"0695351a",9112:"38b794db",9126:"f0242db8",9217:"d87f81ce",9226:"3d3d91d5",9247:"a0154dc8",9276:"c9f1c397",9315:"d5006aa3",9323:"faa9a3ec",9383:"dec8392d",9447:"8074d0f3",9478:"8f4b04f5",9487:"ca8bca46",9514:"693800c6",9548:"f095b5ce",9626:"b43c6d01",9764:"012ce7bf",9779:"4c7efdf9",9802:"11684b0f",9806:"c3977137",9817:"beb63dbf",9905:"3e1ce1bd",9993:"98eb3afc"}[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,c)=>Object.prototype.hasOwnProperty.call(e,c),a={},r.l=(e,c,f,d)=>{if(a[e])a[e].push(c);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 d=a[e];if(delete a[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(f))),c)return c(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",f4fb6e9c:"1","408829bd":"6","1d6d4797":"12","935f2afb":"53","9f319605":"63",f189ca9f:"192",c7a044bb:"217",f2717f8e:"250","9528ac88":"315","2d429218":"502","3829cf1d":"537","0c06bca3":"601",d569989b:"609","79d4be33":"626","386bfe51":"657","145746f5":"691","04a995e6":"785","23498fd5":"810",f90fa732:"1062","899aadcc":"1083",cfd53ea4:"1090","73c3bebc":"1211","25f2bd2a":"1213",f359a251:"1239",fabebe44:"1288","74df6a22":"1299",b61f6dc7:"1372","4d76887f":"1415",f750c690:"1419","5136ee31":"1446","4dff184a":"1481","8dd7cee0":"1486",b21dd8a7:"1494",c977dfe8:"1506",ffe9c3c9:"1529","33b0bcab":"1585",b336bb09:"1592","7fbac68a":"1598",fa343ad1:"1678",f7191335:"1686",a5002e4a:"1703","0df78d26":"1723","987d08ef":"1748","9e6341e5":"1774",d9ef69a7:"1786","48074a08":"1825","78e1e977":"1872","1ed3671a":"1953",df154d69:"1957",f47489cd:"1966","0cb62240":"1979","4f031749":"2008",dd32e389:"2042","84f79495":"2078","21877fa5":"2117",ecb495b7:"2136","1646726c":"2169","6151e7ce":"2194",f3027c84:"2242",da9f79cb:"2248","493c7fdf":"2354","8d3a1bf8":"2399",d6d2b2d5:"2483","9a101178":"2505","7c78c461":"2507","918b38b6":"2508","863c4753":"2552",db0b42b0:"2609",e2e89062:"2633",f4130007:"2665",ece9fdae:"2677",f3bde756:"2704",c2c6a3a6:"2712","78868b16":"2754","9e3f6a8a":"2758","7d54ab5a":"2791","5d69d9d4":"2884",f4200fe5:"2909","2be0d940":"2914","2ea50c63":"2949",af40287e:"3066","85afe03a":"3132","8a8a7d05":"3262",e31fc461:"3330","3497b7c6":"3332","32dac8d4":"3347","7ccc428f":"3348",f14351c1:"3356","5c90fc9b":"3484","41b7b3e8":"3513",d5909206:"3554","21899dd2":"3599",f137ce68:"3620","75a6958b":"3635",f1585bfb:"3665",b0cbc1d4:"3667",b225a2ce:"3668",dbbd9e76:"3669",bea375d6:"3757",ff6596ea:"3842",cda87995:"3933",fac80962:"3944",f8518919:"3945",ec3b6a32:"4004",eef3f1dd:"4097","702d5d94":"4105",a7c27f4d:"4174",c4f5d8e4:"4195","19ed4d4c":"4355",f2c21b54:"4363",c662f00a:"4379","991ceaa9":"4428","4d9b9869":"4445",f4003c83:"4476",a7b37b86:"4507","1ae2b102":"4537","3e56470e":"4541","295fff6c":"4543","694e7470":"4566","48d75399":"4620","54338ffb":"4634",f41c4e9d:"4666","43ee4f22":"4672","1dc05242":"4696",f0855ff9:"4909",c1bbdb2a:"4916","320c8a05":"5005","7e9389ad":"5011",c41801b5:"5013",db039c7f:"5103",d27ae88d:"5157","31bd35e0":"5281",b3719d54:"5422",f7acb151:"5483","1882e65d":"5492","0c68fb82":"5526",d6b0148d:"5548","9e2042f5":"5651",b9b4ec9e:"5704",fbf58567:"5989",c7c5ba1a:"6104","32e8da05":"6140",d01f45b7:"6220",a29dc56e:"6253","452ad91d":"6255",a62d9768:"6277",bbba852d:"6294",dbc4065c:"6312","43cda9e8":"6357",ceaa29cb:"6373","13b7bafa":"6585",ca9fe671:"6598",f2521980:"6689",fea93377:"6730","666ba125":"6776","279fb1d6":"6827","60e73337":"6862","29a046f3":"6918",ccc1222e:"6920","4642ab5c":"6946","543610b9":"7022",feea648c:"7061","4a8eb552":"7202",f44ed8f8:"7211",fbea1897:"7280","6f1a81b8":"7288",db3d6c4d:"7313",bb8b1738:"7368",bd701914:"7388",a5b3561d:"7466",d3db551a:"7485",b940de31:"7633",c07c2447:"7654",cc44e8fd:"7683","591eca19":"7714","41871d53":"7778","8b670b2b":"7799","9e76b49d":"7823","0a3f0c9b":"7837",d6a97e7e:"7858","33bbe353":"7908","1a4e3797":"7920",ad762f86:"7940",a2800a5b:"7961",fecdcc34:"8034","69b97ecd":"8067","77a2b809":"8080","8247eba8":"8115","694672cd":"8138","386099fc":"8139","9a679a70":"8178","30d868e8":"8215",ffd76171:"8236","12331e8b":"8270",c91a9c06:"8355","824749c6":"8361",e4f3654b:"8618","71ed82b9":"8648",a74a59a0:"8702","83d4859f":"8757",ab138bf8:"8791","3bd77df4":"8831",d3a753cf:"8855","766a10e1":"8860","98a30fd8":"8866","31c99aa1":"8876",b48c599b:"8901",b38833d4:"9062","60738e36":"9071",a4b71220:"9112","924835c1":"9126","64c7e1cc":"9217","2f3b630e":"9226","8167490d":"9247",e344dd79:"9276","6d2ffbf3":"9315","131c7f55":"9323",a996ffc3:"9383",c7a2145e:"9478","1be78505":"9514",f95cee6f:"9548","32c9742a":"9626",dc776cbc:"9764",cd144357:"9779","1e15616a":"9802","51fbc2c9":"9806","14eb3368":"9817",b0cb055f:"9905","482bfb5c":"9993"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(c,f)=>{var a=r.o(e,c)?e[c]:void 0;if(0!==a)if(a)f.push(a[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var d=new Promise(((f,d)=>a=e[c]=[f,d]));f.push(a[2]=d);var b=r.p+r.u(c),t=new Error;r.l(b,(f=>{if(r.o(e,c)&&(0!==(a=e[c])&&(e[c]=void 0),a)){var d=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+c+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,a[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,f)=>{var a,d,[b,t,o]=f,n=0;if(b.some((c=>0!==e[c]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(c&&c(f);n - + @@ -30,7 +30,7 @@ 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

How to apply:

To become a Polkadot Ambassador, please fill out your application here.

Find out more about the programme and how to join here.

- + \ No newline at end of file diff --git a/docs/bug-bounty.html b/docs/bug-bounty.html index e924df9c274b..98088f8efa9a 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-data.html b/docs/build-data.html index bd14b4b9e912..3ed28daf0e1c 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.

Polkadot-based 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 5c6a33e2bd0d..fce6fc8a6570 100644 --- a/docs/build-guide.html +++ b/docs/build-guide.html @@ -19,7 +19,7 @@ - + @@ -139,7 +139,7 @@ ecosystem contains various SDKs to tap into the relay chain and parachains.

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 in terms of metadata. Full documentation & examples available here.

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

- + \ No newline at end of file diff --git a/docs/build-hackathon.html b/docs/build-hackathon.html index 06f08915f600..f1604568dafd 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 5673dd22321f..26a40f04843a 100644 --- a/docs/build-hrmp-channels.html +++ b/docs/build-hrmp-channels.html @@ -19,7 +19,7 @@ - + @@ -59,7 +59,7 @@ encourage the community to vote on this, highlighting the benefits for your chain, use cases enabled with this submission, among other things. After the enactment period is over, both chains will authorize the channel.

- + \ No newline at end of file diff --git a/docs/build-index.html b/docs/build-index.html index 8d49d61aeb36..93fb2b3c6959 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 782d51be6235..1d2001014b02 100644 --- a/docs/build-integrate-assets.html +++ b/docs/build-integrate-assets.html @@ -19,7 +19,7 @@ - + @@ -127,7 +127,7 @@ can 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 bc174ca91897..241f9b6c2ced 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-node-interaction.html b/docs/build-node-interaction.html index a77e9d038d7f..f142c182c87a 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 3794906ccf7c..c45b051d2def 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 84b38db14b2b..2244adce7aa3 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 ff926242f14a..f013a37170a2 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 3ee846a0850e..f8c4d8623279 100644 --- a/docs/build-pdk.html +++ b/docs/build-pdk.html @@ -19,7 +19,7 @@ - + @@ -188,7 +188,7 @@ transition into a Relay Chain.

For more information on how parathread per-block auctions work, see the more detailed parathread page.

Resources

- + \ No newline at end of file diff --git a/docs/build-protocol-info.html b/docs/build-protocol-info.html index a75c652d704a..4419830a9f74 100644 --- a/docs/build-protocol-info.html +++ b/docs/build-protocol-info.html @@ -19,7 +19,7 @@ - + @@ -60,9 +60,9 @@ withdrawals.

Wallets and custodians who track account nonces for auditing purposes should take care not to have accounts reaped, as users could refund the address and try making transactions from it. The Balances pallet provides a transfer_keep_alive function that will return an error and abort rather than -make the transfer if doing so would result in reaping the sender's account.

The existential deposit is a property of the Relay Chain

Your account on the Relay Chain has no direct impact on parachains as you have seperate accounts on +make the transfer if doing so would result in reaping the sender's account.

The existential deposit is a property of the Relay Chain

Your account on the Relay Chain has no direct impact on parachains as you have separate accounts on each parachain. Still, parachains are able to define an existential deposit of their own, but this -is seperate to that of the Relay Chain ED.

Existential deposit for the Asset Hub

The Asset Hub parachain has a lower existential deposit (0.1 DOT) than the Relay Chain (1 DOT) as +is separate to that of the Relay Chain ED.

Existential deposit for the Asset Hub

The Asset Hub parachain has a lower existential deposit (0.1 DOT) than the Relay Chain (1 DOT) as well as lower transaction fees. It is highly recommended to handle balance transfers on the Asset Hub. Asset Hub integration is discussed in the next page of the guide.

Free vs. Reserved vs. Locked vs. Vesting Balance

Account balance information is stored in AccountData. @@ -172,8 +172,8 @@ except by a hard fork. Kusama has had hard forks that had to revert four finalized blocks in order 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?

- +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 0f934dc0437c..1b72d6e0d235 100644 --- a/docs/build-smart-contracts.html +++ b/docs/build-smart-contracts.html @@ -19,7 +19,7 @@ - + @@ -144,7 +144,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-ss58-registry.html b/docs/build-ss58-registry.html index 2bee24247285..799ab9ca07f4 100644 --- a/docs/build-ss58-registry.html +++ b/docs/build-ss58-registry.html @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@
- + \ No newline at end of file diff --git a/docs/build-storage.html b/docs/build-storage.html index 26b126e2ddbb..275948720d6b 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-substrate.html b/docs/build-substrate.html index 5f250c1900fa..960df156bddf 100644 --- a/docs/build-substrate.html +++ b/docs/build-substrate.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-tools-index.html b/docs/build-tools-index.html index a2e74fb3fa3d..083c30209bfd 100644 --- a/docs/build-tools-index.html +++ b/docs/build-tools-index.html @@ -19,7 +19,7 @@ - + @@ -104,7 +104,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 0ee2f1eff679..4cb103e45a2e 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/builders-program.html b/docs/builders-program.html index 742f4a1ab721..f54f41738c71 100644 --- a/docs/builders-program.html +++ b/docs/builders-program.html @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ form of tooling, UI, middleware, bridges, and more.

    Application track

    This track supports builders who are building on top of Substrate-based chains.

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

    - + \ No newline at end of file diff --git a/docs/community-index.html b/docs/community-index.html index 17c61b2ed0c1..ec432d0310d4 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 257cc1e698d2..2a2244b84cf7 100644 --- a/docs/community.html +++ b/docs/community.html @@ -19,7 +19,7 @@ - + @@ -60,7 +60,7 @@ development and where there's room for your contributions.
  • Teams Building on Polkadot - Community maintained list of teams building on Polkadot and/or Substrate. (Note that this may contain inaccuracies, as it's unofficial).
  • - + \ No newline at end of file diff --git a/docs/contributing.html b/docs/contributing.html index 005236d0b13c..939ecb8056c9 100644 --- a/docs/contributing.html +++ b/docs/contributing.html @@ -19,7 +19,7 @@ - + @@ -58,7 +58,7 @@ the official crowdin knowledge base as well.




    The following shows an example in Arabic. You can type in your desired translation for each section in the provided area, while using the suggestions generated by the crowdin built-in translator.


    Make sure to save your translation.

    - + \ No newline at end of file diff --git a/docs/contributors.html b/docs/contributors.html index 3c2732ede991..2d45f4c3dc6d 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 0c9d008f0b24..8ea6cc10b769 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/dev-heroes.html b/docs/dev-heroes.html index 701857f9225c..09725409673f 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/faq.html b/docs/faq.html index 92498432cf72..226de0fad036 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -19,7 +19,7 @@ - + @@ -119,7 +119,7 @@ redenomination, the new DOT is called DOT.

    What is the inflation rate of the DOT?

    The inflation rate is approximately 10% per year.

    A portion of the inflation is rewarded to validators for performing their duties, while another portion may go directly to the treasury. The exact percentage that goes into both varies and is based on the amount of DOT that are staked. Please see the article on -inflation for more information.

    Why can't crowdloaned DOT be staked?

    DOTs contributed to a sucessful crowdloan campaign by a parachain are bonded for the entire lease +inflation for more information.

    Why can't crowdloaned DOT be staked?

    DOTs contributed to a successful crowdloan campaign by a parachain are bonded for the entire lease period, which is two years on Polkadot. The crowdloaned DOT cannot be used for any other DOT utility functionalities like staking and democracy. In exchange to the lost staking rewards or liquidity of DOTs, the parachain team may offer rewards to the contributor.

    The utility of crowdloaned DOT is to provide a lease for a parachain. The utility of staked DOT is @@ -188,8 +188,8 @@ follows the following formula:

    base_fee + (tx_length * length_fee) + WeightToFee(weight)

    Please see the 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.

    - +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 523a464820eb..c6209ef4e32a 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/getting-started.html b/docs/getting-started.html index fce17fde4a40..a8773ad54aab 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -19,7 +19,7 @@ - + @@ -111,7 +111,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 e6ba7c2b5c81..87d0fa07baae 100644 --- a/docs/glossary.html +++ b/docs/glossary.html @@ -19,7 +19,7 @@ - + @@ -287,7 +287,7 @@ transaction weights and fees.

    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/grants.html b/docs/grants.html index 5435b74eea10..17b4e1ea8840 100644 --- a/docs/grants.html +++ b/docs/grants.html @@ -19,7 +19,7 @@ - + @@ -39,7 +39,7 @@ Foundation has considered new ways to distribute KSM for people who need KSM to build.

    If you are interested in obtaining KSM for building or research, you can apply through the 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 bb4f5cb823ea..5f9df54f086b 100644 --- a/docs/how-to-dyor.html +++ b/docs/how-to-dyor.html @@ -19,7 +19,7 @@ - + @@ -222,7 +222,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 f7331ef7ed8c..febd31f694c9 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 b55af886d108..78dfa338ed2e 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 9894a8c0e192..124b3156ee76 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 fdce1dc25478..bde1d43e591c 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 299050107e25..292eafa9cdc9 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 82aad6e9de86..13bf8b732483 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 097c606c905f..7fa40e06e9fa 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 f22cffa329b4..7077618db990 100644 --- a/docs/kusama-parameters.html +++ b/docs/kusama-parameters.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,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 0b92ed127759..ad2fc1c8f47f 100644 --- a/docs/kusama-social-recovery.html +++ b/docs/kusama-social-recovery.html @@ -19,7 +19,7 @@ - + @@ -66,7 +66,7 @@ either go through the council or submit a public proposal. To learn more about governance, see here.

    Further Reading

    - + \ No newline at end of file diff --git a/docs/kusama-timeline.html b/docs/kusama-timeline.html index 28188d053e16..2c92ba7b17f3 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 f11e3bbce054..64c1c8f4ab9c 100644 --- a/docs/learn-DOT.html +++ b/docs/learn-DOT.html @@ -19,7 +19,7 @@ - + @@ -92,7 +92,7 @@ through the Treasury. Alternatively, they can be obtained on the open 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 6522a403df63..65e1fba082a9 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"
  • - + \ No newline at end of file diff --git a/docs/learn-account-advanced.html b/docs/learn-account-advanced.html index 4585568bfd3f..55ee207c24fb 100644 --- a/docs/learn-account-advanced.html +++ b/docs/learn-account-advanced.html @@ -19,7 +19,7 @@ - + @@ -172,7 +172,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-generation.html b/docs/learn-account-generation.html index 0ad050624c8e..a07f618f14ee 100644 --- a/docs/learn-account-generation.html +++ b/docs/learn-account-generation.html @@ -19,7 +19,7 @@ - + @@ -141,7 +141,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-account-multisig.html b/docs/learn-account-multisig.html index 3153dc64ba9b..ffa91b2c4bec 100644 --- a/docs/learn-account-multisig.html +++ b/docs/learn-account-multisig.html @@ -19,7 +19,7 @@ - + @@ -115,7 +115,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-accounts-index.html b/docs/learn-accounts-index.html index dbe4133dbcec..913b26ea9639 100644 --- a/docs/learn-accounts-index.html +++ b/docs/learn-accounts-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-accounts.html b/docs/learn-accounts.html index 4506c2f6f11c..684116db0238 100644 --- a/docs/learn-accounts.html +++ b/docs/learn-accounts.html @@ -19,7 +19,7 @@ - + @@ -140,7 +140,7 @@ multi-signature accounts, including their use-cases.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-advanced-index.html b/docs/learn-advanced-index.html index c218f998644c..0d3127386f1f 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-architecture-index.html b/docs/learn-architecture-index.html index 1f244846985e..c954b30d85e3 100644 --- a/docs/learn-architecture-index.html +++ b/docs/learn-architecture-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-architecture.html b/docs/learn-architecture.html index 2fa3c1d2acfb..6f4fab17771b 100644 --- a/docs/learn-architecture.html +++ b/docs/learn-architecture.html @@ -19,7 +19,7 @@ - + @@ -86,7 +86,7 @@ verify their validity (and later, their availability).


    Whiteboard Series

    For a video overview of the architecture of Polkadot watch the video below for the whiteboard interview with W3F researcher Alistair Stewart:

    Architecture Overview

    - + \ No newline at end of file diff --git a/docs/learn-archive-index.html b/docs/learn-archive-index.html index a4cfb7f64464..d9ec767e598f 100644 --- a/docs/learn-archive-index.html +++ b/docs/learn-archive-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-assets-index.html b/docs/learn-assets-index.html index 6e4c5bc7aa89..dbc2f2e375be 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 524848ddf65d..2c69510d1dfe 100644 --- a/docs/learn-assets.html +++ b/docs/learn-assets.html @@ -19,7 +19,7 @@ - + @@ -126,7 +126,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 550290f2fc59..efba6c9783eb 100644 --- a/docs/learn-async-backing.html +++ b/docs/learn-async-backing.html @@ -19,7 +19,7 @@ - + @@ -152,7 +152,7 @@ Asynchronous Backing (Shallow)
  • Chapter 6.15. from PBA lecture material: Asynchronous Backing (Deep)
  • Polkadot Blog Post - Asynchronous Backing: Elevating Polkadot's Performance and Scale
  • - + \ No newline at end of file diff --git a/docs/learn-auction.html b/docs/learn-auction.html index bcfb62aedbaf..efbb16752664 100644 --- a/docs/learn-auction.html +++ b/docs/learn-auction.html @@ -19,7 +19,7 @@ - + @@ -142,7 +142,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-balance-transfers.html b/docs/learn-balance-transfers.html index ee243dabfb98..b429cb6fed11 100644 --- a/docs/learn-balance-transfers.html +++ b/docs/learn-balance-transfers.html @@ -19,7 +19,7 @@ - + @@ -101,7 +101,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-basics-index.html b/docs/learn-basics-index.html index 49ae3f7ee7fa..c5f9a7f29c09 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-bridges.html b/docs/learn-bridges.html index 47159d349a72..e4f7d299c612 100644 --- a/docs/learn-bridges.html +++ b/docs/learn-bridges.html @@ -19,7 +19,7 @@ - + @@ -88,7 +88,7 @@ Network's implementation of Parity's bridge chain solution.
  • Edgeth Bridge - a bridge from Ethereum to 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.
  • - + \ No newline at end of file diff --git a/docs/learn-collator.html b/docs/learn-collator.html index d09a50b1c546..cebe31fe2906 100644 --- a/docs/learn-collator.html +++ b/docs/learn-collator.html @@ -19,7 +19,7 @@ - + @@ -65,7 +65,7 @@ Cumulus repository. More 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 183fd9702813..ad159180f472 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 c5374c6d7575..fece8a62fc87 100644 --- a/docs/learn-comparisons-cosmos.html +++ b/docs/learn-comparisons-cosmos.html @@ -19,7 +19,7 @@ - + @@ -132,7 +132,7 @@ chain must trust the sending chain. Thus, each blockchain in the Cosmos network has its independent security mechanisms. They're independently secured and do not rely on the security of other blockchains or the hub.

    - + \ No newline at end of file diff --git a/docs/learn-comparisons-ethereum-2.html b/docs/learn-comparisons-ethereum-2.html index fb50761aca96..9d0b8b6214fc 100644 --- a/docs/learn-comparisons-ethereum-2.html +++ b/docs/learn-comparisons-ethereum-2.html @@ -19,7 +19,7 @@ - + @@ -157,7 +157,7 @@ enacted autonomously via forkless upgrades.
  • Validator selection mechanisms differ as Polkadot can provide strong availability and validity guarantees with fewer validators per shard.
  • - + \ No newline at end of file diff --git a/docs/learn-comparisons-index.html b/docs/learn-comparisons-index.html index b51215ec1667..5cf4988c2a0f 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 1031c6d16282..40ad1d2632b5 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 c16dc9504c47..7cdb9faddb54 100644 --- a/docs/learn-comparisons-rollups.html +++ b/docs/learn-comparisons-rollups.html @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ compromised.
  • Challenge periods could take a substantial amount of time to pass, increasing time for the rollup to finalize onto the L1 network.
  • Due to their generalist nature of including any state change for their parent network, optimistic rollups can run into gas limitations or cause network congestion in the case of Ethereum.
  • Optimistic rollups are often used in the Ethereum ecosystem. Examples of optimistic EVM-based rollup -solutions include:

    Zero-knowledge Rollups

    Zero-knowledge rollups (often called ZK rollups) are a non-interactive method that utilizes +solutions include:

    Zero-knowledge Rollups

    Zero-knowledge rollups (often called ZK rollups) are a non-interactive method that utilizes zero-knowledge proofs to compute the validity of a particular set of state changes. Whereas optimistic rollups relied on fraud proofs, ZK rollups rely on cryptographic validation in the form of ZK proofs.

    Zero-knowledge rollups are significantly faster in finalization, as the cryptographic validity proof @@ -93,8 +93,8 @@ on the size and weights of the PoV (Proof of Validity) blocks which contain the parachain state 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.

    - +line with future technological advances.

    + \ No newline at end of file diff --git a/docs/learn-comparisons.html b/docs/learn-comparisons.html index edd97f8cd0ff..8025b063b544 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 b3ed6a1040a7..af3943363cd7 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 71767756d57e..e46d3c288ffa 100644 --- a/docs/learn-consensus.html +++ b/docs/learn-consensus.html @@ -19,7 +19,7 @@ - + @@ -154,7 +154,7 @@ with 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-controller.html b/docs/learn-controller.html index 3961024d2edc..cf1f9cc7bee1 100644 --- a/docs/learn-controller.html +++ b/docs/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-crowdloans.html b/docs/learn-crowdloans.html index d120f1ad4d78..e62c0dc12171 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 537b1f0e88f8..55f0ada958df 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-extrinsics.html b/docs/learn-extrinsics.html index 41b7eedd2cc1..87db436f7506 100644 --- a/docs/learn-extrinsics.html +++ b/docs/learn-extrinsics.html @@ -19,7 +19,7 @@ - + @@ -101,7 +101,7 @@ without the possibility of verifying it.

    Defense against Attacks

    danger

    If you can't verify the extrinsic 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 on 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/learn-future-implementations-index.html b/docs/learn-future-implementations-index.html index 9aae8be48f0d..df48586793aa 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-governance.html b/docs/learn-governance.html index 69fb1f76782f..89b772f57506 100644 --- a/docs/learn-governance.html +++ b/docs/learn-governance.html @@ -19,7 +19,7 @@ - + @@ -241,7 +241,7 @@ case for why the change should be made.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-guides-assets-create.html b/docs/learn-guides-assets-create.html index 0700ee2d85b9..174521a94042 100644 --- a/docs/learn-guides-assets-create.html +++ b/docs/learn-guides-assets-create.html @@ -19,7 +19,7 @@ - + @@ -59,8 +59,8 @@ and the most important field of your asset - the unique asset ID. The UI would not let you enter 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.

    - +Network > Assets page on the Asset Hub.

    + \ No newline at end of file diff --git a/docs/learn-guides-assets-index.html b/docs/learn-guides-assets-index.html index aaa7e672d796..054c3edaa6b4 100644 --- a/docs/learn-guides-assets-index.html +++ b/docs/learn-guides-assets-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-guides-assets-ledger.html b/docs/learn-guides-assets-ledger.html index 9b7fed91dd15..3eb21cadb662 100644 --- a/docs/learn-guides-assets-ledger.html +++ b/docs/learn-guides-assets-ledger.html @@ -19,7 +19,7 @@ - + @@ -95,7 +95,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-identity.html b/docs/learn-guides-identity.html index b76f19d67140..417472a93a22 100644 --- a/docs/learn-guides-identity.html +++ b/docs/learn-guides-identity.html @@ -19,7 +19,7 @@ - + @@ -55,7 +55,7 @@ for each sub-identity. This reserved account balance is freed once you clear the identities on the account.

    Sub-identity example

    - + \ No newline at end of file diff --git a/docs/learn-guides-index.html b/docs/learn-guides-index.html index 1a6badd5a8e1..c9f2be25ff98 100644 --- a/docs/learn-guides-index.html +++ b/docs/learn-guides-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-guides-polkadot-opengov.html b/docs/learn-guides-polkadot-opengov.html index b3f3d5c95b9d..3a48dd5a4063 100644 --- a/docs/learn-guides-polkadot-opengov.html +++ b/docs/learn-guides-polkadot-opengov.html @@ -19,7 +19,7 @@ - + @@ -72,7 +72,7 @@ Small Tipper Track would be fine for any kind of deposit refund up to 250 DOT.

    - + \ No newline at end of file diff --git a/docs/learn-guides-staking-index.html b/docs/learn-guides-staking-index.html index e3019c987d93..53ed6b691186 100644 --- a/docs/learn-guides-staking-index.html +++ b/docs/learn-guides-staking-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-guides-staking-pools.html b/docs/learn-guides-staking-pools.html index 86314bc57fba..bd0a868c6ab4 100644 --- a/docs/learn-guides-staking-pools.html +++ b/docs/learn-guides-staking-pools.html @@ -19,7 +19,7 @@ - + @@ -65,7 +65,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 b60296439a58..d1e6b2de8920 100644 --- a/docs/learn-guides-staking.html +++ b/docs/learn-guides-staking.html @@ -19,7 +19,7 @@ - + @@ -41,7 +41,7 @@ which will list all the pending payouts for your stashes.

    pending-payouts

    To then claim your reward, select the "Payout all" button. This will prompt you to select your stash accounts for payout.

    select-payouts

    Once you are done with payout, another screen will appear asking for you to sign and submit the transaction.

    transaction-payouts

    - + \ No newline at end of file diff --git a/docs/learn-guides-treasury.html b/docs/learn-guides-treasury.html index cef7dbe8bce4..f6a167ce6254 100644 --- a/docs/learn-guides-treasury.html +++ b/docs/learn-guides-treasury.html @@ -19,7 +19,7 @@ - + @@ -66,7 +66,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 5bc2f27bf4b2..0a720a155263 100644 --- a/docs/learn-guides-vault.html +++ b/docs/learn-guides-vault.html @@ -19,7 +19,7 @@ - + @@ -70,7 +70,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-identity.html b/docs/learn-identity.html index cf71b0634281..34df0b2ded5a 100644 --- a/docs/learn-identity.html +++ b/docs/learn-identity.html @@ -19,7 +19,7 @@ - + @@ -108,7 +108,7 @@ an identity also clears all sub accounts and returns their deposits.

    Visit the section "Clear an Identity" on

    this support article for guidelines about clearing identities.

    Killing: The Council can kill an identity that it deems erroneous. This results in a slash of the deposit.

    - + \ No newline at end of file diff --git a/docs/learn-implementations.html b/docs/learn-implementations.html index 9da98059daa9..ad52667d9adf 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 receieve a grant for your development.

    - + \ No newline at end of file diff --git a/docs/learn-index.html b/docs/learn-index.html index e6502b0dfcf8..098a4e34cf51 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 5e28c4ebc638..aec9f16d25d8 100644 --- a/docs/learn-inflation.html +++ b/docs/learn-inflation.html @@ -19,7 +19,7 @@ - + @@ -72,7 +72,7 @@ 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.

    - + \ No newline at end of file diff --git a/docs/learn-launch.html b/docs/learn-launch.html index fc89175a5e06..2eeb55987265 100644 --- a/docs/learn-launch.html +++ b/docs/learn-launch.html @@ -19,7 +19,7 @@ - + @@ -47,7 +47,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-nft-index.html b/docs/learn-nft-index.html index 4c31b52416c9..8e0217f7c138 100644 --- a/docs/learn-nft-index.html +++ b/docs/learn-nft-index.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 b4166b38bd74..0944bdfff198 100644 --- a/docs/learn-nft-pallets.html +++ b/docs/learn-nft-pallets.html @@ -19,7 +19,7 @@ - + @@ -108,7 +108,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 e797528b1b88..da4b1ed25718 100644 --- a/docs/learn-nft-projects.html +++ b/docs/learn-nft-projects.html @@ -19,7 +19,7 @@ - + @@ -99,7 +99,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 fc0bcaf927ee..78a86bebb5f3 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 0fc8b4ce36e1..1b4cc1355bc8 100644 --- a/docs/learn-nomination-pools.html +++ b/docs/learn-nomination-pools.html @@ -19,7 +19,7 @@ - + @@ -201,7 +201,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, also those that do not receive rewards due to the oversubscription issue.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).The pool member must claim the rewards.
    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 0cdd425148e2..8bc15ab26070 100644 --- a/docs/learn-nominator.html +++ b/docs/learn-nominator.html @@ -19,7 +19,7 @@ - + @@ -270,7 +270,7 @@ Polkadot JS Apps > Network > Staking > Targets page.

    Minimum Active Nomination

    Guides

    - + \ No newline at end of file diff --git a/docs/learn-parachains-faq.html b/docs/learn-parachains-faq.html index 1340c876fefa..ccb4c6a726da 100644 --- a/docs/learn-parachains-faq.html +++ b/docs/learn-parachains-faq.html @@ -19,7 +19,7 @@ - + @@ -111,7 +111,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 54644573756f..caa0f09221bf 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 051533f98ea6..767c199cd87a 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 3e381b4ac661..20261bf8b06e 100644 --- a/docs/learn-parachains.html +++ b/docs/learn-parachains.html @@ -19,7 +19,7 @@ - + @@ -189,7 +189,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-parathreads.html b/docs/learn-parathreads.html index 4aa959add796..1e27125980aa 100644 --- a/docs/learn-parathreads.html +++ b/docs/learn-parathreads.html @@ -19,7 +19,7 @@ - + @@ -90,7 +90,7 @@ produce new blocks when they need to.

    Parathreads help ease the sharp stop of the parachain slot term by allowing parachains that are still doing something useful to produce blocks, even if it is no longer economically viable to rent a parachain slot.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-participants-index.html b/docs/learn-participants-index.html index 1ae0cdee79e9..7d6ff180126f 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 7e065195f5b5..79d62c526dcb 100644 --- a/docs/learn-phragmen.html +++ b/docs/learn-phragmen.html @@ -19,7 +19,7 @@ - + @@ -272,7 +272,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 3f73c557ed05..53beff2c6fdc 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-opengov-treasury.html b/docs/learn-polkadot-opengov-treasury.html index 63be159f6fd7..b498ad64adc0 100644 --- a/docs/learn-polkadot-opengov-treasury.html +++ b/docs/learn-polkadot-opengov-treasury.html @@ -19,7 +19,7 @@ - + @@ -59,7 +59,7 @@ requires a decision deposit of 10 DOT.

    Small Tipper

    This track can be used for treasury spending requests up to 100 DOT per referendum. Each referendum requires a decision deposit of 1 DOT.

    - + \ No newline at end of file diff --git a/docs/learn-polkadot-opengov.html b/docs/learn-polkadot-opengov.html index aa9fcb62a02d..b09d7cfee2cd 100644 --- a/docs/learn-polkadot-opengov.html +++ b/docs/learn-polkadot-opengov.html @@ -19,7 +19,7 @@ - + @@ -293,7 +293,7 @@ these guidelines.

    Future plans include that public members can apply to become a Fellowship candidate by placing a small deposit (which will be returned once they become members). Their candidacy will go through a referendum to be approved to become a member.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-proxies-pure.html b/docs/learn-proxies-pure.html index a5e4dab6fa57..7ee6d9e7fd80 100644 --- a/docs/learn-proxies-pure.html +++ b/docs/learn-proxies-pure.html @@ -19,7 +19,7 @@ - + @@ -129,7 +129,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-proxies.html b/docs/learn-proxies.html index a26c5a884570..4ffa7deb678c 100644 --- a/docs/learn-proxies.html +++ b/docs/learn-proxies.html @@ -19,7 +19,7 @@ - + @@ -141,7 +141,7 @@ get an error "Proxy unannounced" since the announcement will be done after the time delay. Also note that regular proxy.proxy calls do not work with time-delayed proxies, you need to announce the call first and then execute the announced call on a separate transaction.

    - + \ No newline at end of file diff --git a/docs/learn-redenomination.html b/docs/learn-redenomination.html index 5a727266b40d..522d93a05747 100644 --- a/docs/learn-redenomination.html +++ b/docs/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-runtime-upgrades.html b/docs/learn-runtime-upgrades.html index 0ebc9e61570d..1bd14995d7b5 100644 --- a/docs/learn-runtime-upgrades.html +++ b/docs/learn-runtime-upgrades.html @@ -19,7 +19,7 @@ - + @@ -84,7 +84,7 @@ may be up to the last block before execution, but it will not work if this is missing.
  • democracy(Executed) events for actual execution. In the case of a runtime upgrade, there will also be a system(CodeUpdated) event.
  • You can also monitor Polkassembly for discussions on on-chain proposals and referenda.

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

    - + \ No newline at end of file diff --git a/docs/learn-sassafras.html b/docs/learn-sassafras.html index 1dc4ae8dea59..866adcb67a72 100644 --- a/docs/learn-sassafras.html +++ b/docs/learn-sassafras.html @@ -19,7 +19,7 @@ - + @@ -31,7 +31,7 @@ with time-constant intervals. The protocol utilizes zk-SNARKs to construct a ring-VRF and is a work in progress.

    This page will be updated as progress ensues.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-scams.html b/docs/learn-scams.html index 99fb80f24d80..f9c62e1bae5a 100644 --- a/docs/learn-scams.html +++ b/docs/learn-scams.html @@ -19,7 +19,7 @@ - + @@ -82,7 +82,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 0a25866495d2..56c3e7d57a9b 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 8c3af34c732d..1e30ba685a36 100644 --- a/docs/learn-staking-advanced.html +++ b/docs/learn-staking-advanced.html @@ -19,7 +19,7 @@ - + @@ -313,7 +313,7 @@ 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.

    - + \ No newline at end of file diff --git a/docs/learn-staking-index.html b/docs/learn-staking-index.html index 0b60b342fea2..662084336564 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 dc6eaf04dacb..2de5cd1edff5 100644 --- a/docs/learn-staking.html +++ b/docs/learn-staking.html @@ -19,7 +19,7 @@ - + @@ -355,7 +355,7 @@ this support page for the FAQs about staking.

    Resources

    - + \ No newline at end of file diff --git a/docs/learn-system-chains.html b/docs/learn-system-chains.html index cda51f5f694b..0630a7ee8914 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 3bc12f093c68..8316c85f73be 100644 --- a/docs/learn-teleport.html +++ b/docs/learn-teleport.html @@ -19,7 +19,7 @@ - + @@ -50,7 +50,7 @@ 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.

    Teleporting Tokens using the Polkadot-JS UI

    Troubleshooting

    If you do not see "Accounts > Teleport" in [Polkadot-JS UI], the source chain that you have selected does not support teleportation yet.

    - + \ No newline at end of file diff --git a/docs/learn-transaction-fees.html b/docs/learn-transaction-fees.html index 2f6f7a96d800..e18c14e61e8e 100644 --- a/docs/learn-transaction-fees.html +++ b/docs/learn-transaction-fees.html @@ -19,7 +19,7 @@ - + @@ -142,7 +142,7 @@ how reasonable they find the timestamp. In Polkadot, it must be within some acceptable range of their own system clocks.

    Learn More

    - + \ No newline at end of file diff --git a/docs/learn-transactions-index.html b/docs/learn-transactions-index.html index f5bd13a7cc04..d70268007d38 100644 --- a/docs/learn-transactions-index.html +++ b/docs/learn-transactions-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/learn-treasury.html b/docs/learn-treasury.html index b46cbacd6855..2c5aa4f3fc38 100644 --- a/docs/learn-treasury.html +++ b/docs/learn-treasury.html @@ -19,7 +19,7 @@ - + @@ -170,7 +170,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-validator.html b/docs/learn-validator.html index cfac855096d4..47124ce50839 100644 --- a/docs/learn-validator.html +++ b/docs/learn-validator.html @@ -19,7 +19,7 @@ - + @@ -95,7 +95,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 dd91fa1dd3ad..5c1f97e957d8 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 a646551fc72a..001c1e502aa7 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 64aa2ebddc3e..3de7cc4e3587 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 c72833b7bbc2..a0b3cfd9a0c3 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 0df91efaf5cc..2d19891f2171 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 1202fafab49f..3e6634b7b5cc 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 4ea0d0b993b2..461c910bbe70 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 edffc1daa7eb..665b35aa9c77 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 1560c25077a0..86ea83acdd06 100644 --- a/docs/learn-xcvm.html +++ b/docs/learn-xcvm.html @@ -19,7 +19,7 @@ - + @@ -110,7 +110,7 @@ a MultiLocation.

    Simulating XCVM using the xcm-simulator

    Within the Polkadot repository exists the 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/xcm.html b/docs/learn/xcm.html index 967cc82be319..7f227bf4bea3 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 16413229631a..f8bdd821df1a 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 37f659ff9c6b..210c16b42f6f 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 55c296a7e43f..354c493585aa 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 06a36d37f95b..ef417d155662 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 525c817742be..1af5c672b82d 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 ebe6e19b2745..46f07bcecb2f 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 0663b9a07d6e..21809f7cef1d 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 A
    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 250a0b578e6c..36369c323657 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 018408753691..31edb1ba8e3e 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 2bfeea4babc1..5547f6f084b9 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 8c89dd6f364e..87337d71cf98 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 03ef1f54179d..a59a8bb303de 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 633f4b593651..bd289c564f95 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 6b0a48d448f0..b7c98609a293 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 c48569fdfacd..28e0212b227b 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 75c78329e008..1c546c8eaaef 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 8960df63ea87..aaedd306fed2 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 aecfa2df3167..d804a03be0a7 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 537f184404c3..f4148c493533 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 402dadaaa2ba..c11ea0f07c79 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 cc95b4e9f38e..ef22b42de607 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 b3b4474f638b..6eac0bd72fc8 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 d3869d635270..5415ffa05d5f 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 5e2e0fb921f7..b68f49ba07a0 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 2d18392af73c..38e60d81b033 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 03e2a96e766b..77f964d7dbac 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 eb75799f9091..763b993b5df7 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 258d798fb1f0..77d9ea9ca961 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 f2d3e7935ff9..003c7cfad0cd 100644 --- a/docs/learn/xcm/overview-architecture.html +++ b/docs/learn/xcm/overview-architecture.html @@ -19,7 +19,7 @@ - + @@ -48,7 +48,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 95e35394156a..dd3e66b53bc0 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 1e5b58ef7d6c..daa138ca76c8 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 8b84337332c3..f4f66fd88e99 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 5f5ff15f8f0c..94537850c53c 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 859c54f78d38..338d30923420 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 2f96d78c82a0..90bea5f070b1 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 8fecb7501705..2e8e1eeef4d6 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 9af7383a3e75..bc2f2d85212d 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 eb930dbbcb6f..a63c6bd24186 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 a812852afa40..5e360ba27034 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 2c060c907595..c508f5092f57 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 1cb4eadf2906..780b8a6efeaa 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 39f66d3b107e..80be00946eb7 100644 --- a/docs/learn/xcm/testing.html +++ b/docs/learn/xcm/testing.html @@ -19,7 +19,7 @@ - + @@ -39,7 +39,7 @@ messaging infrastructure as live networks, as the transport mechanism is being mocked out. Also, consensus related events are not tested, like disputes, staking and iamonline events. 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 bc53cc193018..aa856ccd3603 100644 --- a/docs/ledger.html +++ b/docs/ledger.html @@ -19,7 +19,7 @@ - + @@ -141,7 +141,7 @@ device after the installation.
  • If you wish to revert the version to the stable release, go to Ledger Live. The app will automatically detect the developer release and give the option to install the previous stable release.
  • - + \ No newline at end of file diff --git a/docs/maintain-bootnode.html b/docs/maintain-bootnode.html index 9868fede3ab8..069976905950 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-endpoints.html b/docs/maintain-endpoints.html index b685288a173d..376ed194ce6b 100644 --- a/docs/maintain-endpoints.html +++ b/docs/maintain-endpoints.html @@ -19,7 +19,7 @@ - + @@ -40,7 +40,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 6e9ecae75f1f..d13fcccc976a 100644 --- a/docs/maintain-errors.html +++ b/docs/maintain-errors.html @@ -19,7 +19,7 @@ - + @@ -50,7 +50,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.
    ImOnline (12)
    InvalidKey (0)Non existent public key.
    DuplicatedHeartbeat (1)Duplicated heartbeat.
    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-avoid-slashing.html b/docs/maintain-guides-avoid-slashing.html index e8b96212530c..b40f3586587e 100644 --- a/docs/maintain-guides-avoid-slashing.html +++ b/docs/maintain-guides-avoid-slashing.html @@ -19,7 +19,7 @@ - + @@ -68,7 +68,7 @@ obtain pristine binaries or source code and to ensure the security of their node:

    1. Always download either source files or binaries from the official Parity repository
    2. Verify the hash of downloaded files.
    3. Use the W3F secure validator setup or adhere to its principles
    4. Ensure essential security items are checked, use a firewall, manage user access, use SSH certificates
    5. Avoid using your server as a general-purpose system. Hosting a validator on your workstation or one that hosts other services increases the risk of maleficence.

    Examples

    NetworkEraEvent TypeDetailsAction Taken
    Polkadot774Small EquivocationThe validator migrated servers and cloned the keystore folder. The on-chain event can be viewed here.The validator did not submit a request for the slash to be canceled.
    Kusama3329Small EquivocationThe validator operated a test machine with cloned keys; the test machine was online at the same time as the primary, which resulted in a slash. Details can be found here.The validator requested a cancellation of the slash, but the council declined.
    Kusama3995Small EquivocationThe validator noticed several errors, after which the client crashed, and a slash was applied. The validator recorded all events and opened GitHub issues to allow for technical opinions to be shared. Details can be found here.The validator requested to cancel the slash. The council approved the request as they believed the error was not operator related.
    Kusama4543Medium UnresponsivenessA large amount of disputes flooded the network resulting in an application fault. The fault caused the client software to hang and as a result ~197 unique validators become unresponsive. Further details can be found here.The pending slash was cancelled and with runtime 9350 all lost nominations were restored. The application bug was addressed with client version 0.9.36
    - + \ No newline at end of file diff --git a/docs/maintain-guides-democracy.html b/docs/maintain-guides-democracy.html index 942849a8f47c..27d15b8a9539 100644 --- a/docs/maintain-guides-democracy.html +++ b/docs/maintain-guides-democracy.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,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 grouping of the 7 remaining bits is used to store the conviction.

    - + \ 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 072b4881b7ea..30d2ce6b009d 100644 --- a/docs/maintain-guides-how-to-chill.html +++ b/docs/maintain-guides-how-to-chill.html @@ -19,7 +19,7 @@ - + @@ -79,7 +79,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-join-council.html b/docs/maintain-guides-how-to-join-council.html index 79a8800d9f7c..34adfe00563a 100644 --- a/docs/maintain-guides-how-to-join-council.html +++ b/docs/maintain-guides-how-to-join-council.html @@ -19,7 +19,7 @@ - + @@ -43,7 +43,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-guides-how-to-monitor-your-node.html b/docs/maintain-guides-how-to-monitor-your-node.html index 1b6ea66af65d..582b74cf0f2a 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-nominate-kusama.html b/docs/maintain-guides-how-to-nominate-kusama.html index 3cb8f99e7189..d15989db4bb1 100644 --- a/docs/maintain-guides-how-to-nominate-kusama.html +++ b/docs/maintain-guides-how-to-nominate-kusama.html @@ -19,7 +19,7 @@ - + @@ -96,7 +96,7 @@ Polkascan. Also, you can verify the bonding state under the Staking page on the Polkadot-JS Apps Dashboard.

    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/maintain-guides-how-to-nominate-polkadot.html b/docs/maintain-guides-how-to-nominate-polkadot.html index c2b8a7975ba2..f5f209486287 100644 --- a/docs/maintain-guides-how-to-nominate-polkadot.html +++ b/docs/maintain-guides-how-to-nominate-polkadot.html @@ -19,7 +19,7 @@ - + @@ -67,7 +67,7 @@ Polkascan. Also, you can verify the bonding state under the Staking page on the Polkadot-JS Apps Dashboard.

    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://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/maintain-guides-how-to-stop-validating.html b/docs/maintain-guides-how-to-stop-validating.html index c1f5f9eed574..8595fb86bea8 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 1c7edbbdaefb..d80361e4ca7f 100644 --- a/docs/maintain-guides-how-to-systemd.html +++ b/docs/maintain-guides-how-to-systemd.html @@ -19,7 +19,7 @@ - + @@ -32,7 +32,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 67973e395afc..6d38a3f3c7bb 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 86586a10ea38..9545bfc03867 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 e7d19809c51d..49e865f5ac9c 100644 --- a/docs/maintain-guides-how-to-validate-polkadot.html +++ b/docs/maintain-guides-how-to-validate-polkadot.html @@ -19,7 +19,7 @@ - + @@ -270,7 +270,7 @@ 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.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-how-to-vote-councillor.html b/docs/maintain-guides-how-to-vote-councillor.html index b341387353d3..4bfbacdda037 100644 --- a/docs/maintain-guides-how-to-vote-councillor.html +++ b/docs/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/maintain-guides-polkadot-opengov.html b/docs/maintain-guides-polkadot-opengov.html index 415946099c30..f685c2ba2918 100644 --- a/docs/maintain-guides-polkadot-opengov.html +++ b/docs/maintain-guides-polkadot-opengov.html @@ -19,7 +19,7 @@ - + @@ -144,7 +144,7 @@ If you like to use Polkadot-JS UI for performing multi-role delegation, the instructions are available here.

    - + \ No newline at end of file diff --git a/docs/maintain-guides-secure-validator.html b/docs/maintain-guides-secure-validator.html index 618ddca64be5..c80802243256 100644 --- a/docs/maintain-guides-secure-validator.html +++ b/docs/maintain-guides-secure-validator.html @@ -19,7 +19,7 @@ - + @@ -65,7 +65,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 0ab040ca46ef..9b9cce2e3d71 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 4748a064c6a2..e4856d04c187 100644 --- a/docs/maintain-guides-validator-community.html +++ b/docs/maintain-guides-validator-community.html @@ -19,7 +19,7 @@ - + @@ -163,7 +163,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 cb37af996b40..bdf639a116c1 100644 --- a/docs/maintain-guides-validator-payout.html +++ b/docs/maintain-guides-validator-payout.html @@ -19,7 +19,7 @@ - + @@ -109,7 +109,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 3735696ca598..09022e213793 100644 --- a/docs/maintain-index.html +++ b/docs/maintain-index.html @@ -19,7 +19,7 @@ - + @@ -45,7 +45,7 @@ participate in governance.
  • How to join the Council - Step by step guide for running for the Council.
  • How to vote for a Councillor - Step by step guide for voting for your favorite councillors.
  • - + \ No newline at end of file diff --git a/docs/maintain-networks.html b/docs/maintain-networks.html index 087b422c638c..5aea4b7356b2 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-polkadot-parameters.html b/docs/maintain-polkadot-parameters.html index 3aa39b638caa..62f75d6d27d4 100644 --- a/docs/maintain-polkadot-parameters.html +++ b/docs/maintain-polkadot-parameters.html @@ -19,7 +19,7 @@ - + @@ -39,7 +39,7 @@

    PolkadotTimeSlotsDescription
    Term duration1 Day14_400The time for which a validator is in the set after being elected. Note, this duration can be shortened in the case that a validator misbehaves.
    Nomination period1 Day14_400How often a new validator set is elected according to Phragmén's method.
    Bonding duration28 days403_200How long until your funds will be transferrable after unbonding. Note that the bonding duration is defined in eras, not directly by slots.
    Slash defer duration28 days403_200Prevents overslashing and validators "escaping" and getting their nominators slashed with no repercussions to themselves. Note that the bonding duration is defined in eras, not directly by slots.

    Parachains

    Crowdloans and AuctionsTimeSlotsDescription
    Auction duration7 days100_800The total duration of the slot auction, subject to the candle auction mechanism.
    Opening period2 days28_800The opening period of the slot auction.
    Ending period5 days72_000The ending period of the slot auction.
    Parachain SlotTimeSlotsDescription
    Lease period12 weeks1_209_600The length of one lease period in a parachain slot.
    Total slot duration2 years10_512_000The maximum duration a parachain can lease by winning a slot auction (8 lease periods).

    Treasury

    TreasuryTimeSlotsDescription
    Periods between spends24 days345_600When the treasury can spend again after spending previously.

    Burn percentage is currently 1.00%.

    Precision

    DOT have 10 decimals of precision. In other words, 10 ** 10 (10_000_000_000 or ten billion) 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 936b4a961c43..2abb4f7ec68f 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 39ff21452dda..de7f2ab528f3 100644 --- a/docs/maintain-sync.html +++ b/docs/maintain-sync.html @@ -19,7 +19,7 @@ - + @@ -89,8 +89,8 @@ instructions in this guide. Be aware that when you run polkadot in docker, the process only listens 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
    - +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-wss.html b/docs/maintain-wss.html index 638d87412bca..bbb57f55b2ba 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/metadata.html b/docs/metadata.html index bf62169d1704..64e723e630a0 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/polkadot-direction.html b/docs/polkadot-direction.html index e1636562d8df..3874142e2717 100644 --- a/docs/polkadot-direction.html +++ b/docs/polkadot-direction.html @@ -19,7 +19,7 @@ - + @@ -141,7 +141,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 22fd628b8f62..13a8758a1115 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 ed2c985992b1..04a9a4f7d086 100644 --- a/docs/polkadot-vault.html +++ b/docs/polkadot-vault.html @@ -19,7 +19,7 @@ - + @@ -89,7 +89,7 @@ this article for detailed instructions. If you choose this approach, you should trust the provider you choose.

    Advanced How-to Guides

    See the advanced guides for more information about how to add chain specification and do metadata updates yourself.

    - + \ No newline at end of file diff --git a/docs/polkadot-vision-index.html b/docs/polkadot-vision-index.html index eebfb5b15774..1d416b866d09 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 e02143334cd2..1b7e6cd19d86 100644 --- a/docs/polkadotjs-ui.html +++ b/docs/polkadotjs-ui.html @@ -19,7 +19,7 @@ - + @@ -73,7 +73,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 e6b6f53e7b97..45931954bb03 100644 --- a/docs/polkadotjs.html +++ b/docs/polkadotjs.html @@ -19,7 +19,7 @@ - + @@ -92,7 +92,7 @@ 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.

    - + \ No newline at end of file diff --git a/docs/programmes-index.html b/docs/programmes-index.html index 50a2898c6817..a636c70c44b7 100644 --- a/docs/programmes-index.html +++ b/docs/programmes-index.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file diff --git a/docs/research.html b/docs/research.html index c31c91589b8e..0411a3179a85 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-dashboard.html b/docs/staking-dashboard.html index e9ad9657aab9..ab3eec1afb80 100644 --- a/docs/staking-dashboard.html +++ b/docs/staking-dashboard.html @@ -19,7 +19,7 @@ - + @@ -157,7 +157,7 @@ feature request. We take your feedback seriously, do not hesitate to contact us.

    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.

    - + \ No newline at end of file diff --git a/docs/start-building.html b/docs/start-building.html index 388c0286ce6a..ce6dc68bc615 100644 --- a/docs/start-building.html +++ b/docs/start-building.html @@ -19,7 +19,7 @@ - + @@ -38,7 +38,7 @@ code for the Agile Coretime Broker pallet was added to the Substrate FRAME system.

    Polkadot SDK

    info

    For more information about building on Polkadot, see the Builder's Guide.

    The Polkadot Software Development Kit (SDK) includes all the tools needed to build on the Polkadot ecosystem. The main repositories include:

    The programming language used for development is Rust.

    - + \ No newline at end of file diff --git a/docs/stay-safe-index.html b/docs/stay-safe-index.html index fbdaa30c089c..e73caa1300b4 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 9ef82154858a..15b81198c66a 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 49daf7919afc..17021cb86808 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 Program scores there are various tools listed below.

    ResourceGithub sourceInfo
    Main 1KV sitegithubMain site and 1KV backend.
    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/wallets-and-extensions.html b/docs/wallets-and-extensions.html index cab8d34aefca..ad2114310333 100644 --- a/docs/wallets-and-extensions.html +++ b/docs/wallets-and-extensions.html @@ -19,7 +19,7 @@ - + @@ -89,7 +89,7 @@ your accounts on over 150+ Substrate and EVM networks. NFT Management, ledger Support, fiat On-ramp, portfolio tracking. Talisman received funding from Polkadot Treasury [1].

    - + \ No newline at end of file diff --git a/docs/wallets-index.html b/docs/wallets-index.html index 5db467da74e0..ae4456e20103 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 65f175eb71b5..08388f2e8582 100644 --- a/docs/web3-and-polkadot.html +++ b/docs/web3-and-polkadot.html @@ -19,7 +19,7 @@ - + @@ -148,7 +148,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 548a6b03f59b..bf3b9fa2f545 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, parathreads, 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 a21649bc8194..e6b7e8bc653a 100644 --- a/search.html +++ b/search.html @@ -19,13 +19,13 @@ - + - + \ No newline at end of file