diff --git a/404.html b/404.html index ab68daefce62..f5b816bc3c88 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/2f3b630e.33b1a3a3.js b/assets/js/2f3b630e.33b1a3a3.js deleted file mode 100644 index 2c01f44dbf68..000000000000 --- a/assets/js/2f3b630e.33b1a3a3.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[9226],{47940:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var a=n(74165),o=n(15861),i=n(67294),r=n(87152),l=n(17145),s=n(67425);function p(e,t,n){return d.apply(this,arguments)}function d(){return(d=(0,o.Z)((0,a.Z)().mark((function e(t,n,o){var i,s,p,d,c;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=void 0,s=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){e.next=18;break}return e.abrupt("return");case 18:return p=new r.U(i),e.next=21,l.G.create({provider:p});case 21:d=e.sent,(c=n.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 s=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return s=(s=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+n);case 35:return e.abrupt("return",s);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,n,a){switch(t){case"humanReadable":(0,s.HumanReadable)(e,n,a);break;case"precise":(0,s.Precise)(e,n,a);break;case"blocksToDays":(0,s.BlocksToDays)(e,a);break;case"percentage":(0,s.Percentage)(e,a);break;case"permillToPercent":(0,s.PermillToPercent)(e,a);break;case"arrayLength":(0,s.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const h=function(e){var t=e.network,n=e.path,r=e.defaultValue,l=e.filter,s=void 0===l?void 0:l,d=(0,i.useState)(""),h=d[0],m=d[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==s?c(r.toString(),s,t,m):m(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://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,a.Z)().mark((function e(){var o;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,n,m);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==s?c(o,s,t,m):m(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(l){console.log(l)}}}),[]),h}},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,n,a){var o=void 0;if("polkadot"===n||"statemint"===n)o=3;else{if("kusama"!==n&&"statemine"!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");o=6}e=parseFloat(e),a((e=Number.isInteger(e/t[n].precision)?e/t[n].precision+" "+t[n].symbol:(e/t[n].precision).toFixed(o)+" "+t[n].symbol).toString())},Precise:function(e,n,a){a(e=(e=parseFloat(e))/t[n].precision+" "+t[n].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},42569:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>k,default:()=>y,frontMatter:()=>u,metadata:()=>g,toc:()=>v});var a=n(87462),o=n(63366),i=n(67294),r=n(3905),l=(n(47940),i.createElement("table",null,i.createElement("tbody",null,i.createElement("tr",null,i.createElement("th",null,"Lock Periods"),i.createElement("th",null,"Vote Multiplier"),i.createElement("th",null,"Length in Days")),i.createElement("tr",null,i.createElement("td",null,"0"),i.createElement("td",null,"0.1"),i.createElement("td",{id:"p0"})),i.createElement("tr",null,i.createElement("td",null,"1"),i.createElement("td",null,"1"),i.createElement("td",{id:"p1"})),i.createElement("tr",null,i.createElement("td",null,"2"),i.createElement("td",null,"2"),i.createElement("td",{id:"p2"})),i.createElement("tr",null,i.createElement("td",null,"4"),i.createElement("td",null,"3"),i.createElement("td",{id:"p4"})),i.createElement("tr",null,i.createElement("td",null,"8"),i.createElement("td",null,"4"),i.createElement("td",{id:"p8"})),i.createElement("tr",null,i.createElement("td",null,"16"),i.createElement("td",null,"5"),i.createElement("td",{id:"p16"})),i.createElement("tr",null,i.createElement("td",null,"32"),i.createElement("td",null,"6"),i.createElement("td",{id:"p32"}))))),s=["p0","p1","p2","p4","p8","p16","p32"],p={p0:0,p1:28,p2:56,p4:112,p8:224,p16:448,p32:896},d={p0:0,p1:7,p2:14,p4:28,p8:56,p16:112,p32:224};function c(e){s.forEach((function(t){var n=document.getElementById(t);"polkadot"===e?n.innerText=p[t]:"kusama"===e&&(n.innerText=d[t])}))}const h=function(){var e=(0,i.useState)("");return e[0],e[1],(0,i.useEffect)((function(){var e=document.title;"Governance V1 \xb7 Polkadot Wiki"===e||"Polkadot OpenGov \xb7 Polkadot Wiki"===e?c("polkadot"):"Governance V1 \xb7 Guide"===e||"Polkadot OpenGov \xb7 Guide"===e?c("kusama"):console.log("Unknown wiki/guide type")}),[]),l};var m=["components"],u={id:"learn-polkadot-opengov",title:"Polkadot OpenGov",sidebar_label:"Polkadot OpenGov",description:"Polkadot\u2019s Latest Model for Decentralized Governance.",keywords:["governance","referenda","proposal","voting","endorse"],slug:"../learn-polkadot-opengov"},k=void 0,g={unversionedId:"learn/learn-polkadot-opengov",id:"learn/learn-polkadot-opengov",title:"Polkadot OpenGov",description:"Polkadot\u2019s Latest Model for Decentralized Governance.",source:"@site/../docs/learn/learn-polkadot-opengov.md",sourceDirName:"learn",slug:"/learn-polkadot-opengov",permalink:"/docs/learn-polkadot-opengov",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-polkadot-opengov.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1697790575,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{id:"learn-polkadot-opengov",title:"Polkadot OpenGov",sidebar_label:"Polkadot OpenGov",description:"Polkadot\u2019s Latest Model for Decentralized Governance.",keywords:["governance","referenda","proposal","voting","endorse"],slug:"../learn-polkadot-opengov"},sidebar:"docs",previous:{title:"Nomination Pools",permalink:"/docs/learn-nomination-pools"},next:{title:"Treasury",permalink:"/docs/learn-polkadot-opengov-treasury"}},f={},v=[{value:"Premise",id:"premise",level:2},{value:"Summary",id:"summary",level:2},{value:"Gov1 vs. Polkadot OpenGov",id:"gov1-vs-polkadot-opengov",level:2},{value:"Proposals",id:"proposals",level:2},{value:"Cancelling and Blacklisting",id:"cancelling-and-blacklisting",level:3},{value:"Referenda",id:"referenda",level:2},{value:"Referenda Timeline",id:"referenda-timeline",level:3},{value:"Origins and Tracks",id:"origins-and-tracks",level:3},{value:"Approval and Support",id:"approval-and-support",level:3},{value:"Enactment",id:"enactment",level:3},{value:"Voting on a Referendum",id:"voting-on-a-referendum",level:2},{value:"Voluntary Locking",id:"voluntary-locking",level:3},{value:"Multirole Delegation",id:"multirole-delegation",level:3},{value:"The Polkadot Technical Fellowship",id:"the-polkadot-technical-fellowship",level:2},{value:"Ranking System",id:"ranking-system",level:3},{value:"Whitelisting",id:"whitelisting",level:3},{value:"Becoming a Polkadot Technical Fellowship Member",id:"becoming-a-polkadot-technical-fellowship-member",level:3},{value:"Resources",id:"resources",level:2}],w={toc:v},b="wrapper";function y(e){var t=e.components,i=(0,o.Z)(e,m);return(0,r.kt)(b,(0,a.Z)({},w,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"The content in this document is subject to change",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The governance protocol has already undergone iterations (see\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance"},"Governance V1"),"). Governance is a constantly evolving protocol at this stage\nin its lifecycle."),(0,r.kt)("p",{parentName:"admonition"},"For technical information about Polkadot OpenGov and how to interact with it, please refer to this\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov"},"dedicated Wiki page"),"."),(0,r.kt)("p",{parentName:"admonition"},"For additional support about Polkadot OpenGov see the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/65000105211"},"dedicated support pages"),".")),(0,r.kt)("admonition",{title:"Polkadot Delegation Dashboard",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can easily delegate your votes to somebody else using the\n",(0,r.kt)("a",{parentName:"p",href:"https://delegation.polkadot.network/"},"Polkadot Delegation Dashboard"),". See\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=RapBYZc5ZPo"},"this video tutorial")," to learn how to use the\ndashboard. ",(0,r.kt)("strong",{parentName:"p"},"If you become a nomination pool member or a pool admin, you cannot participate in\nGovernance with the bonded tokens in the pool, as they are held in a\n",(0,r.kt)("a",{parentName:"strong",href:"/docs/learn-account-advanced#system-accounts"},"system account"),"."))),(0,r.kt)("p",null,"Polkadot uses a sophisticated governance\nmechanism that allows it to evolve gracefully overtime at the ultimate behest of its assembled\nstakeholders. The stated goal is to ensure that the majority of the stake can always command the\nnetwork."),(0,r.kt)("p",null,"Polkadot brings together various novel\nmechanisms, including an amorphous (abstract) form of state-transition function stored on-chain\ndefined in a platform-agnostic language (i.e. ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-wasm"},"WebAssembly"),"), and several on-chain\nvoting mechanisms such as referenda and batch approval voting. All changes to the protocol must be\nagreed upon by stake-weighted referenda."),(0,r.kt)("h2",{id:"premise"},"Premise"),(0,r.kt)("p",null,"Polkadot's first governance system\n(",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance"},"Governance V1"),") included three main components."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-governance#technical-committee"},"Technical Committee"),": A technocratic committee to\nmanage upgrade timelines."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-governance#council"},"Council"),': An approval-voted, elected executive "government" to\nmanage parameters, admin, and spending proposals.'),(0,r.kt)("li",{parentName:"ul"},"The Public: All token holders.")),(0,r.kt)("p",null,"Over the first few years of operation, Governance V1 ensured the appropriate usage of treasury funds\nand enabled timely upgrades and fixes. Like most early technologies, protocols must evolve as they\nmature to improve their shortcomings and keep up with modern advancements. In Governance V1, all\nreferenda carried the same weight as only one referendum could be voted on at a time (except for\nemergency proposals), and the voting period could last multiple weeks. Also, an\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#alternating-voting-timetable"},"alternating voting timetable")," allowed to vote\neither for a public referendum or a council motion every\n28 days. This resulted in the system favoring\ncareful consideration of very few proposals instead of broad consideration of many."),(0,r.kt)("p",null,"Polkadot OpenGov changes how the practical means of day-to-day decisions are made, making the\nrepercussions of referenda better scoped and agile to increase the number of collective decisions\nthe system can make at any given time."),(0,r.kt)("p",null,"The following content is focused on what the new Polkadot OpenGov version brings to the governance\non Polkadot, and on the main differences with\nprevious governance versions. We recommend learning about ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance"},"Governance v1")," to\nbetter understand the need for and the direction of Polkadot OpenGov."),(0,r.kt)("h2",{id:"summary"},"Summary"),(0,r.kt)("p",null,"In Governance v1, active token holders (public) and the Council together administrated network's\nupgrade decisions. Whether the public or the council initiated the proposal, it would eventually\nhave to go through a referendum to let all holders (weighted by stake and conviction) make the\ndecision."),(0,r.kt)("p",null,"The Council fulfilled its role as the representative of the public, guardian of the treasury and\ninitiator of legislation, but it was often seen as a centralized entity. To further decentralize\nPolkadot, Polkadot OpenGov proposes the\nfollowing main changes:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Migrating all responsibilities of the Council to the public via a direct democracy voting system."),(0,r.kt)("li",{parentName:"ul"},"Dissolving the current ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-governance#council"},"Council")," collective"),(0,r.kt)("li",{parentName:"ul"},"Allowing users to delegate voting power in more ways to community members"),(0,r.kt)("li",{parentName:"ul"},"Dissolving the ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-governance#technical-committee"},"Technical Committee")," and establishing\nthe broader ",(0,r.kt)("a",{parentName:"li",href:"#the-technical-fellowship"},"Polkadot Technical Fellowship"))),(0,r.kt)("p",null,"The figure below shows an overview of Polkadot OpenGov's structure."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#summary"},"this page")," for a comparison with the structure of Governance V1.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"opengov-overview",src:n(40176).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"In Polkadot OpenGov, all the proposals are initiated by the public. The proposal will enter a\nLead-in period (for more information, see ",(0,r.kt)("a",{parentName:"p",href:"#referenda-timeline"},"Referenda Timeline"),"), after which it\nwill follow a specific ",(0,r.kt)("a",{parentName:"p",href:"#origins-and-tracks"},"Track")," which has a dedicated Origin. There are\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#origins-and-tracks-info"},"15 Origins"),", each with a\ndifferent track. The origins and tracks parameters are preset values that set the duration of a\nreferendum as well as how many referenda can be voted on simultaneously. For example, a treasury\nproposal can now be submitted in different tracks depending on the amount requested. A proposal for\na small tip will need to be submitted in the Small Tipper track, while a proposal requiring\nsubstantial funds will need to be submitted to the Medium or Big Spender track."),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"#the-technical-fellowship"},"Polkadot Technical Fellowship")," can decide to\n",(0,r.kt)("a",{parentName:"p",href:"#whitelisting"},"whitelist")," a proposal that will be enacted through the Whitelist Caller origin.\nThose proposals will have a shorter Lead-in, Confirmation, and Enactment period when compared to the\nRoot Origin track."),(0,r.kt)("p",null,"Each track has its own preset ",(0,r.kt)("a",{parentName:"p",href:"#approval-and-support"},"Approval and Support")," curves which are based\non the origin's privileges. When both the approval and support criteria are satisfied for a specific\nperiod (called the confirmation period), the referenda passes and will be executed after the\nenactment period."),(0,r.kt)("p",null,"All referenda within each track and across tracks can be voted on simultaneously (assuming track\nmaximum capacity is not reached)."),(0,r.kt)("p",null,"Polkadot OpenGov also comes with multi-role delegations where the token holder can assign voting\npower on different tracks to different entities who are experts in judging the referenda submitted\nto those tracks. For example, suppose a token holder does not have the technical background to\nconsider the merits and vote on the referenda submitted to the Root track. In that case, they can\ndelegate their voting power just for the Root track to a trusted expert who (according to them) acts\nin the best interest of the network protocol. In this way, token holders do not need to be\nup-to-date with governance matters and can still make their votes count through delegates."),(0,r.kt)("admonition",{title:"Delegation Dashboard",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"To easily delegate your votes you can use the\n",(0,r.kt)("a",{parentName:"p",href:"https://delegation.polkadot.network/"},"Polkadot Delegation Dashboard"),". See\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=RapBYZc5ZPo"},"this video tutorial")," to know more about the dashboard\nand learn how to use it.")),(0,r.kt)("h2",{id:"gov1-vs-polkadot-opengov"},"Gov1 vs. Polkadot OpenGov"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Governance V1"),(0,r.kt)("th",{parentName:"tr",align:null},"Polkadot OpenGov"),(0,r.kt)("th",{parentName:"tr",align:null},"Polkadot OpenGov Benefit"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Includes the ",(0,r.kt)("a",{parentName:"td",href:"/docs/learn-governance#council"},"Council"),", the ",(0,r.kt)("a",{parentName:"td",href:"/docs/learn-governance#technical-committee"},"Technical Committee"),", and the Public (i.e. token holders)."),(0,r.kt)("td",{parentName:"tr",align:null},"Includes the Public and the ",(0,r.kt)("a",{parentName:"td",href:"#the-technical-fellowship"},"Technical Fellowship"),"."),(0,r.kt)("td",{parentName:"tr",align:null},"Simpler and more decentralized structure.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Referenda executed only from one origin (Root). Referenda in this origin must be carefully scrutinized. Therefore, there is only one track (i.e. only one referendum at a time can be executed)."),(0,r.kt)("td",{parentName:"tr",align:null},"Referenda executed from ",(0,r.kt)("a",{parentName:"td",href:"/docs/maintain-guides-polkadot-opengov#origins-and-tracks-info"},"multiple origins"),", each with a different track that shapes proposals\u2019 timelines. Depending on the origin, multiple referenda within the same track are possible."),(0,r.kt)("td",{parentName:"tr",align:null},"Possibility to categorize proposals (based on importance and urgency) and execute them simultaneously within and between origin tracks.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Proposals can be submitted by either the Council or the Public."),(0,r.kt)("td",{parentName:"tr",align:null},"The public submits proposals."),(0,r.kt)("td",{parentName:"tr",align:null},"More democratic.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Uses ",(0,r.kt)("a",{parentName:"td",href:"/docs/learn-governance#adaptive-quorum-biasing"},"Adaptive Quorum Biasing")," to define the approval threshold based on turnout. Given the same turnout, council-initiated referenda require fewer Aye votes to pass compared to public referenda."),(0,r.kt)("td",{parentName:"tr",align:null},"Uses origin-specific approval and support curves defining the amount of approval and support (i.e. turnout) needed as a function of time. The same curves are applied to all referenda within the same origin track."),(0,r.kt)("td",{parentName:"tr",align:null},"Referenda timeline depends on the origin and not on who submitted the proposal (i.e. Council or Public). This is a more democratic and equalitarian system.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Uses ",(0,r.kt)("a",{parentName:"td",href:"/docs/learn-governance#alternating-voting-timetable"},"alternating voting timetable")," allowing voters to cast votes for either council or public referenda every 28 eras."),(0,r.kt)("td",{parentName:"tr",align:null},"Multiple referenda can be voted at the same time."),(0,r.kt)("td",{parentName:"tr",align:null},"More flexible and agile governance system.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Except for emergency proposals, all referenda have fixed voting and enactment periods of 28 eras."),(0,r.kt)("td",{parentName:"tr",align:null},"Periods' length is customizable and has pre-defined limits for each origin. The same limits apply to all tracks with the same origin. For example, the track in the origin Root will be longer than the track within the Small Tipper origin."),(0,r.kt)("td",{parentName:"tr",align:null},"Referenda\u2019s timeline is tailored to their importance and urgency. Flexible enactment period based on origin.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Emergency proposals turned referenda can be simultaneously voted on and executed with other referenda and have shorter enactment periods. They must be proposed by the Technical Committee and approved by the Council."),(0,r.kt)("td",{parentName:"tr",align:null},"No emergency proposals. The Technical Fellowship can whitelist proposals that will have their origin with shorter lead-in, confirmation, and enactment periods."),(0,r.kt)("td",{parentName:"tr",align:null},"The Technical Fellowship is a more decentralized entity when compared to the Technical Committee. Whitelisting a proposal requires a majority of approval from the fellowship.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Only the ",(0,r.kt)("a",{parentName:"td",href:"/docs/learn-governance#endorsing-proposals"},"most-endorsed proposal")," is able to transit from Launch to Voting period. The time for the transition is indeterminate, and (with no possibility of canceling endorsements) proposers and endorsers might wait a long time before a referendum is tabled, and getting their deposits back."),(0,r.kt)("td",{parentName:"tr",align:null},"All proposals will eventually be voted on (given track capacity and deposit are met and the Lead-in period has ended)."),(0,r.kt)("td",{parentName:"tr",align:null},"It allows all proposals to get a chance to be voted on in a timely predictive manner.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Only ",(0,r.kt)("em",{parentName:"td"},"aye")," or ",(0,r.kt)("em",{parentName:"td"},"nay")," votes possible."),(0,r.kt)("td",{parentName:"tr",align:null},"Voters can have the additional voting options of abstaining or splitting votes."),(0,r.kt)("td",{parentName:"tr",align:null},"More ways to engage in voting and increase turnout.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Voters can decide to delegate votes to another account."),(0,r.kt)("td",{parentName:"tr",align:null},"Voters can use ",(0,r.kt)("a",{parentName:"td",href:"#multirole-delegation"},"multirole delegations")," and delegate votes to different accounts depending on origins."),(0,r.kt)("td",{parentName:"tr",align:null},"More agile delegations tailored by expertise.")))),(0,r.kt)("h2",{id:"proposals"},"Proposals"),(0,r.kt)("admonition",{title:"Starting a proposal in Governance v1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#proposals"},"this page")," for more information about starting referenda in\nGovernance v1.")),(0,r.kt)("p",null,"In Polkadot OpenGov, anyone can start a referendum at any time and do so as often as they wish.\nPrevious features were expanded and improved, most notably\n",(0,r.kt)("a",{parentName:"p",href:"#origins-and-tracks"},(0,r.kt)("strong",{parentName:"a"},"Origins and Tracks"))," help aid in the flow and processing of the submitted\nreferenda."),(0,r.kt)("h3",{id:"cancelling-and-blacklisting"},"Cancelling and Blacklisting"),(0,r.kt)("admonition",{title:"Cancelling Referenda in Governance v1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#cancelling-proposals"},"this page")," for more information about cancelling\nreferenda in Governance v1.")),(0,r.kt)("p",null,"In Polkadot OpenGov, there is a special operation called ",(0,r.kt)("strong",{parentName:"p"},"Cancellation")," for intervening with a\nproposal already being voted on. The operation will immediately reject an ongoing referendum\nregardless of its status. There is also a provision to ensure the deposit of the proposer is slashed\nif the proposal is malicious or spam."),(0,r.kt)("p",null,"Cancellation is a governance operation the network must vote on to be executed. Cancellation comes\nwith\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#referendum-canceller"},"its own Origin and Track"),"\nwhich has a low lead-time and Approval/Support curves with slightly sharper reductions in their\nthresholds for passing, given that it is invoked with a sense of urgency."),(0,r.kt)("p",null,"For more information about how to cancel a referendum see the\n",(0,r.kt)("a",{parentName:"p",href:"./learn-guides-polkadot-opengov#cancel-or-kill-a-referendum"},"advanced how-to guides"),"."),(0,r.kt)("admonition",{title:"Blacklisting",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Blacklisting referenda in Polkadot OpenGov is\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#blacklisting-proposals"},"the same as in Governance v1"),".")),(0,r.kt)("h2",{id:"referenda"},"Referenda"),(0,r.kt)("admonition",{title:"Public and Council Referenda in Governance v1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"With the Council's dissolution, ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#council-referenda"},"council referenda")," are no\nlonger present in Polkadot OpenGov."),(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#public-referenda"},"this page")," for more information about public referenda\nin Governance v1.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"In Polkadot OpenGov all referenda are public.")," The\n",(0,r.kt)("a",{parentName:"p",href:"#the-technical-fellowship"},"Technical Fellowship")," has the option to ",(0,r.kt)("a",{parentName:"p",href:"#whitelisting"},"whitelist"),"\nreferenda that can be then proposed in the track with\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#whitelisted-caller"},"whitelist origin"),"."),(0,r.kt)("h3",{id:"referenda-timeline"},"Referenda Timeline"),(0,r.kt)("admonition",{title:"Voting timetable in Governance v1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#referenda-timeline"},"this page")," for more information about the voting\ntimetable in Governance v1.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"opengov-timeline",src:n(1671).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"The figure above provides a summary view of the referenda timeline for Polkadot OpenGov."),(0,r.kt)("p",null,"In (1), when a referendum is initially created, the community can immediately vote on it. However,\nit is not immediately in a state where it can end or otherwise have its votes counted, be approved,\nand ultimately enacted. Instead, the proposal will stay within a ",(0,r.kt)("strong",{parentName:"p"},"Lead-in Period")," until it\nfulfills three criteria:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Proposals must stay within the lead-in period for a pre-defined minimum amount of time. This helps\nmitigate against the possibility of "decision sniping" where an attacker controlling a substantial\namount of voting power might seek to have a proposal passed immediately after proposing, not\nallowing the overall voting population adequate time to consider and participate.'),(0,r.kt)("li",{parentName:"ul"},"There must be enough room for the decision within the origin. Different origins have their limit\non the number of proposals that can be decided simultaneously. Tracks that have more potent\nabilities will have lower limits. For example, the Root level Origin has a limit of one, implying\nthat only a single proposal may be decided on at once."),(0,r.kt)("li",{parentName:"ul"},"A decision deposit must be submitted. Creating a referendum is cheap as the deposit value consists\nof only the value required for the on-chain storage needed to track it. But, having a referendum\nreviewed and decided upon carries the risk of using up the limited spots available in the\nreferenda queue. Having a more significant but refundable deposit requirement makes sense to help\nmitigate spam. Failing to submit the decision deposit will lead to a referendum ",(0,r.kt)("em",{parentName:"li"},"timeout"),".")),(0,r.kt)("p",null,"Until they are in the lead-in period, proposals remain undecided. Once the criteria above are met,\nthe referendum moves to the ",(0,r.kt)("em",{parentName:"p"},"deciding")," state. The votes of the referendum are now counted towards\nthe outcome."),(0,r.kt)("p",null,"In (2), the proposal enters the ",(0,r.kt)("strong",{parentName:"p"},"Decision Period")," where votes can be cast. For a proposal to be\napproved, votes must satisfy the approval and support criteria for at least the ",(0,r.kt)("strong",{parentName:"p"},"Confirmation\nPeriod"),"; otherwise, the proposal is automatically rejected. A rejected proposal can be resubmitted\nanytime and as many times as needed."),(0,r.kt)("p",null,"In (3), approved proposals will enter the ",(0,r.kt)("strong",{parentName:"p"},"Enactment Period"),", after which proposed changes will be\nexecuted."),(0,r.kt)("p",null,"Note how the length of the lead-in, decision, confirmation, and enactment periods vary depending on\nthe origin. Root origin has more extended periods than the other origins. Also, the number of\nreferenda within each track differs, with the Root origin track only accepting one. proposal at a\ntime (see below)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"opengov-track-capacity",src:n(67506).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"This directly affects the number of proposals that can be voted on and executed simultaneously.\nContinuing the comparison between Root and Small Tipper, Small Tipper will allow many proposals on\nits track to be executed simultaneously. In contrast, Root will allow only one proposal in its\ntrack. Once the track capacity is filled, additional proposals in the lead-in period will queue\nuntil place is available to enter the decision period."),(0,r.kt)("h3",{id:"origins-and-tracks"},"Origins and Tracks"),(0,r.kt)("p",null,"An ",(0,r.kt)("strong",{parentName:"p"},"Origin")," is a specific level of privilege that will determine the ",(0,r.kt)("strong",{parentName:"p"},"Track")," of all referenda\nexecuted with that origin. The track is basically a pipeline in which the proposal lives and\nproceeds and is independent from other origins' tracks. The proposer of the referenda now selects an\nappropriate Origin for their request based on the proposal\u2019s requirements."),(0,r.kt)("p",null,"Although the track structure is the same for all origins, track parameters are not. Such parameters\ninclude:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Maximum Deciding or Capacity"),": the limit for the number of referenda that can be decided at\nonce (i.e. the number of tracks within each origin)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Decision deposit"),": the amount of funds that must be placed on deposit to enter the Decision\nPeriod (note that more requirements must be met to enter the Decision Period)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Preparation Period"),": the minimum amount of voting time needed before entering the Decision\nPeriod (given capacity and deposit are met)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Decision Period"),": the maximum time to approve a proposal. The proposal will be accepted if\napproved by the end of the period."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Confirmation Period"),": the minimum amount of time (within the Decision Period) the approval and\nsupport criteria must hold before the proposal is approved and moved to the enactment period."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Minimum Enactment Period"),": the minimum amount of waiting time before the proposed changes are\napplied"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Approval Curve"),": the curve describing the minimum % of ",(0,r.kt)("em",{parentName:"li"},"aye")," votes as a function of time within\nthe Decision Period. The approval % is the portion of ",(0,r.kt)("em",{parentName:"li"},"aye")," votes (adjusted for conviction) over\nthe total votes (",(0,r.kt)("em",{parentName:"li"},"aye"),", ",(0,r.kt)("em",{parentName:"li"},"nay"),", and ",(0,r.kt)("em",{parentName:"li"},"abstained"),")."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Support Curve"),": the curve describing the minimum % of all votes in support of a proposal as a\nfunction of time within the Decision Period. The support % is defined as the portion of all votes\n(",(0,r.kt)("em",{parentName:"li"},"aye")," and ",(0,r.kt)("em",{parentName:"li"},"abstained"),") without conviction over the total possible amount of votes in the system\n(i.e. the total active issuance).")),(0,r.kt)("p",null,"For example, a runtime upgrade (requiring a ",(0,r.kt)("inlineCode",{parentName:"p"},"set_code")," call, if approved) does not have the same\nimplications for the ecosystem as the approval of a treasury tip (",(0,r.kt)("inlineCode",{parentName:"p"},"reportAwesome")," call), and\ntherefore different Origins for these two actions are needed in which different deposits, support,\napproval, and a minimum ",(0,r.kt)("a",{parentName:"p",href:"#enactment"},"enactment")," periods will be predetermined on the pallet."),(0,r.kt)("p",null,"For detailed information about origin and tracks, and parameter values in Kusama, see\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#origins-and-tracks-info"},"this page"),"."),(0,r.kt)("h3",{id:"approval-and-support"},"Approval and Support"),(0,r.kt)("admonition",{title:"Adaptive Quorum Biasing is deprecated",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"In Polkadot OpenGov, ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#adaptive-quorum-biasing"},"Adaptive quorum biasing")," used\nin Governance V1 has been replaced with the ",(0,r.kt)("strong",{parentName:"p"},"Approval and Support system"),".")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"opengov-curves-pass",src:n(65993).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"The figure above provides a summary view of how the approval and support system works during the\nDecision Period."),(0,r.kt)("p",null,"Once the proposal exits the Lead-in Period and enters the Voting Period, to be approved, it must\nsatisfy the approval and support criteria for the ",(0,r.kt)("strong",{parentName:"p"},"Confirmation Period"),"."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Approval")," is defined as the share of approval (",(0,r.kt)("em",{parentName:"li"},"aye")," votes) vote-weight (after adjustment for\n",(0,r.kt)("a",{parentName:"li",href:"#voluntary-locking"},"conviction"),") against the total vote-weight (",(0,r.kt)("em",{parentName:"li"},"aye"),", ",(0,r.kt)("em",{parentName:"li"},"nay"),", and ",(0,r.kt)("em",{parentName:"li"},"abstained"),")."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Support")," is the total number of ",(0,r.kt)("em",{parentName:"li"},"aye")," and ",(0,r.kt)("em",{parentName:"li"},"abstain")," votes (ignoring any adjustment for\nconviction) compared to the total possible votes that could be made in the system. In case of\n",(0,r.kt)("em",{parentName:"li"},"split")," votes, only ",(0,r.kt)("em",{parentName:"li"},"aye")," and ",(0,r.kt)("em",{parentName:"li"},"abstain")," will count.")),(0,r.kt)("admonition",{title:"Nay votes are not counted towards Support",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Support is a measure of voters who turned out either in favor of the referenda and who consciously\nabstained from it. Support does not include ",(0,r.kt)("em",{parentName:"p"},"nay")," votes. This avoids edge situations where ",(0,r.kt)("em",{parentName:"p"},"nay"),"\nvotes could push a referendum into confirming state. For example, imagine current approval is high\n(near 100%, way above the approval curve), and current support is just below the support curve. A\n",(0,r.kt)("em",{parentName:"p"},"nay")," could bump support above the support curve but not reduce approval below the approval curve.\nTherefore someone voting against a proposal would make it pass. Hence, a decrease in % of current\napproval through new votes does not directly translate into increasing support because Support needs\nto consider ",(0,r.kt)("em",{parentName:"p"},"nay")," votes.")),(0,r.kt)("p",null,"The figure above shows the followings:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Even if the approval threshold is reached (i.e. % of current approval is greater than the approval\ncurve), the proposal only enters the confirmation period once the support threshold is also\nreached (i.e. % current support is greater than the underlying support curve)."),(0,r.kt)("li",{parentName:"ul"},"If the referendum meets the criteria for the confirmation period, then the proposal is approved\nand scheduled for enactment. The Enactment Period can be specified when the referendum is proposed\nbut is also subject to a minimum value based on the Track. More powerful Tracks enforce a larger\nEnactment Period to ensure the network has ample time to prepare for any changes the proposal may\nbring."),(0,r.kt)("li",{parentName:"ul"},"A referendum may exit the confirmation period when the thresholds are no longer met, due to new\n",(0,r.kt)("em",{parentName:"li"},"Nay")," votes or a change of existing ",(0,r.kt)("em",{parentName:"li"},"Aye")," or ",(0,r.kt)("em",{parentName:"li"},"Abstain")," votes to ",(0,r.kt)("em",{parentName:"li"},"Nay")," . Each time it exits, the\nconfirmation period resets. For example, if the confirmation period is 20 minutes and a referendum\nenters it just for 5 min, the next time it enters, it must stay for 20 minutes (not 15 minutes)."),(0,r.kt)("li",{parentName:"ul"},"During the decision period, if a referendum fails to meet the approval and support thresholds for\nthe duration of the track-specific confirmation period, it fails and does not go to the enactment\nperiod (it may have to be resubmitted, see below)."),(0,r.kt)("li",{parentName:"ul"},"The current approval must be above 50% for a referendum to pass, and the approval curve never goes\nbelow 50%.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"opengov-curves-pass",src:n(55745).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"Note that support may not increase monotonically as shown in the figure, as people might switch\nvotes."),(0,r.kt)("p",null,"Different Origins' tracks have different Confirmation Periods and requirements for approval and\nsupport. For additional details on the various origins and tracks, check out\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#origins-and-tracks-info"},"this table"),". Configuring\nthe amount of support and overall approval required for it to pass is now possible. With proposals\nthat use less privileged origins, it is far more reasonable to drop the required support to a more\nrealistic amount earlier than those which use highly privileged classes such as ",(0,r.kt)("inlineCode",{parentName:"p"},"Root"),". Classes with\nmore significance can be made to require higher approval early on, to avoid controversy."),(0,r.kt)("h3",{id:"enactment"},"Enactment"),(0,r.kt)("admonition",{title:"Enactment in Governance v1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#enactment"},"this page")," for more information about enactment in Governance\nv1.")),(0,r.kt)("p",null,"In Polkadot OpenGov, the proposer suggests the enactment period, but there are also minimums set for\neach Origin Track. For example, root Origin approvals require a more extended period because of the\nimportance of the changes they bring to the network."),(0,r.kt)("h2",{id:"voting-on-a-referendum"},"Voting on a Referendum"),(0,r.kt)("p",null,"In Governance V1, voters could cast only an ",(0,r.kt)("em",{parentName:"p"},"aye")," or ",(0,r.kt)("em",{parentName:"p"},"nay")," vote. In Polkadot OpenGov, voters can\nadditionally cast a ",(0,r.kt)("em",{parentName:"p"},"abstain")," and ",(0,r.kt)("em",{parentName:"p"},"split")," votes.\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#voting-on-referenda"},"Vote splitting")," allows voters\nto allocate different votes for ",(0,r.kt)("em",{parentName:"p"},"aye"),", ",(0,r.kt)("em",{parentName:"p"},"nay"),", and ",(0,r.kt)("em",{parentName:"p"},"abstain"),"."),(0,r.kt)("admonition",{title:"Only the last vote counts",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Voting a second time replaces your original vote, e.g. voting with 10\nDOT, then a second extrinsic to vote with 5\nDOT, means that you are voting with 5\nDOT, not 10\nDOT.")),(0,r.kt)("h3",{id:"voluntary-locking"},"Voluntary Locking"),(0,r.kt)("p",null,"Polkadot utilizes an idea called voluntary\nlocking that allows token holders to increase their voting power by declaring how long they are\nwilling to lock up their tokens; hence, the number of votes for each token holder will be calculated\nby the following formula:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"votes = tokens * conviction_multiplier\n")),(0,r.kt)("p",null,"The conviction multiplier increases the vote multiplier by one every time the number of lock periods\ndouble."),(0,r.kt)(h,{mdxType:"VLTable"}),(0,r.kt)("p",null,"",(0,r.kt)("strong",{parentName:"p"},"The table above shows the correct duration values. However, the current values for Polkadot are the same as those for Kusama. This is going to be fixed. For more information, see ",(0,r.kt)("a",{parentName:"strong",href:"https://github.com/paritytech/polkadot/issues/7394"},"this GitHub issue"),"."),""),(0,r.kt)("p",null,'The maximum number of "doublings" of the lock period is set to 6 (and thus 32 lock periods in\ntotal), and one lock period equals 28\n',"\ndays. For additional information regarding the timeline of governance events, check out the\ngovernance section on the\n",(0,r.kt)("a",{parentName:"p",href:"maintain-polkadot-parameters/#governance"},"Polkadot Parameters page"),"","."),(0,r.kt)("admonition",{title:"do votes stack?",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can use the same number of tokens to vote on different referenda. Votes with conviction do not\nstack. If you voted with 5 DOT on Referenda A, B\nand C with 2x conviction you would have 10 votes on all those referenda and 5\nDOT locked up only for the 2x conviction period\n(i.e. 8 weeks), with the unlocking\ncountdown starting when the last referendum you voted on ends (assuming you are on the winning\nside). If you voted with conviction on referendum and then a week later voted on another one with\nthe same conviction, the lock on your DOT will be\nextended by a week (always assuming you are on the winning side).")),(0,r.kt)("admonition",{title:"Staked tokens can be used in governance",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"While a token is locked, you can still use it for voting and ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"staking"),". You are\nonly prohibited from transferring these tokens to another account.")),(0,r.kt)("p",null,'Votes are always "counted" at the same time (at the end of the voting period), no matter for how\nlong the tokens are locked.'),(0,r.kt)("p",null,"See below an example that shows how voluntary locking works."),(0,r.kt)("p",null,"Peter: Votes ",(0,r.kt)("inlineCode",{parentName:"p"},"No")," with\n10 DOT for a 128-week lock period\n=> 10 x 6 = 60 Votes"),(0,r.kt)("p",null,"Logan: Votes ",(0,r.kt)("inlineCode",{parentName:"p"},"Yes")," with\n20 DOT for a 4-week lock period =>\n20 x 1 = 20 Votes"),(0,r.kt)("p",null,"Kevin: Votes ",(0,r.kt)("inlineCode",{parentName:"p"},"Yes")," with\n15 DOT for a 8-week lock period\n=> 15 x 2 = 30 Votes"),(0,r.kt)("p",null,"Even though combined both Logan and Kevin vote with more\nDOT than Peter, the lock period for both of them\nis less than Peter, leading to their voting power counting as less."),(0,r.kt)("admonition",{title:"Conviction Voting Locks created during Gov 1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Conviction voting locks in Governance v1 will not be carried over to OpenGov. Voting with conviction\nin OpenGov will create a new lock (as this will use the ",(0,r.kt)("inlineCode",{parentName:"p"},"convictionVoting")," pallet), while any\nexisting lock under Governance v1 (using the deprecated ",(0,r.kt)("inlineCode",{parentName:"p"},"democracy")," pallet) will be left to expire.\nDelegations under Governance v1 will need to be re-issued under OpenGov.")),(0,r.kt)("h3",{id:"multirole-delegation"},"Multirole Delegation"),(0,r.kt)("p",null,"Polkadot OpenGov builds on the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#delegations"},"vote delegation feature from Governance v1")," where a voter can\ndelegate their voting power to another voter. It does so by introducing a feature known as\n",(0,r.kt)("strong",{parentName:"p"},"multirole delegation"),", where voters can specify a different delegate for every class of\nreferendum in the system. Delegation can be done per track, and accounts can choose to select\ndifferent delegates (or no delegation) for each track."),(0,r.kt)("p",null,"For example, a voter could delegate one entity for managing a less potent referenda class, choose a\ndifferent delegate for another class with more powerful consequences and still retain full voting\npower over any remaining classes."),(0,r.kt)("admonition",{title:"Delegate your votes",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"In Polkadot OpenGov you can delegate your votes to different entities, who will vote on your behalf.\nYou can delegate your votes using the\n",(0,r.kt)("a",{parentName:"p",href:"https://delegation.polkadot.network/"},(0,r.kt)("strong",{parentName:"a"},"Polkadot Delegation Dashboard")),". See\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=tlh_KmWQiSQ"},"this video tutorial")," to learn about the features of\nthe dashboard."),(0,r.kt)("p",{parentName:"admonition"},"If you are staking directly and not through a nomination pool, you can use bonded tokens for voting.\nNote that if you are voting with conviction, your tokens will have a democracy lock in addition to\nthe staking lock. For more information about locks, see\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-accounts/#unlocking-locks"},"this page"),"."),(0,r.kt)("p",{parentName:"admonition"},"Democracy locks created through ",(0,r.kt)("a",{parentName:"p",href:"#voluntary-locking"},"conviction voting")," start the unlocking period\nafter a referendum ends, provided you voted with the winning side. In the case of delegations, the\nunlocking period countdown begins after the account undelegates. There can be different scenarios:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"if the account delegated votes to one delegate, then after undelegating, there will be one\nunlocking period with length dependent on the conviction multiplier."),(0,r.kt)("li",{parentName:"ul"},"if the account delegated votes to different delegates using different convictions, then after\nundelegating those delegates, there will be different unlocking periods with lengths dependent on\nthe conviction multipliers."))),(0,r.kt)("p",null,"Occasional delegation and undelegation calls are fee-free: creating an incentive for token holders\nto use this feature and ensure that wallets can do it \u201cby default\u201d without any cost to end-users. It\nis worth noting that a user delegating their voting power does not imply that the delegate will have\ncontrol over the funds of the delegating account: they can vote with a user's voting power: but they\nwon't be able to transfer your balance, nominate a different set of validators or execute any call\nother than voting on the defined call/s by the user."),(0,r.kt)("p",null,"With the new delegation features, the goal is to ensure the required support for proposals to be\nenacted is reached while maintaining the anonymity of voters and keeping the overall design\ncensorship-free."),(0,r.kt)("p",null,"For a step-by-step outline of how to delegate voting power in Polkadot OpenGov, check out the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#delegating-voting-power"},"Delegating Voting Power"),"\nsection on the ",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov"},"Polkadot OpenGov Maintenance")," page."),(0,r.kt)("h2",{id:"the-polkadot-technical-fellowship"},"The Polkadot Technical Fellowship"),(0,r.kt)("admonition",{title:"From Technical Committee to the Technical Fellowship",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot Technical Fellowship is a collection of Substrate experts. This fellowship was\nestablished in 2022. In Polkadot OpenGov, this fellowship replaces the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#technical-committee"},"Technical Committee")," in Governance v1, and will serve\nboth the Polkadot and Kusama networks."),(0,r.kt)("p",{parentName:"admonition"},"For more information about the Fellowship see the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/polkadot-fellows/manifesto/blob/0c3df46d76625980b8b48742cb86f4d8fa6dda8d/manifesto.pdf"},"Fellowship Manifesto"),".")),(0,r.kt)("p",null,"The Technical Fellowship is a mostly self-governing expert body with a primary goal of representing\nhumans who embody and contain the technical knowledge base of the Kusama and/or Polkadot networks\nand protocols. This is accomplished by associating a rank with members to categorize the degree to\nwhich the system expects their opinion to be well-informed, of a sound technical basis, and in line\nwith the interests of Polkadot and/or Kusama."),(0,r.kt)("p",null,"Unlike the Technical Committee in Governance V1, the Fellowship is designed to be far broader in\nmembership (i.e. to work well with even tens of thousands of members) and with far lower barriers to\nentry (both in terms of administrative process flow and expectations of expertise)."),(0,r.kt)("p",null,"The mechanism by which the Fellowship votes is the same as what is used for Polkadot and Kusama\nstakeholder voting for a proposed referendum. Members of the Fellowship can vote on any given\nFellowship proposal and the aggregated opinion of the members (weighted by their rank) constitutes\nthe Fellowship's considered opinion."),(0,r.kt)("p",null,"The Polkadot Technical Fellowship resides on the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpolkadot-collectives-rpc.polkadot.io#/fellowship/referenda"},"Collectives"),"\nparachain and maintains the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/polkadot-fellows"},"Polkadot Fellows")," repository. The\nfellowship also has its own governance model with multiple tracks with approval and support\nparameters, where the votes are weighted by the rank of the member.",(0,r.kt)("br",{parentName:"p"}),"\n","The fellowship governance is primarily used for its membership management,\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/polkadot-fellows/RFCs"},"approving RFCs")," and whitelisting Polkadot OpenGov\nproposals."),(0,r.kt)("p",null,"",""),(0,r.kt)("h3",{id:"ranking-system"},"Ranking System"),(0,r.kt)("p",null,"To prevent a small group of participants from gaining effective control over the network, this\nsystem will adhere to three main principles:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The Fellowship must never have hard power over the network: it cannot change the parameters,\nconduct rescues or move assets. Their only power in governance is reducing the effective timeline\non which a referendum takes place through ",(0,r.kt)("a",{parentName:"li",href:"#whitelisting"},"whitelisting"),"."),(0,r.kt)("li",{parentName:"ul"},"The Fellowship weights those with a higher rank more in the aggregate opinion. However, the weight\nshould not be so high as to make a small number of higher members\u2019 opinions be insurmountable\ncompared to a coherent opinion from lower-ranked membership."),(0,r.kt)("li",{parentName:"ul"},"The Fellowship should be designed to grow and develop its membership, aggregate levels of\nexpertise and ensure that its overall decision-making capacity strengthens over time.")),(0,r.kt)("p",null,"To support these conditions, the Fellowship will have a constitution that outlines the requirements\nand expectations for individuals to attain and retain any given rank. Higher ranks can vote and\npromote lower ranks based on this constitution."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Demotion")," occurs automatically after a given period has elapsed, and the member is unable to\ndefend their position to their peers."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Suspension")," can happen only through a referendum, which ensures that the Fellowship's bias alone\ndoes not necessarily result in expulsion."),(0,r.kt)("p",null,"To prevent the Fellowship from becoming a cabal (popularity with Fellowship peers alone should not\nbe enough to gain access to a top rank), gaining access to the top tiers of the ranks will require a\nreferendum."),(0,r.kt)("h3",{id:"whitelisting"},"Whitelisting"),(0,r.kt)("p",null,'Polkadot OpenGov allows the Fellowship to authorize a new origin (known as "Whitelisted-Caller") to\nexecute with Root-level privileges for calls that have been approved by the Fellowship (currently\nonly level-three fellows and above can vote for whitelist calls).'),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_whitelist/"},"Whitelist")," pallet allows one\nOrigin to escalate the privilege level of another Origin for a certain operation. The pallet\nverifies two things:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The origin of the escalation is the Whitelisted-Root (i.e. that the referendum passed on this\ntrack), and"),(0,r.kt)("li",{parentName:"ul"},"The whitelist contains the given proposal (in the configuration of Polkadot OpenGov, it gets there\nvia a separate Fellowship referendum).")),(0,r.kt)("p",null,"If both conditions are true, the operation executes with Root-level privileges."),(0,r.kt)("p",null,"This system enables a new parallel Track (Whitelisted-Caller), whose parameters have less\nrestrictive passing parameters than Root in the short term. Through an open and transparent process,\na body of global experts on the Polkadot\nprotocol have determined that the action is both safe and time-critical."),(0,r.kt)("admonition",{title:"Submitting Whitelisted Proposals",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For more information about how to submit a whitelisted proposal see the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#submitting-a-referendum-on-the-whitelisted-caller-track"},"dedicated advanced how-to guides"),".")),(0,r.kt)("h3",{id:"becoming-a-polkadot-technical-fellowship-member"},"Becoming a Polkadot Technical Fellowship Member"),(0,r.kt)("p",null,'Currently, the only way to become a fellowship member is through a referenda. To get added as a\nmember of "Rank 1", an existing member of the fellowship needs to submit a referendum with the\npreimage of a batch call that has ',(0,r.kt)("inlineCode",{parentName:"p"},"fellowshipCollective.addMember")," and\n",(0,r.kt)("inlineCode",{parentName:"p"},"fellowshipCollective.promoteMember"),' on "2/Proficients" track. On Polkadot-JS UI for Polkadot\nCollectives, navigate to Governance > Fellowship > Referenda and click on "Add Preimage". This\npreimage can be submitted by anyone.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"fellowship-add-promote-member-preimage",src:n(68937).Z,width:"2156",height:"1746"})),(0,r.kt)("p",null,'After the preimage is successfully noted, navigate to Governance > Fellowship > Referenda and click\non "Submit Proposal" (This button is active on the UI only if you have an account that belongs to\nthe Fellowship). Choose the appropriate track and the origin, and enter the preimage hash of the\nbatch call that adds and promotes the member.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"fellowship-add-promote-member-proposal",src:n(16046).Z,width:"2150",height:"1492"})),(0,r.kt)("p",null,'After the referendum is successfully executed, the member is added to the fellowship with "rank 1".\nFor example, check the ',(0,r.kt)("a",{parentName:"p",href:"https://collectives.subsquare.io/fellowship/referenda/23"},"Referenda 23")," on\nthe Collectives parachain. If a member has to be added and promoted to \u201crank 5\u201d, the proposal has to\nbe submitted through track \u201c6/Senior Experts\u201d (Always a track with a rank higher). For example,\ncheck the ",(0,r.kt)("a",{parentName:"p",href:"https://collectives.subsquare.io/fellowship/referenda/25"},"Referenda 25")," on the\nCollectives parachain."),(0,r.kt)("p",null,"Future plans include that public members can apply to become a Fellowship candidate by placing a\nsmall deposit (which will be returned once they become members). Their candidacy will go through a\nreferendum to be approved to become a member."),(0,r.kt)("h2",{id:"resources"},"Resources"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate/tree/master/frame/democracy/src"},"Democracy Pallet")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://medium.com/polkadot-network/gov2-polkadots-next-generation-of-decentralised-governance-4d9ef657d11b"},"Governance v2")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Kusama-Direction:parity.io"},"Kusama Direction")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.polkassembly.io/"},"PolkAssembly"))))}y.isMDXComponent=!0},68937:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/fellowship-add-member-preimage-90d52688c691ac21a26fd067a3ba6524.png"},16046:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/fellowship-add-member-proposal-5d832ecf298a03c8de37b001d43be34c.png"},55745:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/opengov-curves-nopass-27f6968907aeb88e87069d29ca062568.png"},65993:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/opengov-curves-pass-73b6c7d1849e26082880cd7d629a633e.png"},40176:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/opengov-overview-a56ef29a3a173f9dc2b60a9008dcfc1b.png"},1671:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/opengov-timeline-26e5a1fae159676ab5052a4fd7416be5.png"},67506:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/opengov-track-capacity-a1e00e5bd7961ea13d38f79cf6fa4b9c.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/2f3b630e.3602004d.js b/assets/js/2f3b630e.3602004d.js new file mode 100644 index 000000000000..71335b30f1af --- /dev/null +++ b/assets/js/2f3b630e.3602004d.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[9226],{47940:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var a=n(74165),o=n(15861),i=n(67294),r=n(87152),l=n(17145),s=n(67425);function p(e,t,n){return d.apply(this,arguments)}function d(){return(d=(0,o.Z)((0,a.Z)().mark((function e(t,n,o){var i,s,p,d,c;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=void 0,s=void 0,e.t0=t,e.next="polkadot"===e.t0?5:"kusama"===e.t0?7:"statemine"===e.t0?9:"statemint"===e.t0?11:13;break;case 5:return i="wss://rpc.polkadot.io",e.abrupt("break",14);case 7:return i="wss://kusama-rpc.polkadot.io/",e.abrupt("break",14);case 9:return i="wss://statemine-rpc.polkadot.io/",e.abrupt("break",14);case 11:return i="wss://statemint-rpc.polkadot.io/",e.abrupt("break",14);case 13:console.log("Unknown socket url provided, no connection made.");case 14:if(void 0!==i){e.next=18;break}return e.abrupt("return");case 18:return p=new r.U(i),e.next=21,l.G.create({provider:p});case 21:d=e.sent,(c=n.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 s=d.toString(),e.abrupt("break",35);case 29:return e.next=31,d();case 31:return s=(s=e.sent).toString(),e.abrupt("break",35);case 34:console.log("Unknown path prefix ("+c[0]+") in "+n);case 35:return e.abrupt("return",s);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function c(e,t,n,a){switch(t){case"humanReadable":(0,s.HumanReadable)(e,n,a);break;case"precise":(0,s.Precise)(e,n,a);break;case"blocksToDays":(0,s.BlocksToDays)(e,a);break;case"percentage":(0,s.Percentage)(e,a);break;case"permillToPercent":(0,s.PermillToPercent)(e,a);break;case"arrayLength":(0,s.ArrayLength)(e,a);break;default:return void console.log("Ignoring unknown filter type")}}const h=function(e){var t=e.network,n=e.path,r=e.defaultValue,l=e.filter,s=void 0===l?void 0:l,d=(0,i.useState)(""),h=d[0],m=d[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==s?c(r.toString(),s,t,m):m(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://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,a.Z)().mark((function e(){var o;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,p(t,n,m);case 2:if(void 0!==(o=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==s?c(o,s,t,m):m(o);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(l){console.log(l)}}}),[]),h}},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,n,a){var o=void 0;if("polkadot"===n||"statemint"===n)o=3;else{if("kusama"!==n&&"statemine"!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");o=6}e=parseFloat(e),a((e=Number.isInteger(e/t[n].precision)?e/t[n].precision+" "+t[n].symbol:(e/t[n].precision).toFixed(o)+" "+t[n].symbol).toString())},Precise:function(e,n,a){a(e=(e=parseFloat(e))/t[n].precision+" "+t[n].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},42569:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>k,default:()=>y,frontMatter:()=>u,metadata:()=>g,toc:()=>v});var a=n(87462),o=n(63366),i=n(67294),r=n(3905),l=(n(47940),i.createElement("table",null,i.createElement("tbody",null,i.createElement("tr",null,i.createElement("th",null,"Lock Periods"),i.createElement("th",null,"Vote Multiplier"),i.createElement("th",null,"Length in Days")),i.createElement("tr",null,i.createElement("td",null,"0"),i.createElement("td",null,"0.1"),i.createElement("td",{id:"p0"})),i.createElement("tr",null,i.createElement("td",null,"1"),i.createElement("td",null,"1"),i.createElement("td",{id:"p1"})),i.createElement("tr",null,i.createElement("td",null,"2"),i.createElement("td",null,"2"),i.createElement("td",{id:"p2"})),i.createElement("tr",null,i.createElement("td",null,"4"),i.createElement("td",null,"3"),i.createElement("td",{id:"p4"})),i.createElement("tr",null,i.createElement("td",null,"8"),i.createElement("td",null,"4"),i.createElement("td",{id:"p8"})),i.createElement("tr",null,i.createElement("td",null,"16"),i.createElement("td",null,"5"),i.createElement("td",{id:"p16"})),i.createElement("tr",null,i.createElement("td",null,"32"),i.createElement("td",null,"6"),i.createElement("td",{id:"p32"}))))),s=["p0","p1","p2","p4","p8","p16","p32"],p={p0:0,p1:28,p2:56,p4:112,p8:224,p16:448,p32:896},d={p0:0,p1:7,p2:14,p4:28,p8:56,p16:112,p32:224};function c(e){s.forEach((function(t){var n=document.getElementById(t);"polkadot"===e?n.innerText=p[t]:"kusama"===e&&(n.innerText=d[t])}))}const h=function(){var e=(0,i.useState)("");return e[0],e[1],(0,i.useEffect)((function(){var e=document.title;"Governance V1 \xb7 Polkadot Wiki"===e||"Polkadot OpenGov \xb7 Polkadot Wiki"===e?c("polkadot"):"Governance V1 \xb7 Guide"===e||"Polkadot OpenGov \xb7 Guide"===e?c("kusama"):console.log("Unknown wiki/guide type")}),[]),l};var m=["components"],u={id:"learn-polkadot-opengov",title:"Polkadot OpenGov",sidebar_label:"Polkadot OpenGov",description:"Polkadot\u2019s Latest Model for Decentralized Governance.",keywords:["governance","referenda","proposal","voting","endorse"],slug:"../learn-polkadot-opengov"},k=void 0,g={unversionedId:"learn/learn-polkadot-opengov",id:"learn/learn-polkadot-opengov",title:"Polkadot OpenGov",description:"Polkadot\u2019s Latest Model for Decentralized Governance.",source:"@site/../docs/learn/learn-polkadot-opengov.md",sourceDirName:"learn",slug:"/learn-polkadot-opengov",permalink:"/docs/learn-polkadot-opengov",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-polkadot-opengov.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1697790575,formattedLastUpdatedAt:"Oct 20, 2023",frontMatter:{id:"learn-polkadot-opengov",title:"Polkadot OpenGov",sidebar_label:"Polkadot OpenGov",description:"Polkadot\u2019s Latest Model for Decentralized Governance.",keywords:["governance","referenda","proposal","voting","endorse"],slug:"../learn-polkadot-opengov"},sidebar:"docs",previous:{title:"Staking Apps",permalink:"/docs/learn-staking-apps"},next:{title:"Treasury",permalink:"/docs/learn-polkadot-opengov-treasury"}},f={},v=[{value:"Premise",id:"premise",level:2},{value:"Summary",id:"summary",level:2},{value:"Gov1 vs. Polkadot OpenGov",id:"gov1-vs-polkadot-opengov",level:2},{value:"Proposals",id:"proposals",level:2},{value:"Cancelling and Blacklisting",id:"cancelling-and-blacklisting",level:3},{value:"Referenda",id:"referenda",level:2},{value:"Referenda Timeline",id:"referenda-timeline",level:3},{value:"Origins and Tracks",id:"origins-and-tracks",level:3},{value:"Approval and Support",id:"approval-and-support",level:3},{value:"Enactment",id:"enactment",level:3},{value:"Voting on a Referendum",id:"voting-on-a-referendum",level:2},{value:"Voluntary Locking",id:"voluntary-locking",level:3},{value:"Multirole Delegation",id:"multirole-delegation",level:3},{value:"The Polkadot Technical Fellowship",id:"the-polkadot-technical-fellowship",level:2},{value:"Ranking System",id:"ranking-system",level:3},{value:"Whitelisting",id:"whitelisting",level:3},{value:"Becoming a Polkadot Technical Fellowship Member",id:"becoming-a-polkadot-technical-fellowship-member",level:3},{value:"Resources",id:"resources",level:2}],w={toc:v},b="wrapper";function y(e){var t=e.components,i=(0,o.Z)(e,m);return(0,r.kt)(b,(0,a.Z)({},w,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"The content in this document is subject to change",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The governance protocol has already undergone iterations (see\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance"},"Governance V1"),"). Governance is a constantly evolving protocol at this stage\nin its lifecycle."),(0,r.kt)("p",{parentName:"admonition"},"For technical information about Polkadot OpenGov and how to interact with it, please refer to this\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov"},"dedicated Wiki page"),"."),(0,r.kt)("p",{parentName:"admonition"},"For additional support about Polkadot OpenGov see the\n",(0,r.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/65000105211"},"dedicated support pages"),".")),(0,r.kt)("admonition",{title:"Polkadot Delegation Dashboard",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can easily delegate your votes to somebody else using the\n",(0,r.kt)("a",{parentName:"p",href:"https://delegation.polkadot.network/"},"Polkadot Delegation Dashboard"),". See\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=RapBYZc5ZPo"},"this video tutorial")," to learn how to use the\ndashboard. ",(0,r.kt)("strong",{parentName:"p"},"If you become a nomination pool member or a pool admin, you cannot participate in\nGovernance with the bonded tokens in the pool, as they are held in a\n",(0,r.kt)("a",{parentName:"strong",href:"/docs/learn-account-advanced#system-accounts"},"system account"),"."))),(0,r.kt)("p",null,"Polkadot uses a sophisticated governance\nmechanism that allows it to evolve gracefully overtime at the ultimate behest of its assembled\nstakeholders. The stated goal is to ensure that the majority of the stake can always command the\nnetwork."),(0,r.kt)("p",null,"Polkadot brings together various novel\nmechanisms, including an amorphous (abstract) form of state-transition function stored on-chain\ndefined in a platform-agnostic language (i.e. ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-wasm"},"WebAssembly"),"), and several on-chain\nvoting mechanisms such as referenda and batch approval voting. All changes to the protocol must be\nagreed upon by stake-weighted referenda."),(0,r.kt)("h2",{id:"premise"},"Premise"),(0,r.kt)("p",null,"Polkadot's first governance system\n(",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance"},"Governance V1"),") included three main components."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-governance#technical-committee"},"Technical Committee"),": A technocratic committee to\nmanage upgrade timelines."),(0,r.kt)("li",{parentName:"ul"},"The ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-governance#council"},"Council"),': An approval-voted, elected executive "government" to\nmanage parameters, admin, and spending proposals.'),(0,r.kt)("li",{parentName:"ul"},"The Public: All token holders.")),(0,r.kt)("p",null,"Over the first few years of operation, Governance V1 ensured the appropriate usage of treasury funds\nand enabled timely upgrades and fixes. Like most early technologies, protocols must evolve as they\nmature to improve their shortcomings and keep up with modern advancements. In Governance V1, all\nreferenda carried the same weight as only one referendum could be voted on at a time (except for\nemergency proposals), and the voting period could last multiple weeks. Also, an\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#alternating-voting-timetable"},"alternating voting timetable")," allowed to vote\neither for a public referendum or a council motion every\n28 days. This resulted in the system favoring\ncareful consideration of very few proposals instead of broad consideration of many."),(0,r.kt)("p",null,"Polkadot OpenGov changes how the practical means of day-to-day decisions are made, making the\nrepercussions of referenda better scoped and agile to increase the number of collective decisions\nthe system can make at any given time."),(0,r.kt)("p",null,"The following content is focused on what the new Polkadot OpenGov version brings to the governance\non Polkadot, and on the main differences with\nprevious governance versions. We recommend learning about ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance"},"Governance v1")," to\nbetter understand the need for and the direction of Polkadot OpenGov."),(0,r.kt)("h2",{id:"summary"},"Summary"),(0,r.kt)("p",null,"In Governance v1, active token holders (public) and the Council together administrated network's\nupgrade decisions. Whether the public or the council initiated the proposal, it would eventually\nhave to go through a referendum to let all holders (weighted by stake and conviction) make the\ndecision."),(0,r.kt)("p",null,"The Council fulfilled its role as the representative of the public, guardian of the treasury and\ninitiator of legislation, but it was often seen as a centralized entity. To further decentralize\nPolkadot, Polkadot OpenGov proposes the\nfollowing main changes:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Migrating all responsibilities of the Council to the public via a direct democracy voting system."),(0,r.kt)("li",{parentName:"ul"},"Dissolving the current ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-governance#council"},"Council")," collective"),(0,r.kt)("li",{parentName:"ul"},"Allowing users to delegate voting power in more ways to community members"),(0,r.kt)("li",{parentName:"ul"},"Dissolving the ",(0,r.kt)("a",{parentName:"li",href:"/docs/learn-governance#technical-committee"},"Technical Committee")," and establishing\nthe broader ",(0,r.kt)("a",{parentName:"li",href:"#the-technical-fellowship"},"Polkadot Technical Fellowship"))),(0,r.kt)("p",null,"The figure below shows an overview of Polkadot OpenGov's structure."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#summary"},"this page")," for a comparison with the structure of Governance V1.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"opengov-overview",src:n(40176).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"In Polkadot OpenGov, all the proposals are initiated by the public. The proposal will enter a\nLead-in period (for more information, see ",(0,r.kt)("a",{parentName:"p",href:"#referenda-timeline"},"Referenda Timeline"),"), after which it\nwill follow a specific ",(0,r.kt)("a",{parentName:"p",href:"#origins-and-tracks"},"Track")," which has a dedicated Origin. There are\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#origins-and-tracks-info"},"15 Origins"),", each with a\ndifferent track. The origins and tracks parameters are preset values that set the duration of a\nreferendum as well as how many referenda can be voted on simultaneously. For example, a treasury\nproposal can now be submitted in different tracks depending on the amount requested. A proposal for\na small tip will need to be submitted in the Small Tipper track, while a proposal requiring\nsubstantial funds will need to be submitted to the Medium or Big Spender track."),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"#the-technical-fellowship"},"Polkadot Technical Fellowship")," can decide to\n",(0,r.kt)("a",{parentName:"p",href:"#whitelisting"},"whitelist")," a proposal that will be enacted through the Whitelist Caller origin.\nThose proposals will have a shorter Lead-in, Confirmation, and Enactment period when compared to the\nRoot Origin track."),(0,r.kt)("p",null,"Each track has its own preset ",(0,r.kt)("a",{parentName:"p",href:"#approval-and-support"},"Approval and Support")," curves which are based\non the origin's privileges. When both the approval and support criteria are satisfied for a specific\nperiod (called the confirmation period), the referenda passes and will be executed after the\nenactment period."),(0,r.kt)("p",null,"All referenda within each track and across tracks can be voted on simultaneously (assuming track\nmaximum capacity is not reached)."),(0,r.kt)("p",null,"Polkadot OpenGov also comes with multi-role delegations where the token holder can assign voting\npower on different tracks to different entities who are experts in judging the referenda submitted\nto those tracks. For example, suppose a token holder does not have the technical background to\nconsider the merits and vote on the referenda submitted to the Root track. In that case, they can\ndelegate their voting power just for the Root track to a trusted expert who (according to them) acts\nin the best interest of the network protocol. In this way, token holders do not need to be\nup-to-date with governance matters and can still make their votes count through delegates."),(0,r.kt)("admonition",{title:"Delegation Dashboard",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"To easily delegate your votes you can use the\n",(0,r.kt)("a",{parentName:"p",href:"https://delegation.polkadot.network/"},"Polkadot Delegation Dashboard"),". See\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=RapBYZc5ZPo"},"this video tutorial")," to know more about the dashboard\nand learn how to use it.")),(0,r.kt)("h2",{id:"gov1-vs-polkadot-opengov"},"Gov1 vs. Polkadot OpenGov"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Governance V1"),(0,r.kt)("th",{parentName:"tr",align:null},"Polkadot OpenGov"),(0,r.kt)("th",{parentName:"tr",align:null},"Polkadot OpenGov Benefit"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Includes the ",(0,r.kt)("a",{parentName:"td",href:"/docs/learn-governance#council"},"Council"),", the ",(0,r.kt)("a",{parentName:"td",href:"/docs/learn-governance#technical-committee"},"Technical Committee"),", and the Public (i.e. token holders)."),(0,r.kt)("td",{parentName:"tr",align:null},"Includes the Public and the ",(0,r.kt)("a",{parentName:"td",href:"#the-technical-fellowship"},"Technical Fellowship"),"."),(0,r.kt)("td",{parentName:"tr",align:null},"Simpler and more decentralized structure.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Referenda executed only from one origin (Root). Referenda in this origin must be carefully scrutinized. Therefore, there is only one track (i.e. only one referendum at a time can be executed)."),(0,r.kt)("td",{parentName:"tr",align:null},"Referenda executed from ",(0,r.kt)("a",{parentName:"td",href:"/docs/maintain-guides-polkadot-opengov#origins-and-tracks-info"},"multiple origins"),", each with a different track that shapes proposals\u2019 timelines. Depending on the origin, multiple referenda within the same track are possible."),(0,r.kt)("td",{parentName:"tr",align:null},"Possibility to categorize proposals (based on importance and urgency) and execute them simultaneously within and between origin tracks.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Proposals can be submitted by either the Council or the Public."),(0,r.kt)("td",{parentName:"tr",align:null},"The public submits proposals."),(0,r.kt)("td",{parentName:"tr",align:null},"More democratic.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Uses ",(0,r.kt)("a",{parentName:"td",href:"/docs/learn-governance#adaptive-quorum-biasing"},"Adaptive Quorum Biasing")," to define the approval threshold based on turnout. Given the same turnout, council-initiated referenda require fewer Aye votes to pass compared to public referenda."),(0,r.kt)("td",{parentName:"tr",align:null},"Uses origin-specific approval and support curves defining the amount of approval and support (i.e. turnout) needed as a function of time. The same curves are applied to all referenda within the same origin track."),(0,r.kt)("td",{parentName:"tr",align:null},"Referenda timeline depends on the origin and not on who submitted the proposal (i.e. Council or Public). This is a more democratic and equalitarian system.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Uses ",(0,r.kt)("a",{parentName:"td",href:"/docs/learn-governance#alternating-voting-timetable"},"alternating voting timetable")," allowing voters to cast votes for either council or public referenda every 28 eras."),(0,r.kt)("td",{parentName:"tr",align:null},"Multiple referenda can be voted at the same time."),(0,r.kt)("td",{parentName:"tr",align:null},"More flexible and agile governance system.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Except for emergency proposals, all referenda have fixed voting and enactment periods of 28 eras."),(0,r.kt)("td",{parentName:"tr",align:null},"Periods' length is customizable and has pre-defined limits for each origin. The same limits apply to all tracks with the same origin. For example, the track in the origin Root will be longer than the track within the Small Tipper origin."),(0,r.kt)("td",{parentName:"tr",align:null},"Referenda\u2019s timeline is tailored to their importance and urgency. Flexible enactment period based on origin.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Emergency proposals turned referenda can be simultaneously voted on and executed with other referenda and have shorter enactment periods. They must be proposed by the Technical Committee and approved by the Council."),(0,r.kt)("td",{parentName:"tr",align:null},"No emergency proposals. The Technical Fellowship can whitelist proposals that will have their origin with shorter lead-in, confirmation, and enactment periods."),(0,r.kt)("td",{parentName:"tr",align:null},"The Technical Fellowship is a more decentralized entity when compared to the Technical Committee. Whitelisting a proposal requires a majority of approval from the fellowship.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Only the ",(0,r.kt)("a",{parentName:"td",href:"/docs/learn-governance#endorsing-proposals"},"most-endorsed proposal")," is able to transit from Launch to Voting period. The time for the transition is indeterminate, and (with no possibility of canceling endorsements) proposers and endorsers might wait a long time before a referendum is tabled, and getting their deposits back."),(0,r.kt)("td",{parentName:"tr",align:null},"All proposals will eventually be voted on (given track capacity and deposit are met and the Lead-in period has ended)."),(0,r.kt)("td",{parentName:"tr",align:null},"It allows all proposals to get a chance to be voted on in a timely predictive manner.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Only ",(0,r.kt)("em",{parentName:"td"},"aye")," or ",(0,r.kt)("em",{parentName:"td"},"nay")," votes possible."),(0,r.kt)("td",{parentName:"tr",align:null},"Voters can have the additional voting options of abstaining or splitting votes."),(0,r.kt)("td",{parentName:"tr",align:null},"More ways to engage in voting and increase turnout.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Voters can decide to delegate votes to another account."),(0,r.kt)("td",{parentName:"tr",align:null},"Voters can use ",(0,r.kt)("a",{parentName:"td",href:"#multirole-delegation"},"multirole delegations")," and delegate votes to different accounts depending on origins."),(0,r.kt)("td",{parentName:"tr",align:null},"More agile delegations tailored by expertise.")))),(0,r.kt)("h2",{id:"proposals"},"Proposals"),(0,r.kt)("admonition",{title:"Starting a proposal in Governance v1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#proposals"},"this page")," for more information about starting referenda in\nGovernance v1.")),(0,r.kt)("p",null,"In Polkadot OpenGov, anyone can start a referendum at any time and do so as often as they wish.\nPrevious features were expanded and improved, most notably\n",(0,r.kt)("a",{parentName:"p",href:"#origins-and-tracks"},(0,r.kt)("strong",{parentName:"a"},"Origins and Tracks"))," help aid in the flow and processing of the submitted\nreferenda."),(0,r.kt)("h3",{id:"cancelling-and-blacklisting"},"Cancelling and Blacklisting"),(0,r.kt)("admonition",{title:"Cancelling Referenda in Governance v1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#cancelling-proposals"},"this page")," for more information about cancelling\nreferenda in Governance v1.")),(0,r.kt)("p",null,"In Polkadot OpenGov, there is a special operation called ",(0,r.kt)("strong",{parentName:"p"},"Cancellation")," for intervening with a\nproposal already being voted on. The operation will immediately reject an ongoing referendum\nregardless of its status. There is also a provision to ensure the deposit of the proposer is slashed\nif the proposal is malicious or spam."),(0,r.kt)("p",null,"Cancellation is a governance operation the network must vote on to be executed. Cancellation comes\nwith\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#referendum-canceller"},"its own Origin and Track"),"\nwhich has a low lead-time and Approval/Support curves with slightly sharper reductions in their\nthresholds for passing, given that it is invoked with a sense of urgency."),(0,r.kt)("p",null,"For more information about how to cancel a referendum see the\n",(0,r.kt)("a",{parentName:"p",href:"./learn-guides-polkadot-opengov#cancel-or-kill-a-referendum"},"advanced how-to guides"),"."),(0,r.kt)("admonition",{title:"Blacklisting",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Blacklisting referenda in Polkadot OpenGov is\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#blacklisting-proposals"},"the same as in Governance v1"),".")),(0,r.kt)("h2",{id:"referenda"},"Referenda"),(0,r.kt)("admonition",{title:"Public and Council Referenda in Governance v1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"With the Council's dissolution, ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#council-referenda"},"council referenda")," are no\nlonger present in Polkadot OpenGov."),(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#public-referenda"},"this page")," for more information about public referenda\nin Governance v1.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"In Polkadot OpenGov all referenda are public.")," The\n",(0,r.kt)("a",{parentName:"p",href:"#the-technical-fellowship"},"Technical Fellowship")," has the option to ",(0,r.kt)("a",{parentName:"p",href:"#whitelisting"},"whitelist"),"\nreferenda that can be then proposed in the track with\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#whitelisted-caller"},"whitelist origin"),"."),(0,r.kt)("h3",{id:"referenda-timeline"},"Referenda Timeline"),(0,r.kt)("admonition",{title:"Voting timetable in Governance v1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#referenda-timeline"},"this page")," for more information about the voting\ntimetable in Governance v1.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"opengov-timeline",src:n(1671).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"The figure above provides a summary view of the referenda timeline for Polkadot OpenGov."),(0,r.kt)("p",null,"In (1), when a referendum is initially created, the community can immediately vote on it. However,\nit is not immediately in a state where it can end or otherwise have its votes counted, be approved,\nand ultimately enacted. Instead, the proposal will stay within a ",(0,r.kt)("strong",{parentName:"p"},"Lead-in Period")," until it\nfulfills three criteria:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Proposals must stay within the lead-in period for a pre-defined minimum amount of time. This helps\nmitigate against the possibility of "decision sniping" where an attacker controlling a substantial\namount of voting power might seek to have a proposal passed immediately after proposing, not\nallowing the overall voting population adequate time to consider and participate.'),(0,r.kt)("li",{parentName:"ul"},"There must be enough room for the decision within the origin. Different origins have their limit\non the number of proposals that can be decided simultaneously. Tracks that have more potent\nabilities will have lower limits. For example, the Root level Origin has a limit of one, implying\nthat only a single proposal may be decided on at once."),(0,r.kt)("li",{parentName:"ul"},"A decision deposit must be submitted. Creating a referendum is cheap as the deposit value consists\nof only the value required for the on-chain storage needed to track it. But, having a referendum\nreviewed and decided upon carries the risk of using up the limited spots available in the\nreferenda queue. Having a more significant but refundable deposit requirement makes sense to help\nmitigate spam. Failing to submit the decision deposit will lead to a referendum ",(0,r.kt)("em",{parentName:"li"},"timeout"),".")),(0,r.kt)("p",null,"Until they are in the lead-in period, proposals remain undecided. Once the criteria above are met,\nthe referendum moves to the ",(0,r.kt)("em",{parentName:"p"},"deciding")," state. The votes of the referendum are now counted towards\nthe outcome."),(0,r.kt)("p",null,"In (2), the proposal enters the ",(0,r.kt)("strong",{parentName:"p"},"Decision Period")," where votes can be cast. For a proposal to be\napproved, votes must satisfy the approval and support criteria for at least the ",(0,r.kt)("strong",{parentName:"p"},"Confirmation\nPeriod"),"; otherwise, the proposal is automatically rejected. A rejected proposal can be resubmitted\nanytime and as many times as needed."),(0,r.kt)("p",null,"In (3), approved proposals will enter the ",(0,r.kt)("strong",{parentName:"p"},"Enactment Period"),", after which proposed changes will be\nexecuted."),(0,r.kt)("p",null,"Note how the length of the lead-in, decision, confirmation, and enactment periods vary depending on\nthe origin. Root origin has more extended periods than the other origins. Also, the number of\nreferenda within each track differs, with the Root origin track only accepting one. proposal at a\ntime (see below)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"opengov-track-capacity",src:n(67506).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"This directly affects the number of proposals that can be voted on and executed simultaneously.\nContinuing the comparison between Root and Small Tipper, Small Tipper will allow many proposals on\nits track to be executed simultaneously. In contrast, Root will allow only one proposal in its\ntrack. Once the track capacity is filled, additional proposals in the lead-in period will queue\nuntil place is available to enter the decision period."),(0,r.kt)("h3",{id:"origins-and-tracks"},"Origins and Tracks"),(0,r.kt)("p",null,"An ",(0,r.kt)("strong",{parentName:"p"},"Origin")," is a specific level of privilege that will determine the ",(0,r.kt)("strong",{parentName:"p"},"Track")," of all referenda\nexecuted with that origin. The track is basically a pipeline in which the proposal lives and\nproceeds and is independent from other origins' tracks. The proposer of the referenda now selects an\nappropriate Origin for their request based on the proposal\u2019s requirements."),(0,r.kt)("p",null,"Although the track structure is the same for all origins, track parameters are not. Such parameters\ninclude:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Maximum Deciding or Capacity"),": the limit for the number of referenda that can be decided at\nonce (i.e. the number of tracks within each origin)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Decision deposit"),": the amount of funds that must be placed on deposit to enter the Decision\nPeriod (note that more requirements must be met to enter the Decision Period)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Preparation Period"),": the minimum amount of voting time needed before entering the Decision\nPeriod (given capacity and deposit are met)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Decision Period"),": the maximum time to approve a proposal. The proposal will be accepted if\napproved by the end of the period."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Confirmation Period"),": the minimum amount of time (within the Decision Period) the approval and\nsupport criteria must hold before the proposal is approved and moved to the enactment period."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Minimum Enactment Period"),": the minimum amount of waiting time before the proposed changes are\napplied"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Approval Curve"),": the curve describing the minimum % of ",(0,r.kt)("em",{parentName:"li"},"aye")," votes as a function of time within\nthe Decision Period. The approval % is the portion of ",(0,r.kt)("em",{parentName:"li"},"aye")," votes (adjusted for conviction) over\nthe total votes (",(0,r.kt)("em",{parentName:"li"},"aye"),", ",(0,r.kt)("em",{parentName:"li"},"nay"),", and ",(0,r.kt)("em",{parentName:"li"},"abstained"),")."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Support Curve"),": the curve describing the minimum % of all votes in support of a proposal as a\nfunction of time within the Decision Period. The support % is defined as the portion of all votes\n(",(0,r.kt)("em",{parentName:"li"},"aye")," and ",(0,r.kt)("em",{parentName:"li"},"abstained"),") without conviction over the total possible amount of votes in the system\n(i.e. the total active issuance).")),(0,r.kt)("p",null,"For example, a runtime upgrade (requiring a ",(0,r.kt)("inlineCode",{parentName:"p"},"set_code")," call, if approved) does not have the same\nimplications for the ecosystem as the approval of a treasury tip (",(0,r.kt)("inlineCode",{parentName:"p"},"reportAwesome")," call), and\ntherefore different Origins for these two actions are needed in which different deposits, support,\napproval, and a minimum ",(0,r.kt)("a",{parentName:"p",href:"#enactment"},"enactment")," periods will be predetermined on the pallet."),(0,r.kt)("p",null,"For detailed information about origin and tracks, and parameter values in Kusama, see\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#origins-and-tracks-info"},"this page"),"."),(0,r.kt)("h3",{id:"approval-and-support"},"Approval and Support"),(0,r.kt)("admonition",{title:"Adaptive Quorum Biasing is deprecated",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"In Polkadot OpenGov, ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#adaptive-quorum-biasing"},"Adaptive quorum biasing")," used\nin Governance V1 has been replaced with the ",(0,r.kt)("strong",{parentName:"p"},"Approval and Support system"),".")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"opengov-curves-pass",src:n(65993).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"The figure above provides a summary view of how the approval and support system works during the\nDecision Period."),(0,r.kt)("p",null,"Once the proposal exits the Lead-in Period and enters the Voting Period, to be approved, it must\nsatisfy the approval and support criteria for the ",(0,r.kt)("strong",{parentName:"p"},"Confirmation Period"),"."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Approval")," is defined as the share of approval (",(0,r.kt)("em",{parentName:"li"},"aye")," votes) vote-weight (after adjustment for\n",(0,r.kt)("a",{parentName:"li",href:"#voluntary-locking"},"conviction"),") against the total vote-weight (",(0,r.kt)("em",{parentName:"li"},"aye"),", ",(0,r.kt)("em",{parentName:"li"},"nay"),", and ",(0,r.kt)("em",{parentName:"li"},"abstained"),")."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Support")," is the total number of ",(0,r.kt)("em",{parentName:"li"},"aye")," and ",(0,r.kt)("em",{parentName:"li"},"abstain")," votes (ignoring any adjustment for\nconviction) compared to the total possible votes that could be made in the system. In case of\n",(0,r.kt)("em",{parentName:"li"},"split")," votes, only ",(0,r.kt)("em",{parentName:"li"},"aye")," and ",(0,r.kt)("em",{parentName:"li"},"abstain")," will count.")),(0,r.kt)("admonition",{title:"Nay votes are not counted towards Support",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Support is a measure of voters who turned out either in favor of the referenda and who consciously\nabstained from it. Support does not include ",(0,r.kt)("em",{parentName:"p"},"nay")," votes. This avoids edge situations where ",(0,r.kt)("em",{parentName:"p"},"nay"),"\nvotes could push a referendum into confirming state. For example, imagine current approval is high\n(near 100%, way above the approval curve), and current support is just below the support curve. A\n",(0,r.kt)("em",{parentName:"p"},"nay")," could bump support above the support curve but not reduce approval below the approval curve.\nTherefore someone voting against a proposal would make it pass. Hence, a decrease in % of current\napproval through new votes does not directly translate into increasing support because Support needs\nto consider ",(0,r.kt)("em",{parentName:"p"},"nay")," votes.")),(0,r.kt)("p",null,"The figure above shows the followings:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Even if the approval threshold is reached (i.e. % of current approval is greater than the approval\ncurve), the proposal only enters the confirmation period once the support threshold is also\nreached (i.e. % current support is greater than the underlying support curve)."),(0,r.kt)("li",{parentName:"ul"},"If the referendum meets the criteria for the confirmation period, then the proposal is approved\nand scheduled for enactment. The Enactment Period can be specified when the referendum is proposed\nbut is also subject to a minimum value based on the Track. More powerful Tracks enforce a larger\nEnactment Period to ensure the network has ample time to prepare for any changes the proposal may\nbring."),(0,r.kt)("li",{parentName:"ul"},"A referendum may exit the confirmation period when the thresholds are no longer met, due to new\n",(0,r.kt)("em",{parentName:"li"},"Nay")," votes or a change of existing ",(0,r.kt)("em",{parentName:"li"},"Aye")," or ",(0,r.kt)("em",{parentName:"li"},"Abstain")," votes to ",(0,r.kt)("em",{parentName:"li"},"Nay")," . Each time it exits, the\nconfirmation period resets. For example, if the confirmation period is 20 minutes and a referendum\nenters it just for 5 min, the next time it enters, it must stay for 20 minutes (not 15 minutes)."),(0,r.kt)("li",{parentName:"ul"},"During the decision period, if a referendum fails to meet the approval and support thresholds for\nthe duration of the track-specific confirmation period, it fails and does not go to the enactment\nperiod (it may have to be resubmitted, see below)."),(0,r.kt)("li",{parentName:"ul"},"The current approval must be above 50% for a referendum to pass, and the approval curve never goes\nbelow 50%.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"opengov-curves-pass",src:n(55745).Z,width:"1920",height:"800"})),(0,r.kt)("p",null,"Note that support may not increase monotonically as shown in the figure, as people might switch\nvotes."),(0,r.kt)("p",null,"Different Origins' tracks have different Confirmation Periods and requirements for approval and\nsupport. For additional details on the various origins and tracks, check out\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#origins-and-tracks-info"},"this table"),". Configuring\nthe amount of support and overall approval required for it to pass is now possible. With proposals\nthat use less privileged origins, it is far more reasonable to drop the required support to a more\nrealistic amount earlier than those which use highly privileged classes such as ",(0,r.kt)("inlineCode",{parentName:"p"},"Root"),". Classes with\nmore significance can be made to require higher approval early on, to avoid controversy."),(0,r.kt)("h3",{id:"enactment"},"Enactment"),(0,r.kt)("admonition",{title:"Enactment in Governance v1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#enactment"},"this page")," for more information about enactment in Governance\nv1.")),(0,r.kt)("p",null,"In Polkadot OpenGov, the proposer suggests the enactment period, but there are also minimums set for\neach Origin Track. For example, root Origin approvals require a more extended period because of the\nimportance of the changes they bring to the network."),(0,r.kt)("h2",{id:"voting-on-a-referendum"},"Voting on a Referendum"),(0,r.kt)("p",null,"In Governance V1, voters could cast only an ",(0,r.kt)("em",{parentName:"p"},"aye")," or ",(0,r.kt)("em",{parentName:"p"},"nay")," vote. In Polkadot OpenGov, voters can\nadditionally cast a ",(0,r.kt)("em",{parentName:"p"},"abstain")," and ",(0,r.kt)("em",{parentName:"p"},"split")," votes.\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#voting-on-referenda"},"Vote splitting")," allows voters\nto allocate different votes for ",(0,r.kt)("em",{parentName:"p"},"aye"),", ",(0,r.kt)("em",{parentName:"p"},"nay"),", and ",(0,r.kt)("em",{parentName:"p"},"abstain"),"."),(0,r.kt)("admonition",{title:"Only the last vote counts",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Voting a second time replaces your original vote, e.g. voting with 10\nDOT, then a second extrinsic to vote with 5\nDOT, means that you are voting with 5\nDOT, not 10\nDOT.")),(0,r.kt)("h3",{id:"voluntary-locking"},"Voluntary Locking"),(0,r.kt)("p",null,"Polkadot utilizes an idea called voluntary\nlocking that allows token holders to increase their voting power by declaring how long they are\nwilling to lock up their tokens; hence, the number of votes for each token holder will be calculated\nby the following formula:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"votes = tokens * conviction_multiplier\n")),(0,r.kt)("p",null,"The conviction multiplier increases the vote multiplier by one every time the number of lock periods\ndouble."),(0,r.kt)(h,{mdxType:"VLTable"}),(0,r.kt)("p",null,"",(0,r.kt)("strong",{parentName:"p"},"The table above shows the correct duration values. However, the current values for Polkadot are the same as those for Kusama. This is going to be fixed. For more information, see ",(0,r.kt)("a",{parentName:"strong",href:"https://github.com/paritytech/polkadot/issues/7394"},"this GitHub issue"),"."),""),(0,r.kt)("p",null,'The maximum number of "doublings" of the lock period is set to 6 (and thus 32 lock periods in\ntotal), and one lock period equals 28\n',"\ndays. For additional information regarding the timeline of governance events, check out the\ngovernance section on the\n",(0,r.kt)("a",{parentName:"p",href:"maintain-polkadot-parameters/#governance"},"Polkadot Parameters page"),"","."),(0,r.kt)("admonition",{title:"do votes stack?",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can use the same number of tokens to vote on different referenda. Votes with conviction do not\nstack. If you voted with 5 DOT on Referenda A, B\nand C with 2x conviction you would have 10 votes on all those referenda and 5\nDOT locked up only for the 2x conviction period\n(i.e. 8 weeks), with the unlocking\ncountdown starting when the last referendum you voted on ends (assuming you are on the winning\nside). If you voted with conviction on referendum and then a week later voted on another one with\nthe same conviction, the lock on your DOT will be\nextended by a week (always assuming you are on the winning side).")),(0,r.kt)("admonition",{title:"Staked tokens can be used in governance",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"While a token is locked, you can still use it for voting and ",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"staking"),". You are\nonly prohibited from transferring these tokens to another account.")),(0,r.kt)("p",null,'Votes are always "counted" at the same time (at the end of the voting period), no matter for how\nlong the tokens are locked.'),(0,r.kt)("p",null,"See below an example that shows how voluntary locking works."),(0,r.kt)("p",null,"Peter: Votes ",(0,r.kt)("inlineCode",{parentName:"p"},"No")," with\n10 DOT for a 128-week lock period\n=> 10 x 6 = 60 Votes"),(0,r.kt)("p",null,"Logan: Votes ",(0,r.kt)("inlineCode",{parentName:"p"},"Yes")," with\n20 DOT for a 4-week lock period =>\n20 x 1 = 20 Votes"),(0,r.kt)("p",null,"Kevin: Votes ",(0,r.kt)("inlineCode",{parentName:"p"},"Yes")," with\n15 DOT for a 8-week lock period\n=> 15 x 2 = 30 Votes"),(0,r.kt)("p",null,"Even though combined both Logan and Kevin vote with more\nDOT than Peter, the lock period for both of them\nis less than Peter, leading to their voting power counting as less."),(0,r.kt)("admonition",{title:"Conviction Voting Locks created during Gov 1",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Conviction voting locks in Governance v1 will not be carried over to OpenGov. Voting with conviction\nin OpenGov will create a new lock (as this will use the ",(0,r.kt)("inlineCode",{parentName:"p"},"convictionVoting")," pallet), while any\nexisting lock under Governance v1 (using the deprecated ",(0,r.kt)("inlineCode",{parentName:"p"},"democracy")," pallet) will be left to expire.\nDelegations under Governance v1 will need to be re-issued under OpenGov.")),(0,r.kt)("h3",{id:"multirole-delegation"},"Multirole Delegation"),(0,r.kt)("p",null,"Polkadot OpenGov builds on the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#delegations"},"vote delegation feature from Governance v1")," where a voter can\ndelegate their voting power to another voter. It does so by introducing a feature known as\n",(0,r.kt)("strong",{parentName:"p"},"multirole delegation"),", where voters can specify a different delegate for every class of\nreferendum in the system. Delegation can be done per track, and accounts can choose to select\ndifferent delegates (or no delegation) for each track."),(0,r.kt)("p",null,"For example, a voter could delegate one entity for managing a less potent referenda class, choose a\ndifferent delegate for another class with more powerful consequences and still retain full voting\npower over any remaining classes."),(0,r.kt)("admonition",{title:"Delegate your votes",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"In Polkadot OpenGov you can delegate your votes to different entities, who will vote on your behalf.\nYou can delegate your votes using the\n",(0,r.kt)("a",{parentName:"p",href:"https://delegation.polkadot.network/"},(0,r.kt)("strong",{parentName:"a"},"Polkadot Delegation Dashboard")),". See\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=tlh_KmWQiSQ"},"this video tutorial")," to learn about the features of\nthe dashboard."),(0,r.kt)("p",{parentName:"admonition"},"If you are staking directly and not through a nomination pool, you can use bonded tokens for voting.\nNote that if you are voting with conviction, your tokens will have a democracy lock in addition to\nthe staking lock. For more information about locks, see\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-accounts/#unlocking-locks"},"this page"),"."),(0,r.kt)("p",{parentName:"admonition"},"Democracy locks created through ",(0,r.kt)("a",{parentName:"p",href:"#voluntary-locking"},"conviction voting")," start the unlocking period\nafter a referendum ends, provided you voted with the winning side. In the case of delegations, the\nunlocking period countdown begins after the account undelegates. There can be different scenarios:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"if the account delegated votes to one delegate, then after undelegating, there will be one\nunlocking period with length dependent on the conviction multiplier."),(0,r.kt)("li",{parentName:"ul"},"if the account delegated votes to different delegates using different convictions, then after\nundelegating those delegates, there will be different unlocking periods with lengths dependent on\nthe conviction multipliers."))),(0,r.kt)("p",null,"Occasional delegation and undelegation calls are fee-free: creating an incentive for token holders\nto use this feature and ensure that wallets can do it \u201cby default\u201d without any cost to end-users. It\nis worth noting that a user delegating their voting power does not imply that the delegate will have\ncontrol over the funds of the delegating account: they can vote with a user's voting power: but they\nwon't be able to transfer your balance, nominate a different set of validators or execute any call\nother than voting on the defined call/s by the user."),(0,r.kt)("p",null,"With the new delegation features, the goal is to ensure the required support for proposals to be\nenacted is reached while maintaining the anonymity of voters and keeping the overall design\ncensorship-free."),(0,r.kt)("p",null,"For a step-by-step outline of how to delegate voting power in Polkadot OpenGov, check out the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#delegating-voting-power"},"Delegating Voting Power"),"\nsection on the ",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov"},"Polkadot OpenGov Maintenance")," page."),(0,r.kt)("h2",{id:"the-polkadot-technical-fellowship"},"The Polkadot Technical Fellowship"),(0,r.kt)("admonition",{title:"From Technical Committee to the Technical Fellowship",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The Polkadot Technical Fellowship is a collection of Substrate experts. This fellowship was\nestablished in 2022. In Polkadot OpenGov, this fellowship replaces the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-governance#technical-committee"},"Technical Committee")," in Governance v1, and will serve\nboth the Polkadot and Kusama networks."),(0,r.kt)("p",{parentName:"admonition"},"For more information about the Fellowship see the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/polkadot-fellows/manifesto/blob/0c3df46d76625980b8b48742cb86f4d8fa6dda8d/manifesto.pdf"},"Fellowship Manifesto"),".")),(0,r.kt)("p",null,"The Technical Fellowship is a mostly self-governing expert body with a primary goal of representing\nhumans who embody and contain the technical knowledge base of the Kusama and/or Polkadot networks\nand protocols. This is accomplished by associating a rank with members to categorize the degree to\nwhich the system expects their opinion to be well-informed, of a sound technical basis, and in line\nwith the interests of Polkadot and/or Kusama."),(0,r.kt)("p",null,"Unlike the Technical Committee in Governance V1, the Fellowship is designed to be far broader in\nmembership (i.e. to work well with even tens of thousands of members) and with far lower barriers to\nentry (both in terms of administrative process flow and expectations of expertise)."),(0,r.kt)("p",null,"The mechanism by which the Fellowship votes is the same as what is used for Polkadot and Kusama\nstakeholder voting for a proposed referendum. Members of the Fellowship can vote on any given\nFellowship proposal and the aggregated opinion of the members (weighted by their rank) constitutes\nthe Fellowship's considered opinion."),(0,r.kt)("p",null,"The Polkadot Technical Fellowship resides on the\n",(0,r.kt)("a",{parentName:"p",href:"https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpolkadot-collectives-rpc.polkadot.io#/fellowship/referenda"},"Collectives"),"\nparachain and maintains the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/polkadot-fellows"},"Polkadot Fellows")," repository. The\nfellowship also has its own governance model with multiple tracks with approval and support\nparameters, where the votes are weighted by the rank of the member.",(0,r.kt)("br",{parentName:"p"}),"\n","The fellowship governance is primarily used for its membership management,\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/polkadot-fellows/RFCs"},"approving RFCs")," and whitelisting Polkadot OpenGov\nproposals."),(0,r.kt)("p",null,"",""),(0,r.kt)("h3",{id:"ranking-system"},"Ranking System"),(0,r.kt)("p",null,"To prevent a small group of participants from gaining effective control over the network, this\nsystem will adhere to three main principles:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The Fellowship must never have hard power over the network: it cannot change the parameters,\nconduct rescues or move assets. Their only power in governance is reducing the effective timeline\non which a referendum takes place through ",(0,r.kt)("a",{parentName:"li",href:"#whitelisting"},"whitelisting"),"."),(0,r.kt)("li",{parentName:"ul"},"The Fellowship weights those with a higher rank more in the aggregate opinion. However, the weight\nshould not be so high as to make a small number of higher members\u2019 opinions be insurmountable\ncompared to a coherent opinion from lower-ranked membership."),(0,r.kt)("li",{parentName:"ul"},"The Fellowship should be designed to grow and develop its membership, aggregate levels of\nexpertise and ensure that its overall decision-making capacity strengthens over time.")),(0,r.kt)("p",null,"To support these conditions, the Fellowship will have a constitution that outlines the requirements\nand expectations for individuals to attain and retain any given rank. Higher ranks can vote and\npromote lower ranks based on this constitution."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Demotion")," occurs automatically after a given period has elapsed, and the member is unable to\ndefend their position to their peers."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Suspension")," can happen only through a referendum, which ensures that the Fellowship's bias alone\ndoes not necessarily result in expulsion."),(0,r.kt)("p",null,"To prevent the Fellowship from becoming a cabal (popularity with Fellowship peers alone should not\nbe enough to gain access to a top rank), gaining access to the top tiers of the ranks will require a\nreferendum."),(0,r.kt)("h3",{id:"whitelisting"},"Whitelisting"),(0,r.kt)("p",null,'Polkadot OpenGov allows the Fellowship to authorize a new origin (known as "Whitelisted-Caller") to\nexecute with Root-level privileges for calls that have been approved by the Fellowship (currently\nonly level-three fellows and above can vote for whitelist calls).'),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://paritytech.github.io/substrate/master/pallet_whitelist/"},"Whitelist")," pallet allows one\nOrigin to escalate the privilege level of another Origin for a certain operation. The pallet\nverifies two things:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The origin of the escalation is the Whitelisted-Root (i.e. that the referendum passed on this\ntrack), and"),(0,r.kt)("li",{parentName:"ul"},"The whitelist contains the given proposal (in the configuration of Polkadot OpenGov, it gets there\nvia a separate Fellowship referendum).")),(0,r.kt)("p",null,"If both conditions are true, the operation executes with Root-level privileges."),(0,r.kt)("p",null,"This system enables a new parallel Track (Whitelisted-Caller), whose parameters have less\nrestrictive passing parameters than Root in the short term. Through an open and transparent process,\na body of global experts on the Polkadot\nprotocol have determined that the action is both safe and time-critical."),(0,r.kt)("admonition",{title:"Submitting Whitelisted Proposals",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"For more information about how to submit a whitelisted proposal see the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/maintain-guides-polkadot-opengov#submitting-a-referendum-on-the-whitelisted-caller-track"},"dedicated advanced how-to guides"),".")),(0,r.kt)("h3",{id:"becoming-a-polkadot-technical-fellowship-member"},"Becoming a Polkadot Technical Fellowship Member"),(0,r.kt)("p",null,'Currently, the only way to become a fellowship member is through a referenda. To get added as a\nmember of "Rank 1", an existing member of the fellowship needs to submit a referendum with the\npreimage of a batch call that has ',(0,r.kt)("inlineCode",{parentName:"p"},"fellowshipCollective.addMember")," and\n",(0,r.kt)("inlineCode",{parentName:"p"},"fellowshipCollective.promoteMember"),' on "2/Proficients" track. On Polkadot-JS UI for Polkadot\nCollectives, navigate to Governance > Fellowship > Referenda and click on "Add Preimage". This\npreimage can be submitted by anyone.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"fellowship-add-promote-member-preimage",src:n(68937).Z,width:"2156",height:"1746"})),(0,r.kt)("p",null,'After the preimage is successfully noted, navigate to Governance > Fellowship > Referenda and click\non "Submit Proposal" (This button is active on the UI only if you have an account that belongs to\nthe Fellowship). Choose the appropriate track and the origin, and enter the preimage hash of the\nbatch call that adds and promotes the member.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"fellowship-add-promote-member-proposal",src:n(16046).Z,width:"2150",height:"1492"})),(0,r.kt)("p",null,'After the referendum is successfully executed, the member is added to the fellowship with "rank 1".\nFor example, check the ',(0,r.kt)("a",{parentName:"p",href:"https://collectives.subsquare.io/fellowship/referenda/23"},"Referenda 23")," on\nthe Collectives parachain. If a member has to be added and promoted to \u201crank 5\u201d, the proposal has to\nbe submitted through track \u201c6/Senior Experts\u201d (Always a track with a rank higher). For example,\ncheck the ",(0,r.kt)("a",{parentName:"p",href:"https://collectives.subsquare.io/fellowship/referenda/25"},"Referenda 25")," on the\nCollectives parachain."),(0,r.kt)("p",null,"Future plans include that public members can apply to become a Fellowship candidate by placing a\nsmall deposit (which will be returned once they become members). Their candidacy will go through a\nreferendum to be approved to become a member."),(0,r.kt)("h2",{id:"resources"},"Resources"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate/tree/master/frame/democracy/src"},"Democracy Pallet")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://medium.com/polkadot-network/gov2-polkadots-next-generation-of-decentralised-governance-4d9ef657d11b"},"Governance v2")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Polkadot-Direction:parity.io"},"Polkadot Direction")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#Kusama-Direction:parity.io"},"Kusama Direction")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://polkadot.polkassembly.io/"},"PolkAssembly"))))}y.isMDXComponent=!0},68937:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/fellowship-add-member-preimage-90d52688c691ac21a26fd067a3ba6524.png"},16046:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/fellowship-add-member-proposal-5d832ecf298a03c8de37b001d43be34c.png"},55745:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/opengov-curves-nopass-27f6968907aeb88e87069d29ca062568.png"},65993:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/opengov-curves-pass-73b6c7d1849e26082880cd7d629a633e.png"},40176:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/opengov-overview-a56ef29a3a173f9dc2b60a9008dcfc1b.png"},1671:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/opengov-timeline-26e5a1fae159676ab5052a4fd7416be5.png"},67506:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const a=n.p+"assets/images/opengov-track-capacity-a1e00e5bd7961ea13d38f79cf6fa4b9c.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.d8435c75.js b/assets/js/935f2afb.d8435c75.js deleted file mode 100644 index 9435907f97ca..000000000000 --- a/assets/js/935f2afb.d8435c75.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[53],{22624:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"Learn","items":[{"type":"category","label":"General","description":"General Information to get started with Polkadot and Web3.","items":[{"type":"link","label":"Getting Started","href":"/docs/getting-started","docId":"general/getting-started"},{"type":"link","label":"Web3 and Polkadot","href":"/docs/web3-and-polkadot","docId":"general/web3-and-polkadot"},{"type":"category","label":"Polkadot Vision","description":"Polkadot\'s Vision revealed by Gavin Wood at Decoded 2023.","items":[{"type":"link","label":"Polkadot 1.0","href":"/docs/polkadot-v1","docId":"general/polkadot-v1"},{"type":"link","label":"Polkadot Direction","href":"/docs/polkadot-direction","docId":"general/polkadot-direction"}],"collapsed":true,"collapsible":true,"href":"/docs/polkadot-vision-index"},{"type":"category","label":"Stay Safe","description":"Good-practices to Stay Safe while Surfing in Web3.","items":[{"type":"link","label":"Scam Protection","href":"/docs/learn-scams","docId":"general/scams"},{"type":"link","label":"Do Your Own Research","href":"/docs/how-to-dyor","docId":"general/how-to-dyor"}],"collapsed":true,"collapsible":true,"href":"/docs/stay-safe-index"},{"type":"category","label":"Wallets","description":"Wallet Options in the Polkadot Ecosystem.","items":[{"type":"link","label":"Wallets and Extensions","href":"/docs/wallets-and-extensions","docId":"general/wallets-and-extensions"},{"type":"link","label":"Ledger","href":"/docs/ledger","docId":"general/ledger"},{"type":"link","label":"Polkadot Vault","href":"/docs/polkadot-vault","docId":"general/polkadot-vault"},{"type":"link","label":"Polkadot-JS UI","href":"/docs/polkadotjs-ui","docId":"general/polkadotjs-ui"}],"collapsed":true,"collapsible":true,"href":"/docs/wallets-index"},{"type":"category","label":"Dashboards","description":"Dashboards in the Polkadot Ecosystem.","items":[{"type":"link","label":"Staking Dashboard","href":"/docs/staking-dashboard","docId":"general/staking-dashboard"}],"collapsed":true,"collapsible":true,"href":"/docs/dashboards-index"},{"type":"link","label":"Polkadot-JS","href":"/docs/polkadotjs","docId":"general/polkadotjs"},{"type":"category","label":"Community & Contributors","description":"Polkadot Community and Wiki Contributors.","items":[{"type":"link","label":"Community","href":"/docs/community","docId":"general/community"},{"type":"link","label":"Contributing to the Wiki","href":"/docs/contributing","docId":"general/contributing"},{"type":"link","label":"Contributors","href":"/docs/contributors","docId":"general/contributors"}],"collapsed":true,"collapsible":true,"href":"/docs/community-index"},{"type":"category","label":"Programmes","description":"Programmes and Initiatives within the Polkadot Ecosystem.","items":[{"type":"link","label":"Grants","href":"/docs/grants","docId":"general/grants"},{"type":"link","label":"Bug Bounty","href":"/docs/bug-bounty","docId":"general/bug-bounty"},{"type":"link","label":"Polkadot Ambassadors","href":"/docs/ambassadors","docId":"general/ambassadors"},{"type":"link","label":"Substrate Builders","href":"/docs/builders-program","docId":"general/builders-program"},{"type":"link","label":"Thousand Validators","href":"/docs/thousand-validators","docId":"general/doc-thousand-validators"},{"type":"link","label":"Thousand Contributors","href":"/docs/thousand-contributors","docId":"general/doc-thousand-contributors"},{"type":"link","label":"Developer Heroes","href":"/docs/dev-heroes","docId":"general/dev-heroes"}],"collapsed":true,"collapsible":true,"href":"/docs/programmes-index"},{"type":"link","label":"Build on Polkadot","href":"/docs/start-building","docId":"general/start-building"},{"type":"link","label":"Research Pages","href":"/docs/research","docId":"general/research"},{"type":"link","label":"Metadata Explorer","href":"/docs/metadata","docId":"general/metadata"},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"general/faq"},{"type":"link","label":"Glossary","href":"/docs/glossary","docId":"general/glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/general-index"},{"type":"category","label":"Basics","description":"Staking, Accounts, Transactions, Tokens and NFTs, and Governance.","items":[{"type":"category","label":"Accounts","description":"Basic Accounts, Identity, Multi-signature, and Proxies.","items":[{"type":"link","label":"Polkadot Accounts","href":"/docs/learn-accounts","docId":"learn/learn-accounts"},{"type":"link","label":"Account Generation","href":"/docs/learn-account-generation","docId":"learn/learn-account-generation"},{"type":"link","label":"Account Abstraction","href":"/docs/learn-account-abstraction","docId":"learn/learn-account-abstraction"},{"type":"link","label":"Account Identity","href":"/docs/learn-identity","docId":"learn/learn-identity"},{"type":"link","label":"Multi-Signature Accounts","href":"/docs/learn-account-multisig","docId":"learn/learn-account-multisig"},{"type":"link","label":"Proxy Accounts","href":"/docs/learn-proxies","docId":"learn/learn-proxies"},{"type":"link","label":"Pure Proxy Accounts","href":"/docs/learn-proxies-pure","docId":"learn/learn-proxies-pure"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-accounts-index"},{"type":"category","label":"Transactions","description":"Extrinsics, Balance Transfers, and Fees.","items":[{"type":"link","label":"Extrinsics","href":"/docs/learn-extrinsics","docId":"learn/learn-extrinsics"},{"type":"link","label":"Balances Transfers","href":"/docs/learn-balance-transfers","docId":"learn/learn-balance-transfers"},{"type":"link","label":"Transaction Fees","href":"/docs/learn-transaction-fees","docId":"learn/learn-transaction-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-transactions-index"},{"type":"category","label":"Staking","description":"Mechanics of Staking.","items":[{"type":"link","label":"Introduction to Staking","href":"/docs/learn-staking","docId":"learn/learn-staking"},{"type":"link","label":"Nomination Pools","href":"/docs/learn-nomination-pools","docId":"learn/learn-nomination-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-staking-index"},{"type":"link","label":"Polkadot OpenGov","href":"/docs/learn-polkadot-opengov","docId":"learn/learn-polkadot-opengov"},{"type":"link","label":"Treasury","href":"/docs/learn-polkadot-opengov-treasury","docId":"learn/learn-polkadot-opengov-treasury"},{"type":"category","label":"Tokens and Assets","description":"DOT Token, Asset Hub, and Teleports.","items":[{"type":"link","label":"Asset Hub","href":"/docs/learn-assets","docId":"learn/learn-assets"},{"type":"link","label":"DOT","href":"/docs/learn-DOT","docId":"learn/learn-DOT"},{"type":"link","label":"Token Inflation","href":"/docs/learn-inflation","docId":"learn/learn-inflation"},{"type":"link","label":"Teleporting Assets","href":"/docs/learn-teleport","docId":"learn/learn-teleport"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-assets-index"},{"type":"category","label":"NFTs","description":"Intro to NFTs and NFT Projects.","items":[{"type":"link","label":"Introduction to NFTs","href":"/docs/learn-nft","docId":"learn/learn-nft"},{"type":"link","label":"NFT Projects","href":"/docs/learn-nft-projects","docId":"learn/learn-nft-projects"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-nft-index"},{"type":"category","label":"Components","description":"OpenGov, Treasury, WASM, Runtime Upgrades, and more.","items":[{"type":"link","label":"Polkadot Host","href":"/docs/learn-polkadot-host","docId":"learn/learn-polkadot-host"},{"type":"link","label":"WebAssembly (Wasm)","href":"/docs/learn-wasm","docId":"learn/learn-wasm"},{"type":"link","label":"Runtime Upgrades","href":"/docs/learn-runtime-upgrades","docId":"learn/learn-runtime-upgrades"},{"type":"link","label":"Consensus","href":"/docs/learn-consensus","docId":"learn/learn-consensus"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-components-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-basics-index"},{"type":"category","label":"Advanced","description":"Advanced Concepts & Guides about Accounts, Staking, and NFTs.","items":[{"type":"link","label":"Accounts","href":"/docs/learn-account-advanced","docId":"learn/learn-account-advanced"},{"type":"link","label":"Advanced Staking Concepts","href":"/docs/learn-staking-advanced","docId":"learn/learn-staking-advanced"},{"type":"link","label":"NFT Pallets","href":"/docs/learn-nft-pallets","docId":"learn/learn-nft-pallets"},{"type":"link","label":"Cryptography","href":"/docs/learn-cryptography","docId":"learn/learn-cryptography"},{"type":"link","label":"NPoS Election Algorithms","href":"/docs/learn-phragmen","docId":"learn/learn-phragmen"},{"type":"category","label":"How-to Guides","description":"Advanced Guides about Staking, Asset Hub, Vault App, and more.","items":[{"type":"category","label":"Staking","description":"Advanced How-to Guides about Staking.","items":[{"type":"link","label":"Staking","href":"/docs/learn-guides-staking","docId":"learn/learn-guides-staking"},{"type":"link","label":"Nomination Pools","href":"/docs/learn-guides-staking-pools","docId":"learn/learn-guides-staking-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-staking-index"},{"type":"link","label":"OpenGov","href":"/docs/learn-guides-polkadot-opengov","docId":"learn/learn-guides-polkadot-opengov"},{"type":"link","label":"Treasury","href":"/docs/learn-guides-treasury","docId":"learn/learn-guides-treasury"},{"type":"link","label":"Bounties","href":"/docs/learn-guides-bounties","docId":"learn/learn-guides-bounties"},{"type":"link","label":"Identity","href":"/docs/learn-guides-identity","docId":"learn/learn-guides-identity"},{"type":"category","label":"Asset Hub","description":"Advanced How-to Guides about the Asset Hub.","items":[{"type":"link","label":"Creating Assets","href":"/docs/learn-guides-assets-create","docId":"learn/learn-guides-assets-create"},{"type":"link","label":"Asset Hub Ledger App","href":"/docs/learn-guides-assets-ledger","docId":"learn/learn-guides-assets-ledger"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-assets-index"},{"type":"link","label":"Polkadot Vault","href":"/docs/learn-guides-vault","docId":"learn/learn-guides-vault"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-advanced-index"},{"type":"category","label":"Architecture","description":"Nominators, Validators, Collators, Parachains, and more.","items":[{"type":"link","label":"Architecture","href":"/docs/learn-architecture","docId":"learn/learn-architecture"},{"type":"category","label":"Network Participants","description":"Participants in the Polkadot Ecosystem.","items":[{"type":"link","label":"Collator","href":"/docs/learn-collator","docId":"learn/learn-collator"},{"type":"link","label":"Nominator","href":"/docs/learn-nominator","docId":"learn/learn-nominator"},{"type":"link","label":"Validator","href":"/docs/learn-validator","docId":"learn/learn-validator"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-participants-index"},{"type":"category","label":"Parachains","description":"Parachains\' Protocol, Auctions, Crowdloans, and more.","items":[{"type":"link","label":"Introduction to Parachains","href":"/docs/learn-parachains","docId":"learn/learn-parachains"},{"type":"link","label":"Protocol Overview","href":"/docs/learn-parachains-protocol","docId":"learn/learn-parachains-protocol"},{"type":"link","label":"System Parachains","href":"/docs/learn-system-chains","docId":"learn/learn-system-chains"},{"type":"link","label":"Parachain Slot Auctions","href":"/docs/learn-auction","docId":"learn/learn-auction"},{"type":"link","label":"Parachain Crowdloans","href":"/docs/learn-crowdloans","docId":"learn/learn-crowdloans"},{"type":"link","label":"Parachains FAQ","href":"/docs/learn-parachains-faq","docId":"learn/learn-parachains-faq"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-parachains-index"},{"type":"link","label":"Bridges","href":"/docs/learn-bridges","docId":"learn/learn-bridges"},{"type":"category","label":"Cross Consensus Messaging (XCM)","description":"Polkadot\'s Cross-Consensus Messaging Format (XCM).","items":[{"type":"link","label":"Cross-Consensus Message Format (XCM)","href":"/docs/learn-xcm","docId":"learn/learn-xcm"},{"type":"link","label":"XCM Pallet","href":"/docs/learn-xcm-pallet","docId":"learn/learn-xcm-pallet"},{"type":"link","label":"XCM Use-cases","href":"/docs/learn-xcm-usecases","docId":"learn/learn-xcm-usecases"},{"type":"link","label":"XCM Transport","href":"/docs/learn-xcm-transport","docId":"learn/learn-xcm-transport"},{"type":"link","label":"XCM Virtual Machine (XCVM)","href":"/docs/learn-xcvm","docId":"learn/learn-xcvm"},{"type":"link","label":"XCM Instructions","href":"/docs/learn-xcm-instructions","docId":"learn/learn-xcm-instructions"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-xcm-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-architecture-index"},{"type":"category","label":"XCM Docs","description":"In-depth documentation about the Polkadot\'s Cross-Chain Messaging (XCM).","items":[{"type":"link","label":"XCM: Cross-Consensus Messaging","href":"/docs/learn/xcm/introduction","docId":"learn/xcm/learn-xcm-docs-intro"},{"type":"category","label":"Overview","description":"Overview of the XCM Documentation.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/overview-summary","docId":"learn/xcm/overview/learn-xcm-docs-overview-summary"},{"type":"link","label":"Introduction","href":"/docs/learn/xcm/overview-intro","docId":"learn/xcm/overview/learn-xcm-docs-overview-intro"},{"type":"link","label":"A Format, not a Protocol","href":"/docs/learn/xcm/overview-format","docId":"learn/xcm/overview/learn-xcm-docs-overview-format"},{"type":"link","label":"The XCVM","href":"/docs/learn/xcm/overview-xcvm","docId":"learn/xcm/overview/learn-xcm-docs-overview-xcvm"},{"type":"link","label":"Architecture","href":"/docs/learn/xcm/overview-architecture","docId":"learn/xcm/overview/learn-xcm-docs-overview-architecture"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/overview"},{"type":"category","label":"Quickstart","description":"Start Diving into XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/quickstart-summary","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary"},{"type":"link","label":"XCM Simulator","href":"/docs/learn/xcm/quickstart-simulator","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator"},{"type":"link","label":"First Look at an XCM","href":"/docs/learn/xcm/quickstart-first-look","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/quickstart"},{"type":"category","label":"Fundamentals","description":"Fundamental Concepts about XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals-summary","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary"},{"type":"category","label":"MultiLocation","description":"The MultiLocation Type.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals/multilocation-summary","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary"},{"type":"link","label":"Junction(s)","href":"/docs/learn/xcm/fundamentals/multilocation-junctions","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions"},{"type":"link","label":"Example","href":"/docs/learn/xcm/fundamentals/multilocation-example","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals/multilocation"},{"type":"link","label":"MultiAsset","href":"/docs/learn/xcm/fundamentals-multiasset","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset"},{"type":"link","label":"XCVM","href":"/docs/learn/xcm/fundamentals-xcvm","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm"},{"type":"link","label":"Weight and Fees","href":"/docs/learn/xcm/fundamentals-fees","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals"},{"type":"category","label":"A Journey through XCM","description":"A Practical Introduction to the XCM Features","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey-summary","docId":"learn/xcm/journey/learn-xcm-docs-journey-summary"},{"type":"category","label":"Transfers","description":"Transferring Assets between Consensus Systems with XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey/transfers-summary","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary"},{"type":"link","label":"Asset Teleportation","href":"/docs/learn/xcm/journey/transfers-teleport","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport"},{"type":"link","label":"Reserve-backed Transfers","href":"/docs/learn/xcm/journey/transfers-reserve","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey/transfers"},{"type":"link","label":"Fee Handling","href":"/docs/learn/xcm/journey-fees","docId":"learn/xcm/journey/learn-xcm-docs-journey-fees"},{"type":"link","label":"Transact: A General Solution","href":"/docs/learn/xcm/journey-transact","docId":"learn/xcm/journey/learn-xcm-docs-journey-transact"},{"type":"link","label":"Origin Manipulation","href":"/docs/learn/xcm/journey-origin","docId":"learn/xcm/journey/learn-xcm-docs-journey-origin"},{"type":"link","label":"More Register Modifiers","href":"/docs/learn/xcm/journey-register","docId":"learn/xcm/journey/learn-xcm-docs-journey-register"},{"type":"link","label":"More Holding Modifiers","href":"/docs/learn/xcm/journey-holding","docId":"learn/xcm/journey/learn-xcm-docs-journey-holding"},{"type":"link","label":"Trap and Claim Assets","href":"/docs/learn/xcm/journey-assets","docId":"learn/xcm/journey/learn-xcm-docs-journey-assets"},{"type":"link","label":"Expectations","href":"/docs/learn/xcm/journey-expectations","docId":"learn/xcm/journey/learn-xcm-docs-journey-expectations"},{"type":"link","label":"Queries","href":"/docs/learn/xcm/journey-queries","docId":"learn/xcm/journey/learn-xcm-docs-journey-queries"},{"type":"link","label":"Version Subscription","href":"/docs/learn/xcm/journey-version","docId":"learn/xcm/journey/learn-xcm-docs-journey-version"},{"type":"link","label":"Locks","href":"/docs/learn/xcm/journey-locks","docId":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks"},{"type":"link","label":"Channels and Bridges","href":"/docs/learn/xcm/journey-channels","docId":"learn/xcm/journey/learn-xcm-docs-journey-channels"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey"},{"type":"link","label":"Executor Configuration","href":"/docs/learn/xcm/config-deep-dive","docId":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive"},{"type":"link","label":"Testing","href":"/docs/learn/xcm/testing","docId":"learn/xcm/learn-xcm-docs-testing"},{"type":"category","label":"References","description":"XCVM Registers and Glossary","items":[{"type":"link","label":"All XCVM Registers","href":"/docs/learn/xcm/reference-xcvm-registers","docId":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers"},{"type":"link","label":"Glossary","href":"/docs/learn/xcm/reference-glossary","docId":"learn/xcm/reference/learn-xcm-docs-reference-glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/references"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm"},{"type":"category","label":"Polkadot Comparisons","description":"Comparison between Polkadot and other Networks. ","items":[{"type":"link","label":"Kusama","href":"/docs/learn-comparisons-kusama","docId":"learn/learn-comparisons-kusama"},{"type":"link","label":"Ethereum","href":"/docs/learn-comparisons-ethereum-2","docId":"learn/learn-comparisons-ethereum-2"},{"type":"link","label":"Cosmos","href":"/docs/learn-comparisons-cosmos","docId":"learn/learn-comparisons-cosmos"},{"type":"link","label":"Avalanche","href":"/docs/learn-comparisons-avalanche","docId":"learn/learn-comparisons-avalanche"},{"type":"link","label":"Other Comparisons","href":"/docs/learn-comparisons","docId":"learn/learn-comparisons"},{"type":"link","label":"Layer Two and Rollups","href":"/docs/learn-comparisons-rollups","docId":"learn/learn-comparisons-rollups"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-comparisons-index"},{"type":"link","label":"Videos","href":"/docs/learn-video-tutorials","docId":"learn/learn-video-tutorials"},{"type":"category","label":"Future Implementations","description":"Implementations that will be deployed on Polkadot.","items":[{"type":"link","label":"SPREE","href":"/docs/learn-spree","docId":"learn/learn-spree"},{"type":"link","label":"Parathreads","href":"/docs/learn-parathreads","docId":"learn/learn-parathreads"},{"type":"link","label":"Asynchronous Backing","href":"/docs/learn-async-backing","docId":"learn/learn-async-backing"},{"type":"link","label":"SASSAFRAS","href":"/docs/learn-sassafras","docId":"learn/learn-sassafras"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-future-implementations-index"},{"type":"category","label":"Archive","description":"Implementations no longer live on Polkadot.","items":[{"type":"link","label":"Governance V1","href":"/docs/learn-governance","docId":"learn/learn-governance"},{"type":"link","label":"Gov1 Treasury","href":"/docs/learn-treasury","docId":"learn/learn-treasury"},{"type":"link","label":"Polkadot Launch Phases","href":"/docs/learn-launch","docId":"learn/learn-launch"},{"type":"link","label":"Redenomination of DOT","href":"/docs/learn-redenomination","docId":"learn/learn-redenomination"},{"type":"link","label":"Controller Accounts","href":"/docs/learn-controller","docId":"learn/learn-controller"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-archive-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-index"},{"type":"category","label":"Build","items":[{"type":"link","label":"Builder\'s Guides","href":"/docs/build-index","docId":"build/build-index"},{"type":"category","label":"Development Guide","items":[{"type":"link","label":"Builders Starter\'s Guide","href":"/docs/build-guide","docId":"build/build-guide"},{"type":"link","label":"Parachain Development","href":"/docs/build-pdk","docId":"build/build-parachains"},{"type":"link","label":"Decentralized Storage","href":"/docs/build-storage","docId":"build/build-storage"},{"type":"link","label":"Smart Contracts","href":"/docs/build-smart-contracts","docId":"build/build-smart-contracts"},{"type":"link","label":"Oracles","href":"/docs/build-oracle","docId":"build/build-oracle"},{"type":"link","label":"Data","href":"/docs/build-data","docId":"build/build-data"},{"type":"link","label":"Substrate Connect","href":"/docs/build-substrate","docId":"build/build-substrate"},{"type":"link","label":"SS58 Registry","href":"/docs/build-ss58-registry","docId":"build/build-ss58-registry"},{"type":"link","label":"Opening HRMP Channels","href":"/docs/build-hrmp-channels","docId":"build/build-hrmp-channels"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Integration Guide","items":[{"type":"link","label":"Integration Initiation","href":"/docs/build-integration","docId":"build/build-integration"},{"type":"link","label":"Polkadot Protocol","href":"/docs/build-protocol-info","docId":"build/build-protocol-info"},{"type":"link","label":"Integrating Assets","href":"/docs/build-integrate-assets","docId":"build/build-integrate-assets"},{"type":"link","label":"Node Management","href":"/docs/build-node-management","docId":"build/build-node-management"},{"type":"link","label":"Node Interaction","href":"/docs/build-node-interaction","docId":"build/build-node-interaction"},{"type":"link","label":"Transaction Construction","href":"/docs/build-transaction-construction","docId":"build/build-transaction-construction"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Tools","items":[{"type":"link","label":"Tool Index","href":"/docs/build-tools-index","docId":"build/build-tools-index"},{"type":"link","label":"Open Source Stack","href":"/docs/build-open-source","docId":"build/build-open-source"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Resources","items":[{"type":"link","label":"Hackathons","href":"/docs/build-hackathon","docId":"build/build-hackathon"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Maintain","items":[{"type":"link","label":"Network Maintainers","href":"/docs/maintain-index","docId":"maintain/maintain-index"},{"type":"link","label":"Parameters","href":"/docs/maintain-polkadot-parameters","docId":"maintain/maintain-polkadot-parameters"},{"type":"link","label":"Node Endpoints","href":"/docs/maintain-endpoints","docId":"maintain/maintain-endpoints"},{"type":"category","label":"Nodes and Dapps","items":[{"type":"link","label":"Set up a Full Node","href":"/docs/maintain-sync","docId":"maintain/maintain-sync"},{"type":"link","label":"Set up a Boot Node","href":"/docs/maintain-bootnode","docId":"maintain/maintain-bootnode"},{"type":"link","label":"Set up a RPC node","href":"/docs/maintain-rpc","docId":"maintain/maintain-rpc"},{"type":"link","label":"Secure the WebSocket","href":"/docs/maintain-wss","docId":"maintain/maintain-wss"},{"type":"link","label":"Networks","href":"/docs/maintain-networks","docId":"maintain/maintain-networks"},{"type":"link","label":"Resolving Errors","href":"/docs/maintain-errors","docId":"maintain/maintain-errors"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Nominator Guides","href":"/docs/maintain-guides-how-to-nominate-polkadot","docId":"maintain/maintain-guides-how-to-nominate-polkadot"},{"type":"category","label":"Validator Guides","items":[{"type":"link","label":"How to run a Validator on Polkadot","href":"/docs/maintain-guides-how-to-validate-polkadot","docId":"maintain/maintain-guides-how-to-validate-polkadot"},{"type":"link","label":"Validator Payout Overview","href":"/docs/maintain-guides-validator-payout","docId":"maintain/maintain-guides-validator-payout"},{"type":"link","label":"Using systemd for a Validator Node","href":"/docs/maintain-guides-how-to-systemd","docId":"maintain/maintain-guides-how-to-systemd"},{"type":"link","label":"Secure Validator","href":"/docs/maintain-guides-secure-validator","docId":"maintain/maintain-guides-secure-validator"},{"type":"link","label":"How to Upgrade Your Validator","href":"/docs/maintain-guides-how-to-upgrade","docId":"maintain/maintain-guides-how-to-upgrade"},{"type":"link","label":"Monitor your node","href":"/docs/maintain-guides-how-to-monitor-your-node","docId":"maintain/maintain-guides-how-to-monitor-your-node"},{"type":"link","label":"How to Chill","href":"/docs/maintain-guides-how-to-chill","docId":"maintain/maintain-guides-how-to-chill"},{"type":"link","label":"How to Stop Validating","href":"/docs/maintain-guides-how-to-stop-validating","docId":"maintain/maintain-guides-how-to-stop-validating"},{"type":"link","label":"Validator Community Overview","href":"/docs/maintain-guides-validator-community","docId":"maintain/doc-maintain-guides-validator-community"},{"type":"link","label":"Validator Best Practices","href":"/docs/maintain-guides-avoid-slashing","docId":"maintain/maintain-guides-avoid-slashing"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Governance Guides","items":[{"type":"link","label":"Participate in Polkadot OpenGov","href":"/docs/maintain-guides-polkadot-opengov","docId":"maintain/maintain-guides-polkadot-opengov"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Archive","items":[{"type":"link","label":"Participate in Democracy","href":"/docs/maintain-guides-democracy","docId":"maintain/maintain-guides-democracy"},{"type":"link","label":"Join the Council","href":"/docs/maintain-guides-how-to-join-council","docId":"maintain/maintain-guides-how-to-join-council"},{"type":"link","label":"Voting for Councillors","href":"/docs/maintain-guides-how-to-vote-councillor","docId":"maintain/maintain-guides-how-to-vote-councillor"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}]},"docs":{"build/build-data":{"id":"build/build-data","title":"Data Analytics","description":"An overview about building with data analytics","sidebar":"docs"},"build/build-guide":{"id":"build/build-guide","title":"Builders Starter\'s Guide","description":"Start building with Polkadot/Kusama.","sidebar":"docs"},"build/build-hackathon":{"id":"build/build-hackathon","title":"Hackathons","description":"Join or host a Hackathon.","sidebar":"docs"},"build/build-hrmp-channels":{"id":"build/build-hrmp-channels","title":"Opening HRMP Channels","description":"Steps on how to open HRMP channels between parachains.","sidebar":"docs"},"build/build-index":{"id":"build/build-index","title":"Builder\'s Guides","description":"Reference point for the Polkadot builder guides.","sidebar":"docs"},"build/build-integrate-assets":{"id":"build/build-integrate-assets","title":"Assets on Polkadot","description":"Tools that you can use to integrating assets.","sidebar":"docs"},"build/build-integration":{"id":"build/build-integration","title":"Polkadot Integration Guide","description":"Reference point for the Polkadot integration guides.","sidebar":"docs"},"build/build-node-interaction":{"id":"build/build-node-interaction","title":"Node Interaction","description":"Tools for node interaction.","sidebar":"docs"},"build/build-node-management":{"id":"build/build-node-management","title":"Node Management","description":"Steps on how to manage your Polkadot node.","sidebar":"docs"},"build/build-open-source":{"id":"build/build-open-source","title":"Open Source Stack","description":"Overview of the open source Polkadot/Kusama Tech Stack","sidebar":"docs"},"build/build-oracle":{"id":"build/build-oracle","title":"Oracles","description":"Information about building with oracles.","sidebar":"docs"},"build/build-parachains":{"id":"build/build-parachains","title":"Parachain Development","description":"A guide on what it means to become a Parachain and the steps to do so.","sidebar":"docs"},"build/build-protocol-info":{"id":"build/build-protocol-info","title":"Polkadot Protocol Information","description":"Characteristics about the Polkadot protocol, and what you need to consider when building.","sidebar":"docs"},"build/build-smart-contracts":{"id":"build/build-smart-contracts","title":"Smart Contracts","description":"How smart contracts play their role in the Polkadot ecosystem.","sidebar":"docs"},"build/build-ss58-registry":{"id":"build/build-ss58-registry","title":"SS58 Registry","description":"Information about SS58 encoding.","sidebar":"docs"},"build/build-storage":{"id":"build/build-storage","title":"Decentralized Storage","description":"Information about building with decentralized storage.","sidebar":"docs"},"build/build-substrate":{"id":"build/build-substrate","title":"Substrate Connect","description":"Information about Substrate Connect.","sidebar":"docs"},"build/build-tools-index":{"id":"build/build-tools-index","title":"Tool Index","description":"Reference point for a list of tools to support your development.","sidebar":"docs"},"build/build-transaction-construction":{"id":"build/build-transaction-construction","title":"Transaction Construction and Signing","description":"Information about how transactions are constructed on Polkadot.","sidebar":"docs"},"general/ambassadors":{"id":"general/ambassadors","title":"Polkadot Ambassador Programme","description":"The Polkadot\'s Ambassador Program and How you can Participate in It.","sidebar":"docs"},"general/bug-bounty":{"id":"general/bug-bounty","title":"Bug Bounty Programme","description":"An Overview of How you can Help Catch Bugs.","sidebar":"docs"},"general/builders-program":{"id":"general/builders-program","title":"Substrate Builders Programme","description":"The Substrate Builders Program and How it can Support your Substrate Development.","sidebar":"docs"},"general/community":{"id":"general/community","title":"Community","description":"Connect and stay updated with the Polkadot Community.","sidebar":"docs"},"general/contributing":{"id":"general/contributing","title":"Contributing to the Polkadot Wiki","description":"Contribute to the Polkadot Wiki.","sidebar":"docs"},"general/contributors":{"id":"general/contributors","title":"Contributors","description":"Get to know your Wiki-slayers.","sidebar":"docs"},"general/dev-heroes":{"id":"general/dev-heroes","title":"Developer Heroes Programme","description":"More Power to Polkadot\'s Developers.","sidebar":"docs"},"general/doc-thousand-contributors":{"id":"general/doc-thousand-contributors","title":"Thousand Contributors Programme","description":"The Thousand Contributors Program and How it can Support your Contributions.","sidebar":"docs"},"general/doc-thousand-validators":{"id":"general/doc-thousand-validators","title":"Thousand Validators Programme","description":"The Thousand Validators Program and How it can Support your Validator Endeavors.","sidebar":"docs"},"general/faq":{"id":"general/faq","title":"Frequently Asked Questions (FAQs)","description":"FAQs to Help you Navigate on Polkadot.","sidebar":"docs"},"general/getting-started":{"id":"general/getting-started","title":"Getting Started","description":"Get started with Polkadot and Web3.","sidebar":"docs"},"general/glossary":{"id":"general/glossary","title":"Glossary","description":"Common Terms and Concepts in the Polkadot Ecosystem.","sidebar":"docs"},"general/grants":{"id":"general/grants","title":"Grants","description":"The Grant Programs in the Polkadot Ecosystem.","sidebar":"docs"},"general/how-to-dyor":{"id":"general/how-to-dyor","title":"How to Do Your Own Research (DYOR)","description":"Importance of Doing Your Own Research (DYOR).","sidebar":"docs"},"general/kusama/kusama-adversarial-cheatsheet":{"id":"general/kusama/kusama-adversarial-cheatsheet","title":"Adversarial Cheatsheet","description":"A cheatsheet to help you create chaos."},"general/kusama/kusama-bug-bounty":{"id":"general/kusama/kusama-bug-bounty","title":"Bug Bounty","description":"An overview of how you can help catch bugs."},"general/kusama/kusama-claims":{"id":"general/kusama/kusama-claims","title":"Kusama Claims","description":"Step-by-step guide on how to claim your KSM tokens."},"general/kusama/kusama-coc":{"id":"general/kusama/kusama-coc","title":"Kusama Code of Conduct","description":"Kusama\'s Code of Conduct to sustain chaos."},"general/kusama/kusama-community":{"id":"general/kusama/kusama-community","title":"Kusama Community","description":"Stay in-touch and keep up-to-date by interacting and engaging in the Kusama community."},"general/kusama/kusama-getting-started":{"id":"general/kusama/kusama-getting-started","title":"Interact with Kusama","description":"Reference point for Kusama content."},"general/kusama/kusama-index":{"id":"general/kusama/kusama-index","title":"Kusama","description":"Legacy link to Kusama Wiki document"},"general/kusama/kusama-parameters":{"id":"general/kusama/kusama-parameters","title":"Kusama Parameters","description":"Learn about common Kusama parameters"},"general/kusama/kusama-social-recovery":{"id":"general/kusama/kusama-social-recovery","title":"Social Recovery","description":"Steps on how to perform account recovery on Kusama."},"general/kusama/kusama-timeline":{"id":"general/kusama/kusama-timeline","title":"Kusama Timeline","description":"Stay up-to-date with the latest action on Kusama."},"general/ledger":{"id":"general/ledger","title":"Using the Polkadot & Kusama Ledger Applications","description":"Use the Polkadot Ledger Application.","sidebar":"docs"},"general/metadata":{"id":"general/metadata","title":"Metadata Explorer","description":"Visualize Metadata and related Documentation.","sidebar":"docs"},"general/polkadot-direction":{"id":"general/polkadot-direction","title":"Polkadot Direction","description":"Polkadot as a Decentralized and Secure Ubiquitous Computer.","sidebar":"docs"},"general/polkadot-v1":{"id":"general/polkadot-v1","title":"Polkadot 1.0","description":"Polkadot\'s 1.0, Blockspace, Decentralization and Resilience.","sidebar":"docs"},"general/polkadot-vault":{"id":"general/polkadot-vault","title":"Polkadot Vault (formerly Parity Signer)","description":"Your old Smartphone as an Air-gapped Wallet.","sidebar":"docs"},"general/polkadotjs":{"id":"general/polkadotjs","title":"Polkadot-JS","description":"The Polkadot-JS Tool Collection.","sidebar":"docs"},"general/polkadotjs-ui":{"id":"general/polkadotjs-ui","title":"Polkadot-JS UI (Wallet)","description":"A Wallet for Power-users and Developers.","sidebar":"docs"},"general/research":{"id":"general/research","title":"Research Pages","description":"Latest Research Developments on Polkadot.","sidebar":"docs"},"general/scams":{"id":"general/scams","title":"How to Protect Yourself from Scams","description":"How to Protect yourself against Scams.","sidebar":"docs"},"general/staking-dashboard":{"id":"general/staking-dashboard","title":"Polkadot Staking Dashboard","description":"Everything about the Polkadot Staking Dashboard.","sidebar":"docs"},"general/start-building":{"id":"general/start-building","title":"Build on Polkadot","description":"Start Building with the Polkadot SDK.","sidebar":"docs"},"general/wallets-and-extensions":{"id":"general/wallets-and-extensions","title":"Wallets and Extensions","description":"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.","sidebar":"docs"},"general/web3-and-polkadot":{"id":"general/web3-and-polkadot","title":"Web3 and Polkadot","description":"Introduction to Web3 and Polkadot\'s Role in shaping the Web3 Vision.","sidebar":"docs"},"learn/learn-account-abstraction":{"id":"learn/learn-account-abstraction","title":"Polkadot\'s Account Abstraction","description":"Polkadot\'s Native Account Abstraction.","sidebar":"docs"},"learn/learn-account-advanced":{"id":"learn/learn-account-advanced","title":"Polkadot Accounts In-Depth","description":"Advanced Concepts about Polkadot\'s Accounts.","sidebar":"docs"},"learn/learn-account-generation":{"id":"learn/learn-account-generation","title":"Account Generation","description":"Generate a Polkadot Basic Account.","sidebar":"docs"},"learn/learn-account-multisig":{"id":"learn/learn-account-multisig","title":"Multi-Signature Accounts","description":"Multi-signature Accounts on Polkadot.","sidebar":"docs"},"learn/learn-accounts":{"id":"learn/learn-accounts","title":"Polkadot Accounts","description":"Polkadot Accounts, Account Identity, and Account Reaping.","sidebar":"docs"},"learn/learn-architecture":{"id":"learn/learn-architecture","title":"Architecture","description":"Key Components to Polkadot\'s Architecture.","sidebar":"docs"},"learn/learn-assets":{"id":"learn/learn-assets","title":"Asset Hub","description":"Fungible Tokens and NFTs on Polkadot.","sidebar":"docs"},"learn/learn-async-backing":{"id":"learn/learn-async-backing","title":"Asynchronous Backing","description":"A brief overview of asynchronous backing, and how it affects Polkadot\'s scalability.","sidebar":"docs"},"learn/learn-auction":{"id":"learn/learn-auction","title":"Parachain Slot Auctions","description":"Polkadot\'s Parachain Slot Auction Mechanism.","sidebar":"docs"},"learn/learn-balance-transfers":{"id":"learn/learn-balance-transfers","title":"Balance Transfers","description":"Perform Balance Transfers between Accounts.","sidebar":"docs"},"learn/learn-bridges":{"id":"learn/learn-bridges","title":"Bridges","description":"Bridges and Examples of Common Bridges.","sidebar":"docs"},"learn/learn-collator":{"id":"learn/learn-collator","title":"Collator","description":"Role of Collators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-comparisons":{"id":"learn/learn-comparisons","title":"Polkadot Comparisons","description":"Comparison between Polkadot and ETH 1.0 and BSC.","sidebar":"docs"},"learn/learn-comparisons-avalanche":{"id":"learn/learn-comparisons-avalanche","title":"Polkadot vs. Avalanche","description":"Comparison between Polkadot and Avalanche.","sidebar":"docs"},"learn/learn-comparisons-cosmos":{"id":"learn/learn-comparisons-cosmos","title":"Polkadot vs. Cosmos","description":"Comparison between Polkadot and Cosmos.","sidebar":"docs"},"learn/learn-comparisons-ethereum-2":{"id":"learn/learn-comparisons-ethereum-2","title":"Polkadot vs. Ethereum","description":"Comparison between Polkadot and Ethereum.","sidebar":"docs"},"learn/learn-comparisons-kusama":{"id":"learn/learn-comparisons-kusama","title":"Polkadot vs. Kusama","description":"Comparing the cousins.","sidebar":"docs"},"learn/learn-comparisons-rollups":{"id":"learn/learn-comparisons-rollups","title":"Layer Two and Rollups","description":"Comparison between various Rollup and L2 Protocols.","sidebar":"docs"},"learn/learn-consensus":{"id":"learn/learn-consensus","title":"Polkadot Consensus","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-controller":{"id":"learn/learn-controller","title":"Controller Accounts","description":"Controller Accounts used in Staking.","sidebar":"docs"},"learn/learn-crowdloans":{"id":"learn/learn-crowdloans","title":"Parachain Crowdloans","description":"Polkadot\'s Crowdloans and How to Participate.","sidebar":"docs"},"learn/learn-cryptography":{"id":"learn/learn-cryptography","title":"Cryptography on Polkadot","description":"Cryptographic Functions used in Polkadot.","sidebar":"docs"},"learn/learn-DOT":{"id":"learn/learn-DOT","title":"DOT","description":"Tokenomics of Polkadot\'s Native Token DOT.","sidebar":"docs"},"learn/learn-extrinsics":{"id":"learn/learn-extrinsics","title":"Extrinsics (a.k.a. Types of Transactions)","description":"Types of Transactions on Polkadot.","sidebar":"docs"},"learn/learn-governance":{"id":"learn/learn-governance","title":"Governance V1","description":"Polkadot\'s First Governance Model.","sidebar":"docs"},"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.","sidebar":"docs"},"learn/learn-guides-assets-ledger":{"id":"learn/learn-guides-assets-ledger","title":"Using the Asset Hub Ledger App","description":"Advanced How-to Guides about Ledger and the Asset Hub.","sidebar":"docs"},"learn/learn-guides-bounties":{"id":"learn/learn-guides-bounties","title":"How-to Guides for Bounties","description":"Advanced How-to Guides for Bounties","sidebar":"docs"},"learn/learn-guides-identity":{"id":"learn/learn-guides-identity","title":"Identity How-to Guides","description":"Advanced How-to Guides about Identity - Registrars and Sub-Identity.","sidebar":"docs"},"learn/learn-guides-polkadot-opengov":{"id":"learn/learn-guides-polkadot-opengov","title":"Polkadot OpenGov How-to Guides","description":"Advanced How-to Guides about Polkadot OpenGov.","sidebar":"docs"},"learn/learn-guides-staking":{"id":"learn/learn-guides-staking","title":"How-to Guides for Nominators","description":"Advanced How-to Guides for Nominators.","sidebar":"docs"},"learn/learn-guides-staking-pools":{"id":"learn/learn-guides-staking-pools","title":"Nomination Pools How-to Guides","description":"Advanced How-to Guides about Nomination Pools.","sidebar":"docs"},"learn/learn-guides-treasury":{"id":"learn/learn-guides-treasury","title":"Polkadot Treasury How-to Guides","description":"Advanced How-to Guides about requesting funds from the Polkadot Treasury.","sidebar":"docs"},"learn/learn-guides-vault":{"id":"learn/learn-guides-vault","title":"Vault How-to Guides","description":"Advanced How-to Guides about Polkadot Vault.","sidebar":"docs"},"learn/learn-identity":{"id":"learn/learn-identity","title":"Account Identity","description":"On-chain Identity, Judgements and Registrars.","sidebar":"docs"},"learn/learn-implementations":{"id":"learn/learn-implementations","title":"Polkadot Implementations","description":"Learn about the different Polkadot implementations."},"learn/learn-inflation":{"id":"learn/learn-inflation","title":"Token Inflation","description":"Explanation of Token\'s Inflation in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-launch":{"id":"learn/learn-launch","title":"Polkadot Launch Phases","description":"Polkadot\'s Launch Process and its Individual Phases.","sidebar":"docs"},"learn/learn-nft":{"id":"learn/learn-nft","title":"NFTs","description":"The NFT Landscape of the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-pallets":{"id":"learn/learn-nft-pallets","title":"NFT Pallets","description":"Functionalities of the NFT Pallets in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-projects":{"id":"learn/learn-nft-projects","title":"NFT projects on Polkadot and Kusama","description":"NFT Projects in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nomination-pools":{"id":"learn/learn-nomination-pools","title":"Nomination Pools","description":"Staking through Polkadot\'s Nomination Pools.","sidebar":"docs"},"learn/learn-nominator":{"id":"learn/learn-nominator","title":"Nominator","description":"Role of Nominators in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-parachains":{"id":"learn/learn-parachains","title":"Parachains","description":"An Introduction to Polkadot\'s Parachains.","sidebar":"docs"},"learn/learn-parachains-faq":{"id":"learn/learn-parachains-faq","title":"Parachains FAQ","description":"Parachains FAQ.","sidebar":"docs"},"learn/learn-parachains-protocol":{"id":"learn/learn-parachains-protocol","title":"Parachains\' Protocol Overview","description":"Actors and Protocols involved in Polkadot and its Parachains\' Block Finality.","sidebar":"docs"},"learn/learn-parathreads":{"id":"learn/learn-parathreads","title":"Parathreads","description":"An Introductory Guide to Parathreads.","sidebar":"docs"},"learn/learn-phragmen":{"id":"learn/learn-phragmen","title":"NPoS Election Algorithms","description":"The Election Methods used in Polkadot\'s NPoS Mechanism.","sidebar":"docs"},"learn/learn-polkadot-host":{"id":"learn/learn-polkadot-host","title":"Polkadot Host (PH)","description":"The Polkadot Host and its Components.","sidebar":"docs"},"learn/learn-polkadot-opengov":{"id":"learn/learn-polkadot-opengov","title":"Polkadot OpenGov","description":"Polkadot\u2019s Latest Model for Decentralized Governance.","sidebar":"docs"},"learn/learn-polkadot-opengov-treasury":{"id":"learn/learn-polkadot-opengov-treasury","title":"Treasury","description":"Polkadot\'s On-chain Treasury.","sidebar":"docs"},"learn/learn-proxies":{"id":"learn/learn-proxies","title":"Proxy Accounts","description":"Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-proxies-pure":{"id":"learn/learn-proxies-pure","title":"Pure Proxy Accounts","description":"Pure Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-redenomination":{"id":"learn/learn-redenomination","title":"Redenomination of DOT","description":"Everything about the DOT Token Redenomination.","sidebar":"docs"},"learn/learn-runtime-upgrades":{"id":"learn/learn-runtime-upgrades","title":"Runtime Upgrades","description":"Forkless Runtime Upgrades on Polkadot.","sidebar":"docs"},"learn/learn-sassafras":{"id":"learn/learn-sassafras","title":"Polkadot Block Production: SASSAFRAS","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-spree":{"id":"learn/learn-spree","title":"SPREE","description":"Fundamentals of SPREE.","sidebar":"docs"},"learn/learn-staking":{"id":"learn/learn-staking","title":"Introduction to Staking","description":"Overview of Staking and NPoS on Polkadot.","sidebar":"docs"},"learn/learn-staking-advanced":{"id":"learn/learn-staking-advanced","title":"Advanced Staking Concepts","description":"Advanced Concepts about Staking on Polkadot.","sidebar":"docs"},"learn/learn-system-chains":{"id":"learn/learn-system-chains","title":"System Parachains","description":"System Parachains currently deployed on Polkadot.","sidebar":"docs"},"learn/learn-teleport":{"id":"learn/learn-teleport","title":"Teleporting Assets","description":"Teleport Assets between Parachains and Relay Chain.","sidebar":"docs"},"learn/learn-transaction-fees":{"id":"learn/learn-transaction-fees","title":"Transaction Fees","description":"How Transaction Fees are Calculated and Handled.","sidebar":"docs"},"learn/learn-treasury":{"id":"learn/learn-treasury","title":"Governance v1 Treasury","description":"The Polkadot\'s On-chain Treasury during Gov1.","sidebar":"docs"},"learn/learn-validator":{"id":"learn/learn-validator","title":"Validator","description":"Role of Validators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-video-tutorials":{"id":"learn/learn-video-tutorials","title":"Videos about Polkadot","description":"Videos about Polkadot and Related Topics.","sidebar":"docs"},"learn/learn-wasm":{"id":"learn/learn-wasm","title":"WebAssembly (Wasm)","description":"WASM and its Role in Polkadot\'s Runtime.","sidebar":"docs"},"learn/learn-xcm":{"id":"learn/learn-xcm","title":"Introduction to Cross-Consensus Message Format (XCM)","description":"XCM, The Messaging Format at the Forefront of Interoperability.","sidebar":"docs"},"learn/learn-xcm-instructions":{"id":"learn/learn-xcm-instructions","title":"XCM Instructions & Register Specification","description":"Specification for Instructions and Registers for the XCM Format.","sidebar":"docs"},"learn/learn-xcm-pallet":{"id":"learn/learn-xcm-pallet","title":"XCM FRAME Pallet Overview","description":"Mechanics of the XCM Pallet and its role in Polkadot\'s Ecosystem.","sidebar":"docs"},"learn/learn-xcm-transport":{"id":"learn/learn-xcm-transport","title":"XCM Transport Methods (XCMP, HRMP, VMP)","description":"Methods to send XCM Messages across Networks.","sidebar":"docs"},"learn/learn-xcm-usecases":{"id":"learn/learn-xcm-usecases","title":"XCM Use-cases & Examples","description":"Cross-consensus Interactions and the XCM Format.","sidebar":"docs"},"learn/learn-xcvm":{"id":"learn/learn-xcvm","title":"XCM Virtual Machine (XCVM) & XCM Executor","description":"Design of the XCM Executor and Mechanics of the XCM Virtual Machine.","sidebar":"docs"},"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive":{"id":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive","title":"Executor Configuration","description":"Deep Dive into the Configuration of the XCM-Executor.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees","title":"Weight and Fees","description":"Weight and Fees in XCM.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset","title":"MultiAsset","description":"The MultiAsset Datatype.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary","title":"Fundamentals","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm","title":"XCVM","description":"Deep Dive into XCVM.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example","title":"Example","description":"A MultiLocation Example.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions","title":"Junction(s)","description":"The Junction Type in a MultiLocation Struct.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary","title":"MultiLocation","description":"Learn about XCM fundamentals.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-assets":{"id":"learn/xcm/journey/learn-xcm-docs-journey-assets","title":"Trap and Claim Assets","description":"Instructions to Trap and Claim Assets.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-channels":{"id":"learn/xcm/journey/learn-xcm-docs-journey-channels","title":"Channels and Bridges","description":"Establishment of HRMP Channels between Parachains.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-expectations":{"id":"learn/xcm/journey/learn-xcm-docs-journey-expectations","title":"Expectations","description":"Expect Instructions to Check if a Condition is Valid.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-fees":{"id":"learn/xcm/journey/learn-xcm-docs-journey-fees","title":"Fee Handling","description":"How Fees for XCM Transfers are Handled.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-holding":{"id":"learn/xcm/journey/learn-xcm-docs-journey-holding","title":"More Holding Modifiers","description":"More Instructions to Alter the Holding Register.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-origin":{"id":"learn/xcm/journey/learn-xcm-docs-journey-origin","title":"Origin Manipulation","description":"Manipulating the Origin of XCM.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-queries":{"id":"learn/xcm/journey/learn-xcm-docs-journey-queries","title":"Queries","description":"Query Information from another Consensus System.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-register":{"id":"learn/xcm/journey/learn-xcm-docs-journey-register","title":"Register Modifiers","description":"More Instructions to Change the XCVM Registers.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-summary":{"id":"learn/xcm/journey/learn-xcm-docs-journey-summary","title":"A Journey through XCM","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-transact":{"id":"learn/xcm/journey/learn-xcm-docs-journey-transact","title":"Transact","description":"The Transact Instruction to Execute XCM Calls.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-version":{"id":"learn/xcm/journey/learn-xcm-docs-journey-version","title":"Version Subscription","description":"Get Notified about XCM Version Updates.","sidebar":"docs"},"learn/xcm/journey/locks/learn-xcm-docs-journey-locks":{"id":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks","title":"Locks","description":"Restrict Transfer or Withdrawal of Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve","title":"Reserve-backed Transfers","description":"Reserve-backed Transfers: Third-party Reserve to store Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary","title":"Transfers","description":"Summary about XCM Transfers.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport","title":"Asset Teleportation","description":"Teleportation: Sending Assets Across Chains.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-intro":{"id":"learn/xcm/learn-xcm-docs-intro","title":"XCM: Cross-Consensus Messaging","description":"Introduction to the XCM Documentation.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-testing":{"id":"learn/xcm/learn-xcm-docs-testing","title":"Testing","description":"Testing XCM-powered Solutions.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-architecture":{"id":"learn/xcm/overview/learn-xcm-docs-overview-architecture","title":"The XCM Architecture","description":"The XCM Architecture.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-format":{"id":"learn/xcm/overview/learn-xcm-docs-overview-format","title":"XCM is a Format, not a Protocol","description":"XCM is a Format, not a Protocol.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-intro":{"id":"learn/xcm/overview/learn-xcm-docs-overview-intro","title":"Introduction","description":"An Introduction to XCM.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-summary":{"id":"learn/xcm/overview/learn-xcm-docs-overview-summary","title":"XCM: Cross-Consensus Messaging","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-xcvm":{"id":"learn/xcm/overview/learn-xcm-docs-overview-xcvm","title":"The XCVM","description":"The Cross-Consensus Virtual Machine.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look","title":"First Look at an XCM","description":"First Look at an XCM.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator","title":"XCM Simulator","description":"Test XCM using a Simulated Environment.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary","title":"Quickstart","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-glossary":{"id":"learn/xcm/reference/learn-xcm-docs-reference-glossary","title":"Glossary","description":"Glossary.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers":{"id":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers","title":"All XCVM Registers","description":"All XCVM Registers.","sidebar":"docs"},"maintain/doc-maintain-guides-validator-community":{"id":"maintain/doc-maintain-guides-validator-community","title":"Validator Community Overview","description":"An extensive guide to help you start and build a validator community.","sidebar":"docs"},"maintain/kusama/maintain-guides-how-to-nominate-kusama":{"id":"maintain/kusama/maintain-guides-how-to-nominate-kusama","title":"Become a Nominator on Kusama","description":"Steps on how to nominate on Kusama."},"maintain/kusama/maintain-guides-how-to-validate-kusama":{"id":"maintain/kusama/maintain-guides-how-to-validate-kusama","title":"Run a Validator (Kusama)","description":"The fundamentals for running a Kusama validator."},"maintain/kusama/maintain-guides-society-kusama":{"id":"maintain/kusama/maintain-guides-society-kusama","title":"Kappa Sigma Mu","description":"Learn about the Kappa Sigma Mu society and join as a member."},"maintain/maintain-bootnode":{"id":"maintain/maintain-bootnode","title":"Set up a Boot Node","description":"Steps on setting up a boot node.","sidebar":"docs"},"maintain/maintain-endpoints":{"id":"maintain/maintain-endpoints","title":"Node Endpoints","description":"List of node endpoints and examples of use.","sidebar":"docs"},"maintain/maintain-errors":{"id":"maintain/maintain-errors","title":"Errors and How to Resolve Them","description":"Common errors you might encounter and how they can be resolved.","sidebar":"docs"},"maintain/maintain-guides-avoid-slashing":{"id":"maintain/maintain-guides-avoid-slashing","title":"Validator Best Practices","description":"Best practices to avoid slashing.","sidebar":"docs"},"maintain/maintain-guides-democracy":{"id":"maintain/maintain-guides-democracy","title":"Participate in Democracy","description":"Steps on how to participate in democracy.","sidebar":"docs"},"maintain/maintain-guides-how-to-chill":{"id":"maintain/maintain-guides-how-to-chill","title":"How to Chill","description":"Steps on chilling as a network participant.","sidebar":"docs"},"maintain/maintain-guides-how-to-join-council":{"id":"maintain/maintain-guides-how-to-join-council","title":"Join the Council","description":"Steps on how to join the official on-chain council.","sidebar":"docs"},"maintain/maintain-guides-how-to-monitor-your-node":{"id":"maintain/maintain-guides-how-to-monitor-your-node","title":"Monitor your node","description":"This guide will walk you through how to set up Prometheus with","sidebar":"docs"},"maintain/maintain-guides-how-to-nominate-polkadot":{"id":"maintain/maintain-guides-how-to-nominate-polkadot","title":"Become a Nominator on Polkadot","description":"Steps on how to nominate on Polkadot.","sidebar":"docs"},"maintain/maintain-guides-how-to-stop-validating":{"id":"maintain/maintain-guides-how-to-stop-validating","title":"How to Stop Validating","description":"Steps on how to stop validating.","sidebar":"docs"},"maintain/maintain-guides-how-to-systemd":{"id":"maintain/maintain-guides-how-to-systemd","title":"Using systemd for a Validator Node","description":"Using a service manager for your validator node.","sidebar":"docs"},"maintain/maintain-guides-how-to-upgrade":{"id":"maintain/maintain-guides-how-to-upgrade","title":"How to Upgrade Your Validator","description":"Validators perform critical functions for the network, and as such, have strict uptime requirements.","sidebar":"docs"},"maintain/maintain-guides-how-to-validate-polkadot":{"id":"maintain/maintain-guides-how-to-validate-polkadot","title":"Run a Validator (Polkadot)","description":"The fundamentals for running a Polkadot validator.","sidebar":"docs"},"maintain/maintain-guides-how-to-vote-councillor":{"id":"maintain/maintain-guides-how-to-vote-councillor","title":"Voting for Councillors","description":"Steps on how to vote for councillors.","sidebar":"docs"},"maintain/maintain-guides-polkadot-opengov":{"id":"maintain/maintain-guides-polkadot-opengov","title":"Participate in Polkadot OpenGov","description":"Steps on how to participate in OpenGov.","sidebar":"docs"},"maintain/maintain-guides-secure-validator":{"id":"maintain/maintain-guides-secure-validator","title":"Secure Validator","description":"Tips for running a secure validator.","sidebar":"docs"},"maintain/maintain-guides-validator-payout":{"id":"maintain/maintain-guides-validator-payout","title":"Validator Payout Overview","description":"How validator payout works on the network and what you should expect.","sidebar":"docs"},"maintain/maintain-index":{"id":"maintain/maintain-index","title":"Network Maintainers","description":"Reference point for network maintenance guides.","sidebar":"docs"},"maintain/maintain-networks":{"id":"maintain/maintain-networks","title":"Networks","description":"Information about the different networks of the Polkadot ecosystem.","sidebar":"docs"},"maintain/maintain-polkadot-parameters":{"id":"maintain/maintain-polkadot-parameters","title":"Polkadot Parameters","description":"A description about fundamental Polkadot parameters.","sidebar":"docs"},"maintain/maintain-rpc":{"id":"maintain/maintain-rpc","title":"Set up a RPC node","description":"Steps on setting up a RPC node.","sidebar":"docs"},"maintain/maintain-sync":{"id":"maintain/maintain-sync","title":"Set up a Full Node","description":"Steps on how to set up a full node.","sidebar":"docs"},"maintain/maintain-wss":{"id":"maintain/maintain-wss","title":"Secure the WebSocket","description":"Steps on setting up a secure socket for remote connections.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.f244d2f5.js b/assets/js/935f2afb.f244d2f5.js new file mode 100644 index 000000000000..f50a3f48041c --- /dev/null +++ b/assets/js/935f2afb.f244d2f5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[53],{22624:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"Learn","items":[{"type":"category","label":"General","description":"General Information to get started with Polkadot and Web3.","items":[{"type":"link","label":"Getting Started","href":"/docs/getting-started","docId":"general/getting-started"},{"type":"link","label":"Web3 and Polkadot","href":"/docs/web3-and-polkadot","docId":"general/web3-and-polkadot"},{"type":"category","label":"Polkadot Vision","description":"Polkadot\'s Vision revealed by Gavin Wood at Decoded 2023.","items":[{"type":"link","label":"Polkadot 1.0","href":"/docs/polkadot-v1","docId":"general/polkadot-v1"},{"type":"link","label":"Polkadot Direction","href":"/docs/polkadot-direction","docId":"general/polkadot-direction"}],"collapsed":true,"collapsible":true,"href":"/docs/polkadot-vision-index"},{"type":"category","label":"Stay Safe","description":"Good-practices to Stay Safe while Surfing in Web3.","items":[{"type":"link","label":"Scam Protection","href":"/docs/learn-scams","docId":"general/scams"},{"type":"link","label":"Do Your Own Research","href":"/docs/how-to-dyor","docId":"general/how-to-dyor"}],"collapsed":true,"collapsible":true,"href":"/docs/stay-safe-index"},{"type":"category","label":"Wallets","description":"Wallet Options in the Polkadot Ecosystem.","items":[{"type":"link","label":"Wallets and Extensions","href":"/docs/wallets-and-extensions","docId":"general/wallets-and-extensions"},{"type":"link","label":"Ledger","href":"/docs/ledger","docId":"general/ledger"},{"type":"link","label":"Polkadot Vault","href":"/docs/polkadot-vault","docId":"general/polkadot-vault"},{"type":"link","label":"Polkadot-JS UI","href":"/docs/polkadotjs-ui","docId":"general/polkadotjs-ui"}],"collapsed":true,"collapsible":true,"href":"/docs/wallets-index"},{"type":"category","label":"Dashboards","description":"Dashboards in the Polkadot Ecosystem.","items":[{"type":"link","label":"Staking Dashboard","href":"/docs/staking-dashboard","docId":"general/staking-dashboard"}],"collapsed":true,"collapsible":true,"href":"/docs/dashboards-index"},{"type":"link","label":"Polkadot-JS","href":"/docs/polkadotjs","docId":"general/polkadotjs"},{"type":"category","label":"Community & Contributors","description":"Polkadot Community and Wiki Contributors.","items":[{"type":"link","label":"Community","href":"/docs/community","docId":"general/community"},{"type":"link","label":"Contributing to the Wiki","href":"/docs/contributing","docId":"general/contributing"},{"type":"link","label":"Contributors","href":"/docs/contributors","docId":"general/contributors"}],"collapsed":true,"collapsible":true,"href":"/docs/community-index"},{"type":"category","label":"Programmes","description":"Programmes and Initiatives within the Polkadot Ecosystem.","items":[{"type":"link","label":"Grants","href":"/docs/grants","docId":"general/grants"},{"type":"link","label":"Bug Bounty","href":"/docs/bug-bounty","docId":"general/bug-bounty"},{"type":"link","label":"Polkadot Ambassadors","href":"/docs/ambassadors","docId":"general/ambassadors"},{"type":"link","label":"Substrate Builders","href":"/docs/builders-program","docId":"general/builders-program"},{"type":"link","label":"Thousand Validators","href":"/docs/thousand-validators","docId":"general/doc-thousand-validators"},{"type":"link","label":"Thousand Contributors","href":"/docs/thousand-contributors","docId":"general/doc-thousand-contributors"},{"type":"link","label":"Developer Heroes","href":"/docs/dev-heroes","docId":"general/dev-heroes"}],"collapsed":true,"collapsible":true,"href":"/docs/programmes-index"},{"type":"link","label":"Build on Polkadot","href":"/docs/start-building","docId":"general/start-building"},{"type":"link","label":"Research Pages","href":"/docs/research","docId":"general/research"},{"type":"link","label":"Metadata Explorer","href":"/docs/metadata","docId":"general/metadata"},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"general/faq"},{"type":"link","label":"Glossary","href":"/docs/glossary","docId":"general/glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/general-index"},{"type":"category","label":"Basics","description":"Staking, Accounts, Transactions, Tokens and NFTs, and Governance.","items":[{"type":"category","label":"Accounts","description":"Basic Accounts, Identity, Multi-signature, and Proxies.","items":[{"type":"link","label":"Polkadot Accounts","href":"/docs/learn-accounts","docId":"learn/learn-accounts"},{"type":"link","label":"Account Generation","href":"/docs/learn-account-generation","docId":"learn/learn-account-generation"},{"type":"link","label":"Account Abstraction","href":"/docs/learn-account-abstraction","docId":"learn/learn-account-abstraction"},{"type":"link","label":"Account Identity","href":"/docs/learn-identity","docId":"learn/learn-identity"},{"type":"link","label":"Multi-Signature Accounts","href":"/docs/learn-account-multisig","docId":"learn/learn-account-multisig"},{"type":"link","label":"Proxy Accounts","href":"/docs/learn-proxies","docId":"learn/learn-proxies"},{"type":"link","label":"Pure Proxy Accounts","href":"/docs/learn-proxies-pure","docId":"learn/learn-proxies-pure"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-accounts-index"},{"type":"category","label":"Transactions","description":"Extrinsics, Balance Transfers, and Fees.","items":[{"type":"link","label":"Extrinsics","href":"/docs/learn-extrinsics","docId":"learn/learn-extrinsics"},{"type":"link","label":"Balances Transfers","href":"/docs/learn-balance-transfers","docId":"learn/learn-balance-transfers"},{"type":"link","label":"Transaction Fees","href":"/docs/learn-transaction-fees","docId":"learn/learn-transaction-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-transactions-index"},{"type":"category","label":"Staking","description":"Mechanics of Staking.","items":[{"type":"link","label":"Introduction to Staking","href":"/docs/learn-staking","docId":"learn/learn-staking"},{"type":"link","label":"Nomination Pools","href":"/docs/learn-nomination-pools","docId":"learn/learn-nomination-pools"},{"type":"link","label":"Staking Apps","href":"/docs/learn-staking-apps","docId":"learn/learn-staking-apps"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-staking-index"},{"type":"link","label":"Polkadot OpenGov","href":"/docs/learn-polkadot-opengov","docId":"learn/learn-polkadot-opengov"},{"type":"link","label":"Treasury","href":"/docs/learn-polkadot-opengov-treasury","docId":"learn/learn-polkadot-opengov-treasury"},{"type":"category","label":"Tokens and Assets","description":"DOT Token, Asset Hub, and Teleports.","items":[{"type":"link","label":"Asset Hub","href":"/docs/learn-assets","docId":"learn/learn-assets"},{"type":"link","label":"DOT","href":"/docs/learn-DOT","docId":"learn/learn-DOT"},{"type":"link","label":"Token Inflation","href":"/docs/learn-inflation","docId":"learn/learn-inflation"},{"type":"link","label":"Teleporting Assets","href":"/docs/learn-teleport","docId":"learn/learn-teleport"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-assets-index"},{"type":"category","label":"NFTs","description":"Intro to NFTs and NFT Projects.","items":[{"type":"link","label":"Introduction to NFTs","href":"/docs/learn-nft","docId":"learn/learn-nft"},{"type":"link","label":"NFT Projects","href":"/docs/learn-nft-projects","docId":"learn/learn-nft-projects"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-nft-index"},{"type":"category","label":"Components","description":"OpenGov, Treasury, WASM, Runtime Upgrades, and more.","items":[{"type":"link","label":"Polkadot Host","href":"/docs/learn-polkadot-host","docId":"learn/learn-polkadot-host"},{"type":"link","label":"WebAssembly (Wasm)","href":"/docs/learn-wasm","docId":"learn/learn-wasm"},{"type":"link","label":"Runtime Upgrades","href":"/docs/learn-runtime-upgrades","docId":"learn/learn-runtime-upgrades"},{"type":"link","label":"Consensus","href":"/docs/learn-consensus","docId":"learn/learn-consensus"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-components-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-basics-index"},{"type":"category","label":"Advanced","description":"Advanced Concepts & Guides about Accounts, Staking, and NFTs.","items":[{"type":"link","label":"Accounts","href":"/docs/learn-account-advanced","docId":"learn/learn-account-advanced"},{"type":"link","label":"Advanced Staking Concepts","href":"/docs/learn-staking-advanced","docId":"learn/learn-staking-advanced"},{"type":"link","label":"NFT Pallets","href":"/docs/learn-nft-pallets","docId":"learn/learn-nft-pallets"},{"type":"link","label":"Cryptography","href":"/docs/learn-cryptography","docId":"learn/learn-cryptography"},{"type":"link","label":"NPoS Election Algorithms","href":"/docs/learn-phragmen","docId":"learn/learn-phragmen"},{"type":"category","label":"How-to Guides","description":"Advanced Guides about Staking, Asset Hub, Vault App, and more.","items":[{"type":"category","label":"Staking","description":"Advanced How-to Guides about Staking.","items":[{"type":"link","label":"Staking","href":"/docs/learn-guides-staking","docId":"learn/learn-guides-staking"},{"type":"link","label":"Nomination Pools","href":"/docs/learn-guides-staking-pools","docId":"learn/learn-guides-staking-pools"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-staking-index"},{"type":"link","label":"OpenGov","href":"/docs/learn-guides-polkadot-opengov","docId":"learn/learn-guides-polkadot-opengov"},{"type":"link","label":"Treasury","href":"/docs/learn-guides-treasury","docId":"learn/learn-guides-treasury"},{"type":"link","label":"Bounties","href":"/docs/learn-guides-bounties","docId":"learn/learn-guides-bounties"},{"type":"link","label":"Identity","href":"/docs/learn-guides-identity","docId":"learn/learn-guides-identity"},{"type":"category","label":"Asset Hub","description":"Advanced How-to Guides about the Asset Hub.","items":[{"type":"link","label":"Creating Assets","href":"/docs/learn-guides-assets-create","docId":"learn/learn-guides-assets-create"},{"type":"link","label":"Asset Hub Ledger App","href":"/docs/learn-guides-assets-ledger","docId":"learn/learn-guides-assets-ledger"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-assets-index"},{"type":"link","label":"Polkadot Vault","href":"/docs/learn-guides-vault","docId":"learn/learn-guides-vault"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-guides-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-advanced-index"},{"type":"category","label":"Architecture","description":"Nominators, Validators, Collators, Parachains, and more.","items":[{"type":"link","label":"Architecture","href":"/docs/learn-architecture","docId":"learn/learn-architecture"},{"type":"category","label":"Network Participants","description":"Participants in the Polkadot Ecosystem.","items":[{"type":"link","label":"Collator","href":"/docs/learn-collator","docId":"learn/learn-collator"},{"type":"link","label":"Nominator","href":"/docs/learn-nominator","docId":"learn/learn-nominator"},{"type":"link","label":"Validator","href":"/docs/learn-validator","docId":"learn/learn-validator"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-participants-index"},{"type":"category","label":"Parachains","description":"Parachains\' Protocol, Auctions, Crowdloans, and more.","items":[{"type":"link","label":"Introduction to Parachains","href":"/docs/learn-parachains","docId":"learn/learn-parachains"},{"type":"link","label":"Protocol Overview","href":"/docs/learn-parachains-protocol","docId":"learn/learn-parachains-protocol"},{"type":"link","label":"System Parachains","href":"/docs/learn-system-chains","docId":"learn/learn-system-chains"},{"type":"link","label":"Parachain Slot Auctions","href":"/docs/learn-auction","docId":"learn/learn-auction"},{"type":"link","label":"Parachain Crowdloans","href":"/docs/learn-crowdloans","docId":"learn/learn-crowdloans"},{"type":"link","label":"Parachains FAQ","href":"/docs/learn-parachains-faq","docId":"learn/learn-parachains-faq"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-parachains-index"},{"type":"link","label":"Bridges","href":"/docs/learn-bridges","docId":"learn/learn-bridges"},{"type":"category","label":"Cross Consensus Messaging (XCM)","description":"Polkadot\'s Cross-Consensus Messaging Format (XCM).","items":[{"type":"link","label":"Cross-Consensus Message Format (XCM)","href":"/docs/learn-xcm","docId":"learn/learn-xcm"},{"type":"link","label":"XCM Pallet","href":"/docs/learn-xcm-pallet","docId":"learn/learn-xcm-pallet"},{"type":"link","label":"XCM Use-cases","href":"/docs/learn-xcm-usecases","docId":"learn/learn-xcm-usecases"},{"type":"link","label":"XCM Transport","href":"/docs/learn-xcm-transport","docId":"learn/learn-xcm-transport"},{"type":"link","label":"XCM Virtual Machine (XCVM)","href":"/docs/learn-xcvm","docId":"learn/learn-xcvm"},{"type":"link","label":"XCM Instructions","href":"/docs/learn-xcm-instructions","docId":"learn/learn-xcm-instructions"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-xcm-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-architecture-index"},{"type":"category","label":"XCM Docs","description":"In-depth documentation about the Polkadot\'s Cross-Chain Messaging (XCM).","items":[{"type":"link","label":"XCM: Cross-Consensus Messaging","href":"/docs/learn/xcm/introduction","docId":"learn/xcm/learn-xcm-docs-intro"},{"type":"category","label":"Overview","description":"Overview of the XCM Documentation.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/overview-summary","docId":"learn/xcm/overview/learn-xcm-docs-overview-summary"},{"type":"link","label":"Introduction","href":"/docs/learn/xcm/overview-intro","docId":"learn/xcm/overview/learn-xcm-docs-overview-intro"},{"type":"link","label":"A Format, not a Protocol","href":"/docs/learn/xcm/overview-format","docId":"learn/xcm/overview/learn-xcm-docs-overview-format"},{"type":"link","label":"The XCVM","href":"/docs/learn/xcm/overview-xcvm","docId":"learn/xcm/overview/learn-xcm-docs-overview-xcvm"},{"type":"link","label":"Architecture","href":"/docs/learn/xcm/overview-architecture","docId":"learn/xcm/overview/learn-xcm-docs-overview-architecture"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/overview"},{"type":"category","label":"Quickstart","description":"Start Diving into XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/quickstart-summary","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary"},{"type":"link","label":"XCM Simulator","href":"/docs/learn/xcm/quickstart-simulator","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator"},{"type":"link","label":"First Look at an XCM","href":"/docs/learn/xcm/quickstart-first-look","docId":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/quickstart"},{"type":"category","label":"Fundamentals","description":"Fundamental Concepts about XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals-summary","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary"},{"type":"category","label":"MultiLocation","description":"The MultiLocation Type.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/fundamentals/multilocation-summary","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary"},{"type":"link","label":"Junction(s)","href":"/docs/learn/xcm/fundamentals/multilocation-junctions","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions"},{"type":"link","label":"Example","href":"/docs/learn/xcm/fundamentals/multilocation-example","docId":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals/multilocation"},{"type":"link","label":"MultiAsset","href":"/docs/learn/xcm/fundamentals-multiasset","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset"},{"type":"link","label":"XCVM","href":"/docs/learn/xcm/fundamentals-xcvm","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm"},{"type":"link","label":"Weight and Fees","href":"/docs/learn/xcm/fundamentals-fees","docId":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/fundamentals"},{"type":"category","label":"A Journey through XCM","description":"A Practical Introduction to the XCM Features","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey-summary","docId":"learn/xcm/journey/learn-xcm-docs-journey-summary"},{"type":"category","label":"Transfers","description":"Transferring Assets between Consensus Systems with XCM.","items":[{"type":"link","label":"Summary","href":"/docs/learn/xcm/journey/transfers-summary","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary"},{"type":"link","label":"Asset Teleportation","href":"/docs/learn/xcm/journey/transfers-teleport","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport"},{"type":"link","label":"Reserve-backed Transfers","href":"/docs/learn/xcm/journey/transfers-reserve","docId":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey/transfers"},{"type":"link","label":"Fee Handling","href":"/docs/learn/xcm/journey-fees","docId":"learn/xcm/journey/learn-xcm-docs-journey-fees"},{"type":"link","label":"Transact: A General Solution","href":"/docs/learn/xcm/journey-transact","docId":"learn/xcm/journey/learn-xcm-docs-journey-transact"},{"type":"link","label":"Origin Manipulation","href":"/docs/learn/xcm/journey-origin","docId":"learn/xcm/journey/learn-xcm-docs-journey-origin"},{"type":"link","label":"More Register Modifiers","href":"/docs/learn/xcm/journey-register","docId":"learn/xcm/journey/learn-xcm-docs-journey-register"},{"type":"link","label":"More Holding Modifiers","href":"/docs/learn/xcm/journey-holding","docId":"learn/xcm/journey/learn-xcm-docs-journey-holding"},{"type":"link","label":"Trap and Claim Assets","href":"/docs/learn/xcm/journey-assets","docId":"learn/xcm/journey/learn-xcm-docs-journey-assets"},{"type":"link","label":"Expectations","href":"/docs/learn/xcm/journey-expectations","docId":"learn/xcm/journey/learn-xcm-docs-journey-expectations"},{"type":"link","label":"Queries","href":"/docs/learn/xcm/journey-queries","docId":"learn/xcm/journey/learn-xcm-docs-journey-queries"},{"type":"link","label":"Version Subscription","href":"/docs/learn/xcm/journey-version","docId":"learn/xcm/journey/learn-xcm-docs-journey-version"},{"type":"link","label":"Locks","href":"/docs/learn/xcm/journey-locks","docId":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks"},{"type":"link","label":"Channels and Bridges","href":"/docs/learn/xcm/journey-channels","docId":"learn/xcm/journey/learn-xcm-docs-journey-channels"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/journey"},{"type":"link","label":"Executor Configuration","href":"/docs/learn/xcm/config-deep-dive","docId":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive"},{"type":"link","label":"Testing","href":"/docs/learn/xcm/testing","docId":"learn/xcm/learn-xcm-docs-testing"},{"type":"category","label":"References","description":"XCVM Registers and Glossary","items":[{"type":"link","label":"All XCVM Registers","href":"/docs/learn/xcm/reference-xcvm-registers","docId":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers"},{"type":"link","label":"Glossary","href":"/docs/learn/xcm/reference-glossary","docId":"learn/xcm/reference/learn-xcm-docs-reference-glossary"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm/references"}],"collapsed":true,"collapsible":true,"href":"/docs/learn/xcm"},{"type":"category","label":"Polkadot Comparisons","description":"Comparison between Polkadot and other Networks. ","items":[{"type":"link","label":"Kusama","href":"/docs/learn-comparisons-kusama","docId":"learn/learn-comparisons-kusama"},{"type":"link","label":"Ethereum","href":"/docs/learn-comparisons-ethereum-2","docId":"learn/learn-comparisons-ethereum-2"},{"type":"link","label":"Cosmos","href":"/docs/learn-comparisons-cosmos","docId":"learn/learn-comparisons-cosmos"},{"type":"link","label":"Avalanche","href":"/docs/learn-comparisons-avalanche","docId":"learn/learn-comparisons-avalanche"},{"type":"link","label":"Other Comparisons","href":"/docs/learn-comparisons","docId":"learn/learn-comparisons"},{"type":"link","label":"Layer Two and Rollups","href":"/docs/learn-comparisons-rollups","docId":"learn/learn-comparisons-rollups"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-comparisons-index"},{"type":"link","label":"Videos","href":"/docs/learn-video-tutorials","docId":"learn/learn-video-tutorials"},{"type":"category","label":"Future Implementations","description":"Implementations that will be deployed on Polkadot.","items":[{"type":"link","label":"SPREE","href":"/docs/learn-spree","docId":"learn/learn-spree"},{"type":"link","label":"Parathreads","href":"/docs/learn-parathreads","docId":"learn/learn-parathreads"},{"type":"link","label":"Asynchronous Backing","href":"/docs/learn-async-backing","docId":"learn/learn-async-backing"},{"type":"link","label":"SASSAFRAS","href":"/docs/learn-sassafras","docId":"learn/learn-sassafras"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-future-implementations-index"},{"type":"category","label":"Archive","description":"Implementations no longer live on Polkadot.","items":[{"type":"link","label":"Governance V1","href":"/docs/learn-governance","docId":"learn/learn-governance"},{"type":"link","label":"Gov1 Treasury","href":"/docs/learn-treasury","docId":"learn/learn-treasury"},{"type":"link","label":"Polkadot Launch Phases","href":"/docs/learn-launch","docId":"learn/learn-launch"},{"type":"link","label":"Redenomination of DOT","href":"/docs/learn-redenomination","docId":"learn/learn-redenomination"},{"type":"link","label":"Controller Accounts","href":"/docs/learn-controller","docId":"learn/learn-controller"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-archive-index"}],"collapsed":true,"collapsible":true,"href":"/docs/learn-index"},{"type":"category","label":"Build","items":[{"type":"link","label":"Builder\'s Guides","href":"/docs/build-index","docId":"build/build-index"},{"type":"category","label":"Development Guide","items":[{"type":"link","label":"Builders Starter\'s Guide","href":"/docs/build-guide","docId":"build/build-guide"},{"type":"link","label":"Parachain Development","href":"/docs/build-pdk","docId":"build/build-parachains"},{"type":"link","label":"Decentralized Storage","href":"/docs/build-storage","docId":"build/build-storage"},{"type":"link","label":"Smart Contracts","href":"/docs/build-smart-contracts","docId":"build/build-smart-contracts"},{"type":"link","label":"Oracles","href":"/docs/build-oracle","docId":"build/build-oracle"},{"type":"link","label":"Data","href":"/docs/build-data","docId":"build/build-data"},{"type":"link","label":"Substrate Connect","href":"/docs/build-substrate","docId":"build/build-substrate"},{"type":"link","label":"SS58 Registry","href":"/docs/build-ss58-registry","docId":"build/build-ss58-registry"},{"type":"link","label":"Opening HRMP Channels","href":"/docs/build-hrmp-channels","docId":"build/build-hrmp-channels"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Integration Guide","items":[{"type":"link","label":"Integration Initiation","href":"/docs/build-integration","docId":"build/build-integration"},{"type":"link","label":"Polkadot Protocol","href":"/docs/build-protocol-info","docId":"build/build-protocol-info"},{"type":"link","label":"Integrating Assets","href":"/docs/build-integrate-assets","docId":"build/build-integrate-assets"},{"type":"link","label":"Node Management","href":"/docs/build-node-management","docId":"build/build-node-management"},{"type":"link","label":"Node Interaction","href":"/docs/build-node-interaction","docId":"build/build-node-interaction"},{"type":"link","label":"Transaction Construction","href":"/docs/build-transaction-construction","docId":"build/build-transaction-construction"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Tools","items":[{"type":"link","label":"Tool Index","href":"/docs/build-tools-index","docId":"build/build-tools-index"},{"type":"link","label":"Open Source Stack","href":"/docs/build-open-source","docId":"build/build-open-source"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Resources","items":[{"type":"link","label":"Hackathons","href":"/docs/build-hackathon","docId":"build/build-hackathon"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Maintain","items":[{"type":"link","label":"Network Maintainers","href":"/docs/maintain-index","docId":"maintain/maintain-index"},{"type":"link","label":"Parameters","href":"/docs/maintain-polkadot-parameters","docId":"maintain/maintain-polkadot-parameters"},{"type":"link","label":"Node Endpoints","href":"/docs/maintain-endpoints","docId":"maintain/maintain-endpoints"},{"type":"category","label":"Nodes and Dapps","items":[{"type":"link","label":"Set up a Full Node","href":"/docs/maintain-sync","docId":"maintain/maintain-sync"},{"type":"link","label":"Set up a Boot Node","href":"/docs/maintain-bootnode","docId":"maintain/maintain-bootnode"},{"type":"link","label":"Set up a RPC node","href":"/docs/maintain-rpc","docId":"maintain/maintain-rpc"},{"type":"link","label":"Secure the WebSocket","href":"/docs/maintain-wss","docId":"maintain/maintain-wss"},{"type":"link","label":"Networks","href":"/docs/maintain-networks","docId":"maintain/maintain-networks"},{"type":"link","label":"Resolving Errors","href":"/docs/maintain-errors","docId":"maintain/maintain-errors"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Nominator Guides","href":"/docs/maintain-guides-how-to-nominate-polkadot","docId":"maintain/maintain-guides-how-to-nominate-polkadot"},{"type":"category","label":"Validator Guides","items":[{"type":"link","label":"How to run a Validator on Polkadot","href":"/docs/maintain-guides-how-to-validate-polkadot","docId":"maintain/maintain-guides-how-to-validate-polkadot"},{"type":"link","label":"Validator Payout Overview","href":"/docs/maintain-guides-validator-payout","docId":"maintain/maintain-guides-validator-payout"},{"type":"link","label":"Using systemd for a Validator Node","href":"/docs/maintain-guides-how-to-systemd","docId":"maintain/maintain-guides-how-to-systemd"},{"type":"link","label":"Secure Validator","href":"/docs/maintain-guides-secure-validator","docId":"maintain/maintain-guides-secure-validator"},{"type":"link","label":"How to Upgrade Your Validator","href":"/docs/maintain-guides-how-to-upgrade","docId":"maintain/maintain-guides-how-to-upgrade"},{"type":"link","label":"Monitor your node","href":"/docs/maintain-guides-how-to-monitor-your-node","docId":"maintain/maintain-guides-how-to-monitor-your-node"},{"type":"link","label":"How to Chill","href":"/docs/maintain-guides-how-to-chill","docId":"maintain/maintain-guides-how-to-chill"},{"type":"link","label":"How to Stop Validating","href":"/docs/maintain-guides-how-to-stop-validating","docId":"maintain/maintain-guides-how-to-stop-validating"},{"type":"link","label":"Validator Community Overview","href":"/docs/maintain-guides-validator-community","docId":"maintain/doc-maintain-guides-validator-community"},{"type":"link","label":"Validator Best Practices","href":"/docs/maintain-guides-avoid-slashing","docId":"maintain/maintain-guides-avoid-slashing"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Governance Guides","items":[{"type":"link","label":"Participate in Polkadot OpenGov","href":"/docs/maintain-guides-polkadot-opengov","docId":"maintain/maintain-guides-polkadot-opengov"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Archive","items":[{"type":"link","label":"Participate in Democracy","href":"/docs/maintain-guides-democracy","docId":"maintain/maintain-guides-democracy"},{"type":"link","label":"Join the Council","href":"/docs/maintain-guides-how-to-join-council","docId":"maintain/maintain-guides-how-to-join-council"},{"type":"link","label":"Voting for Councillors","href":"/docs/maintain-guides-how-to-vote-councillor","docId":"maintain/maintain-guides-how-to-vote-councillor"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}]},"docs":{"build/build-data":{"id":"build/build-data","title":"Data Analytics","description":"An overview about building with data analytics","sidebar":"docs"},"build/build-guide":{"id":"build/build-guide","title":"Builders Starter\'s Guide","description":"Start building with Polkadot/Kusama.","sidebar":"docs"},"build/build-hackathon":{"id":"build/build-hackathon","title":"Hackathons","description":"Join or host a Hackathon.","sidebar":"docs"},"build/build-hrmp-channels":{"id":"build/build-hrmp-channels","title":"Opening HRMP Channels","description":"Steps on how to open HRMP channels between parachains.","sidebar":"docs"},"build/build-index":{"id":"build/build-index","title":"Builder\'s Guides","description":"Reference point for the Polkadot builder guides.","sidebar":"docs"},"build/build-integrate-assets":{"id":"build/build-integrate-assets","title":"Assets on Polkadot","description":"Tools that you can use to integrating assets.","sidebar":"docs"},"build/build-integration":{"id":"build/build-integration","title":"Polkadot Integration Guide","description":"Reference point for the Polkadot integration guides.","sidebar":"docs"},"build/build-node-interaction":{"id":"build/build-node-interaction","title":"Node Interaction","description":"Tools for node interaction.","sidebar":"docs"},"build/build-node-management":{"id":"build/build-node-management","title":"Node Management","description":"Steps on how to manage your Polkadot node.","sidebar":"docs"},"build/build-open-source":{"id":"build/build-open-source","title":"Open Source Stack","description":"Overview of the open source Polkadot/Kusama Tech Stack","sidebar":"docs"},"build/build-oracle":{"id":"build/build-oracle","title":"Oracles","description":"Information about building with oracles.","sidebar":"docs"},"build/build-parachains":{"id":"build/build-parachains","title":"Parachain Development","description":"A guide on what it means to become a Parachain and the steps to do so.","sidebar":"docs"},"build/build-protocol-info":{"id":"build/build-protocol-info","title":"Polkadot Protocol Information","description":"Characteristics about the Polkadot protocol, and what you need to consider when building.","sidebar":"docs"},"build/build-smart-contracts":{"id":"build/build-smart-contracts","title":"Smart Contracts","description":"How smart contracts play their role in the Polkadot ecosystem.","sidebar":"docs"},"build/build-ss58-registry":{"id":"build/build-ss58-registry","title":"SS58 Registry","description":"Information about SS58 encoding.","sidebar":"docs"},"build/build-storage":{"id":"build/build-storage","title":"Decentralized Storage","description":"Information about building with decentralized storage.","sidebar":"docs"},"build/build-substrate":{"id":"build/build-substrate","title":"Substrate Connect","description":"Information about Substrate Connect.","sidebar":"docs"},"build/build-tools-index":{"id":"build/build-tools-index","title":"Tool Index","description":"Reference point for a list of tools to support your development.","sidebar":"docs"},"build/build-transaction-construction":{"id":"build/build-transaction-construction","title":"Transaction Construction and Signing","description":"Information about how transactions are constructed on Polkadot.","sidebar":"docs"},"general/ambassadors":{"id":"general/ambassadors","title":"Polkadot Ambassador Programme","description":"The Polkadot\'s Ambassador Program and How you can Participate in It.","sidebar":"docs"},"general/bug-bounty":{"id":"general/bug-bounty","title":"Bug Bounty Programme","description":"An Overview of How you can Help Catch Bugs.","sidebar":"docs"},"general/builders-program":{"id":"general/builders-program","title":"Substrate Builders Programme","description":"The Substrate Builders Program and How it can Support your Substrate Development.","sidebar":"docs"},"general/community":{"id":"general/community","title":"Community","description":"Connect and stay updated with the Polkadot Community.","sidebar":"docs"},"general/contributing":{"id":"general/contributing","title":"Contributing to the Polkadot Wiki","description":"Contribute to the Polkadot Wiki.","sidebar":"docs"},"general/contributors":{"id":"general/contributors","title":"Contributors","description":"Get to know your Wiki-slayers.","sidebar":"docs"},"general/dev-heroes":{"id":"general/dev-heroes","title":"Developer Heroes Programme","description":"More Power to Polkadot\'s Developers.","sidebar":"docs"},"general/doc-thousand-contributors":{"id":"general/doc-thousand-contributors","title":"Thousand Contributors Programme","description":"The Thousand Contributors Program and How it can Support your Contributions.","sidebar":"docs"},"general/doc-thousand-validators":{"id":"general/doc-thousand-validators","title":"Thousand Validators Programme","description":"The Thousand Validators Program and How it can Support your Validator Endeavors.","sidebar":"docs"},"general/faq":{"id":"general/faq","title":"Frequently Asked Questions (FAQs)","description":"FAQs to Help you Navigate on Polkadot.","sidebar":"docs"},"general/getting-started":{"id":"general/getting-started","title":"Getting Started","description":"Get started with Polkadot and Web3.","sidebar":"docs"},"general/glossary":{"id":"general/glossary","title":"Glossary","description":"Common Terms and Concepts in the Polkadot Ecosystem.","sidebar":"docs"},"general/grants":{"id":"general/grants","title":"Grants","description":"The Grant Programs in the Polkadot Ecosystem.","sidebar":"docs"},"general/how-to-dyor":{"id":"general/how-to-dyor","title":"How to Do Your Own Research (DYOR)","description":"Importance of Doing Your Own Research (DYOR).","sidebar":"docs"},"general/kusama/kusama-adversarial-cheatsheet":{"id":"general/kusama/kusama-adversarial-cheatsheet","title":"Adversarial Cheatsheet","description":"A cheatsheet to help you create chaos."},"general/kusama/kusama-bug-bounty":{"id":"general/kusama/kusama-bug-bounty","title":"Bug Bounty","description":"An overview of how you can help catch bugs."},"general/kusama/kusama-claims":{"id":"general/kusama/kusama-claims","title":"Kusama Claims","description":"Step-by-step guide on how to claim your KSM tokens."},"general/kusama/kusama-coc":{"id":"general/kusama/kusama-coc","title":"Kusama Code of Conduct","description":"Kusama\'s Code of Conduct to sustain chaos."},"general/kusama/kusama-community":{"id":"general/kusama/kusama-community","title":"Kusama Community","description":"Stay in-touch and keep up-to-date by interacting and engaging in the Kusama community."},"general/kusama/kusama-getting-started":{"id":"general/kusama/kusama-getting-started","title":"Interact with Kusama","description":"Reference point for Kusama content."},"general/kusama/kusama-index":{"id":"general/kusama/kusama-index","title":"Kusama","description":"Legacy link to Kusama Wiki document"},"general/kusama/kusama-parameters":{"id":"general/kusama/kusama-parameters","title":"Kusama Parameters","description":"Learn about common Kusama parameters"},"general/kusama/kusama-social-recovery":{"id":"general/kusama/kusama-social-recovery","title":"Social Recovery","description":"Steps on how to perform account recovery on Kusama."},"general/kusama/kusama-timeline":{"id":"general/kusama/kusama-timeline","title":"Kusama Timeline","description":"Stay up-to-date with the latest action on Kusama."},"general/ledger":{"id":"general/ledger","title":"Using the Polkadot & Kusama Ledger Applications","description":"Use the Polkadot Ledger Application.","sidebar":"docs"},"general/metadata":{"id":"general/metadata","title":"Metadata Explorer","description":"Visualize Metadata and related Documentation.","sidebar":"docs"},"general/polkadot-direction":{"id":"general/polkadot-direction","title":"Polkadot Direction","description":"Polkadot as a Decentralized and Secure Ubiquitous Computer.","sidebar":"docs"},"general/polkadot-v1":{"id":"general/polkadot-v1","title":"Polkadot 1.0","description":"Polkadot\'s 1.0, Blockspace, Decentralization and Resilience.","sidebar":"docs"},"general/polkadot-vault":{"id":"general/polkadot-vault","title":"Polkadot Vault (formerly Parity Signer)","description":"Your old Smartphone as an Air-gapped Wallet.","sidebar":"docs"},"general/polkadotjs":{"id":"general/polkadotjs","title":"Polkadot-JS","description":"The Polkadot-JS Tool Collection.","sidebar":"docs"},"general/polkadotjs-ui":{"id":"general/polkadotjs-ui","title":"Polkadot-JS UI (Wallet)","description":"A Wallet for Power-users and Developers.","sidebar":"docs"},"general/research":{"id":"general/research","title":"Research Pages","description":"Latest Research Developments on Polkadot.","sidebar":"docs"},"general/scams":{"id":"general/scams","title":"How to Protect Yourself from Scams","description":"How to Protect yourself against Scams.","sidebar":"docs"},"general/staking-dashboard":{"id":"general/staking-dashboard","title":"Polkadot Staking Dashboard","description":"Everything about the Polkadot Staking Dashboard.","sidebar":"docs"},"general/start-building":{"id":"general/start-building","title":"Build on Polkadot","description":"Start Building with the Polkadot SDK.","sidebar":"docs"},"general/wallets-and-extensions":{"id":"general/wallets-and-extensions","title":"Wallets and Extensions","description":"An Overview of Wallets and Browser Extensions in the Polkadot Ecosystem.","sidebar":"docs"},"general/web3-and-polkadot":{"id":"general/web3-and-polkadot","title":"Web3 and Polkadot","description":"Introduction to Web3 and Polkadot\'s Role in shaping the Web3 Vision.","sidebar":"docs"},"learn/learn-account-abstraction":{"id":"learn/learn-account-abstraction","title":"Polkadot\'s Account Abstraction","description":"Polkadot\'s Native Account Abstraction.","sidebar":"docs"},"learn/learn-account-advanced":{"id":"learn/learn-account-advanced","title":"Polkadot Accounts In-Depth","description":"Advanced Concepts about Polkadot\'s Accounts.","sidebar":"docs"},"learn/learn-account-generation":{"id":"learn/learn-account-generation","title":"Account Generation","description":"Generate a Polkadot Basic Account.","sidebar":"docs"},"learn/learn-account-multisig":{"id":"learn/learn-account-multisig","title":"Multi-Signature Accounts","description":"Multi-signature Accounts on Polkadot.","sidebar":"docs"},"learn/learn-accounts":{"id":"learn/learn-accounts","title":"Polkadot Accounts","description":"Polkadot Accounts, Account Identity, and Account Reaping.","sidebar":"docs"},"learn/learn-architecture":{"id":"learn/learn-architecture","title":"Architecture","description":"Key Components to Polkadot\'s Architecture.","sidebar":"docs"},"learn/learn-assets":{"id":"learn/learn-assets","title":"Asset Hub","description":"Fungible Tokens and NFTs on Polkadot.","sidebar":"docs"},"learn/learn-async-backing":{"id":"learn/learn-async-backing","title":"Asynchronous Backing","description":"A brief overview of asynchronous backing, and how it affects Polkadot\'s scalability.","sidebar":"docs"},"learn/learn-auction":{"id":"learn/learn-auction","title":"Parachain Slot Auctions","description":"Polkadot\'s Parachain Slot Auction Mechanism.","sidebar":"docs"},"learn/learn-balance-transfers":{"id":"learn/learn-balance-transfers","title":"Balance Transfers","description":"Perform Balance Transfers between Accounts.","sidebar":"docs"},"learn/learn-bridges":{"id":"learn/learn-bridges","title":"Bridges","description":"Bridges and Examples of Common Bridges.","sidebar":"docs"},"learn/learn-collator":{"id":"learn/learn-collator","title":"Collator","description":"Role of Collators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-comparisons":{"id":"learn/learn-comparisons","title":"Polkadot Comparisons","description":"Comparison between Polkadot and ETH 1.0 and BSC.","sidebar":"docs"},"learn/learn-comparisons-avalanche":{"id":"learn/learn-comparisons-avalanche","title":"Polkadot vs. Avalanche","description":"Comparison between Polkadot and Avalanche.","sidebar":"docs"},"learn/learn-comparisons-cosmos":{"id":"learn/learn-comparisons-cosmos","title":"Polkadot vs. Cosmos","description":"Comparison between Polkadot and Cosmos.","sidebar":"docs"},"learn/learn-comparisons-ethereum-2":{"id":"learn/learn-comparisons-ethereum-2","title":"Polkadot vs. Ethereum","description":"Comparison between Polkadot and Ethereum.","sidebar":"docs"},"learn/learn-comparisons-kusama":{"id":"learn/learn-comparisons-kusama","title":"Polkadot vs. Kusama","description":"Comparing the cousins.","sidebar":"docs"},"learn/learn-comparisons-rollups":{"id":"learn/learn-comparisons-rollups","title":"Layer Two and Rollups","description":"Comparison between various Rollup and L2 Protocols.","sidebar":"docs"},"learn/learn-consensus":{"id":"learn/learn-consensus","title":"Polkadot Consensus","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-controller":{"id":"learn/learn-controller","title":"Controller Accounts","description":"Controller Accounts used in Staking.","sidebar":"docs"},"learn/learn-crowdloans":{"id":"learn/learn-crowdloans","title":"Parachain Crowdloans","description":"Polkadot\'s Crowdloans and How to Participate.","sidebar":"docs"},"learn/learn-cryptography":{"id":"learn/learn-cryptography","title":"Cryptography on Polkadot","description":"Cryptographic Functions used in Polkadot.","sidebar":"docs"},"learn/learn-DOT":{"id":"learn/learn-DOT","title":"DOT","description":"Tokenomics of Polkadot\'s Native Token DOT.","sidebar":"docs"},"learn/learn-extrinsics":{"id":"learn/learn-extrinsics","title":"Extrinsics (a.k.a. Types of Transactions)","description":"Types of Transactions on Polkadot.","sidebar":"docs"},"learn/learn-governance":{"id":"learn/learn-governance","title":"Governance V1","description":"Polkadot\'s First Governance Model.","sidebar":"docs"},"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.","sidebar":"docs"},"learn/learn-guides-assets-ledger":{"id":"learn/learn-guides-assets-ledger","title":"Using the Asset Hub Ledger App","description":"Advanced How-to Guides about Ledger and the Asset Hub.","sidebar":"docs"},"learn/learn-guides-bounties":{"id":"learn/learn-guides-bounties","title":"How-to Guides for Bounties","description":"Advanced How-to Guides for Bounties","sidebar":"docs"},"learn/learn-guides-identity":{"id":"learn/learn-guides-identity","title":"Identity How-to Guides","description":"Advanced How-to Guides about Identity - Registrars and Sub-Identity.","sidebar":"docs"},"learn/learn-guides-polkadot-opengov":{"id":"learn/learn-guides-polkadot-opengov","title":"Polkadot OpenGov How-to Guides","description":"Advanced How-to Guides about Polkadot OpenGov.","sidebar":"docs"},"learn/learn-guides-staking":{"id":"learn/learn-guides-staking","title":"How-to Guides for Nominators","description":"Advanced How-to Guides for Nominators.","sidebar":"docs"},"learn/learn-guides-staking-pools":{"id":"learn/learn-guides-staking-pools","title":"Nomination Pools How-to Guides","description":"Advanced How-to Guides about Nomination Pools.","sidebar":"docs"},"learn/learn-guides-treasury":{"id":"learn/learn-guides-treasury","title":"Polkadot Treasury How-to Guides","description":"Advanced How-to Guides about requesting funds from the Polkadot Treasury.","sidebar":"docs"},"learn/learn-guides-vault":{"id":"learn/learn-guides-vault","title":"Vault How-to Guides","description":"Advanced How-to Guides about Polkadot Vault.","sidebar":"docs"},"learn/learn-identity":{"id":"learn/learn-identity","title":"Account Identity","description":"On-chain Identity, Judgements and Registrars.","sidebar":"docs"},"learn/learn-implementations":{"id":"learn/learn-implementations","title":"Polkadot Implementations","description":"Learn about the different Polkadot implementations."},"learn/learn-inflation":{"id":"learn/learn-inflation","title":"Token Inflation","description":"Explanation of Token\'s Inflation in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-launch":{"id":"learn/learn-launch","title":"Polkadot Launch Phases","description":"Polkadot\'s Launch Process and its Individual Phases.","sidebar":"docs"},"learn/learn-nft":{"id":"learn/learn-nft","title":"NFTs","description":"The NFT Landscape of the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-pallets":{"id":"learn/learn-nft-pallets","title":"NFT Pallets","description":"Functionalities of the NFT Pallets in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nft-projects":{"id":"learn/learn-nft-projects","title":"NFT projects on Polkadot and Kusama","description":"NFT Projects in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-nomination-pools":{"id":"learn/learn-nomination-pools","title":"Nomination Pools","description":"Staking through Polkadot\'s Nomination Pools.","sidebar":"docs"},"learn/learn-nominator":{"id":"learn/learn-nominator","title":"Nominator","description":"Role of Nominators in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-parachains":{"id":"learn/learn-parachains","title":"Parachains","description":"An Introduction to Polkadot\'s Parachains.","sidebar":"docs"},"learn/learn-parachains-faq":{"id":"learn/learn-parachains-faq","title":"Parachains FAQ","description":"Parachains FAQ.","sidebar":"docs"},"learn/learn-parachains-protocol":{"id":"learn/learn-parachains-protocol","title":"Parachains\' Protocol Overview","description":"Actors and Protocols involved in Polkadot and its Parachains\' Block Finality.","sidebar":"docs"},"learn/learn-parathreads":{"id":"learn/learn-parathreads","title":"Parathreads","description":"An Introductory Guide to Parathreads.","sidebar":"docs"},"learn/learn-phragmen":{"id":"learn/learn-phragmen","title":"NPoS Election Algorithms","description":"The Election Methods used in Polkadot\'s NPoS Mechanism.","sidebar":"docs"},"learn/learn-polkadot-host":{"id":"learn/learn-polkadot-host","title":"Polkadot Host (PH)","description":"The Polkadot Host and its Components.","sidebar":"docs"},"learn/learn-polkadot-opengov":{"id":"learn/learn-polkadot-opengov","title":"Polkadot OpenGov","description":"Polkadot\u2019s Latest Model for Decentralized Governance.","sidebar":"docs"},"learn/learn-polkadot-opengov-treasury":{"id":"learn/learn-polkadot-opengov-treasury","title":"Treasury","description":"Polkadot\'s On-chain Treasury.","sidebar":"docs"},"learn/learn-proxies":{"id":"learn/learn-proxies","title":"Proxy Accounts","description":"Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-proxies-pure":{"id":"learn/learn-proxies-pure","title":"Pure Proxy Accounts","description":"Pure Proxy Accounts on Polkadot.","sidebar":"docs"},"learn/learn-redenomination":{"id":"learn/learn-redenomination","title":"Redenomination of DOT","description":"Everything about the DOT Token Redenomination.","sidebar":"docs"},"learn/learn-runtime-upgrades":{"id":"learn/learn-runtime-upgrades","title":"Runtime Upgrades","description":"Forkless Runtime Upgrades on Polkadot.","sidebar":"docs"},"learn/learn-sassafras":{"id":"learn/learn-sassafras","title":"Polkadot Block Production: SASSAFRAS","description":"The Consensus Mechanism of Polkadot.","sidebar":"docs"},"learn/learn-spree":{"id":"learn/learn-spree","title":"SPREE","description":"Fundamentals of SPREE.","sidebar":"docs"},"learn/learn-staking":{"id":"learn/learn-staking","title":"Introduction to Staking","description":"Overview of Staking and NPoS on Polkadot.","sidebar":"docs"},"learn/learn-staking-advanced":{"id":"learn/learn-staking-advanced","title":"Advanced Staking Concepts","description":"Advanced Concepts about Staking on Polkadot.","sidebar":"docs"},"learn/learn-staking-apps":{"id":"learn/learn-staking-apps","title":"Polkadot Staking Apps","description":"Staking Apps in the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-system-chains":{"id":"learn/learn-system-chains","title":"System Parachains","description":"System Parachains currently deployed on Polkadot.","sidebar":"docs"},"learn/learn-teleport":{"id":"learn/learn-teleport","title":"Teleporting Assets","description":"Teleport Assets between Parachains and Relay Chain.","sidebar":"docs"},"learn/learn-transaction-fees":{"id":"learn/learn-transaction-fees","title":"Transaction Fees","description":"How Transaction Fees are Calculated and Handled.","sidebar":"docs"},"learn/learn-treasury":{"id":"learn/learn-treasury","title":"Governance v1 Treasury","description":"The Polkadot\'s On-chain Treasury during Gov1.","sidebar":"docs"},"learn/learn-validator":{"id":"learn/learn-validator","title":"Validator","description":"Role of Validators within the Polkadot Ecosystem.","sidebar":"docs"},"learn/learn-video-tutorials":{"id":"learn/learn-video-tutorials","title":"Videos about Polkadot","description":"Videos about Polkadot and Related Topics.","sidebar":"docs"},"learn/learn-wasm":{"id":"learn/learn-wasm","title":"WebAssembly (Wasm)","description":"WASM and its Role in Polkadot\'s Runtime.","sidebar":"docs"},"learn/learn-xcm":{"id":"learn/learn-xcm","title":"Introduction to Cross-Consensus Message Format (XCM)","description":"XCM, The Messaging Format at the Forefront of Interoperability.","sidebar":"docs"},"learn/learn-xcm-instructions":{"id":"learn/learn-xcm-instructions","title":"XCM Instructions & Register Specification","description":"Specification for Instructions and Registers for the XCM Format.","sidebar":"docs"},"learn/learn-xcm-pallet":{"id":"learn/learn-xcm-pallet","title":"XCM FRAME Pallet Overview","description":"Mechanics of the XCM Pallet and its role in Polkadot\'s Ecosystem.","sidebar":"docs"},"learn/learn-xcm-transport":{"id":"learn/learn-xcm-transport","title":"XCM Transport Methods (XCMP, HRMP, VMP)","description":"Methods to send XCM Messages across Networks.","sidebar":"docs"},"learn/learn-xcm-usecases":{"id":"learn/learn-xcm-usecases","title":"XCM Use-cases & Examples","description":"Cross-consensus Interactions and the XCM Format.","sidebar":"docs"},"learn/learn-xcvm":{"id":"learn/learn-xcvm","title":"XCM Virtual Machine (XCVM) & XCM Executor","description":"Design of the XCM Executor and Mechanics of the XCM Virtual Machine.","sidebar":"docs"},"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive":{"id":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive","title":"Executor Configuration","description":"Deep Dive into the Configuration of the XCM-Executor.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees","title":"Weight and Fees","description":"Weight and Fees in XCM.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset","title":"MultiAsset","description":"The MultiAsset Datatype.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary","title":"Fundamentals","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm":{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm","title":"XCVM","description":"Deep Dive into XCVM.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example","title":"Example","description":"A MultiLocation Example.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions","title":"Junction(s)","description":"The Junction Type in a MultiLocation Struct.","sidebar":"docs"},"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary":{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary","title":"MultiLocation","description":"Learn about XCM fundamentals.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-assets":{"id":"learn/xcm/journey/learn-xcm-docs-journey-assets","title":"Trap and Claim Assets","description":"Instructions to Trap and Claim Assets.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-channels":{"id":"learn/xcm/journey/learn-xcm-docs-journey-channels","title":"Channels and Bridges","description":"Establishment of HRMP Channels between Parachains.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-expectations":{"id":"learn/xcm/journey/learn-xcm-docs-journey-expectations","title":"Expectations","description":"Expect Instructions to Check if a Condition is Valid.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-fees":{"id":"learn/xcm/journey/learn-xcm-docs-journey-fees","title":"Fee Handling","description":"How Fees for XCM Transfers are Handled.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-holding":{"id":"learn/xcm/journey/learn-xcm-docs-journey-holding","title":"More Holding Modifiers","description":"More Instructions to Alter the Holding Register.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-origin":{"id":"learn/xcm/journey/learn-xcm-docs-journey-origin","title":"Origin Manipulation","description":"Manipulating the Origin of XCM.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-queries":{"id":"learn/xcm/journey/learn-xcm-docs-journey-queries","title":"Queries","description":"Query Information from another Consensus System.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-register":{"id":"learn/xcm/journey/learn-xcm-docs-journey-register","title":"Register Modifiers","description":"More Instructions to Change the XCVM Registers.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-summary":{"id":"learn/xcm/journey/learn-xcm-docs-journey-summary","title":"A Journey through XCM","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-transact":{"id":"learn/xcm/journey/learn-xcm-docs-journey-transact","title":"Transact","description":"The Transact Instruction to Execute XCM Calls.","sidebar":"docs"},"learn/xcm/journey/learn-xcm-docs-journey-version":{"id":"learn/xcm/journey/learn-xcm-docs-journey-version","title":"Version Subscription","description":"Get Notified about XCM Version Updates.","sidebar":"docs"},"learn/xcm/journey/locks/learn-xcm-docs-journey-locks":{"id":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks","title":"Locks","description":"Restrict Transfer or Withdrawal of Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve","title":"Reserve-backed Transfers","description":"Reserve-backed Transfers: Third-party Reserve to store Assets.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary","title":"Transfers","description":"Summary about XCM Transfers.","sidebar":"docs"},"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport":{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport","title":"Asset Teleportation","description":"Teleportation: Sending Assets Across Chains.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-intro":{"id":"learn/xcm/learn-xcm-docs-intro","title":"XCM: Cross-Consensus Messaging","description":"Introduction to the XCM Documentation.","sidebar":"docs"},"learn/xcm/learn-xcm-docs-testing":{"id":"learn/xcm/learn-xcm-docs-testing","title":"Testing","description":"Testing XCM-powered Solutions.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-architecture":{"id":"learn/xcm/overview/learn-xcm-docs-overview-architecture","title":"The XCM Architecture","description":"The XCM Architecture.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-format":{"id":"learn/xcm/overview/learn-xcm-docs-overview-format","title":"XCM is a Format, not a Protocol","description":"XCM is a Format, not a Protocol.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-intro":{"id":"learn/xcm/overview/learn-xcm-docs-overview-intro","title":"Introduction","description":"An Introduction to XCM.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-summary":{"id":"learn/xcm/overview/learn-xcm-docs-overview-summary","title":"XCM: Cross-Consensus Messaging","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/overview/learn-xcm-docs-overview-xcvm":{"id":"learn/xcm/overview/learn-xcm-docs-overview-xcvm","title":"The XCVM","description":"The Cross-Consensus Virtual Machine.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look","title":"First Look at an XCM","description":"First Look at an XCM.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator","title":"XCM Simulator","description":"Test XCM using a Simulated Environment.","sidebar":"docs"},"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary":{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary","title":"Quickstart","description":"Summary of the Chapter.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-glossary":{"id":"learn/xcm/reference/learn-xcm-docs-reference-glossary","title":"Glossary","description":"Glossary.","sidebar":"docs"},"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers":{"id":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers","title":"All XCVM Registers","description":"All XCVM Registers.","sidebar":"docs"},"maintain/doc-maintain-guides-validator-community":{"id":"maintain/doc-maintain-guides-validator-community","title":"Validator Community Overview","description":"An extensive guide to help you start and build a validator community.","sidebar":"docs"},"maintain/kusama/maintain-guides-how-to-nominate-kusama":{"id":"maintain/kusama/maintain-guides-how-to-nominate-kusama","title":"Become a Nominator on Kusama","description":"Steps on how to nominate on Kusama."},"maintain/kusama/maintain-guides-how-to-validate-kusama":{"id":"maintain/kusama/maintain-guides-how-to-validate-kusama","title":"Run a Validator (Kusama)","description":"The fundamentals for running a Kusama validator."},"maintain/kusama/maintain-guides-society-kusama":{"id":"maintain/kusama/maintain-guides-society-kusama","title":"Kappa Sigma Mu","description":"Learn about the Kappa Sigma Mu society and join as a member."},"maintain/maintain-bootnode":{"id":"maintain/maintain-bootnode","title":"Set up a Boot Node","description":"Steps on setting up a boot node.","sidebar":"docs"},"maintain/maintain-endpoints":{"id":"maintain/maintain-endpoints","title":"Node Endpoints","description":"List of node endpoints and examples of use.","sidebar":"docs"},"maintain/maintain-errors":{"id":"maintain/maintain-errors","title":"Errors and How to Resolve Them","description":"Common errors you might encounter and how they can be resolved.","sidebar":"docs"},"maintain/maintain-guides-avoid-slashing":{"id":"maintain/maintain-guides-avoid-slashing","title":"Validator Best Practices","description":"Best practices to avoid slashing.","sidebar":"docs"},"maintain/maintain-guides-democracy":{"id":"maintain/maintain-guides-democracy","title":"Participate in Democracy","description":"Steps on how to participate in democracy.","sidebar":"docs"},"maintain/maintain-guides-how-to-chill":{"id":"maintain/maintain-guides-how-to-chill","title":"How to Chill","description":"Steps on chilling as a network participant.","sidebar":"docs"},"maintain/maintain-guides-how-to-join-council":{"id":"maintain/maintain-guides-how-to-join-council","title":"Join the Council","description":"Steps on how to join the official on-chain council.","sidebar":"docs"},"maintain/maintain-guides-how-to-monitor-your-node":{"id":"maintain/maintain-guides-how-to-monitor-your-node","title":"Monitor your node","description":"This guide will walk you through how to set up Prometheus with","sidebar":"docs"},"maintain/maintain-guides-how-to-nominate-polkadot":{"id":"maintain/maintain-guides-how-to-nominate-polkadot","title":"Become a Nominator on Polkadot","description":"Steps on how to nominate on Polkadot.","sidebar":"docs"},"maintain/maintain-guides-how-to-stop-validating":{"id":"maintain/maintain-guides-how-to-stop-validating","title":"How to Stop Validating","description":"Steps on how to stop validating.","sidebar":"docs"},"maintain/maintain-guides-how-to-systemd":{"id":"maintain/maintain-guides-how-to-systemd","title":"Using systemd for a Validator Node","description":"Using a service manager for your validator node.","sidebar":"docs"},"maintain/maintain-guides-how-to-upgrade":{"id":"maintain/maintain-guides-how-to-upgrade","title":"How to Upgrade Your Validator","description":"Validators perform critical functions for the network, and as such, have strict uptime requirements.","sidebar":"docs"},"maintain/maintain-guides-how-to-validate-polkadot":{"id":"maintain/maintain-guides-how-to-validate-polkadot","title":"Run a Validator (Polkadot)","description":"The fundamentals for running a Polkadot validator.","sidebar":"docs"},"maintain/maintain-guides-how-to-vote-councillor":{"id":"maintain/maintain-guides-how-to-vote-councillor","title":"Voting for Councillors","description":"Steps on how to vote for councillors.","sidebar":"docs"},"maintain/maintain-guides-polkadot-opengov":{"id":"maintain/maintain-guides-polkadot-opengov","title":"Participate in Polkadot OpenGov","description":"Steps on how to participate in OpenGov.","sidebar":"docs"},"maintain/maintain-guides-secure-validator":{"id":"maintain/maintain-guides-secure-validator","title":"Secure Validator","description":"Tips for running a secure validator.","sidebar":"docs"},"maintain/maintain-guides-validator-payout":{"id":"maintain/maintain-guides-validator-payout","title":"Validator Payout Overview","description":"How validator payout works on the network and what you should expect.","sidebar":"docs"},"maintain/maintain-index":{"id":"maintain/maintain-index","title":"Network Maintainers","description":"Reference point for network maintenance guides.","sidebar":"docs"},"maintain/maintain-networks":{"id":"maintain/maintain-networks","title":"Networks","description":"Information about the different networks of the Polkadot ecosystem.","sidebar":"docs"},"maintain/maintain-polkadot-parameters":{"id":"maintain/maintain-polkadot-parameters","title":"Polkadot Parameters","description":"A description about fundamental Polkadot parameters.","sidebar":"docs"},"maintain/maintain-rpc":{"id":"maintain/maintain-rpc","title":"Set up a RPC node","description":"Steps on setting up a RPC node.","sidebar":"docs"},"maintain/maintain-sync":{"id":"maintain/maintain-sync","title":"Set up a Full Node","description":"Steps on how to set up a full node.","sidebar":"docs"},"maintain/maintain-wss":{"id":"maintain/maintain-wss","title":"Secure the WebSocket","description":"Steps on setting up a secure socket for remote connections.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/c2c6a3a6.3547dfc9.js b/assets/js/c2c6a3a6.3547dfc9.js deleted file mode 100644 index 881a107520dd..000000000000 --- a/assets/js/c2c6a3a6.3547dfc9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2712],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>u});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 i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},h=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={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,r=e.originalType,l=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),c=p(a),d=o,u=c["".concat(l,".").concat(d)]||c[d]||m[d]||r;return a?n.createElement(u,i(i({ref:t},h),{},{components:a})):n.createElement(u,i({ref:t},h))}));function u(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),i=["components"],s={id:"learn-nft-projects",title:"NFT projects on Polkadot and Kusama",sidebar_label:"NFT Projects",description:"NFT Projects in the Polkadot Ecosystem.",keywords:["NFT","non-fungible token","NFT 2.0"],slug:"../learn-nft-projects"},l=void 0,p={unversionedId:"learn/learn-nft-projects",id:"learn/learn-nft-projects",title:"NFT projects on Polkadot and Kusama",description:"NFT Projects in the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-nft-projects.md",sourceDirName:"learn",slug:"/learn-nft-projects",permalink:"/docs/learn-nft-projects",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-nft-projects.md",tags:[],version:"current",lastUpdatedBy:"Radha",lastUpdatedAt:1695304296,formattedLastUpdatedAt:"Sep 21, 2023",frontMatter:{id:"learn-nft-projects",title:"NFT projects on Polkadot and Kusama",sidebar_label:"NFT Projects",description:"NFT Projects in the Polkadot Ecosystem.",keywords:["NFT","non-fungible token","NFT 2.0"],slug:"../learn-nft-projects"},sidebar:"docs",previous:{title:"Introduction to NFTs",permalink:"/docs/learn-nft"},next:{title:"Components",permalink:"/docs/learn-components-index"}},h={},c=[{value:"List of NFT Projects",id:"list-of-nft-projects",level:2},{value:"Astar",id:"astar",level:2},{value:"Basilisk",id:"basilisk",level:2},{value:"Efinity",id:"efinity",level:2},{value:"KodaDot",id:"kodadot",level:2},{value:"The Team Behind KodaDot",id:"the-team-behind-kodadot",level:3},{value:"Ecosystem Tools by KodaDot",id:"ecosystem-tools-by-kodadot",level:3},{value:"Moonbeam",id:"moonbeam",level:2},{value:"RMRK",id:"rmrk",level:2},{value:"NFT Legos",id:"nft-legos",level:3},{value:"NFT from Kanaria",id:"nft-from-kanaria",level:3},{value:"Asset Hub",id:"asset-hub",level:2},{value:"Unique Network",id:"unique-network",level:2}],m={toc:c},d="wrapper";function u(e){var t=e.components,s=(0,o.Z)(e,i);return(0,r.kt)(d,(0,n.Z)({},m,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"list-of-nft-projects"},"List of NFT Projects"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#Astar"},"Astar")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#basilisk"},"Basilisk")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#efinity"},"Efinity")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#kodadot"},"Kodadot")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#moonbeam"},"Moonbeam")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#rmrk"},"RMRK")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#asset-hub"},"Asset Hub")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#unique-network"},"Unique"))),(0,r.kt)("h2",{id:"astar"},"Astar"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://astar.network"},"Astar Network")," and its sister network\n",(0,r.kt)("a",{parentName:"p",href:"https://shiden.astar.network"},"Shiden Network"),' are the smart contract infrastructure in the Polkadot\nEcosystem. Astar Ecosystem ("Astar") supports NFTs developed with EVM smart contracts and WASM smart\ncontracts.'),(0,r.kt)("p",null,"Astar has all toolings available that every EVM NFT developer knows. The availability of those\ntoolings makes the onboarding to Astar networks very attractive to any developer looking to explore\nthe Polkadot Ecosystem. Astar has an active community of artists and NFT enthusiasts. Besides\nsupporting all EVM toolings, Astar also bootstrapped the WASM smart contract environment for NFT\ndevelopers writing smart contracts with ",(0,r.kt)("a",{parentName:"p",href:"https://use.ink"},"ink!")," based on\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/w3f/PSPs/blob/master/PSPs/psp-34.md"},"PSP34")," (Polkadot Standards Proposals)."),(0,r.kt)("p",null,"The main advantage of having a multi-virtual machine environment for NFT developers is that it will\ngive more possibilities to the builders for the use case they are developing. With the support of\nWASM smart contracts, developers can develop solutions like ",(0,r.kt)("a",{parentName:"p",href:"./learn-nft#rmrk"},"RMRK")," with smart\ncontracts."),(0,r.kt)("h2",{id:"basilisk"},"Basilisk"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://bsx.fi/"},"Basilisk")," is a Kusama parachain that provides liquidity for the ecosystem. It also\nhas a full-featured NFT platform based on the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/tree/master/frame/uniques"},"Uniques pallet"),". One of the key\nfeatures of Basilisk is that it allows minting NFTs with a royalty fee. This royalty fee is\ndistributed to the original creator of the NFT via the runtime pallet. Additionally\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/galacticcouncil/Basilisk-node/tree/master/pallets/marketplace"},"Basilisk offers a feature"),"\nthat allows creating a buy order for a specific NFT."),(0,r.kt)("p",null,"These NFTs can be viewed and interacted instantly on ",(0,r.kt)("a",{parentName:"p",href:"https://kodadot.xyz"},"KodaDot"),"."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"nft-basilisk",src:a(70964).Z,width:"3358",height:"1564"})),(0,r.kt)("h2",{id:"efinity"},"Efinity"),(0,r.kt)("p",null,"Spearheaded by ",(0,r.kt)("a",{parentName:"p",href:"https://enjin.io"},"Enjin"),", the authors of Ethereum's ERC1155 standard and makers of\nthe Enjin wallet and Unity plugin, which allows easy implementation of NFTs into 3D games, Efinity\nis an NFT bridging chain coming to Kusama and Polkadot in 2022."),(0,r.kt)("p",null,"They plan to build a ",(0,r.kt)("em",{parentName:"p"},"paratoken")," which would be a standard for token migration across different\nparachains in the Polkadot ecosystem, but also into and out of Ethereum and other EVM systems."),(0,r.kt)("h2",{id:"kodadot"},(0,r.kt)("a",{parentName:"h2",href:"https://kodadot.xyz"},"KodaDot")),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://kodadot.xyz"},"KodaDot")," is an open-source NFT marketplace that operates on the Dotsama\n(Kusama/Polkadot) network, striving to aggregate various NFT standards (Kusama, RMRK, Asset Hub,\nBasilisk, etc.) in the Dotsama ecosystem, enhancing user experience by abstracting these standards."),(0,r.kt)("p",null,"KodaDot's strength lies in its commitment to open-source collaboration. It has transformed into a\ncollaborative hub where creators, developers, and community members work collectively for decision\nmaking, amassing an extensive network of over\n",(0,r.kt)("a",{parentName:"p",href:"https://hello.kodadot.xyz/about-us/who-are-we/achievements"},"90 open-source contributors"),". This\nrobust collaboration has earned KodaDot the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/topics/polkadot"},"number one rank as a dapp in the Polkadot ecosystem on Github"),"."),(0,r.kt)("p",null,"See below a video tutorial about how to mint your NFT on ",(0,r.kt)("a",{parentName:"p",href:"#asset-hub"},"the Polkadot Asset Hub")," using\nKodaDot."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=SKdx4pTgL04"},(0,r.kt)("img",{parentName:"a",src:"https://img.youtube.com/vi/SKdx4pTgL04/0.jpg",alt:"KodaDot Tutorial on Minting NFTs"}))),(0,r.kt)("p",null,"For more information about minting using KodaDot see\n",(0,r.kt)("a",{parentName:"p",href:"https://hello.kodadot.xyz/tutorial/minting/how-to-mint-nfts-on-polkadot-asset-hub-using-kodadot"},"this step-by-step tutorial"),"."),(0,r.kt)("h3",{id:"the-team-behind-kodadot"},"The Team Behind KodaDot"),(0,r.kt)("p",null,"KodaDot began as the first\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/motion/256"},"unofficial explorer for RMRKv0.0.1"),"\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/rmrk-team/rmrk-spec/issues/10"},"contributing to RMRK protocol"),". It later\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/motion/349"},"received Kusama Treasury funding"),", which propelled the\nteam to create the\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/motion/349"},"best end-user experience on the Asset hub"),"."),(0,r.kt)("p",null,"In the summer of 2022, KodaDot won the first prize at the\n",(0,r.kt)("a",{parentName:"p",href:"https://devpost.com/software/kodadot-moonsama"},"Polkadot North American event")," for implementing\nMoonBeam and MoonRiver NFT EVM smart contracts and enabling read-only access to existing components\nfor seamless end-user interaction."),(0,r.kt)("p",null,"The team successfully\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/kodadot/nft-gallery/issues/660"},"launched with Basilisk NFT Marketplace pallet in Fall 2022"),",\nwhere an increasing number of artist collections are emerging, providing artists the opportunity to\nreceive offers on unlisted NFTs and earn on-chain royalties."),(0,r.kt)("p",null,"KodaDot's upcoming integrations are based on\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/w3f/PSPs/blob/master/PSPs/psp-34.md"},"PSP-34"),", leveraging\n",(0,r.kt)("a",{parentName:"p",href:"https://use.ink/"},"smart contracts written with ink!"),"."),(0,r.kt)("h3",{id:"ecosystem-tools-by-kodadot"},"Ecosystem Tools by KodaDot"),(0,r.kt)("p",null,"KodaDot has enriched the Polkadot ecosystem by\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/kodadot/uniquery"},"offering a comprehensive API interface for builders"),", based on\nthe SubSquid indexer. This platform also presents searchable items and collections, translating\non-chain transactions into deep insights about collection ownership dynamics for end-users. For more\ninfo about KodaDot check out ",(0,r.kt)("a",{parentName:"p",href:"https://hello.kodadot.xyz/"},"link"),"."),(0,r.kt)("h2",{id:"moonbeam"},"Moonbeam"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://moonbeam.network"},"Moonbeam")," and its Kusama counterpart Moonriver are full EVM deployments\nwith Ethereum RPC endpoints."),(0,r.kt)("p",null,"This means that the entire toolkit offered to other EVM chains (stacks like Hardhat, Remix, Truffle,\nMetamask, etc.) are available to Moonriver / Moonbeam users and developers, giving it a noticeable\nhead start in attracting existing userbases."),(0,r.kt)("p",null,"Several dozen high profile teams are launching their products (or re-launching) on Moonriver /\nMoonbeam, however, it is essential to note that Moonbeam is an EVM chain and will therefore suffer\nfrom the same limitations as any other EVM chain in regards to customization and feature-richness of\nNFTs."),(0,r.kt)("p",null,"A notable advantage, however, is that Moonriver / Moonbeam is still a Substrate chain, meaning\nintegration of custom pallets into the runtime is still possible, making NFT specific optimizations\nat the chain runtime level a reliable way to keep EVM compatibility of tools while at the same time\noptimizing storage and interactions for rich NFTs."),(0,r.kt)("h2",{id:"rmrk"},"RMRK"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://rmrk.app"},"RMRK")," is a set of NFT 2.0 standards developed in three distinct code flavors:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"https://en.bitcoin.it/wiki/Colored_Coins"},'"Colored coins"'),' approach, as on Bitcoin, originally\ndeveloped as a "hack" on the Kusama chain. This is now deprecated, and it is recommended\nimplementers use any of the other options.'),(0,r.kt)("li",{parentName:"ol"},"Solidity contracts, compatible with any EVM blockchain in and outside the Polkadot ecosystem.\nDocumented ",(0,r.kt)("a",{parentName:"li",href:"https://evm.rmrk.app"},"here")),(0,r.kt)("li",{parentName:"ol"},"Rust code (Substrate pallets), compatible with any Substrate chain. Code is available\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/rmrk-team/rmrk-substrate"},"here"),".")),(0,r.kt)("p",null,"Additionally, two more flavors are in development:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"https://astar.network/"},"Astar")," are developing the ink! version of RMRK:\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/rmrk-team/rmrk-ink"},"code here"),"."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"https://www.gear-tech.io/"},"Gear Technologies")," are developing the Gear implementation:\n",(0,r.kt)("a",{parentName:"li",href:"https://wiki.gear-tech.io/docs/examples/rmrk/"},"code and docs here"),".")),(0,r.kt)("p",null,'The RMRK NFT 2.0 standards are a set of "NFT legos", primitives that, when put together, allow a\nbuilder to compose an NFT system of arbitrary complexity without smart contracts.'),(0,r.kt)("h3",{id:"nft-legos"},"NFT Legos"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"NFTs can own other NFTs, NFTs can equip other NFTs for visual change"),(0,r.kt)("li",{parentName:"ol"},"NFTs can have multiple resources (different outputs based on context and resource priority)"),(0,r.kt)("li",{parentName:"ol"},"NFTs can have on-chain emotes (reactions) for price discovery and social mechanics"),(0,r.kt)("li",{parentName:"ol"},"NFTs have conditional rendering (e.g. show Mona Lisa as blushing if she got 50 kissy \ud83d\ude18 emoji)"),(0,r.kt)("li",{parentName:"ol"},"NFTs can be governed by the community via fungible shareholder-tokens (fractionalization of NFTs)")),(0,r.kt)("h3",{id:"nft-from-kanaria"},"NFT from ",(0,r.kt)("a",{parentName:"h3",href:"https://kanaria.rmrk.app"},"Kanaria")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"kanaria.png",src:a(19379).Z,width:"1891",height:"799"})),(0,r.kt)("admonition",{title:"Multi-resource NFTs",type:"note"},(0,r.kt)("p",{parentName:"admonition"},'A multi-resource NFT (gif of statue, and SVG-composable dynamic NFT in one) that can also equip\nother NFTs from within its "inventory".')),(0,r.kt)("p",null,"Two marketplaces for RMRK-based NFTs exist with hundreds of projects already launched:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://singular.rmrk.app"},"Singular"),", the official marketplace")),(0,r.kt)("p",null,"For a complete introduction into RMRK, see ",(0,r.kt)("a",{parentName:"p",href:"https://url.rmrk.app/wasmconf"},"this presentation")," or\nread ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rmrk.app"},"the non-technical docs"),"."),(0,r.kt)("h2",{id:"asset-hub"},"Asset Hub"),(0,r.kt)("p",null,"The Asset Hub is a generic assets parachain which provides functionality for deploying and\ntransferring assets \u2014 both Fungible and Non-Fungible Tokens (NFTs). The Asset Hub currently hosts\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-nft-pallets/#uniques-pallet"},"Uniques pallet")," and the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-nft-pallets#nfts-pallet"},"NFTs pallet")," with NFT 2.0 functionalities."),(0,r.kt)("h2",{id:"unique-network"},"Unique Network"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://unique.network/"},"Unique network"),", an NFT-specific blockchain offering innovations such as\nsponsored transactions, bundling fungible tokens with non-fungibles, and splitting NFTs into\nfungible tokens for partial ownership."),(0,r.kt)("p",null,"Unique Network have launched two NFT projects to date: Substrapunks as part of\n",(0,r.kt)("a",{parentName:"p",href:"https://hackusama.devpost.com/"},"Hackusama"),", and Chelobricks as a promotion during\n",(0,r.kt)("a",{parentName:"p",href:"https://decoded.polkadot.network/"},"Polkadot Decoded"),"."),(0,r.kt)("p",null,"Unique Network focuses on B2B use cases, aiming to be an infrastructure provider for others to build\non, rather than entering the NFT space themselves as an end-product."),(0,r.kt)("p",null,"Unique Network aims to make their marketplace technology open-source and whitelabel-friendly. In\ntheory, it should be trivial to set up a new marketplace for your project using Unique's technology.\nUnique network aims to be a parachain on Polkadot, and Quartz is their Kusama counterpart."))}u.isMDXComponent=!0},19379:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/kanaria-55b0060679c6303db0fc91f5c402ba02.png"},70964:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/nft-basilisk-654977e2e97885e796857fc2e2add909.png"}}]); \ No newline at end of file diff --git a/assets/js/c2c6a3a6.d1a8a082.js b/assets/js/c2c6a3a6.d1a8a082.js new file mode 100644 index 000000000000..f98b7053e7ef --- /dev/null +++ b/assets/js/c2c6a3a6.d1a8a082.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2712],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>u});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 i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},h=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},m="mdxType",c={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,r=e.originalType,l=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),m=p(a),d=o,u=m["".concat(l,".").concat(d)]||m[d]||c[d]||r;return a?n.createElement(u,i(i({ref:t},h),{},{components:a})):n.createElement(u,i({ref:t},h))}));function u(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>p,toc:()=>m});var n=a(87462),o=a(63366),r=(a(67294),a(3905)),i=["components"],s={id:"learn-nft-projects",title:"NFT projects on Polkadot and Kusama",sidebar_label:"NFT Projects",description:"NFT Projects in the Polkadot Ecosystem.",keywords:["NFT","non-fungible token","NFT 2.0"],slug:"../learn-nft-projects"},l=void 0,p={unversionedId:"learn/learn-nft-projects",id:"learn/learn-nft-projects",title:"NFT projects on Polkadot and Kusama",description:"NFT Projects in the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-nft-projects.md",sourceDirName:"learn",slug:"/learn-nft-projects",permalink:"/docs/learn-nft-projects",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-nft-projects.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1698147920,formattedLastUpdatedAt:"Oct 24, 2023",frontMatter:{id:"learn-nft-projects",title:"NFT projects on Polkadot and Kusama",sidebar_label:"NFT Projects",description:"NFT Projects in the Polkadot Ecosystem.",keywords:["NFT","non-fungible token","NFT 2.0"],slug:"../learn-nft-projects"},sidebar:"docs",previous:{title:"Introduction to NFTs",permalink:"/docs/learn-nft"},next:{title:"Components",permalink:"/docs/learn-components-index"}},h={},m=[{value:"List of NFT Projects",id:"list-of-nft-projects",level:2},{value:"Astar",id:"astar",level:2},{value:"Basilisk",id:"basilisk",level:2},{value:"Efinity",id:"efinity",level:2},{value:"KodaDot",id:"kodadot",level:2},{value:"The Team Behind KodaDot",id:"the-team-behind-kodadot",level:3},{value:"Ecosystem Tools by KodaDot",id:"ecosystem-tools-by-kodadot",level:3},{value:"Moonbeam",id:"moonbeam",level:2},{value:"RMRK",id:"rmrk",level:2},{value:"NFT Legos",id:"nft-legos",level:3},{value:"NFT from Kanaria",id:"nft-from-kanaria",level:3},{value:"Asset Hub",id:"asset-hub",level:2},{value:"Unique Network",id:"unique-network",level:2}],c={toc:m},d="wrapper";function u(e){var t=e.components,s=(0,o.Z)(e,i);return(0,r.kt)(d,(0,n.Z)({},c,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"Community Page",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This page is open to contributions from the community. Please follow the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/w3f/polkadot-wiki#contributing-to-documentation"},"Wiki contribution guidelines")," and add your NFT app to this page.")),(0,r.kt)("h2",{id:"list-of-nft-projects"},"List of NFT Projects"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#Astar"},"Astar")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#basilisk"},"Basilisk")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#efinity"},"Efinity")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#kodadot"},"Kodadot")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#moonbeam"},"Moonbeam")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#rmrk"},"RMRK")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#asset-hub"},"Asset Hub")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#unique-network"},"Unique"))),(0,r.kt)("h2",{id:"astar"},"Astar"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://astar.network"},"Astar Network")," and its sister network\n",(0,r.kt)("a",{parentName:"p",href:"https://shiden.astar.network"},"Shiden Network"),' are the smart contract infrastructure in the Polkadot\nEcosystem. Astar Ecosystem ("Astar") supports NFTs developed with EVM smart contracts and WASM smart\ncontracts.'),(0,r.kt)("p",null,"Astar has all toolings available that every EVM NFT developer knows. The availability of those\ntoolings makes the onboarding to Astar networks very attractive to any developer looking to explore\nthe Polkadot Ecosystem. Astar has an active community of artists and NFT enthusiasts. Besides\nsupporting all EVM toolings, Astar also bootstrapped the WASM smart contract environment for NFT\ndevelopers writing smart contracts with ",(0,r.kt)("a",{parentName:"p",href:"https://use.ink"},"ink!")," based on\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/w3f/PSPs/blob/master/PSPs/psp-34.md"},"PSP34")," (Polkadot Standards Proposals)."),(0,r.kt)("p",null,"The main advantage of having a multi-virtual machine environment for NFT developers is that it will\ngive more possibilities to the builders for the use case they are developing. With the support of\nWASM smart contracts, developers can develop solutions like ",(0,r.kt)("a",{parentName:"p",href:"./learn-nft#rmrk"},"RMRK")," with smart\ncontracts."),(0,r.kt)("h2",{id:"basilisk"},"Basilisk"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://bsx.fi/"},"Basilisk")," is a Kusama parachain that provides liquidity for the ecosystem. It also\nhas a full-featured NFT platform based on the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/paritytech/substrate/tree/master/frame/uniques"},"Uniques pallet"),". One of the key\nfeatures of Basilisk is that it allows minting NFTs with a royalty fee. This royalty fee is\ndistributed to the original creator of the NFT via the runtime pallet. Additionally\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/galacticcouncil/Basilisk-node/tree/master/pallets/marketplace"},"Basilisk offers a feature"),"\nthat allows creating a buy order for a specific NFT."),(0,r.kt)("p",null,"These NFTs can be viewed and interacted instantly on ",(0,r.kt)("a",{parentName:"p",href:"https://kodadot.xyz"},"KodaDot"),"."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"nft-basilisk",src:a(70964).Z,width:"3358",height:"1564"})),(0,r.kt)("h2",{id:"efinity"},"Efinity"),(0,r.kt)("p",null,"Spearheaded by ",(0,r.kt)("a",{parentName:"p",href:"https://enjin.io"},"Enjin"),", the authors of Ethereum's ERC1155 standard and makers of\nthe Enjin wallet and Unity plugin, which allows easy implementation of NFTs into 3D games, Efinity\nis an NFT bridging chain coming to Kusama and Polkadot in 2022."),(0,r.kt)("p",null,"They plan to build a ",(0,r.kt)("em",{parentName:"p"},"paratoken")," which would be a standard for token migration across different\nparachains in the Polkadot ecosystem, but also into and out of Ethereum and other EVM systems."),(0,r.kt)("h2",{id:"kodadot"},(0,r.kt)("a",{parentName:"h2",href:"https://kodadot.xyz"},"KodaDot")),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://kodadot.xyz"},"KodaDot")," is an open-source NFT marketplace that operates on the Dotsama\n(Kusama/Polkadot) network, striving to aggregate various NFT standards (Kusama, RMRK, Asset Hub,\nBasilisk, etc.) in the Dotsama ecosystem, enhancing user experience by abstracting these standards."),(0,r.kt)("p",null,"KodaDot's strength lies in its commitment to open-source collaboration. It has transformed into a\ncollaborative hub where creators, developers, and community members work collectively for decision\nmaking, amassing an extensive network of over\n",(0,r.kt)("a",{parentName:"p",href:"https://hello.kodadot.xyz/about-us/who-are-we/achievements"},"90 open-source contributors"),". This\nrobust collaboration has earned KodaDot the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/topics/polkadot"},"number one rank as a dapp in the Polkadot ecosystem on Github"),"."),(0,r.kt)("p",null,"See below a video tutorial about how to mint your NFT on ",(0,r.kt)("a",{parentName:"p",href:"#asset-hub"},"the Polkadot Asset Hub")," using\nKodaDot."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=SKdx4pTgL04"},(0,r.kt)("img",{parentName:"a",src:"https://img.youtube.com/vi/SKdx4pTgL04/0.jpg",alt:"KodaDot Tutorial on Minting NFTs"}))),(0,r.kt)("p",null,"For more information about minting using KodaDot see\n",(0,r.kt)("a",{parentName:"p",href:"https://hello.kodadot.xyz/tutorial/minting/how-to-mint-nfts-on-polkadot-asset-hub-using-kodadot"},"this step-by-step tutorial"),"."),(0,r.kt)("h3",{id:"the-team-behind-kodadot"},"The Team Behind KodaDot"),(0,r.kt)("p",null,"KodaDot began as the first\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/motion/256"},"unofficial explorer for RMRKv0.0.1"),"\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/rmrk-team/rmrk-spec/issues/10"},"contributing to RMRK protocol"),". It later\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/motion/349"},"received Kusama Treasury funding"),", which propelled the\nteam to create the\n",(0,r.kt)("a",{parentName:"p",href:"https://kusama.polkassembly.io/motion/349"},"best end-user experience on the Asset hub"),"."),(0,r.kt)("p",null,"In the summer of 2022, KodaDot won the first prize at the\n",(0,r.kt)("a",{parentName:"p",href:"https://devpost.com/software/kodadot-moonsama"},"Polkadot North American event")," for implementing\nMoonBeam and MoonRiver NFT EVM smart contracts and enabling read-only access to existing components\nfor seamless end-user interaction."),(0,r.kt)("p",null,"The team successfully\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/kodadot/nft-gallery/issues/660"},"launched with Basilisk NFT Marketplace pallet in Fall 2022"),",\nwhere an increasing number of artist collections are emerging, providing artists the opportunity to\nreceive offers on unlisted NFTs and earn on-chain royalties."),(0,r.kt)("p",null,"KodaDot's upcoming integrations are based on\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/w3f/PSPs/blob/master/PSPs/psp-34.md"},"PSP-34"),", leveraging\n",(0,r.kt)("a",{parentName:"p",href:"https://use.ink/"},"smart contracts written with ink!"),"."),(0,r.kt)("h3",{id:"ecosystem-tools-by-kodadot"},"Ecosystem Tools by KodaDot"),(0,r.kt)("p",null,"KodaDot has enriched the Polkadot ecosystem by\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/kodadot/uniquery"},"offering a comprehensive API interface for builders"),", based on\nthe SubSquid indexer. This platform also presents searchable items and collections, translating\non-chain transactions into deep insights about collection ownership dynamics for end-users. For more\ninfo about KodaDot check out ",(0,r.kt)("a",{parentName:"p",href:"https://hello.kodadot.xyz/"},"link"),"."),(0,r.kt)("h2",{id:"moonbeam"},"Moonbeam"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://moonbeam.network"},"Moonbeam")," and its Kusama counterpart Moonriver are full EVM deployments\nwith Ethereum RPC endpoints."),(0,r.kt)("p",null,"This means that the entire toolkit offered to other EVM chains (stacks like Hardhat, Remix, Truffle,\nMetamask, etc.) are available to Moonriver / Moonbeam users and developers, giving it a noticeable\nhead start in attracting existing userbases."),(0,r.kt)("p",null,"Several dozen high profile teams are launching their products (or re-launching) on Moonriver /\nMoonbeam, however, it is essential to note that Moonbeam is an EVM chain and will therefore suffer\nfrom the same limitations as any other EVM chain in regards to customization and feature-richness of\nNFTs."),(0,r.kt)("p",null,"A notable advantage, however, is that Moonriver / Moonbeam is still a Substrate chain, meaning\nintegration of custom pallets into the runtime is still possible, making NFT specific optimizations\nat the chain runtime level a reliable way to keep EVM compatibility of tools while at the same time\noptimizing storage and interactions for rich NFTs."),(0,r.kt)("h2",{id:"rmrk"},"RMRK"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://rmrk.app"},"RMRK")," is a set of NFT 2.0 standards developed in three distinct code flavors:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"https://en.bitcoin.it/wiki/Colored_Coins"},'"Colored coins"'),' approach, as on Bitcoin, originally\ndeveloped as a "hack" on the Kusama chain. This is now deprecated, and it is recommended\nimplementers use any of the other options.'),(0,r.kt)("li",{parentName:"ol"},"Solidity contracts, compatible with any EVM blockchain in and outside the Polkadot ecosystem.\nDocumented ",(0,r.kt)("a",{parentName:"li",href:"https://evm.rmrk.app"},"here")),(0,r.kt)("li",{parentName:"ol"},"Rust code (Substrate pallets), compatible with any Substrate chain. Code is available\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/rmrk-team/rmrk-substrate"},"here"),".")),(0,r.kt)("p",null,"Additionally, two more flavors are in development:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"https://astar.network/"},"Astar")," are developing the ink! version of RMRK:\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/rmrk-team/rmrk-ink"},"code here"),"."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"https://www.gear-tech.io/"},"Gear Technologies")," are developing the Gear implementation:\n",(0,r.kt)("a",{parentName:"li",href:"https://wiki.gear-tech.io/docs/examples/rmrk/"},"code and docs here"),".")),(0,r.kt)("p",null,'The RMRK NFT 2.0 standards are a set of "NFT legos", primitives that, when put together, allow a\nbuilder to compose an NFT system of arbitrary complexity without smart contracts.'),(0,r.kt)("h3",{id:"nft-legos"},"NFT Legos"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"NFTs can own other NFTs, NFTs can equip other NFTs for visual change"),(0,r.kt)("li",{parentName:"ol"},"NFTs can have multiple resources (different outputs based on context and resource priority)"),(0,r.kt)("li",{parentName:"ol"},"NFTs can have on-chain emotes (reactions) for price discovery and social mechanics"),(0,r.kt)("li",{parentName:"ol"},"NFTs have conditional rendering (e.g. show Mona Lisa as blushing if she got 50 kissy \ud83d\ude18 emoji)"),(0,r.kt)("li",{parentName:"ol"},"NFTs can be governed by the community via fungible shareholder-tokens (fractionalization of NFTs)")),(0,r.kt)("h3",{id:"nft-from-kanaria"},"NFT from ",(0,r.kt)("a",{parentName:"h3",href:"https://kanaria.rmrk.app"},"Kanaria")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"kanaria.png",src:a(19379).Z,width:"1891",height:"799"})),(0,r.kt)("admonition",{title:"Multi-resource NFTs",type:"note"},(0,r.kt)("p",{parentName:"admonition"},'A multi-resource NFT (gif of statue, and SVG-composable dynamic NFT in one) that can also equip\nother NFTs from within its "inventory".')),(0,r.kt)("p",null,"Two marketplaces for RMRK-based NFTs exist with hundreds of projects already launched:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://singular.rmrk.app"},"Singular"),", the official marketplace")),(0,r.kt)("p",null,"For a complete introduction into RMRK, see ",(0,r.kt)("a",{parentName:"p",href:"https://url.rmrk.app/wasmconf"},"this presentation")," or\nread ",(0,r.kt)("a",{parentName:"p",href:"https://docs.rmrk.app"},"the non-technical docs"),"."),(0,r.kt)("h2",{id:"asset-hub"},"Asset Hub"),(0,r.kt)("p",null,"The Asset Hub is a generic assets parachain which provides functionality for deploying and\ntransferring assets \u2014 both Fungible and Non-Fungible Tokens (NFTs). The Asset Hub currently hosts\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-nft-pallets/#uniques-pallet"},"Uniques pallet")," and the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/learn-nft-pallets#nfts-pallet"},"NFTs pallet")," with NFT 2.0 functionalities."),(0,r.kt)("h2",{id:"unique-network"},"Unique Network"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://unique.network/"},"Unique network"),", an NFT-specific blockchain offering innovations such as\nsponsored transactions, bundling fungible tokens with non-fungibles, and splitting NFTs into\nfungible tokens for partial ownership."),(0,r.kt)("p",null,"Unique Network have launched two NFT projects to date: Substrapunks as part of\n",(0,r.kt)("a",{parentName:"p",href:"https://hackusama.devpost.com/"},"Hackusama"),", and Chelobricks as a promotion during\n",(0,r.kt)("a",{parentName:"p",href:"https://decoded.polkadot.network/"},"Polkadot Decoded"),"."),(0,r.kt)("p",null,"Unique Network focuses on B2B use cases, aiming to be an infrastructure provider for others to build\non, rather than entering the NFT space themselves as an end-product."),(0,r.kt)("p",null,"Unique Network aims to make their marketplace technology open-source and whitelabel-friendly. In\ntheory, it should be trivial to set up a new marketplace for your project using Unique's technology.\nUnique network aims to be a parachain on Polkadot, and Quartz is their Kusama counterpart."))}u.isMDXComponent=!0},19379:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/kanaria-55b0060679c6303db0fc91f5c402ba02.png"},70964:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/nft-basilisk-654977e2e97885e796857fc2e2add909.png"}}]); \ No newline at end of file diff --git a/assets/js/c764f0e2.d4b94a20.js b/assets/js/c764f0e2.d4b94a20.js new file mode 100644 index 000000000000..47a614cd8e01 --- /dev/null +++ b/assets/js/c764f0e2.d4b94a20.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2624],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>g});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function o(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var l=n.createContext({}),d=function(t){var e=n.useContext(l),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},p=function(t){var e=d(t.components);return n.createElement(l.Provider,{value:e},t.children)},c="mdxType",k={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,o=t.originalType,l=t.parentName,p=s(t,["components","mdxType","originalType","parentName"]),c=d(a),u=r,g=c["".concat(l,".").concat(u)]||c[u]||k[u]||o;return a?n.createElement(g,i(i({ref:e},p),{},{components:a})):n.createElement(g,i({ref:e},p))}));function g(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=a.length,i=new Array(o);i[0]=u;var s={};for(var l in e)hasOwnProperty.call(e,l)&&(s[l]=e[l]);s.originalType=t,s[c]="string"==typeof t?t:r,i[1]=s;for(var d=2;d{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>g,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var n=a(87462),r=a(63366),o=(a(67294),a(3905)),i=["components"],s={id:"learn-staking-apps",title:"Polkadot Staking Apps",sidebar_label:"Staking Apps",description:"Staking Apps in the Polkadot Ecosystem.",keywords:["staking","stake","nominate","nominating","NPoS","staking dashboard"],slug:"../learn-staking-apps"},l=void 0,d={unversionedId:"learn/learn-staking-apps",id:"learn/learn-staking-apps",title:"Polkadot Staking Apps",description:"Staking Apps in the Polkadot Ecosystem.",source:"@site/../docs/learn/learn-staking-apps.md",sourceDirName:"learn",slug:"/learn-staking-apps",permalink:"/docs/learn-staking-apps",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-staking-apps.md",tags:[],version:"current",lastUpdatedBy:"Filippo",lastUpdatedAt:1698147920,formattedLastUpdatedAt:"Oct 24, 2023",frontMatter:{id:"learn-staking-apps",title:"Polkadot Staking Apps",sidebar_label:"Staking Apps",description:"Staking Apps in the Polkadot Ecosystem.",keywords:["staking","stake","nominate","nominating","NPoS","staking dashboard"],slug:"../learn-staking-apps"},sidebar:"docs",previous:{title:"Nomination Pools",permalink:"/docs/learn-nomination-pools"},next:{title:"Polkadot OpenGov",permalink:"/docs/learn-polkadot-opengov"}},p={},c=[{value:"Polkadot Staking Dashboard",id:"polkadot-staking-dashboard",level:2},{value:"Staking Dashboard Video Tutorials",id:"staking-dashboard-video-tutorials",level:3}],k={toc:c},u="wrapper";function g(t){var e=t.components,a=(0,r.Z)(t,i);return(0,o.kt)(u,(0,n.Z)({},k,a,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{title:"Community Page",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This page is open to contributions from the community. Please follow the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/w3f/polkadot-wiki#contributing-to-documentation"},"Wiki contribution guidelines"),"\nand add your Staking app to this page.")),(0,o.kt)("h2",{id:"polkadot-staking-dashboard"},"Polkadot Staking Dashboard"),(0,o.kt)("p",null,"The ",(0,o.kt)("a",{parentName:"p",href:"https://staking.polkadot.network/#/overview"},"Polkadot Staking Dashboard")," is a web3 application\ndedicated to native non-custodial ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-staking"},"staking")," on the\nPolkadot relay chain. The dashboard allows to\nstake as a solo nominator or as a ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pool")," member. Users can\nalso create their nomination pools. The dashboard supports ",(0,o.kt)("a",{parentName:"p",href:"/docs/ledger"},"Ledger"),",\n",(0,o.kt)("a",{parentName:"p",href:"/docs/polkadot-vault"},"Polkadot Vault"),",\n",(0,o.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions#subwallet"},"Subwallet"),",\n",(0,o.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions#talisman"},"Talisman"),", WalletConnect, Fearless Wallet,\nPolkaGate, and Enkrypt. The dashboard also supports\n",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-proxies#staking-proxy"},"staking proxies"),"."),(0,o.kt)("h3",{id:"staking-dashboard-video-tutorials"},"Staking Dashboard Video Tutorials"),(0,o.kt)("tr",{class:"cards-container"},(0,o.kt)("td",null,(0,o.kt)("a",{class:"guide-link",href:"https://youtu.be/F59N3YKYCRs?feature=shared"},(0,o.kt)("img",{class:"guide-image",src:"https://img.youtube.com/vi/F59N3YKYCRs/0.jpg",alt:"Drawing",width:"250",height:"150"}),(0,o.kt)("div",{class:"cards-body"},(0,o.kt)("h5",{class:"cards-title"},"Nominate")))),(0,o.kt)("td",null,(0,o.kt)("a",{class:"guide-link",href:"https://youtu.be/dDIG7QAApig?feature=shared"},(0,o.kt)("img",{class:"guide-image",src:"https://img.youtube.com/vi/dDIG7QAApig/0.jpg",alt:"Drawing",width:"250",height:"150"}),(0,o.kt)("div",{class:"cards-body"},(0,o.kt)("h5",{class:"cards-title"},"Join a Nomination Pool")))),(0,o.kt)("td",null,(0,o.kt)("a",{class:"guide-link",href:"https://youtu.be/hvXLc4H7rA4?feature=shared"},(0,o.kt)("img",{class:"guide-image",src:"https://img.youtube.com/vi/hvXLc4H7rA4/0.jpg",alt:"Drawing",width:"250",height:"150"}),(0,o.kt)("div",{class:"cards-body"},(0,o.kt)("h5",{class:"cards-title"},"Staking Dashboard Walkthrough"))))),(0,o.kt)("br",null),(0,o.kt)("tr",{class:"cards-container"},(0,o.kt)("td",null,(0,o.kt)("a",{class:"guide-link",href:"https://youtu.be/58pIe8tt2o4?feature=shared"},(0,o.kt)("img",{class:"guide-image",src:"https://img.youtube.com/vi/58pIe8tt2o4/0.jpg",alt:"Drawing",width:"250",height:"150"}),(0,o.kt)("div",{class:"cards-body"},(0,o.kt)("h5",{class:"cards-title"},"After Staking")))),(0,o.kt)("td",null,(0,o.kt)("a",{class:"guide-link",href:"https://youtu.be/aTFWhwy_Mxg?feature=shared"},(0,o.kt)("img",{class:"guide-image",src:"https://img.youtube.com/vi/aTFWhwy_Mxg/0.jpg",alt:"Drawing",width:"250",height:"150"}),(0,o.kt)("div",{class:"cards-body"},(0,o.kt)("h5",{class:"cards-title"},"Create, Manage & Destroy Pools"))))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ccc1222e.69e2219e.js b/assets/js/ccc1222e.69e2219e.js new file mode 100644 index 000000000000..a73d68184130 --- /dev/null +++ b/assets/js/ccc1222e.69e2219e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6920],{3905:(t,a,e)=>{e.d(a,{Zo:()=>m,kt:()=>k});var r=e(67294);function n(t,a,e){return a in t?Object.defineProperty(t,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[a]=e,t}function o(t,a){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable}))),e.push.apply(e,r)}return e}function i(t){for(var a=1;a=0||(n[e]=t[e]);return n}(t,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,e)&&(n[e]=t[e])}return n}var p=r.createContext({}),h=function(t){var a=r.useContext(p),e=a;return t&&(e="function"==typeof t?t(a):i(i({},a),t)),e},m=function(t){var a=h(t.components);return r.createElement(p.Provider,{value:a},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var a=t.children;return r.createElement(r.Fragment,{},a)}},u=r.forwardRef((function(t,a){var e=t.components,n=t.mdxType,o=t.originalType,p=t.parentName,m=l(t,["components","mdxType","originalType","parentName"]),s=h(e),u=n,k=s["".concat(p,".").concat(u)]||s[u]||d[u]||o;return e?r.createElement(k,i(i({ref:a},m),{},{components:e})):r.createElement(k,i({ref:a},m))}));function k(t,a){var e=arguments,n=a&&a.mdxType;if("string"==typeof t||n){var o=e.length,i=new Array(o);i[0]=u;var l={};for(var p in a)hasOwnProperty.call(a,p)&&(l[p]=a[p]);l.originalType=t,l[s]="string"==typeof t?t:n,i[1]=l;for(var h=2;h{e.r(a),e.d(a,{assets:()=>m,contentTitle:()=>p,default:()=>k,frontMatter:()=>l,metadata:()=>h,toc:()=>s});var r=e(87462),n=e(63366),o=(e(67294),e(3905)),i=["components"],l={id:"build-open-source",title:"Open Source Stack",sidebar_label:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",keywords:["open","source","development","code","resources","tools","apis"],slug:"../build-open-source"},p="Open Source Polkadot Stack \x3c!-- omit in toc --\x3e",h={unversionedId:"build/build-open-source",id:"build/build-open-source",title:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",source:"@site/../docs/build/build-open-source.md",sourceDirName:"build",slug:"/build-open-source",permalink:"/docs/build-open-source",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-open-source.md",tags:[],version:"current",lastUpdatedBy:"Nikos Kontakis",lastUpdatedAt:1698151330,formattedLastUpdatedAt:"Oct 24, 2023",frontMatter:{id:"build-open-source",title:"Open Source Stack",sidebar_label:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",keywords:["open","source","development","code","resources","tools","apis"],slug:"../build-open-source"},sidebar:"docs",previous:{title:"Tool Index",permalink:"/docs/build-tools-index"},next:{title:"Hackathons",permalink:"/docs/build-hackathon"}},m={},s=[{value:"About",id:"about",level:2},{value:"Layers of Polkadot Stack",id:"layers-of-polkadot-stack",level:2},{value:"Wallets",id:"wallets",level:3},{value:"User Interface",id:"user-interface",level:3},{value:"Tools, APIs, and Languages",id:"tools-apis-and-languages",level:3},{value:"ink! Smart Contracts",id:"ink-smart-contracts",level:3},{value:"Chains and Pallets",id:"chains-and-pallets",level:3},{value:"Host",id:"host",level:3},{value:"Network Maintenance Tools",id:"network-maintenance-tools",level:3},{value:"Signatures",id:"signatures",level:3},{value:"Consensus",id:"consensus",level:3},{value:"Networking",id:"networking",level:3},{value:"Primitives",id:"primitives",level:3},{value:"Contributing",id:"contributing",level:2}],d={toc:s},u="wrapper";function k(t){var a=t.components,e=(0,n.Z)(t,i);return(0,o.kt)(u,(0,r.Z)({},d,e,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"open-source-polkadot-stack--omit-in-toc-"},"Open Source Polkadot Stack "),(0,o.kt)("admonition",{title:"Do your research before using open-source tools",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The tools listed here are open-source and are linked directly to their source code. Before using these tools to build your projects, always ",(0,o.kt)("a",{parentName:"p",href:"/docs/how-to-dyor"},"do your research")," and be aware of ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-scams"},"scams"),".")),(0,o.kt)("p",null,"This page aims to provide an overview of the open-source Polkadot Tech Stack."),(0,o.kt)("p",null,"This is a living document, and we rely on everyone to contribute and help maintain\nit. ",(0,o.kt)("a",{parentName:"p",href:"#contributing"},(0,o.kt)("strong",{parentName:"a"},"Please feel free to make edits and additions via pull requests")),". We\napologize if we missed your project!"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#about"},"About")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#layers-of-polkadot-stack"},"Layers of Polkadot Stack"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#wallets"},"Wallets")," "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#user-interface"},"User Interface")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#tools-apis-and-languages"},"Tools, APIs, and Languages")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#ink-smart-contracts"},"ink! Smart Contracts")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#chains-and-pallets"},"Chains and Pallets")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#host"},"Host")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#network-maintenance-tools"},"Network Maintenance Tools")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#signatures"},"Signatures")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#consensus"},"Consensus")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#networking"},"Networking")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#primitives"},"Primitives")))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#contributing"},"Contributing"))),(0,o.kt)("h2",{id:"about"},"About"),(0,o.kt)("p",null,"The Polkadot Tech Stack is a subset of the Web 3.0 Tech Stack, which consists of the ",(0,o.kt)("strong",{parentName:"p"},"open-source"),"\ntechnologies contributing to and relying on ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/"},"Polkadot"),". It is meant to be used\nfor decentralized application (Dapp) development within numerous verticals, including DeFi, Gaming,\nProvenance and many others not pictured below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"|------|--------|------------|\n| DeFi | Gaming | Provenance |\n|______|________|____________|\n Dapps\n|--------------------------/-|\n| Explorers, Wallets / |\n|------------------------/---|\n| Tools, Apis, Languages/ |\n|----------------------/-----|\n| 2nd layer protocols / |\n|--------------------/-------|\n| Chains / other |\n|------------------/--- --|\n| *Polkadot* | tech |\n|------------------\\---------|\n| P2P, Crypto, Wasm \\ |\n|--------------------\\-------|\n")),(0,o.kt)("h2",{id:"layers-of-polkadot-stack"},"Layers of Polkadot Stack"),(0,o.kt)("p",null,"In the below sections, you can find a list of different layers of the Polkadot Stack."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Maintenance Status"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\ud83d\udfe2 Actively maintained"),(0,o.kt)("li",{parentName:"ul"},"\ud83d\udfe1 Stale (no activity on the main branch for one month)"),(0,o.kt)("li",{parentName:"ul"},"\u26aa Unmaintained (no activity on the main branch for more than three months)")),(0,o.kt)("h3",{id:"wallets"},"Wallets"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Web Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/Multix"},"Multix")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkasafe/polkasafe-ui"},"Polkasafe")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/apps"},"polkadot-js/apps")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman-web"},"Talisman Web Application")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/enkryptcom/mydotwallet"},"mydotwallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subid"},"Sub ID")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Primis-Labs/client"},"Primis")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3finance/sakura"},"Sakura")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/Web3Box-apps"},"Web3Box")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CoongCrafts/coong-wallet"},"Coong Wallet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan-multisig-react"},"Subscan Multisig UI - React")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan-multisig-ui"},"Subscan Multisig UI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DoraFactory/dorafactory-multisig"},"Dorafactory-Multisig")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/capi-multisig-app"},"Capi Multisig App")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"User-friendly Wallet based on the ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/frame/recovery"},"Recovery Pallet"),", Web wallets focused on user-onboarding (e.g. using ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/near/near-wallet"},"localStorage"),")")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Desktop Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/nova-spektr"},"nova-spektr")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/omni-desktop-prototype"},"Omni desktop")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Enterprise Wallets")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Browser Extensions"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman"},"Talisman-Extension")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubWallet-Extension"},"SubWallet-Extension")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/enkryptcom/enKrypt"},"Enkrypt")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/extension"},"Polkadot{.js}")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/PolkaGate/polkagate-extension"},"PolkaGate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainBridgeNetworkTeam/Doter"},"Doter")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GetSpeckle/speckle-browser-extension"},"Speckle OS")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/kuma-wallet"},"Kuma Cross-chain Wallet")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Sign-in with your Polkadot, Kusama, etc. account.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Mobile Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/airgap-it/airgap-wallet"},"AirGap")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubWallet-Mobile"},"SubWallet-Mobile")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/luniehq/lunie"},"Lunie")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkawallet-io/polkawallet-flutter"},"Polkawallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-signer"},"Parity Signer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/consenlabs/token-core"},"imToken")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/fearless-Android"},"Fearless Wallet Android")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/fearless-iOS"},"Fearless Wallet iOS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stylo-app/stylo"},"Stylo")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nova-wallet/nova-utils"},"Nova Wallet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fractapp/fractapp/"},"Fractapp")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Interstellar-Network/wallet-app"},"Interstellar Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hypha-dao/hashed-wallet"},"Hashed Wallet")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Burner Wallets/Faucet/Gifts"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/hamidra/dotdrop"},"dotdrop")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/vue-polkadot/apps"},"KodaDot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/astar-faucet-bot"},"Astar Faucet Bot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/karooolis/sybil-resistant-substrate-faucet"},"Generic sybil-resistant faucet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/StringNick/sybil-resistant-chat-bot-substrate-faucet"},"sybil-resistant Chat Bot Faucet")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"Faucet (a sybil-resistant way to receive free tokens)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Wallet Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/metamask-snap-polkadot"},"Metamask-Snap by Chainsafe")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"CLI Wallet"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/yxf/subwallet"},"Subwallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/canontech/proxy-hot-wallet"},"Proxy-hot-wallet")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Hardware Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZondaX/ledger-polkadot"},"Ledger Polkadot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-kusama"},"Ledger Kusama")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-statemint"},"Ledger Statemint")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-statemine"},"Ledger Statemine")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"Trezor")))),(0,o.kt)("h3",{id:"user-interface"},"User Interface"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Block Explorers"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/topmonks/calamar"},"Calamar")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/colorfulnotion/polkaholic"},"Polkaholic")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/explorer-api"},"Polkascan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Colm3na/polkastats-backend"},"Polkastats")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan"},"Subscan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/statescan"},"Statescan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/edgeware-builders/edgscan"},"Edgscan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/epirus-substrate"},"Sirato")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/ink-substrate-explorer-api"},"ink! Explorer API")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/substats"},"Substats")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hybrid-explorer/hybrid-dapp"},"Hybrid Block Explorer")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Mempool focused explorer (including parachain transaction)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator Dashboards"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-telemetry"},"Polkadot Telemetry")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashquark-io/polkacube-frontend"},"Polkacube")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/buidl-labs/YieldScan"},"YieldScan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-community/hubble/tree/master/app/controllers/polkadot"},"Hubble")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ArthurHoeke/cyclops"},"Cyclops")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3go-xyz/web3go-xyz-v2"},"Web3Go")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Node Explorers"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/protos-research/polkadot-node-explorer"},"Polkadot Node Explorer")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT Explorer"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/nft-gallery"},"NFT Explorer for Kusama & Polkadot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance Dashboards"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/governance-ui"},"Polkadot Delegation Dashboard")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/premiurly/polkassembly"},"Polkassembly")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/dotreasury"},"dotreasury")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/bright-tresury"},"Bright Treasury")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/collaboration"},"OpenSquare offchain voting")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/wpank/open-gov-insights"},"OpenGov Insights")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stake-plus/treasury-tracker"},"Treasury Tracker")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"UI for the Kusama and/or Polkadot treasury (see ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/pull/5715"},"bounty module"),"), UI for Parachain Lease Offering (PLO)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Staking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/staking-rewards-collector"},"Staking Rewards Collector")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/jackson-harris-iii/staking-rewards-viewer"},"Staking Rewards Viewer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cryptolab-network/polkadot-staking-site"},"Polkadot Staking Site")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-staking-dashboard"},"Polkadot Staking Dashboard")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/James-Sangalli/dot-validator-selector"},"Polkadot/Kusama Validator Selector")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/James-Sangalli/dot-staking-income"},"Staking Income CSV Generator")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridge UI"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-bridges-ui"},"Parity Bridges UI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nutbox-dao/donut-interface"},"Donut Interface (Steem - Dot)")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Parachain/Crowdloan"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/jhonalino/parachains.network"},"Parachains.Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CrommVardek/polk-auction-ui"},"PolkAuction")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/10clouds/crowdloan-template"},"Crowdloan Front End Template")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hack-ink/slothunter/"},"Slothunter")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identicon"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://polkadot.cloud/polkicon"},"Polkicon")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RidOne-technologies/polkadot-web-identicon"},"PolkadotWebIdenticon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RidOne-technologies/polkadot-angular-identicon"},"Polkadot Angular IdentIcon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Noc2/Bird-Identicon"},"Bird Identicon")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://polkadot.cloud"},"Polkadot Cloud")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/KappaSigmaMu/ksm-app"},"KappaSigmaMu Fratority")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/quadratic-funding-webapp"},"Quadratic Funding Webapp")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://gitlab.com/polkawatch/polkawatch"},"Polkawatch"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bytepayment/bytepay"},"Bytepay")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Delmonicos/charging-management-platform"},"charging-management-platform")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TDSoftware/subidentity-webapp"},"subidentity-webapp")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/paid-qa/"},"OpenSquare Paid QA")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CrossChainLabs-DOT/dotpulse-api"},"DotPulse")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bsn-si/rubeus-smartcontract"},"Rubeus Keeper")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/justmert/eco-flow-frontend"},"Polkaflow")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/chainviz-v1"},"ChainViz")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fidi-tech/dotsight"},"Dotsight")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://docs.sui.io/build/zk_login"},"zkLogin"),", Portfolio Viewer like Zapper or Zerion")))),(0,o.kt)("h3",{id:"tools-apis-and-languages"},"Tools, APIs, and Languages"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Runtime/Parachain frameworks"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk"},"Polkadot Blockchain SDK")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/gosemble"},"Gosemble")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/subsembly"},"Subsembly")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/parachain-utilities"},"Parachain utilities")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gantree-io/gantree-core"},"Gantree")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Tools to create parachains with other frameworks, like the ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cosmos/cosmos-sdk"},"Cosmos SDK")," or ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/0xPolygon/cdk-validium-node"},"Polygon CDK"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Client Libraries"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-api"},"Polkadot API - Typescript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/capi"},"Capi - Typescript")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/packages/tree/main/sub-api"},"sub-api")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/go-substrate-rpc-client"},"Go")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_api_dotnet"},".Net")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ajuna-network/Ajuna.NetApi"},".NET Standard 2.0")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubstrateGaming/Substrate.NET.Toolchain"},"Substrate .NET Toolchain")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"C++")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/finoabanking/substrate-c-tool"},"C")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/hs-web3"},"Haskell")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/api"},"Javascript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-api-sidecar"},"Substrate API Sidecar - TypeScript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/py-substrate-interface"},"Python")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkaj"},"Java (+ Android)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/strategyobject/substrate-client-java"},"Substrate Client Java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scs/substrate-api-client"},"Rust SCS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/subxt"},"Rust Parity (subxt)")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/trevor-crypto"},"Rust pdotc")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/php-substrate-api"},"PHP (gmajor-encrypt)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/neha0921/substrate-interface-package"},"PHP (neha0921)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/frontier"},"RPC-Ethereum")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/Substrate.swift"},"Swift")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NodleCode/substrate-client-kotlin"},"Kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/substrate-client-kotlin"},"substrate-client-kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/substrate-client-swift"},"substrate-client-swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rankanizer/polkadart"},"Dart")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polywrap/integrations"},"Substrate Core Polywrapper")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"RPC Gateway"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/subway"},"Subway")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Substrate Contract clients"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/go-patract"},"PatractGo")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Easy Runtime Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/hack-ink/subalfred"},"Subalfred")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kaichaosun/substrate-stencil"},"substrate-stencil")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kaichaosun/play-substrate"},"Play Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/substrate-node-template"},"substrate-node-template")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-playground"},"Substrate Playground")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/as-substrate-runtime"},"AssemblyScript Runtime Generation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/clearloop/sup"},"Substrate Package Manager")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/subsembly"},"Subsembly: Framework for developing AssemblyScript Substrate Runtimes")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bkchr/diener"},"dependency diener")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IDE Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/vscode-substrate"},"Substrate Marketplace VS Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/everstake/vscode-plugin-substrate"},"VS Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/everstake/atom-plugin-substrate"},"Atom Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/zombienet-vscode-extension"},"zombienet extension")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Runtime/Pallet Security"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/srlabs/substrate-runtime-fuzzer"},"Substrate Runtime Fuzzer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/shawntabrizi/substrate-toml-lint"},"Substrate Toml Lint")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kframework/wasm-semantics"},"K specifications")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSecurity/polpatrol"},"PolPatrol - Polkadot Runtime Checker")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Automated Runtime checking tools, economic audit simulator such as ",(0,o.kt)("a",{parentName:"td",href:"https://gauntlet.network/"},"gauntlet.network"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart Contract Languages"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"#ink-smart-contracts"},"ink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ask-lang/ask"},"Ask!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/slickup/subscript"},"Subscript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hyperledger-labs/solang"},"Solang")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eigerco/pallet-move"},"pallet-move")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pontem-network/sp-move"},"Move VM Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/neatcoin/neatcoin"},"Move smart contract by Neatcoin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pepyakin/substrate-seal-ebpf"},"eBPF Contracts Hackathon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/koute/polkavm"},"PolkaVM")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Functional Programming Languages, other languages with developed toolchains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-introspector"},"Polkadot introspector")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subdirectory/subshell"},"Subshell")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/sc-simnode"},"substrate-simnode")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/halva-suite/halva"},"Halva")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/redspot"},"Redspot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mixbytes/tank"},"MixBytes Tank")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NikVolf/sub-flood"},"sub-flood")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-debug-kit"},"Substrate debug-kit")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/JesseAbram/asset_cli_tool"},"Asset CLI tool")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/JesseAbram/unfinished_testing_tool"},"sub_crash")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chevdor/subwasm"},"subwasm")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ascjones/subsee"},"subsee")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-lab"},"polkadot-lab")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dwellir-public/rpc-perf/"},"RPC-perf")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Static Analysis"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/KaiserKarel/substrace"},"Substrace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/simon-perriard/saft"},"Static analyzer for Substrate FRAME's pallets")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CoinFabrik/scout"},"CoinFabrik Scout")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testnet"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/zombienet"},"Zombienet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/chopsticks"},"Chopsticks")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-launch"},"Polkadot Launch")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/koute/polkadot-starship"},"polkadot-starship")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/maxsam4/fork-off-substrate"},"Fork off Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/try-runtime-cli"},"try-runtime-cli")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/parachain-launch"},"Parachain Launch")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zeeve-App/larch"},"Larch Zombienet GUI")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Benchmarking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk/tree/master/substrate/utils/frame/benchmarking-cli"},"Benchmarking CLI")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-stps"},"Polkadot sTPS")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/0xekez/clockchain"},"Clockchain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/shawntabrizi/substrate-graph-benchmarks"},"Substrate Graph Benchmarks")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Nikhil-Desai-Talentica/substrate-node-template-benchmarking"},"ink! & pallet benchmarking template")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/smart-bench"},"smart-bench")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Blockchain Indexing Engine"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/subsquid/squid-sdk"},"Squid SDK")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hybrid-explorer/hybrid-indexer"},"Hybrid Indexer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-archive"},"Substrate Archive")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_psql_indexer"},"PSQL Indexer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playzero/substrate-graph"},"Substrate Graph")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OnFinality-io/subql"},"Subquery")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/p2p-org/polkadot-profit-transformer"},"MBELT3")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/stick"},"stick")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Infra3-Network/hyperdot"},"Hyperdot")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Blockchain/Event Monitoring"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/guardian"},"Web3 Guardian")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/HugoByte/aurras-event-manager"},"Aurras Event Manager")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hicommonwealth/chain-events"},"@commonwealth/chain-events")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/massbitchain"},"Massbit")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kianenigma/polkadot-basic-notification"},"Polkadot Basic Notifications")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sodazone/ocelloids"},"Ocelloids")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TrackingChains/TrackingChain"},"Tracking Chain")," \ud83d\udfe2,"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dodorare/crossbow"},"Crossbow")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://amethyst.rs/"},"Amethyst")," + ",(0,o.kt)("a",{parentName:"td",href:"https://substrate.dev/"},"Substrate"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"No-code Platforms"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/NovaBloq/Bubble-Plugin-Polkadot.js"},"EzCode's Polkadot.js plugin on Bubble.io")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Blackprint/nodes-polkadot.js"},"Blackprint Visual Programming Polkadot.js module")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subrelay/interface"},"SubRelay")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman-connect"},"Talisman Connect")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubConnect"},"SubWallet-SubConnect")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nova-wallet/metadata-portal"},"Metadata Portal")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/Tesseract.rs"},"Tesseract")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/walletconnect-v2-monorepo"},"WalletConnect")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/BitGo/BitGoJS/tree/master"},"BitGoJS")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"XCM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/trappist"},"Trappist")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/PureStake/xcm-tools"},"XCM-tools")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/substrate-api-rpc"},"XCM-tools Golang")," \ud83d\udfe1,",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paraspell/ui-v2"},"ParaSpell")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/t3rn/xbi"},"XBI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/xcm-sdk"},"XCM TS/JS SDK")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/asset-transfer-api"},"asset-transfer-api")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/txwrapper-core"},"txwrapper-core")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/open-web3.js"},"open-web3 JS library")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CycanTech/GVM-Bridge"},"VM-Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/srtool"},"srtool")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chevdor/srtool-cli"},"srtool-cli")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-tip-bot"},"Substrate Tip Bot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/syntifi/ori"},"ORI (Onchain Risk Intelligence)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/albertov19/PolkaTools"},"PolkaTools")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-scripts"},"polkadot-scripts")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/virto-network/sube"},"Sube")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/data-store-sidecar"},"data-store-sidecar")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SugarFunge/sugarfunge-node"},"SugarFunge")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/second-state/substrate-wasmedge"},"substrate-wasmedge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eightfish-org/eightfish"},"EightFish")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sandoxio/sandox"},"Sandox")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/apk-verifier/"},"APK verifier")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"ink-smart-contracts"},"ink! Smart Contracts"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Core Libraries"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink"},"ink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/cargo-contract"},"cargo-contract")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk/tree/master/substrate/frame/contracts"},"pallet-contracts")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Local Nodes"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-contracts-node"},"substrate-contracts-node")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/swankyhub/swanky-cli"},"Swanky")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart Contract Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/drink"},"DRink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/contracts-ui"},"contracts-ui")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/h4nsu/openbrush-contracts"},"OpenBrush")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/727-Ventures/sol2ink"},"Sol2Ink")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/protofire/polkadot-contract-wizard"},"Polkadot Contract Wizard")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/ink-wrapper"},"ink-wrapper")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink-playground"},"ink-playground")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockchain-it-hr/ink-remix-plugin"},"ink! Remix Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/standardweb3/signac/"},"Signac")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/avirajkhare00/ink-boxes/"},"ink!-boxes")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/avirajkhare00/ink-wizard"},"ink!-smart-contract-wizard")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Security & Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink-waterfall"},"ink! Waterfall")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/ink-verifier-image"},"Verifier Image for ink!")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Brushfam/patron-backend/"},"Patron")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/scio-labs/inkathon"},"ink!athon Boilerplate")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/useink"},"useink")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scio-labs/use-inkathon"},"useInkathon")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subsquid/squid-sdk/tree/master/substrate/ink-typegen"},"ink-typegen")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Brushfam/typechain-polkadot"},"Typechain Polkadot")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IDE Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ink-analyzer/ink-analyzer"},"ink! Analyzer")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridges"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dantenetwork/protocol-stack-for-ink"},"Dante Protocol")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DeFi"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/pendulum-ink-wrapper"},"Pendulum-Ink-Wrapper")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RottenKiwi/Panorama-Swap-INK-SC"},"Panorama Swap")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Juminstock/ink_bank"},"ink_bank")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/realnimish/polkadot-amm"},"Polkadot AMM")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/veradefi/defi"},"Vera")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nsure-tech/dot-contract"},"Nsure Insurance")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CycanTech/ELC"},"Everlasting Cash")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Coinversation/coinpro"},"Coinversation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zenlinkpro/zenlink-dex-contract"},"zenlink-dex-contract")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ReserveLabs/AlgoCash"},"AlgoCash")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"New seigniorage-style stable coins")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/OpenEmojiBattler/open-emoji-battler"},"Open Emoji Battler")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/WiktorStarczewski/newomega.polkadot/blob/master/newomega_delegator/newomega/newomega.rs"},"NewOmega")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DAO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/SyncraDAO/modular-dao"},"SyncraDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/subDAO-contracts"},"subDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RainbowcityFoundation/RainbowDAO-Protocol-Ink-milestone_1"},"RainbowDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Mangoboxlabs/Mangoboxink"},"MangoBox")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Mangoboxlabs/MangoSaleV2"},"MangoSale")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identity/DID"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TheDotflow"},"Dotflow")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Oracles"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/diadata-org/dia-wasm-oracle"},"DIA WASM Oracle")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Spam Protection"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/prosopo-io/integration"},"Prosopo")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/AbaxFinance/Governance"},"Abax Governance")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ArtZero-io/Contracts"},"ArtZero")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/pnsproject/ink-aa"},"Polkadot Smart Account")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/swankyhub/magink-dapp"},"magink")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/ink-test-contracts"},"ink-test-contracts")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/agryaznov/candle-auction-ink"},"Candle Auctions")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubDAO-Network/polkasign-contract"},"polkasign-contract")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bsn-si/ocex-cli"},"OCEX")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RoloiMoney/roloi-polkadot-w3f-grant"},"Roloi")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadrys/openPayroll"},"OpenPayroll")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/InkSmartContract/BlockchainFoodOrder"},"BlockchainFoodOrder")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"chains-and-pallets"},"Chains and Pallets"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Scalable Transactions"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/perun-network/perun-polkadot-pallet"},"Perun channels")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/perun-network/perun-polkadot-demo"},"CLI demo of Perun")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/Astar"},"Astar")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/celer-network/cChannel-substrate"},"Celer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GunClear/Gunero"},"Gunclear")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/BCS-Labs/tpscore-etl-system"},"TPScore")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"roll-ups, DAG-based consensus mechanisms, side chains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridges"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/interlay/interbtc"},"interBTC")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/dkg-substrate"},"DKG Substrate")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sygmaprotocol/sygma-substrate-pallets"},"Sygma")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bifrost-finance/bifrost-eos-relay"},"EOS by Bifrost")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-bridge"},"POA - Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/akropolisio/POC-polkadai-bridge"},"Substrate - Ethereum DAI Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-bridge-relay"},"Substrate - Substrate Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chainx-org/ChainX"},"BTC by ChainX")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChorusOne/wormhole-bridge"},"Cosmos-Substrate bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/octopus-network/substrate-ibc"},"Substrate IBC Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Snowfork/polkadot-ethereum"},"Polkadot Ethereum Bridge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/darwinia"},"Darwinia")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/spacewalk"},"Spacewalk: a Stellar bridge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/filecoindot"},"Filecoindot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/axelar-cgp-substrate/tree/main"},"Axelar-Substrate")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"ZCash")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Privacy"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LayerXcom/zero-chain"},"ZeroChain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/xx-labs/xxchain"},"xx network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Phala-Network/phala-blockchain"},"pLibra (Phala Network)")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/automata-network/automata"},"Automata Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zero-network/zero"},"Zero Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/appliedblockchain/silentdata-polkadot"},"Silent Data")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/anoma/masp"},"Multi-Asset Shielded Pool (MASP)")," , ",(0,o.kt)("a",{parentName:"td",href:"https://arxiv.org/pdf/2009.01020.pdf"},"Zkay"),", ",(0,o.kt)("a",{parentName:"td",href:"https://eprint.iacr.org/2018/962.pdf"},"Zexe"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"ZKP"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/zeropoolnetwork/zeropool-substrate-groth16-example"},"ZeroPool")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/megaclite"},"Megaclite")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/zkmega"},"zkMega")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/plonk"},"PLONK for Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/protocol-substrate"},"Webb Anchor Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/zk-snarks-with-substrate/"},"zk-SNARKs tutorial")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zkvers/substrate-zk"},"substrate-zk")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"TEE"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Acurast/acurast-core"},"Acurast")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/integritee-network/worker"},"Integritee")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scs/substraTEE"},"substraTEE")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/keysafe-protocol/keysafe-app"},"Keysafe Protocol")," \u26aa")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DeFi"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/kapilsinha/privadex"},"PrivaDEX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/uinb/fusotao"},"Fusotao")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/reef-defi/reef-chain"},"Reef")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Diora-Network/Diora"},"Diora")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/pendulum"},"Pendulum Chain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/compound-finance/gateway"},"Compound Gateway")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/parallel-finance/parallel"},"Parallel Finance")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/PINT"},"PINT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/laminar-protocol/laminar-chain"},"Laminar Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/Acala"},"Acala")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/centrifuge-chain"},"Centrifuge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stafiprotocol/stafi-node"},"Stafi")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/y2labs-0sh/definex"},"Definex")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAXFoundation/parrot"},"OAX Foundation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/alexxuyang/substrate-dex"},"Cybex")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zenlinkpro/pallet-zenlink"},"Zenlink")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/lsaether/pallet-swaps"},"Swaps Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Polkadex-Substrate/Polkadex/tree/master"},"Polkadex")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subdarkdex/subdex-parachain"},"SubDEX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/hack.HydraDX-node"},"HydraDX")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/apopiak/stablecoin"},"Substrate Stablecoin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/digitalnativeinc/standard-substrate"},"Standard protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sora-xor/sora2-network"},"Polkaswap")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/equilibrium-eosdt/equilibrium-curve-amm"},"Curve AMM")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/konomi-network/cumulus/"},"Konomi Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nutsfinance/stable-asset"},"Stable Asset")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/atscaletech/libra"},"Libra Payment")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mangata-finance/mangata-node"},"Mangata")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tidelabs/tidechain"},"Tidechain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/Basilisk-node"},"Basilisk")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/PolymeshAssociation/Polymesh"},"Polymesh")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"DEX with privacy and confidentiality features such as those found in a ",(0,o.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Dark_pool"},"dark pool"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart contract chains"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/PureStake/moonbeam"},"moonbeam")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/aleph-node"},"Aleph-node")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hicommonwealth/edgeware-node"},"Edgeware")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ParaState/substrate-ssvm-node"},"ParaState")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gear-tech/gear"},"gear")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cennznet/cennznet"},"CENNZnet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/skyekiwi/skyekiwi-network"},"SkyeKiwi")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/OAK-blockchain"},"OAK-blockchain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/ice-substrate"},"ICE Blockchain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OmniBTC/PSC"},"Polkadot Smart Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/keep-starknet-strange/madara"},"Madara - Cairo/Starknet")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"smart contract chains with novel security approaches, smart contract chains based on existing toolchains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Oracle"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/tellor-io/tellor-pallet"},"Tellor")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/laminar-protocol/open-runtime-module-library/tree/master/oracle"},"Laminar")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/smartcontractkit/chainlink-polkadot"},"Chainlink-polkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/aresprotocols/ares"},"Ares Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Kylin-Network/kylin-node"},"Kylin Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/interlay/interbtc-clients/tree/master/oracle"},"interbtc-clients oracle")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/anonima"},"Anonima")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SaaS3-Foundation/dRuntime-fat"},"SaaS3")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tellor-io/tellor-parachain-contracts"},"Tellor")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/diadata-org/bridgestate-ocw"},"Bridgestate Oracle")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identity/DID"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/parami-foundation/parami-blockchain"},"Parami")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/litentry/litentry-parachain"},"Litentry")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/pallet-did"},"pallet-did")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/prasad-kumkar/dot-id"},"dot-id")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IoT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/NodleCode/chain"},"Nodle")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DataHighway-DHX/node"},"MXC/DataHighway")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/peaqnetwork/peaq-network-node"},"peaq-network-node")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Verifiable Claims"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/KILTprotocol/kilt-node"},"KILT")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/docknetwork/dock-substrate"},"Dock")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fennelLabs/Fennel-Protocol"},"Fennel Protocol")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Supply chain"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/digicatapult/dscp-node"},"DSCP Node")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Health care"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Music Industry"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Allfeat/Allfeat"},"Allfeat Network")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data Availability"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/availproject/avail"},"Avail")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZeroDAO/melodot"},"Melodot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Social Networking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LibertyDSNP/frequency"},"Frequency")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/social-network/blockchain"},"Social Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subsocial-parachain"},"SubSocial")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZeroDAO/ZeroDAO-node"},"ZeroDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/myriadsocial/myriad-node"},"Myriad Node")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/randombishop/wika_etl"},"Wika Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LibertyDSNP/mrc"},"Project Liberty")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/listenofficial/listen-parachain"},"Listen")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tribal-protocol/tribal_contract"},"Tribal Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rust-0x0/hex-space-protocol-substrate"},"Five Degrees on Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/acuity-social/acuity-substrate"},"Acuity Social")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Private instant messenger that uses on-chain identity")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance/DAO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/aisland-dao/aisland-node/tree/main"},"Aisland Node")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashed-io/hashed-substrate"},"Hashed Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sunshine-protocol/sunshine-bounty"},"Sunshine DAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NucleiStudio/governance-os"},"Governance OS")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/idavollnetwork/idavoll"},"Idavoll Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DoraFactory/Substrate-Moloch-V2"},"Substrate Moloch")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Qrucial/QRUCIAL-DAO"},"QRUCIAL-DAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sctllabs/societal-node"},"Societal")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/daos-org/daos"},"DAOs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/amiyatulu/shivarthu/"},"Shivarthu")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/faterium"},"Faterium")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/decentration/apps"},"Supersig")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/deep-ink-ventures/genesis-dao-node"},"GenesisDAO")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dao-entrance/dao-entrance-node"},"DAO Entrance")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/liberland/liberland_substrate"},"Liberland")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/consul/consul"},"Consul")," - Open Government and E-Participation Web Software")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Prediction Markets and Futarchy"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/zeitgeistpm/zeitgeist"},"Zeitgeist")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/XPredictMarket/NodePredict"},"X Predict Market")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Messaging"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/validitylabs/HOPR-PL-Substrate"},"HOPR")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chainify/nolik"},"Nolik")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Uke-Messaging/uke-pallet"},"Uke")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Belsoft-rs/diffychat-pallet"},"Diffy Chat")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"File Storage, Cloud"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subsocial-offchain"},"Subsocial-Offchain")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playproject-io/datdot"},"DatDot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/crustio/crust"},"Crust Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rs-ipfs/offchain-ipfs-manual"},"offchain::ipfs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/canyon-network/canyon"},"Canyon Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cumulus2021/cess"},"CESS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/cess-proving-system"},"CESS Proving Subsystem")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ideal-lab5/iris"},"Iris")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/fmd-cess"},"fmd-cess")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DanHenton/pocket-substrate/tree/ipfs-ocw"},"IPFS Frame V3")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/threefoldtech/tfchain"},"Threefold Chain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Apron-Network/apron-node"},"Apron")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TDSoftware/substrate-ipfs"},"IPFS Utilities")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Name Service"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/xaya/substrate-names"},"Substrate Names")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hskang9/substrate-name-service"},"ENS on Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pnsproject/pns-pallets"},"PNS-Pallets")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/HeisenbergLin22/Faceless_milestone2_delivery"},"Faceless")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ff13dfly/Anchor"},"Anchor")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/bit-country/Bit-Country-Blockchain"},"Bit.country")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubGame-Network/subgame-network"},"SubGame")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playzero/subzero"},"subzero")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3gamesofficial/web3games-blockchain"},"Web3Games")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ajuna-network/Ajuna"},"Ajuna Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cryptoviet/gafi"},"Gafi Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://gitlab.com/asylum-space/asylum-item-nft"},"Asylum")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/3Dpass/3DP"},"3DPass")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polketio/toearnfun_flutter_app"},"Polket")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Computation/AI"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/DeepBrainChain/DeepBrainChain-MainChain"},"DeepBrain Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/anudit/cerebrum"},"AI Infrastructure on Blockchain")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Enable specific use-cases"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/deep-ink-ventures/pallet_hookpoints"},"pallet-hookpoints")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/substrate-node-robonomics"},"Robonomics")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/UniversalDot/pallets"},"UniversalDOT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/EvercityEcosystem/evercity-chain"},"Evercity Sustainable Finance Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fennelLabs/Fennel-Protocol"},"Fennel Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/logion-network/logion-node"},"logion")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/capsule-corp-ternoa/chain"},"ternoa")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/danforbes/pallet-nft"},"FRAME Pallet: NFTs for Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/UniqueNetwork/unique-chain"},"Unique NFT Parachain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DNFT-Team/dnft-substrate-node/tree/master/pallets"},"DNFT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rmrk-team/rmrk-substrate"},"RMRK-Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Popular-Coding/nt-nft"},"NT-NFTs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GreenLemonProtocol/dksap-polkadot"},"Green Lemon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/Basilisk-node"},"Basilisk")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Randomness"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/substrate/tree/randomness-beacon"},"DKG and Randomness Beacon")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/random-meat/drand-substrate-client"},"drand-substrate-client")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Licensing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/anagolay/anagolay-chain"},"Anagolay Network")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Banking Integration"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/element36-io/ebics-java-service"},"FIAT on-off-ramp")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Crowdfunding"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ImbueNetwork/imbue"},"Imbue Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zhangjiannan/QFgrant"},"Quadratic Funding pallet by Dora")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/quadratic-funding-pallet/tree/master"},"Quadratic Funding pallet by OAK")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413"},"Minimum Anti-Collusion Infrastructure (MACI)"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Collection of Pallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/open-runtime-module-library"},"Substrate Open Runtime Module Library")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/warehouse"},"warehouse")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/InvArch/InvArch-Frames"},"InvArch FRAME Pallet Library")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Marketplaces"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/WowLabz/dot-marketplace-v2/tree/Phase3_Milestone3"},"Dot Marketplace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashed-io/hashed-substrate/tree/main/pallets/gated-marketplace"},"Gated Marketplace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Popular-Coding/ventur"},"Ventur")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Carbon Credits"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/bitgreen/bitg-node"},"BitGreen")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/EvercityEcosystem/carbon-assets"},"Carbon Assets Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SequesterChain/pallets"},"Sequester Pallets")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"UTXO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Off-Narrative-Labs/Tuxedo"},"Tuxedo")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Moonsong-Labs/moonkit"},"Moonkit")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/substrate-account-filter"},"Substrate Account Filter")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opentensor/subtensor"},"Subtensor")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AdMetaNetwork/admeta"},"AdMeta")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chocolatenetwork/chocolate-node"},"Chocolate Node")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/virto-network/virto-node"},"Virto Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/substrate-validator-set"},"Substrate Validator Set")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DEIPworld/deip-node"},"DEIP")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/debionetwork/debio-node"},"DeBio")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mathwallet/MathChain"},"MathChain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/encointer/encointer-node"},"encointer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/grasslandnetwork/substrate_node"},"Grassland")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rusty-crewmates/substrate-tutorials"},"Substrate-Tutorials")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Fair-Squares/fair-squares"},"Fair Squares")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/totem-tech/totem"},"Totem Live Accounting")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/herou/EscrowPallet"},"Escrow Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NexTokenTech/TREX"},"TREX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/relationlabs/Relation-Graph"},"Relation Graph")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gertt/Invoice"},"Decentralized Invoice")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/redstone-network/redstone-node"},"Redstone Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/WunderbarNetwork/access-control"},"Access Control Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Omniverse-Web3-Labs/omniverse-swap/tree/web3-grant"},"Omniverse DLT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/substrate-ismp"},"ISMP")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/xcmp_prototype_playground"},"XCMP")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dhiway/cord"},"CORD Chain")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Decentralized review/reputation system")))),(0,o.kt)("h3",{id:"host"},"Host"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Rust"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate"},"Substrate")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/cumulus"},"Cumulus")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"C++"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/kagome"},"Kagome")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/mayon"},"Mayon")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Go"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/gossamer"},"Gossamer")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Java"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/Fruzhin"},"Fruzhin")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/java-host-research"},"Java Host Research")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"AssemblyScript"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Light Client"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/smol-dot/smoldot"},"smoldot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-connect"},"Substrate Connect")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eqlabs/polkadot-light-client"},"C++ Polkadot Light Client")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/polkadot-conformance"},"Polkadot Conformance")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sigp/polkafuzz"},"Polkafuzz")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"network-maintenance-tools"},"Network Maintenance Tools"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Secure validator setup"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkachu/polkadot-validator"},"Polkadot Validation Node Ansible Setup")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-validator-setup"},"W3F Polkadot Validator Setup")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Nexus2k/polkadot-ansible"},"polkadot-ansible")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"High availability setup"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/luguslabs/archipel"},"Archipel")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/protofire/polkadot-failover-mechanism"},"Polkadot Failover Mechanism")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Datagen-Project/Datagen-Substrate-Grant"},"Datagen")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/substrate-raft"},"High Availability Validator Setup")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Load Balanced Endpoints"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/insight-w3f/terragrunt-polkadot"},"terragrunt-polkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sudoblockio/substrate-meta"},"Geometry Labs' Substrate Meta repo")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Deployment Tools"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Blockdaemon/bpm-sdk"},"Polkadot Package Manager")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/akropolisio/polkahub-monorepo"},"PolkaHub")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AvadoDServer/AVADO-DNP-Polkadot-custom"},"Avado")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-deployer"},"Polkadot Deployer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/for-parity-with-love/unified-collator-node-deployment"},"Unified Collator Deployment")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator monitoring"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/turboflakes/one-t"},"ONE-T")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/subvt-backend"},"SubVT")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SimplyVC/panic"},"P.A.N.I.C.")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/polkalert"},"Polkalert")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nodebreaker0-0/substrate/tree/prometheus_v0.3"},"B-Harvest")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stakezone/nmonpolkadot"},"nmonpolkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ironoa/polkadot-k8s-monitor"},"Polkadot-K8s-Monitor")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-watcher"},"Polkadot-Watcher")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/polkadot-kusama-1kv-telegram-bot"},"1KV Telegram Bot")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator payout management"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Colm3na/substrate-auto-payout"},"Substrate validator auto payout")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-payouts"},"Polkadot Payouts")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emostov/staking-payouts"},"staking-payouts CLI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stakelink/substrate-payctl"},"Payctl")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/turboflakes/crunch"},"crunch")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Staking Miner"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/staking-miner-v2"},"Staking Miner v2")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Nominator Tools"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/miepsik/validators_selection"},"Validator Selection")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/filippoweb3/polkanalyzer"},"Polkanalyzer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/filippoweb3/polkanalyzer-app"},"Polkanalyzer-app")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"signatures"},"Signatures"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"SR25519"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/schnorrkel"},"rust")," \ud83d\udfe2(contains partial bindings for C, JavaScript, and Python), ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/sr25519-dotnet"},".Net bindings")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/sr25519"},"C")," \u26aa",(0,o.kt)("em",{parentName:"td"},"(old)"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TerenceGe/sr25519-donna"},"C")," \u26aa",(0,o.kt)("em",{parentName:"td"},"(new)"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/soramitsu-sr25519-crust"},"C/C++")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/sr25519_dotnet"},"C#")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/go-schnorrkel"},"Go")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/debuggor/schnorrkel-java"},"java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/sr25519-bindings"},"PHP")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Signature Aggregation"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/apk-proofs"},"apk-proofs")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Distributed key generation (DKG) or management"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/isislovecruft/frost-dalek"},"keygen.rs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/sword"},"Secure Wallet Origin Distribution (SWORD)")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator HSMs"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/buildroot-zondax"},"Zondax Remote Signer")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"MPC"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/orochi-network/orochi-network.github.io"},"Orochi Network")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"consensus"},"Consensus"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"PoC"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/subspace/substrate"},"Spartan")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"PoW"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/pow"},"PoW consensus for Substrate")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kulupu/kulupu/tree/master/pow"},"RandomX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/recipes/tree/master/consensus/sha3pow"},"Sha3 PoW")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Block production"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/babe"},"BABE")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/aura"},"Aura")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Finality"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/frame/grandpa"},"GRANDPA")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/AlephBFT"},"AlephBFT")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/PureStake/nimbus"},"Nimbus: Upgradeable consensus framework")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"networking"},"Networking"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"SCALE Codec"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-scale-codec"},"Rust")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-scale-codec-ts"},"TypeScript")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/py-scale-codec"},"Python")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/gossamer/tree/development/pkg/scale/"},"Golang Chainsafe")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/scale.go"},"Golang Itering")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/MatthewDarnell/cScale"},"C")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/scale-codec-cpp"},"C++")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/api"},"JavaScript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/as-scale-codec"},"AssemblyScript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/hs-web3/tree/master/packages/scale/src/Codec"},"Haskell")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkaj"},"Java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/scale.rb"},"Ruby")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nbltrust/dart-scale-codec"},"Dart")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/swift-scale-codec"},"Swift")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/scale-codec-swift"},"scale-codec-swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/scale-codec-kotlin"},"scale-codec-kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/php-scale-codec"},"PHP")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/scale-codec-js-library"},"JavaScript by Soramitsu")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/scale-codec-comparator"},"Scale Codec Comparator")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/darwinia-messages-sol/blob/master/contracts/utils/contracts/ScaleCodec.sol"},"ScaleCodec.sol by Darwinia")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Snowfork/snowbridge/blob/main/core/packages/contracts/contracts/ScaleCodec.sol"},"ScaleCodec.sol by Snowfork")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/arijitAD/dotscale"},"Dotscale")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Networking Framework"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/libp2p/libp2p"},"libp2p")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DHT Crawler"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/atredispartners/dht-crawler-polkadot"},"Go")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkabot"},"Kotlin")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"RPC Tor-like access"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Evanesco-Labs/WhiteNoise.rs"},"WhiteNoise")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"primitives"},"Primitives"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Storage"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/frisitano/merkle-tree-db"},"Merkle Tree DB")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Merkle Proofs"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/solidity-merkle-trees"},"Solidity Trie Verifier")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h2",{id:"contributing"},"Contributing"),(0,o.kt)("p",null,"Pull requests, issues, or other contributions from the community are encouraged! You can not only\nadd specific projects, but also potentially interesting fields/areas which are currently missing in\nthe tech stack."),(0,o.kt)("p",null,"\u2757 All technologies listed above need to be open-source. Ideally, the links\nlead directly to the code."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Note: You will need a GitHub account to suggest changes or open issues. If you do not have one, you\nmay ",(0,o.kt)("a",{parentName:"em",href:"https://github.com/join"},"sign up for free"),".")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ccc1222e.8639f1ab.js b/assets/js/ccc1222e.8639f1ab.js deleted file mode 100644 index 55420e6d4a99..000000000000 --- a/assets/js/ccc1222e.8639f1ab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6920],{3905:(t,a,e)=>{e.d(a,{Zo:()=>m,kt:()=>k});var r=e(67294);function n(t,a,e){return a in t?Object.defineProperty(t,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[a]=e,t}function o(t,a){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable}))),e.push.apply(e,r)}return e}function i(t){for(var a=1;a=0||(n[e]=t[e]);return n}(t,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,e)&&(n[e]=t[e])}return n}var p=r.createContext({}),h=function(t){var a=r.useContext(p),e=a;return t&&(e="function"==typeof t?t(a):i(i({},a),t)),e},m=function(t){var a=h(t.components);return r.createElement(p.Provider,{value:a},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var a=t.children;return r.createElement(r.Fragment,{},a)}},u=r.forwardRef((function(t,a){var e=t.components,n=t.mdxType,o=t.originalType,p=t.parentName,m=l(t,["components","mdxType","originalType","parentName"]),s=h(e),u=n,k=s["".concat(p,".").concat(u)]||s[u]||d[u]||o;return e?r.createElement(k,i(i({ref:a},m),{},{components:e})):r.createElement(k,i({ref:a},m))}));function k(t,a){var e=arguments,n=a&&a.mdxType;if("string"==typeof t||n){var o=e.length,i=new Array(o);i[0]=u;var l={};for(var p in a)hasOwnProperty.call(a,p)&&(l[p]=a[p]);l.originalType=t,l[s]="string"==typeof t?t:n,i[1]=l;for(var h=2;h{e.r(a),e.d(a,{assets:()=>m,contentTitle:()=>p,default:()=>k,frontMatter:()=>l,metadata:()=>h,toc:()=>s});var r=e(87462),n=e(63366),o=(e(67294),e(3905)),i=["components"],l={id:"build-open-source",title:"Open Source Stack",sidebar_label:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",keywords:["open","source","development","code","resources","tools","apis"],slug:"../build-open-source"},p="Open Source Polkadot Stack \x3c!-- omit in toc --\x3e",h={unversionedId:"build/build-open-source",id:"build/build-open-source",title:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",source:"@site/../docs/build/build-open-source.md",sourceDirName:"build",slug:"/build-open-source",permalink:"/docs/build-open-source",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-open-source.md",tags:[],version:"current",lastUpdatedBy:"Keegan | W3F",lastUpdatedAt:1698042036,formattedLastUpdatedAt:"Oct 23, 2023",frontMatter:{id:"build-open-source",title:"Open Source Stack",sidebar_label:"Open Source Stack",description:"Overview of the open source Polkadot/Kusama Tech Stack",keywords:["open","source","development","code","resources","tools","apis"],slug:"../build-open-source"},sidebar:"docs",previous:{title:"Tool Index",permalink:"/docs/build-tools-index"},next:{title:"Hackathons",permalink:"/docs/build-hackathon"}},m={},s=[{value:"About",id:"about",level:2},{value:"Layers of Polkadot Stack",id:"layers-of-polkadot-stack",level:2},{value:"Wallets",id:"wallets",level:3},{value:"User Interface",id:"user-interface",level:3},{value:"Tools, APIs, and Languages",id:"tools-apis-and-languages",level:3},{value:"ink! Smart Contracts",id:"ink-smart-contracts",level:3},{value:"Chains and Pallets",id:"chains-and-pallets",level:3},{value:"Host",id:"host",level:3},{value:"Network Maintenance Tools",id:"network-maintenance-tools",level:3},{value:"Signatures",id:"signatures",level:3},{value:"Consensus",id:"consensus",level:3},{value:"Networking",id:"networking",level:3},{value:"Primitives",id:"primitives",level:3},{value:"Contributing",id:"contributing",level:2}],d={toc:s},u="wrapper";function k(t){var a=t.components,e=(0,n.Z)(t,i);return(0,o.kt)(u,(0,r.Z)({},d,e,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"open-source-polkadot-stack--omit-in-toc-"},"Open Source Polkadot Stack "),(0,o.kt)("admonition",{title:"Do your research before using open-source tools",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"The tools listed here are open-source and are linked directly to their source code. Before using these tools to build your projects, always ",(0,o.kt)("a",{parentName:"p",href:"/docs/how-to-dyor"},"do your research")," and be aware of ",(0,o.kt)("a",{parentName:"p",href:"/docs/learn-scams"},"scams"),".")),(0,o.kt)("p",null,"This page aims to provide an overview of the open-source Polkadot Tech Stack."),(0,o.kt)("p",null,"This is a living document, and we rely on everyone to contribute and help maintain\nit. ",(0,o.kt)("a",{parentName:"p",href:"#contributing"},(0,o.kt)("strong",{parentName:"a"},"Please feel free to make edits and additions via pull requests")),". We\napologize if we missed your project!"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#about"},"About")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#layers-of-polkadot-stack"},"Layers of Polkadot Stack"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#wallets"},"Wallets")," "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#user-interface"},"User Interface")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#tools-apis-and-languages"},"Tools, APIs, and Languages")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#ink-smart-contracts"},"ink! Smart Contracts")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#chains-and-pallets"},"Chains and Pallets")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#host"},"Host")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#network-maintenance-tools"},"Network Maintenance Tools")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#signatures"},"Signatures")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#consensus"},"Consensus")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#networking"},"Networking")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#primitives"},"Primitives")))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#contributing"},"Contributing"))),(0,o.kt)("h2",{id:"about"},"About"),(0,o.kt)("p",null,"The Polkadot Tech Stack is a subset of the Web 3.0 Tech Stack, which consists of the ",(0,o.kt)("strong",{parentName:"p"},"open-source"),"\ntechnologies contributing to and relying on ",(0,o.kt)("a",{parentName:"p",href:"https://polkadot.network/"},"Polkadot"),". It is meant to be used\nfor decentralized application (Dapp) development within numerous verticals, including DeFi, Gaming,\nProvenance and many others not pictured below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"|------|--------|------------|\n| DeFi | Gaming | Provenance |\n|______|________|____________|\n Dapps\n|--------------------------/-|\n| Explorers, Wallets / |\n|------------------------/---|\n| Tools, Apis, Languages/ |\n|----------------------/-----|\n| 2nd layer protocols / |\n|--------------------/-------|\n| Chains / other |\n|------------------/--- --|\n| *Polkadot* | tech |\n|------------------\\---------|\n| P2P, Crypto, Wasm \\ |\n|--------------------\\-------|\n")),(0,o.kt)("h2",{id:"layers-of-polkadot-stack"},"Layers of Polkadot Stack"),(0,o.kt)("p",null,"In the below sections, you can find a list of different layers of the Polkadot Stack."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Maintenance Status"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\ud83d\udfe2 Actively maintained"),(0,o.kt)("li",{parentName:"ul"},"\ud83d\udfe1 Stale (no activity on the main branch for one month)"),(0,o.kt)("li",{parentName:"ul"},"\u26aa Unmaintained (no activity on the main branch for more than three months)")),(0,o.kt)("h3",{id:"wallets"},"Wallets"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Web Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/Multix"},"Multix")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkasafe/polkasafe-ui"},"Polkasafe")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/apps"},"polkadot-js/apps")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman-web"},"Talisman Web Application")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/enkryptcom/mydotwallet"},"mydotwallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subid"},"Sub ID")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Primis-Labs/client"},"Primis")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3finance/sakura"},"Sakura")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/Web3Box-apps"},"Web3Box")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CoongCrafts/coong-wallet"},"Coong Wallet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan-multisig-react"},"Subscan Multisig UI - React")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan-multisig-ui"},"Subscan Multisig UI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DoraFactory/dorafactory-multisig"},"Dorafactory-Multisig")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/capi-multisig-app"},"Capi Multisig App")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"User-friendly Wallet based on the ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/frame/recovery"},"Recovery Pallet"),", Web wallets focused on user-onboarding (e.g. using ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/near/near-wallet"},"localStorage"),")")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Desktop Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/novasamatech/nova-spektr"},"nova-spektr")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/omni-desktop-prototype"},"Omni desktop")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Enterprise Wallets")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Browser Extensions"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman"},"Talisman-Extension")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubWallet-Extension"},"SubWallet-Extension")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/enkryptcom/enKrypt"},"Enkrypt")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/extension"},"Polkadot{.js}")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/PolkaGate/polkagate-extension"},"PolkaGate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainBridgeNetworkTeam/Doter"},"Doter")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GetSpeckle/speckle-browser-extension"},"Speckle OS")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/kuma-wallet"},"Kuma Cross-chain Wallet")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Sign-in with your Polkadot, Kusama, etc. account.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Mobile Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/airgap-it/airgap-wallet"},"AirGap")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubWallet-Mobile"},"SubWallet-Mobile")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/luniehq/lunie"},"Lunie")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkawallet-io/polkawallet-flutter"},"Polkawallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-signer"},"Parity Signer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/consenlabs/token-core"},"imToken")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/fearless-Android"},"Fearless Wallet Android")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/fearless-iOS"},"Fearless Wallet iOS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stylo-app/stylo"},"Stylo")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nova-wallet/nova-utils"},"Nova Wallet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fractapp/fractapp/"},"Fractapp")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Interstellar-Network/wallet-app"},"Interstellar Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hypha-dao/hashed-wallet"},"Hashed Wallet")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Burner Wallets/Faucet/Gifts"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/hamidra/dotdrop"},"dotdrop")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/vue-polkadot/apps"},"KodaDot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/astar-faucet-bot"},"Astar Faucet Bot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/karooolis/sybil-resistant-substrate-faucet"},"Generic sybil-resistant faucet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/StringNick/sybil-resistant-chat-bot-substrate-faucet"},"sybil-resistant Chat Bot Faucet")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"Faucet (a sybil-resistant way to receive free tokens)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Wallet Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/metamask-snap-polkadot"},"Metamask-Snap by Chainsafe")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"CLI Wallet"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/yxf/subwallet"},"Subwallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/canontech/proxy-hot-wallet"},"Proxy-hot-wallet")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Hardware Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZondaX/ledger-polkadot"},"Ledger Polkadot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-kusama"},"Ledger Kusama")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-statemint"},"Ledger Statemint")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/ledger-statemine"},"Ledger Statemine")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"Trezor")))),(0,o.kt)("h3",{id:"user-interface"},"User Interface"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Block Explorers"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/topmonks/calamar"},"Calamar")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/colorfulnotion/polkaholic"},"Polkaholic")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/explorer-api"},"Polkascan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Colm3na/polkastats-backend"},"Polkastats")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/subscan"},"Subscan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/statescan"},"Statescan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/edgeware-builders/edgscan"},"Edgscan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/epirus-substrate"},"Sirato")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/ink-substrate-explorer-api"},"ink! Explorer API")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/substats"},"Substats")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hybrid-explorer/hybrid-dapp"},"Hybrid Block Explorer")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Mempool focused explorer (including parachain transaction)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator Dashboards"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-telemetry"},"Polkadot Telemetry")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashquark-io/polkacube-frontend"},"Polkacube")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/buidl-labs/YieldScan"},"YieldScan")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-community/hubble/tree/master/app/controllers/polkadot"},"Hubble")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ArthurHoeke/cyclops"},"Cyclops")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3go-xyz/web3go-xyz-v2"},"Web3Go")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Node Explorers"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/protos-research/polkadot-node-explorer"},"Polkadot Node Explorer")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT Explorer"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/nft-gallery"},"NFT Explorer for Kusama & Polkadot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance Dashboards"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/governance-ui"},"Polkadot Delegation Dashboard")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/premiurly/polkassembly"},"Polkassembly")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/dotreasury"},"dotreasury")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/bright-tresury"},"Bright Treasury")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/collaboration"},"OpenSquare offchain voting")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/wpank/open-gov-insights"},"OpenGov Insights")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stake-plus/treasury-tracker"},"Treasury Tracker")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"UI for the Kusama and/or Polkadot treasury (see ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/pull/5715"},"bounty module"),"), UI for Parachain Lease Offering (PLO)")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Staking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/staking-rewards-collector"},"Staking Rewards Collector")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/jackson-harris-iii/staking-rewards-viewer"},"Staking Rewards Viewer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cryptolab-network/polkadot-staking-site"},"Polkadot Staking Site")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-staking-dashboard"},"Polkadot Staking Dashboard")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/James-Sangalli/dot-validator-selector"},"Polkadot/Kusama Validator Selector")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/James-Sangalli/dot-staking-income"},"Staking Income CSV Generator")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridge UI"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-bridges-ui"},"Parity Bridges UI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nutbox-dao/donut-interface"},"Donut Interface (Steem - Dot)")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Parachain/Crowdloan"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/jhonalino/parachains.network"},"Parachains.Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CrommVardek/polk-auction-ui"},"PolkAuction")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/10clouds/crowdloan-template"},"Crowdloan Front End Template")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hack-ink/slothunter/"},"Slothunter")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identicon"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/RidOne-technologies/polkadot-web-identicon"},"PolkadotWebIdenticon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RidOne-technologies/polkadot-angular-identicon"},"Polkadot Angular IdentIcon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Noc2/Bird-Identicon"},"Bird Identicon")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/KappaSigmaMu/ksm-app"},"KappaSigmaMu Fratority")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/quadratic-funding-webapp"},"Quadratic Funding Webapp")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://gitlab.com/polkawatch/polkawatch"},"Polkawatch"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bytepayment/bytepay"},"Bytepay")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Delmonicos/charging-management-platform"},"charging-management-platform")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TDSoftware/subidentity-webapp"},"subidentity-webapp")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opensquare-network/paid-qa/"},"OpenSquare Paid QA")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CrossChainLabs-DOT/dotpulse-api"},"DotPulse")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bsn-si/rubeus-smartcontract"},"Rubeus Keeper")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/justmert/eco-flow-frontend"},"Polkaflow")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/chainviz-v1"},"ChainViz")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fidi-tech/dotsight"},"Dotsight")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://docs.sui.io/build/zk_login"},"zkLogin"),", Portfolio Viewer like Zapper or Zerion")))),(0,o.kt)("h3",{id:"tools-apis-and-languages"},"Tools, APIs, and Languages"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Runtime/Parachain frameworks"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk"},"Polkadot Blockchain SDK")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/gosemble"},"Gosemble")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/subsembly"},"Subsembly")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/parachain-utilities"},"Parachain utilities")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gantree-io/gantree-core"},"Gantree")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Tools to create parachains with other frameworks, like the ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cosmos/cosmos-sdk"},"Cosmos SDK")," or ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/0xPolygon/cdk-validium-node"},"Polygon CDK"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Client Libraries"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/capi"},"Capi - Typescript")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/packages/tree/main/sub-api"},"sub-api")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/go-substrate-rpc-client"},"Go")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_api_dotnet"},".Net")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ajuna-network/Ajuna.NetApi"},".NET Standard 2.0")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubstrateGaming/Substrate.NET.Toolchain"},"Substrate .NET Toolchain")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"C++")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/finoabanking/substrate-c-tool"},"C")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/hs-web3"},"Haskell")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/api"},"Javascript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-api-sidecar"},"Substrate API Sidecar - TypeScript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/py-substrate-interface"},"Python")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkaj"},"Java (+ Android)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/strategyobject/substrate-client-java"},"Substrate Client Java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scs/substrate-api-client"},"Rust SCS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/subxt"},"Rust Parity (subxt)")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/trevor-crypto"},"Rust pdotc")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/php-substrate-api"},"PHP (gmajor-encrypt)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/neha0921/substrate-interface-package"},"PHP (neha0921)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/frontier"},"RPC-Ethereum")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/Substrate.swift"},"Swift")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NodleCode/substrate-client-kotlin"},"Kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/substrate-client-kotlin"},"substrate-client-kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/substrate-client-swift"},"substrate-client-swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rankanizer/polkadart"},"Dart")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polywrap/integrations"},"Substrate Core Polywrapper")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"RPC Gateway"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/subway"},"Subway")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Substrate Contract clients"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/go-patract"},"PatractGo")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Easy Runtime Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/hack-ink/subalfred"},"Subalfred")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kaichaosun/substrate-stencil"},"substrate-stencil")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kaichaosun/play-substrate"},"Play Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/substrate-node-template"},"substrate-node-template")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-playground"},"Substrate Playground")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/as-substrate-runtime"},"AssemblyScript Runtime Generation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/clearloop/sup"},"Substrate Package Manager")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/subsembly"},"Subsembly: Framework for developing AssemblyScript Substrate Runtimes")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bkchr/diener"},"dependency diener")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IDE Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/vscode-substrate"},"Substrate Marketplace VS Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/everstake/vscode-plugin-substrate"},"VS Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/everstake/atom-plugin-substrate"},"Atom Code Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/zombienet-vscode-extension"},"zombienet extension")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Runtime/Pallet Security"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/srlabs/substrate-runtime-fuzzer"},"Substrate Runtime Fuzzer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/shawntabrizi/substrate-toml-lint"},"Substrate Toml Lint")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kframework/wasm-semantics"},"K specifications")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSecurity/polpatrol"},"PolPatrol - Polkadot Runtime Checker")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Automated Runtime checking tools, economic audit simulator such as ",(0,o.kt)("a",{parentName:"td",href:"https://gauntlet.network/"},"gauntlet.network"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart Contract Languages"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"#ink-smart-contracts"},"ink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ask-lang/ask"},"Ask!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/slickup/subscript"},"Subscript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hyperledger-labs/solang"},"Solang")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eigerco/pallet-move"},"pallet-move")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pontem-network/sp-move"},"Move VM Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/neatcoin/neatcoin"},"Move smart contract by Neatcoin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pepyakin/substrate-seal-ebpf"},"eBPF Contracts Hackathon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/koute/polkavm"},"PolkaVM")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Functional Programming Languages, other languages with developed toolchains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-introspector"},"Polkadot introspector")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subdirectory/subshell"},"Subshell")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/sc-simnode"},"substrate-simnode")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/halva-suite/halva"},"Halva")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/redspot"},"Redspot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mixbytes/tank"},"MixBytes Tank")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NikVolf/sub-flood"},"sub-flood")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-debug-kit"},"Substrate debug-kit")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/JesseAbram/asset_cli_tool"},"Asset CLI tool")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/JesseAbram/unfinished_testing_tool"},"sub_crash")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chevdor/subwasm"},"subwasm")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ascjones/subsee"},"subsee")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-lab"},"polkadot-lab")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dwellir-public/rpc-perf/"},"RPC-perf")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Static Analysis"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/KaiserKarel/substrace"},"Substrace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/simon-perriard/saft"},"Static analyzer for Substrate FRAME's pallets")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CoinFabrik/scout"},"CoinFabrik Scout")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testnet"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/zombienet"},"Zombienet")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/chopsticks"},"Chopsticks")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-launch"},"Polkadot Launch")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/koute/polkadot-starship"},"polkadot-starship")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/maxsam4/fork-off-substrate"},"Fork off Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/try-runtime-cli"},"try-runtime-cli")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/parachain-launch"},"Parachain Launch")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zeeve-App/larch"},"Larch Zombienet GUI")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Benchmarking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk/tree/master/substrate/utils/frame/benchmarking-cli"},"Benchmarking CLI")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-stps"},"Polkadot sTPS")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/0xekez/clockchain"},"Clockchain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/shawntabrizi/substrate-graph-benchmarks"},"Substrate Graph Benchmarks")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Nikhil-Desai-Talentica/substrate-node-template-benchmarking"},"ink! & pallet benchmarking template")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/smart-bench"},"smart-bench")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Blockchain Indexing Engine"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/subsquid/squid-sdk"},"Squid SDK")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hybrid-explorer/hybrid-indexer"},"Hybrid Indexer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-archive"},"Substrate Archive")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/polkadot_psql_indexer"},"PSQL Indexer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playzero/substrate-graph"},"Substrate Graph")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OnFinality-io/subql"},"Subquery")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/p2p-org/polkadot-profit-transformer"},"MBELT3")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kodadot/stick"},"stick")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Infra3-Network/hyperdot"},"Hyperdot")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Blockchain/Event Monitoring"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/guardian"},"Web3 Guardian")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/HugoByte/aurras-event-manager"},"Aurras Event Manager")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hicommonwealth/chain-events"},"@commonwealth/chain-events")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/massbitchain"},"Massbit")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kianenigma/polkadot-basic-notification"},"Polkadot Basic Notifications")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sodazone/ocelloids"},"Ocelloids")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TrackingChains/TrackingChain"},"Tracking Chain")," \ud83d\udfe2,"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dodorare/crossbow"},"Crossbow")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://amethyst.rs/"},"Amethyst")," + ",(0,o.kt)("a",{parentName:"td",href:"https://substrate.dev/"},"Substrate"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"No-code Platforms"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/NovaBloq/Bubble-Plugin-Polkadot.js"},"EzCode's Polkadot.js plugin on Bubble.io")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Blackprint/nodes-polkadot.js"},"Blackprint Visual Programming Polkadot.js module")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subrelay/interface"},"SubRelay")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Wallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TalismanSociety/talisman-connect"},"Talisman Connect")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Koniverse/SubConnect"},"SubWallet-SubConnect")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nova-wallet/metadata-portal"},"Metadata Portal")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/Tesseract.rs"},"Tesseract")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/walletconnect-v2-monorepo"},"WalletConnect")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/BitGo/BitGoJS/tree/master"},"BitGoJS")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"XCM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/trappist"},"Trappist")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/PureStake/xcm-tools"},"XCM-tools")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/substrate-api-rpc"},"XCM-tools Golang")," \ud83d\udfe1,",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paraspell/ui-v2"},"ParaSpell")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/t3rn/xbi"},"XBI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockcoders/xcm-sdk"},"XCM TS/JS SDK")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/asset-transfer-api"},"asset-transfer-api")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/txwrapper-core"},"txwrapper-core")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/open-web3.js"},"open-web3 JS library")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CycanTech/GVM-Bridge"},"VM-Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/srtool"},"srtool")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chevdor/srtool-cli"},"srtool-cli")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-tip-bot"},"Substrate Tip Bot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/syntifi/ori"},"ORI (Onchain Risk Intelligence)")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/albertov19/PolkaTools"},"PolkaTools")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-scripts"},"polkadot-scripts")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/virto-network/sube"},"Sube")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/data-store-sidecar"},"data-store-sidecar")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SugarFunge/sugarfunge-node"},"SugarFunge")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/second-state/substrate-wasmedge"},"substrate-wasmedge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eightfish-org/eightfish"},"EightFish")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sandoxio/sandox"},"Sandox")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/apk-verifier/"},"APK verifier")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"ink-smart-contracts"},"ink! Smart Contracts"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Core Libraries"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink"},"ink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/cargo-contract"},"cargo-contract")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/polkadot-sdk/tree/master/substrate/frame/contracts"},"pallet-contracts")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Local Nodes"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-contracts-node"},"substrate-contracts-node")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/swankyhub/swanky-cli"},"Swanky")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart Contract Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/drink"},"DRink!")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/contracts-ui"},"contracts-ui")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/h4nsu/openbrush-contracts"},"OpenBrush")," \u2754, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/727-Ventures/sol2ink"},"Sol2Ink")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/protofire/polkadot-contract-wizard"},"Polkadot Contract Wizard")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/ink-wrapper"},"ink-wrapper")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink-playground"},"ink-playground")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/blockchain-it-hr/ink-remix-plugin"},"ink! Remix Plugin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/standardweb3/signac/"},"Signac")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/avirajkhare00/ink-boxes/"},"ink!-boxes")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/avirajkhare00/ink-wizard"},"ink!-smart-contract-wizard")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Security & Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/ink-waterfall"},"ink! Waterfall")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/ink-verifier-image"},"Verifier Image for ink!")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Brushfam/patron-backend/"},"Patron")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend Development"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/scio-labs/inkathon"},"ink!athon Boilerplate")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/useink"},"useink")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scio-labs/use-inkathon"},"useInkathon")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subsquid/squid-sdk/tree/master/substrate/ink-typegen"},"ink-typegen")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Brushfam/typechain-polkadot"},"Typechain Polkadot")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IDE Plugins"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ink-analyzer/ink-analyzer"},"ink! Analyzer")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridges"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dantenetwork/protocol-stack-for-ink"},"Dante Protocol")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DeFi"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/pendulum-ink-wrapper"},"Pendulum-Ink-Wrapper")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RottenKiwi/Panorama-Swap-INK-SC"},"Panorama Swap")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Juminstock/ink_bank"},"ink_bank")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/realnimish/polkadot-amm"},"Polkadot AMM")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/veradefi/defi"},"Vera")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nsure-tech/dot-contract"},"Nsure Insurance")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CycanTech/ELC"},"Everlasting Cash")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Coinversation/coinpro"},"Coinversation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zenlinkpro/zenlink-dex-contract"},"zenlink-dex-contract")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ReserveLabs/AlgoCash"},"AlgoCash")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"New seigniorage-style stable coins")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/OpenEmojiBattler/open-emoji-battler"},"Open Emoji Battler")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/WiktorStarczewski/newomega.polkadot/blob/master/newomega_delegator/newomega/newomega.rs"},"NewOmega")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DAO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/SyncraDAO/modular-dao"},"SyncraDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/subDAO-contracts"},"subDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RainbowcityFoundation/RainbowDAO-Protocol-Ink-milestone_1"},"RainbowDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Mangoboxlabs/Mangoboxink"},"MangoBox")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Mangoboxlabs/MangoSaleV2"},"MangoSale")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identity/DID"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/TheDotflow"},"Dotflow")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Oracles"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/diadata-org/dia-wasm-oracle"},"DIA WASM Oracle")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Spam Protection"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/prosopo-io/integration"},"Prosopo")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/AbaxFinance/Governance"},"Abax Governance")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ArtZero-io/Contracts"},"ArtZero")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/pnsproject/ink-aa"},"Polkadot Smart Account")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/swankyhub/magink-dapp"},"magink")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/ink-test-contracts"},"ink-test-contracts")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/agryaznov/candle-auction-ink"},"Candle Auctions")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubDAO-Network/polkasign-contract"},"polkasign-contract")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bsn-si/ocex-cli"},"OCEX")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/RoloiMoney/roloi-polkadot-w3f-grant"},"Roloi")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadrys/openPayroll"},"OpenPayroll")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/InkSmartContract/BlockchainFoodOrder"},"BlockchainFoodOrder")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"chains-and-pallets"},"Chains and Pallets"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Scalable Transactions"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/perun-network/perun-polkadot-pallet"},"Perun channels")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/perun-network/perun-polkadot-demo"},"CLI demo of Perun")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/Astar"},"Astar")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/celer-network/cChannel-substrate"},"Celer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GunClear/Gunero"},"Gunclear")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/BCS-Labs/tpscore-etl-system"},"TPScore")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null},"roll-ups, DAG-based consensus mechanisms, side chains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Bridges"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/interlay/interbtc"},"interBTC")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/dkg-substrate"},"DKG Substrate")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sygmaprotocol/sygma-substrate-pallets"},"Sygma")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bifrost-finance/bifrost-eos-relay"},"EOS by Bifrost")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-bridge"},"POA - Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/akropolisio/POC-polkadai-bridge"},"Substrate - Ethereum DAI Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-bridge-relay"},"Substrate - Substrate Bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chainx-org/ChainX"},"BTC by ChainX")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChorusOne/wormhole-bridge"},"Cosmos-Substrate bridge")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/octopus-network/substrate-ibc"},"Substrate IBC Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Snowfork/polkadot-ethereum"},"Polkadot Ethereum Bridge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/darwinia"},"Darwinia")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/spacewalk"},"Spacewalk: a Stellar bridge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/filecoindot"},"Filecoindot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/axelar-cgp-substrate/tree/main"},"Axelar-Substrate")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"ZCash")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Privacy"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LayerXcom/zero-chain"},"ZeroChain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/xx-labs/xxchain"},"xx network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Phala-Network/phala-blockchain"},"pLibra (Phala Network)")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/automata-network/automata"},"Automata Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zero-network/zero"},"Zero Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/appliedblockchain/silentdata-polkadot"},"Silent Data")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/anoma/masp"},"Multi-Asset Shielded Pool (MASP)")," , ",(0,o.kt)("a",{parentName:"td",href:"https://arxiv.org/pdf/2009.01020.pdf"},"Zkay"),", ",(0,o.kt)("a",{parentName:"td",href:"https://eprint.iacr.org/2018/962.pdf"},"Zexe"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"ZKP"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/zeropoolnetwork/zeropool-substrate-groth16-example"},"ZeroPool")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/megaclite"},"Megaclite")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/patractlabs/zkmega"},"zkMega")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AstarNetwork/plonk"},"PLONK for Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/protocol-substrate"},"Webb Anchor Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/zk-snarks-with-substrate/"},"zk-SNARKs tutorial")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zkvers/substrate-zk"},"substrate-zk")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"TEE"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Acurast/acurast-core"},"Acurast")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/integritee-network/worker"},"Integritee")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/scs/substraTEE"},"substraTEE")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/keysafe-protocol/keysafe-app"},"Keysafe Protocol")," \u26aa")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DeFi"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/kapilsinha/privadex"},"PrivaDEX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/uinb/fusotao"},"Fusotao")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/reef-defi/reef-chain"},"Reef")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Diora-Network/Diora"},"Diora")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pendulum-chain/pendulum"},"Pendulum Chain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/compound-finance/gateway"},"Compound Gateway")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/parallel-finance/parallel"},"Parallel Finance")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/PINT"},"PINT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/laminar-protocol/laminar-chain"},"Laminar Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AcalaNetwork/Acala"},"Acala")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/centrifuge/centrifuge-chain"},"Centrifuge")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stafiprotocol/stafi-node"},"Stafi")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/y2labs-0sh/definex"},"Definex")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAXFoundation/parrot"},"OAX Foundation")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/alexxuyang/substrate-dex"},"Cybex")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zenlinkpro/pallet-zenlink"},"Zenlink")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/lsaether/pallet-swaps"},"Swaps Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Polkadex-Substrate/Polkadex/tree/master"},"Polkadex")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/subdarkdex/subdex-parachain"},"SubDEX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/hack.HydraDX-node"},"HydraDX")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/apopiak/stablecoin"},"Substrate Stablecoin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/digitalnativeinc/standard-substrate"},"Standard protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sora-xor/sora2-network"},"Polkaswap")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/equilibrium-eosdt/equilibrium-curve-amm"},"Curve AMM")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/konomi-network/cumulus/"},"Konomi Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nutsfinance/stable-asset"},"Stable Asset")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/atscaletech/libra"},"Libra Payment")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mangata-finance/mangata-node"},"Mangata")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tidelabs/tidechain"},"Tidechain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/Basilisk-node"},"Basilisk")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/PolymeshAssociation/Polymesh"},"Polymesh")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"DEX with privacy and confidentiality features such as those found in a ",(0,o.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Dark_pool"},"dark pool"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Smart contract chains"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/PureStake/moonbeam"},"moonbeam")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/aleph-node"},"Aleph-node")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hicommonwealth/edgeware-node"},"Edgeware")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ParaState/substrate-ssvm-node"},"ParaState")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gear-tech/gear"},"gear")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cennznet/cennznet"},"CENNZnet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/skyekiwi/skyekiwi-network"},"SkyeKiwi")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/OAK-blockchain"},"OAK-blockchain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3labs/ice-substrate"},"ICE Blockchain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OmniBTC/PSC"},"Polkadot Smart Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/keep-starknet-strange/madara"},"Madara - Cairo/Starknet")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"smart contract chains with novel security approaches, smart contract chains based on existing toolchains")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Oracle"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/tellor-io/tellor-pallet"},"Tellor")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/laminar-protocol/open-runtime-module-library/tree/master/oracle"},"Laminar")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/smartcontractkit/chainlink-polkadot"},"Chainlink-polkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/aresprotocols/ares"},"Ares Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Kylin-Network/kylin-node"},"Kylin Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/interlay/interbtc-clients/tree/master/oracle"},"interbtc-clients oracle")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/webb-tools/anonima"},"Anonima")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SaaS3-Foundation/dRuntime-fat"},"SaaS3")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tellor-io/tellor-parachain-contracts"},"Tellor")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/diadata-org/bridgestate-ocw"},"Bridgestate Oracle")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Identity/DID"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/parami-foundation/parami-blockchain"},"Parami")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/litentry/litentry-parachain"},"Litentry")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/pallet-did"},"pallet-did")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/prasad-kumkar/dot-id"},"dot-id")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IoT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/NodleCode/chain"},"Nodle")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DataHighway-DHX/node"},"MXC/DataHighway")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/peaqnetwork/peaq-network-node"},"peaq-network-node")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Verifiable Claims"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/KILTprotocol/kilt-node"},"KILT")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/docknetwork/dock-substrate"},"Dock")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fennelLabs/Fennel-Protocol"},"Fennel Protocol")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Supply chain"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/digicatapult/dscp-node"},"DSCP Node")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Health care"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Music Industry"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Allfeat/Allfeat"},"Allfeat Network")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data Availability"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/availproject/avail"},"Avail")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZeroDAO/melodot"},"Melodot")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Social Networking"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LibertyDSNP/frequency"},"Frequency")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/social-network/blockchain"},"Social Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subsocial-parachain"},"SubSocial")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ZeroDAO/ZeroDAO-node"},"ZeroDAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/myriadsocial/myriad-node"},"Myriad Node")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/randombishop/wika_etl"},"Wika Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LibertyDSNP/mrc"},"Project Liberty")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/listenofficial/listen-parachain"},"Listen")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tribal-protocol/tribal_contract"},"Tribal Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rust-0x0/hex-space-protocol-substrate"},"Five Degrees on Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/acuity-social/acuity-substrate"},"Acuity Social")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},"Private instant messenger that uses on-chain identity")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Governance/DAO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/aisland-dao/aisland-node/tree/main"},"Aisland Node")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashed-io/hashed-substrate"},"Hashed Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sunshine-protocol/sunshine-bounty"},"Sunshine DAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NucleiStudio/governance-os"},"Governance OS")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/idavollnetwork/idavoll"},"Idavoll Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DoraFactory/Substrate-Moloch-V2"},"Substrate Moloch")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Qrucial/QRUCIAL-DAO"},"QRUCIAL-DAO")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sctllabs/societal-node"},"Societal")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/daos-org/daos"},"DAOs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/amiyatulu/shivarthu/"},"Shivarthu")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/faterium"},"Faterium")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/decentration/apps"},"Supersig")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/deep-ink-ventures/genesis-dao-node"},"GenesisDAO")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dao-entrance/dao-entrance-node"},"DAO Entrance")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/liberland/liberland_substrate"},"Liberland")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/consul/consul"},"Consul")," - Open Government and E-Participation Web Software")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Prediction Markets and Futarchy"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/zeitgeistpm/zeitgeist"},"Zeitgeist")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/XPredictMarket/NodePredict"},"X Predict Market")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Messaging"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/validitylabs/HOPR-PL-Substrate"},"HOPR")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chainify/nolik"},"Nolik")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Uke-Messaging/uke-pallet"},"Uke")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Belsoft-rs/diffychat-pallet"},"Diffy Chat")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"File Storage, Cloud"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/dappforce/subsocial-offchain"},"Subsocial-Offchain")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playproject-io/datdot"},"DatDot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/crustio/crust"},"Crust Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rs-ipfs/offchain-ipfs-manual"},"offchain::ipfs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/canyon-network/canyon"},"Canyon Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cumulus2021/cess"},"CESS")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/cess-proving-system"},"CESS Proving Subsystem")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ideal-lab5/iris"},"Iris")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/CESSProject/fmd-cess"},"fmd-cess")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DanHenton/pocket-substrate/tree/ipfs-ocw"},"IPFS Frame V3")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/threefoldtech/tfchain"},"Threefold Chain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Apron-Network/apron-node"},"Apron")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TDSoftware/substrate-ipfs"},"IPFS Utilities")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Name Service"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/xaya/substrate-names"},"Substrate Names")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hskang9/substrate-name-service"},"ENS on Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/pnsproject/pns-pallets"},"PNS-Pallets")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/HeisenbergLin22/Faceless_milestone2_delivery"},"Faceless")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ff13dfly/Anchor"},"Anchor")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Gaming"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/bit-country/Bit-Country-Blockchain"},"Bit.country")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SubGame-Network/subgame-network"},"SubGame")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/playzero/subzero"},"subzero")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/web3gamesofficial/web3games-blockchain"},"Web3Games")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ajuna-network/Ajuna"},"Ajuna Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/cryptoviet/gafi"},"Gafi Network")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://gitlab.com/asylum-space/asylum-item-nft"},"Asylum")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/3Dpass/3DP"},"3DPass")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polketio/toearnfun_flutter_app"},"Polket")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Computation/AI"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/DeepBrainChain/DeepBrainChain-MainChain"},"DeepBrain Chain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/anudit/cerebrum"},"AI Infrastructure on Blockchain")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Enable specific use-cases"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/deep-ink-ventures/pallet_hookpoints"},"pallet-hookpoints")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/substrate-node-robonomics"},"Robonomics")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/UniversalDot/pallets"},"UniversalDOT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/EvercityEcosystem/evercity-chain"},"Evercity Sustainable Finance Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/fennelLabs/Fennel-Protocol"},"Fennel Protocol")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/logion-network/logion-node"},"logion")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"NFT"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/capsule-corp-ternoa/chain"},"ternoa")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/danforbes/pallet-nft"},"FRAME Pallet: NFTs for Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/UniqueNetwork/unique-chain"},"Unique NFT Parachain")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DNFT-Team/dnft-substrate-node/tree/master/pallets"},"DNFT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rmrk-team/rmrk-substrate"},"RMRK-Substrate")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Popular-Coding/nt-nft"},"NT-NFTs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/GreenLemonProtocol/dksap-polkadot"},"Green Lemon")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/Basilisk-node"},"Basilisk")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Randomness"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/substrate/tree/randomness-beacon"},"DKG and Randomness Beacon")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/random-meat/drand-substrate-client"},"drand-substrate-client")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Licensing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/anagolay/anagolay-chain"},"Anagolay Network")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Banking Integration"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/element36-io/ebics-java-service"},"FIAT on-off-ramp")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Crowdfunding"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ImbueNetwork/imbue"},"Imbue Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/zhangjiannan/QFgrant"},"Quadratic Funding pallet by Dora")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/OAK-Foundation/quadratic-funding-pallet/tree/master"},"Quadratic Funding pallet by OAK")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413"},"Minimum Anti-Collusion Infrastructure (MACI)"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Collection of Pallets"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/open-web3-stack/open-runtime-module-library"},"Substrate Open Runtime Module Library")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/warehouse"},"warehouse")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/InvArch/InvArch-Frames"},"InvArch FRAME Pallet Library")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Marketplaces"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/WowLabz/dot-marketplace-v2/tree/Phase3_Milestone3"},"Dot Marketplace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/hashed-io/hashed-substrate/tree/main/pallets/gated-marketplace"},"Gated Marketplace")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Popular-Coding/ventur"},"Ventur")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Carbon Credits"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/bitgreen/bitg-node"},"BitGreen")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/EvercityEcosystem/carbon-assets"},"Carbon Assets Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SequesterChain/pallets"},"Sequester Pallets")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"UTXO"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Off-Narrative-Labs/Tuxedo"},"Tuxedo")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Moonsong-Labs/moonkit"},"Moonkit")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/substrate-account-filter"},"Substrate Account Filter")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/opentensor/subtensor"},"Subtensor")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AdMetaNetwork/admeta"},"AdMeta")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/chocolatenetwork/chocolate-node"},"Chocolate Node")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/virto-network/virto-node"},"Virto Network")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/substrate-validator-set"},"Substrate Validator Set")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/DEIPworld/deip-node"},"DEIP")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/debionetwork/debio-node"},"DeBio")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/mathwallet/MathChain"},"MathChain")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/encointer/encointer-node"},"encointer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/grasslandnetwork/substrate_node"},"Grassland")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/rusty-crewmates/substrate-tutorials"},"Substrate-Tutorials")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Fair-Squares/fair-squares"},"Fair Squares")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/totem-tech/totem"},"Totem Live Accounting")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/herou/EscrowPallet"},"Escrow Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/NexTokenTech/TREX"},"TREX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/relationlabs/Relation-Graph"},"Relation Graph")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gertt/Invoice"},"Decentralized Invoice")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/redstone-network/redstone-node"},"Redstone Network")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/WunderbarNetwork/access-control"},"Access Control Pallet")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Omniverse-Web3-Labs/omniverse-swap/tree/web3-grant"},"Omniverse DLT")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/substrate-ismp"},"ISMP")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/xcmp_prototype_playground"},"XCMP")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/dhiway/cord"},"CORD Chain")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null},"Decentralized review/reputation system")))),(0,o.kt)("h3",{id:"host"},"Host"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Rust"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate"},"Substrate")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/cumulus"},"Cumulus")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"C++"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/kagome"},"Kagome")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/mayon"},"Mayon")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Go"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/gossamer"},"Gossamer")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Java"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/Fruzhin"},"Fruzhin")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/java-host-research"},"Java Host Research")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"AssemblyScript"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Light Client"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/smol-dot/smoldot"},"smoldot")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate-connect"},"Substrate Connect")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/eqlabs/polkadot-light-client"},"C++ Polkadot Light Client")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Testing"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/polkadot-conformance"},"Polkadot Conformance")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sigp/polkafuzz"},"Polkafuzz")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"network-maintenance-tools"},"Network Maintenance Tools"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Secure validator setup"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkachu/polkadot-validator"},"Polkadot Validation Node Ansible Setup")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-validator-setup"},"W3F Polkadot Validator Setup")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Nexus2k/polkadot-ansible"},"polkadot-ansible")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"High availability setup"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/luguslabs/archipel"},"Archipel")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/protofire/polkadot-failover-mechanism"},"Polkadot Failover Mechanism")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Datagen-Project/Datagen-Substrate-Grant"},"Datagen")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/bright/substrate-raft"},"High Availability Validator Setup")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Load Balanced Endpoints"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/insight-w3f/terragrunt-polkadot"},"terragrunt-polkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sudoblockio/substrate-meta"},"Geometry Labs' Substrate Meta repo")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Deployment Tools"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Blockdaemon/bpm-sdk"},"Polkadot Package Manager")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/akropolisio/polkahub-monorepo"},"PolkaHub")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/AvadoDServer/AVADO-DNP-Polkadot-custom"},"Avado")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-deployer"},"Polkadot Deployer")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/for-parity-with-love/unified-collator-node-deployment"},"Unified Collator Deployment")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator monitoring"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/turboflakes/one-t"},"ONE-T")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/subvt-backend"},"SubVT")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/SimplyVC/panic"},"P.A.N.I.C.")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/galacticcouncil/polkalert"},"Polkalert")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nodebreaker0-0/substrate/tree/prometheus_v0.3"},"B-Harvest")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stakezone/nmonpolkadot"},"nmonpolkadot")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ironoa/polkadot-k8s-monitor"},"Polkadot-K8s-Monitor")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-watcher"},"Polkadot-Watcher")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/helikon-labs/polkadot-kusama-1kv-telegram-bot"},"1KV Telegram Bot")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator payout management"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Colm3na/substrate-auto-payout"},"Substrate validator auto payout")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/polkadot-payouts"},"Polkadot Payouts")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emostov/staking-payouts"},"staking-payouts CLI")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/stakelink/substrate-payctl"},"Payctl")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/turboflakes/crunch"},"crunch")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Staking Miner"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/staking-miner-v2"},"Staking Miner v2")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Nominator Tools"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/miepsik/validators_selection"},"Validator Selection")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/filippoweb3/polkanalyzer"},"Polkanalyzer")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/filippoweb3/polkanalyzer-app"},"Polkanalyzer-app")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"signatures"},"Signatures"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"SR25519"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/schnorrkel"},"rust")," \ud83d\udfe2(contains partial bindings for C, JavaScript, and Python), ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gautamdhameja/sr25519-dotnet"},".Net bindings")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/sr25519"},"C")," \u26aa",(0,o.kt)("em",{parentName:"td"},"(old)"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/TerenceGe/sr25519-donna"},"C")," \u26aa",(0,o.kt)("em",{parentName:"td"},"(new)"),", ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/soramitsu-sr25519-crust"},"C/C++")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/usetech-llc/sr25519_dotnet"},"C#")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/go-schnorrkel"},"Go")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/debuggor/schnorrkel-java"},"java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/sr25519-bindings"},"PHP")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Signature Aggregation"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f/apk-proofs"},"apk-proofs")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Distributed key generation (DKG) or management"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/isislovecruft/frost-dalek"},"keygen.rs")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/w3f-grants-archive/sword"},"Secure Wallet Origin Distribution (SWORD)")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Validator HSMs"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Zondax/buildroot-zondax"},"Zondax Remote Signer")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"MPC"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/orochi-network/orochi-network.github.io"},"Orochi Network")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"consensus"},"Consensus"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"PoC"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/subspace/substrate"},"Spartan")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"PoW"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/pow"},"PoW consensus for Substrate")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/kulupu/kulupu/tree/master/pow"},"RandomX")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/substrate-developer-hub/recipes/tree/master/consensus/sha3pow"},"Sha3 PoW")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Block production"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/babe"},"BABE")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/client/consensus/aura"},"Aura")," \ud83d\udfe1"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Finality"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/substrate/tree/master/frame/grandpa"},"GRANDPA")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Cardinal-Cryptography/AlephBFT"},"AlephBFT")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Other"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/PureStake/nimbus"},"Nimbus: Upgradeable consensus framework")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"networking"},"Networking"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"SCALE Codec"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-scale-codec"},"Rust")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/paritytech/parity-scale-codec-ts"},"TypeScript")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkascan/py-scale-codec"},"Python")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/ChainSafe/gossamer/tree/development/pkg/scale/"},"Golang Chainsafe")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/scale.go"},"Golang Itering")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/MatthewDarnell/cScale"},"C")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/scale-codec-cpp"},"C++")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/polkadot-js/api"},"JavaScript")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/LimeChain/as-scale-codec"},"AssemblyScript")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/airalab/hs-web3/tree/master/packages/scale/src/Codec"},"Haskell")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkaj"},"Java")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/itering/scale.rb"},"Ruby")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/nbltrust/dart-scale-codec"},"Dart")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/tesseract-one/swift-scale-codec"},"Swift")," \ud83d\udfe1, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/scale-codec-swift"},"scale-codec-swift")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/sublabdev/scale-codec-kotlin"},"scale-codec-kotlin")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/php-scale-codec"},"PHP")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/soramitsu/scale-codec-js-library"},"JavaScript by Soramitsu")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/gmajor-encrypt/scale-codec-comparator"},"Scale Codec Comparator")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/darwinia-network/darwinia-messages-sol/blob/master/contracts/utils/contracts/ScaleCodec.sol"},"ScaleCodec.sol by Darwinia")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/Snowfork/snowbridge/blob/main/core/packages/contracts/contracts/ScaleCodec.sol"},"ScaleCodec.sol by Snowfork")," \ud83d\udfe2, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/arijitAD/dotscale"},"Dotscale")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Networking Framework"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/libp2p/libp2p"},"libp2p")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"DHT Crawler"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/atredispartners/dht-crawler-polkadot"},"Go")," \u26aa, ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/emeraldpay/polkabot"},"Kotlin")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"RPC Tor-like access"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/Evanesco-Labs/WhiteNoise.rs"},"WhiteNoise")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h3",{id:"primitives"},"Primitives"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Components"),(0,o.kt)("th",{parentName:"tr",align:null},"Existing projects"),(0,o.kt)("th",{parentName:"tr",align:null},"Potentially interesting projects"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Storage"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/frisitano/merkle-tree-db"},"Merkle Tree DB")," \u26aa"),(0,o.kt)("td",{parentName:"tr",align:null})),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Merkle Proofs"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/polytope-labs/solidity-merkle-trees"},"Solidity Trie Verifier")," \ud83d\udfe2"),(0,o.kt)("td",{parentName:"tr",align:null})))),(0,o.kt)("h2",{id:"contributing"},"Contributing"),(0,o.kt)("p",null,"Pull requests, issues, or other contributions from the community are encouraged! You can not only\nadd specific projects, but also potentially interesting fields/areas which are currently missing in\nthe tech stack."),(0,o.kt)("p",null,"\u2757 All technologies listed above need to be open-source. Ideally, the links\nlead directly to the code."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Note: You will need a GitHub account to suggest changes or open issues. If you do not have one, you\nmay ",(0,o.kt)("a",{parentName:"em",href:"https://github.com/join"},"sign up for free"),".")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cda87995.06a50913.js b/assets/js/cda87995.06a50913.js new file mode 100644 index 000000000000..7e23dcbade8f --- /dev/null +++ b/assets/js/cda87995.06a50913.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3933],{3905:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>d});var o=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,o)}return a}function n(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var s=o.createContext({}),p=function(t){var e=o.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):n(n({},e),t)),a},u=function(t){var e=p(t.components);return o.createElement(s.Provider,{value:e},t.children)},c="mdxType",h={inlineCode:"code",wrapper:function(t){var e=t.children;return o.createElement(o.Fragment,{},e)}},m=o.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,s=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),c=p(a),m=r,d=c["".concat(s,".").concat(m)]||c[m]||h[m]||i;return a?o.createElement(d,n(n({ref:e},u),{},{components:a})):o.createElement(d,n({ref:e},u))}));function d(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,n=new Array(i);n[0]=m;var l={};for(var s in e)hasOwnProperty.call(e,s)&&(l[s]=e[s]);l.originalType=t,l[c]="string"==typeof t?t:r,n[1]=l;for(var p=2;p{a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>c});var o=a(87462),r=a(63366),i=(a(67294),a(3905)),n=["components"],l={id:"build-tools-index",title:"Tool Index",sidebar_label:"Tool Index",description:"Reference point for a list of tools to support your development.",keywords:["tools","clients","libraries","explorers","monitor","data","SCALE"],slug:"../build-tools-index"},s=void 0,p={unversionedId:"build/build-tools-index",id:"build/build-tools-index",title:"Tool Index",description:"Reference point for a list of tools to support your development.",source:"@site/../docs/build/build-tools-index.md",sourceDirName:"build",slug:"/build-tools-index",permalink:"/docs/build-tools-index",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-tools-index.md",tags:[],version:"current",lastUpdatedBy:"Nikos Kontakis",lastUpdatedAt:1698151575,formattedLastUpdatedAt:"Oct 24, 2023",frontMatter:{id:"build-tools-index",title:"Tool Index",sidebar_label:"Tool Index",description:"Reference point for a list of tools to support your development.",keywords:["tools","clients","libraries","explorers","monitor","data","SCALE"],slug:"../build-tools-index"},sidebar:"docs",previous:{title:"Transaction Construction",permalink:"/docs/build-transaction-construction"},next:{title:"Open Source Stack",permalink:"/docs/build-open-source"}},u={},c=[{value:"Wallets",id:"wallets",level:2},{value:"Block Explorers",id:"block-explorers",level:2},{value:"Blockchain Analytics",id:"blockchain-analytics",level:2},{value:"Network Monitoring & Reporting",id:"network-monitoring--reporting",level:2},{value:"Clients",id:"clients",level:2},{value:"Tools",id:"tools",level:2},{value:"UI",id:"ui",level:2},{value:"Libraries",id:"libraries",level:2},{value:"Polkadot-JS API",id:"polkadot-js-api",level:3},{value:"Alternative Libraries",id:"alternative-libraries",level:3},{value:"CLI Tools",id:"cli-tools",level:3},{value:"WASM",id:"wasm",level:3},{value:"RPC and API Tools",id:"rpc-and-api-tools",level:3},{value:"SCALE Codec",id:"scale-codec",level:3},{value:"Data Crawling and Conversion",id:"data-crawling-and-conversion",level:2}],h={toc:c},m="wrapper";function d(t){var e=t.components,a=(0,r.Z)(t,n);return(0,i.kt)(m,(0,o.Z)({},h,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Here, we provide a list of tools available for your development needs. They are sorted by context.\nIf you're actively maintaining a tool that might be useful to other Polkadot, Kusama or Substrate\ndevelopers, feel free to ",(0,i.kt)("a",{parentName:"p",href:"/docs/contributing"},"add it in"),"."),(0,i.kt)("h2",{id:"wallets"},"Wallets"),(0,i.kt)("p",null,"Please see the ",(0,i.kt)("a",{parentName:"p",href:"/docs/wallets-and-extensions"},"Wallets")," page."),(0,i.kt)("h2",{id:"block-explorers"},"Block Explorers"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps Explorer")," - Polkadot dashboard block\nexplorer. Supports dozens of other networks, including Kusama, Westend, and other remote or local\nendpoints. ",(0,i.kt)("a",{parentName:"li",href:"https://ipfs.io/ipns/dotapps.io"},"Access via IPFS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkascan.io/"},"Polkascan")," - Blockchain explorer for Polkadot, Kusama, and other related\nchains. ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/polkascan-os"},"Repo"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://subscan.io"},"Subscan")," - Blockchain explorer for Substrate chains.\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/itering/subscan-essentials"},"Repo"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://dotscanner.com?utm_source=polkadot_wiki"},"DotScanner")," - Polkadot & Kusama Blockchain\nexplorer."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://3xpl.com/polkadot"},"3xpl.com")," - Fastest ad-free universal block explorer and JSON API with\nPolkadot support."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://blockchair.com/polkadot"},"Blockchair.com")," - Universal blockchain explorer and search\nengine with Polkadot support."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkaholic.io"},"Polkaholic.io")," - Polkadot & Kusama Blockchain explorer with API and DeFi\nsupport across 40+ parachains.")),(0,i.kt)("h2",{id:"blockchain-analytics"},"Blockchain Analytics"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://app.web3go.xyz/#/"},"Web3go")," - An open platform for everyone to play with, curate and\nvisualize multi-blockchain data"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkawatch.app/"},"Polkawatch")," - Polkadot Decentralization Analytics")),(0,i.kt)("h2",{id:"network-monitoring--reporting"},"Network Monitoring & Reporting"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://telemetry.polkadot.io/"},"Polkadot Telemetry Service")," - Network information including what\nnodes are running the chain, what software versions they are running, sync status, and location."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://gitlab.com/Polkabot"},"Polkabot")," - Polkadot network monitoring and reporting using Matrix\n(Riot / Element) chat. Users may create custom bot plugins.\n",(0,i.kt)("a",{parentName:"li",href:"https://medium.com/polkadot-network/polkabot-a3dba18c20c8"},"Blogpost"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/Ryabina-io/substratebot"},"Ryabina's Telegram Bot")," - A Telegram bot for\nmonitoring on-chain events of Substrate chains.\n",(0,i.kt)("a",{parentName:"li",href:"https://gitlab.com/Polkabot/polkabot"},"GitHub Repository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkastats.io/"},"PolkaStats")," - Polkadot network statistics (includes Kusama). Shows\nnetwork information and staking details from validators and intentions.\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/Colm3na/polkastats-v2/"},"GitHub Repository"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/SimplyVC/panic"},"Panic")," - A node monitoring and alert server for validators."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/open-web3-stack/guardian"},"OpenWeb3/Guardian")," - A CLI tool and JS library to\nmonitor on chain states and events."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/sodazone/ocelloids"},"Ocelloids SDK")," - Typescript SDK for multi-chain monitoring\nthat supports domain-specific logic for different pallets.")),(0,i.kt)("h2",{id:"clients"},"Clients"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot"},"Polkadot")," - The original Rust implementation of the\nPolkadot Host."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/kagome"},"Kagome")," - A C++ Polkadot implementation of the Polkadot Host\ndeveloped by ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu"},"Soramitsu"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/ChainSafe/gossamer"},"Gossamer")," - A Go implementation of the Polkadot Host\ndeveloped by ",(0,i.kt)("a",{parentName:"li",href:"https://chainsafe.io/"},"ChainSafe Systems"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/txwrapper"},"TX Wrapper")," - Helper functions for offline transaction\ngeneration.")),(0,i.kt)("h2",{id:"tools"},"Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate"},"Substrate")," - Blockchain development platform written in\nRust. The Rust version of the Polkadot Host is being built with Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.substrate.io/"},"Substrate Docs")," - Comprehensive documentation and tutorials for\nbuilding a blockchain using Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/vscode-substrate"},"Substrate VSCode plugin"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-debug-kit"},"Substrate Debug Kit")," - A collection of debug\ntools and libraries around substrate chains. Includes tools to calculate NPoS elections offline,\ndisk usage monitoring, test templates against chain state and other pallet-specific helper."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://crates.io/crates/diener"},"Diener")," - A tool for easy changing of Polkadot or Substrate\ndependency versions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/shawntabrizi/polkadot-launch"},"Polkadot Launch")," - A tool to easily launch\ncustom local parachain-enabled Polkadot versions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/halva-suite/halva"},"Halva")," - A Truffle-inspired local development environment\nfor Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/maxsam4/fork-off-substrate"},"Fork-off Substrate")," - Copies the state of an\nexisting chain into your local version and lets you further experiment on it."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.chevdor.com/tags/srtool/"},"srtool")," - A tool for verifying runtime versions against\non-chain proposal hashes."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/nikvolf/sub-bench"},"sub-bench")," - A tool to spam your node with transactions for\nthe sake of benchmarking."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/danforbes/substrate-devhub-utils"},"substrate-devhub-utils")," - A set of\nJavaScript utilities making life with Substrate a little easier."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/NikVolf/sub-flood"},"sub-flood")," - A tool to benchmark Substrate by flooding it\nwith requests.")),(0,i.kt)("h2",{id:"ui"},"UI"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/Swader/polkadash"},"Polkadash")," - VueJS-based starter kit for custom user\ninterfaces for Substrate chains."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/apps"},"Polkadot JS Apps UI")," - Repository of the\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps"},"polkadot.js.org/apps")," UI."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/substrate-developer-hub/substrate-front-end-template"},"Substrate Front-end Template")," -\nReactJS-based starter UI for custom user interfaces for Substrate chains."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/extension"},"Polkadot JS Browser Extension")," - Key management in a\nChrome extension."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.cloud/"},"Polkadot Cloud")," - A library and platform for developing and publishing assets for Polkadot dapps.")),(0,i.kt)("h2",{id:"libraries"},"Libraries"),(0,i.kt)("h3",{id:"polkadot-js-api"},"Polkadot-JS API"),(0,i.kt)("p",null,"The Polkadot-JS API provides various utility functions that are used across all projects in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"@polkadot")," namespace and is split into a number of internal utility packages. The documentation and\nusage instructions are provided at ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/"},"Polkadot-JS API Documentation"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring"},"@polkadot/keyring")," This allows you to create and load\naccounts in JavaScript. It is helpful for creating wallets or any application that will require\nthe user to write to chain. ",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring/start/create"},"Examples"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring/start/install#other-dependencies"},"@polkadot/util")," Utility\nfunctions like checking if a string is hex-encoded."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/util-crypto/"},"@polkadot/util-crypto")," Useful cryptographic utilities\nfor developing with Polkadot.")),(0,i.kt)("h3",{id:"alternative-libraries"},"Alternative Libraries"),(0,i.kt)("p",null,"The following libraries/SDKs allow for interfacing with a Substrate node in other languages:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/py-substrate-interface"},"Python Library by Polkascan")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/centrifuge/go-substrate-rpc-client"},"Go Library by Centrifuge")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/strategyobject/substrate-client-java"},"Java Library by StrategyObject")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/fearless-utils-iOS"},"Fearless Utils iOS Swift SDK")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/nova-wallet/substrate-sdk-ios"},"Nova Wallet iOS/Swift Substrate SDK")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/fearless-utils-Android"},"Kotlin SDK"))),(0,i.kt)("h3",{id:"cli-tools"},"CLI Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/api-cli"},"@polkadot/api-cli")," Command\nline interface for the polkadot API. ",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/api/start"},"Documentation"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/monitor-rpc"},"@polkadot/monitor-rpc")," An\nRPC monitor for Polkadot. See the RPC tools below for additional information."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/signer-cli"},"@polkadot/signer-cli")," A\nTool to construct, sign, and broadcast transactions. Signing can be done offline."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"Polkadot API Cpp")," - A \u0421++ API for Polkadot, can\nbuild ",(0,i.kt)("inlineCode",{parentName:"li"},"clip"),", a command line tool."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.substrate.io/reference/command-line-tools/subkey/"},"Subkey")," - Command line utility\nfor generating and inspecting key pairs.")),(0,i.kt)("h3",{id:"wasm"},"WASM"),(0,i.kt)("p",null,"WebAssembly related tools and projects."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/ink/"},"ink!")," - An eDSL to write WebAssembly based smart contracts\nusing the Rust programming language."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/parity-wasm"},"parity-wasm")," - Low-level WebAssembly format library."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/wasm-utils"},"wasm-utils")," - Collection of WebAssembly utilities used\nin pwasm-ethereum and substrate contract development."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/wasmi"},"wasmi")," - A WebAssembly interpreter conceived as a component\nof parity-ethereum (Ethereum-like contracts in Wasm) and Substrate.")),(0,i.kt)("h3",{id:"rpc-and-api-tools"},"RPC and API Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/api/tree/master/packages/rpc-provider"},"@polkadot/api/rpc-provider"),"\nDemonstrates how the JS tools interact with the node over RPC."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/substrate/rpc"},"RPC documentation")," - Documentation of Substrate RPC\nmethods."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/SimplyVC/polkadot_api_server"},"Polkadot API Server by SimplyVC")," - A wrapper\naround the Polkadot API which makes it easier to make Polkadot API calls from any programming\nlanguage."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/itering/substrate-api-rpc"},"Go: Subscan API")," - Go API for Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"C++ Polkadot API")," - \u0421++ API for Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/ajuna-network/Ajuna.SDK"},".NET Toolchain for Polkadot/Substrate API")," -\nToolchain to generate Polkadot API & Service Layer for .NET (usable in Unity)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_dotnet"},".NET Polkadot API")," - Polkadot Substrate API\nfor .NET."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/py-substrate-interface"},"Python Polkadot API")," - Polkadot library for\nPython."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/centrifuge/go-substrate-rpc-client/"},"GSRPC")," - Substrate RPC client in Go,\na.k.a. GSRPC."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-api-sidecar"},"Substrate API Sidecar")," - An HTTP wrapper for\nSubstrate, abstracting some complex RPC calls into simple REST calls."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-subxt"},"Subxt")," - A Rust library to submit extrinsics to a\nSubstrate node via RPC.")),(0,i.kt)("h3",{id:"scale-codec"},"SCALE Codec"),(0,i.kt)("p",null,"The SCALE (Simple Concatenated Aggregate Little-Endian) Codec is a lightweight, efficient, binary\nserialization and deserialization codec."),(0,i.kt)("p",null,"It is designed for high-performance, copy-free encoding and decoding of data in resource-constrained\nexecution contexts, such as the Substrate runtime. It is not self-describing in any way and assumes\nthe decoding context has all type knowledge about the encoded data."),(0,i.kt)("p",null,"It is used in almost all communication to/from Substrate nodes, so implementations in different\nlanguages exist:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/substrate-developer-hub/awesome-substrate#scale-codec"},"Substrate Awesome"),"\nmaintains a list of SCALE codex implementations.")),(0,i.kt)("h2",{id:"data-crawling-and-conversion"},"Data Crawling and Conversion"),(0,i.kt)("p",null,"The following tools help you extract and structure data from a Substrate node."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/polkascan-pre-harvester"},"Polkascan PRE Harvester"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/polkascan-pre-explorer-gui"},"matching explorer for harvested data"),") -\nTransforms raw blockchain data into relational data."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-archive"},"Parity's Substrate Archive")," - Can be run\nalongside a Substrate node to archive all blocks, state, and extrinsic data into PostgreSQL\ndatabase."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/subsquid/squid-archive-setup"},"Subsquid Archives")," - Generate a GraphQL database\nfrom a Substrate chain's data with rich filtering and querying capabilities. The data (events,\nextrinsics, blocks) for most parachains is readily available though public archive GraphQL\nendpoints, kept in\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/subsquid/archive-registry/blob/main/archives.json"},"Squid Archive Registry")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/TheGoldenEye/polka-store"},"Polka-store")," - A tool which scans a Substrate chain\nand stores balance-relevant transactions in an SQLite database."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/playzero/substrate-graph"},"Substrate-graph")," - A compact indexer for Substrate\nbased nodes providing a GraphQL interface.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cda87995.72a66ef4.js b/assets/js/cda87995.72a66ef4.js deleted file mode 100644 index eec8bd912071..000000000000 --- a/assets/js/cda87995.72a66ef4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3933],{3905:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>d});var o=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,o)}return a}function n(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var s=o.createContext({}),p=function(t){var e=o.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):n(n({},e),t)),a},u=function(t){var e=p(t.components);return o.createElement(s.Provider,{value:e},t.children)},c="mdxType",h={inlineCode:"code",wrapper:function(t){var e=t.children;return o.createElement(o.Fragment,{},e)}},m=o.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,s=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),c=p(a),m=r,d=c["".concat(s,".").concat(m)]||c[m]||h[m]||i;return a?o.createElement(d,n(n({ref:e},u),{},{components:a})):o.createElement(d,n({ref:e},u))}));function d(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,n=new Array(i);n[0]=m;var l={};for(var s in e)hasOwnProperty.call(e,s)&&(l[s]=e[s]);l.originalType=t,l[c]="string"==typeof t?t:r,n[1]=l;for(var p=2;p{a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>c});var o=a(87462),r=a(63366),i=(a(67294),a(3905)),n=["components"],l={id:"build-tools-index",title:"Tool Index",sidebar_label:"Tool Index",description:"Reference point for a list of tools to support your development.",keywords:["tools","clients","libraries","explorers","monitor","data","SCALE"],slug:"../build-tools-index"},s=void 0,p={unversionedId:"build/build-tools-index",id:"build/build-tools-index",title:"Tool Index",description:"Reference point for a list of tools to support your development.",source:"@site/../docs/build/build-tools-index.md",sourceDirName:"build",slug:"/build-tools-index",permalink:"/docs/build-tools-index",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/build/build-tools-index.md",tags:[],version:"current",lastUpdatedBy:"github-actions[bot]",lastUpdatedAt:1693818728,formattedLastUpdatedAt:"Sep 4, 2023",frontMatter:{id:"build-tools-index",title:"Tool Index",sidebar_label:"Tool Index",description:"Reference point for a list of tools to support your development.",keywords:["tools","clients","libraries","explorers","monitor","data","SCALE"],slug:"../build-tools-index"},sidebar:"docs",previous:{title:"Transaction Construction",permalink:"/docs/build-transaction-construction"},next:{title:"Open Source Stack",permalink:"/docs/build-open-source"}},u={},c=[{value:"Wallets",id:"wallets",level:2},{value:"Block Explorers",id:"block-explorers",level:2},{value:"Blockchain Analytics",id:"blockchain-analytics",level:2},{value:"Network Monitoring & Reporting",id:"network-monitoring--reporting",level:2},{value:"Clients",id:"clients",level:2},{value:"Tools",id:"tools",level:2},{value:"UI",id:"ui",level:2},{value:"Libraries",id:"libraries",level:2},{value:"Polkadot-JS API",id:"polkadot-js-api",level:3},{value:"Alternative Libraries",id:"alternative-libraries",level:3},{value:"CLI Tools",id:"cli-tools",level:3},{value:"WASM",id:"wasm",level:3},{value:"RPC and API Tools",id:"rpc-and-api-tools",level:3},{value:"SCALE Codec",id:"scale-codec",level:3},{value:"Data Crawling and Conversion",id:"data-crawling-and-conversion",level:2}],h={toc:c},m="wrapper";function d(t){var e=t.components,a=(0,r.Z)(t,n);return(0,i.kt)(m,(0,o.Z)({},h,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Here, we provide a list of tools available for your development needs. They are sorted by context.\nIf you're actively maintaining a tool that might be useful to other Polkadot, Kusama or Substrate\ndevelopers, feel free to ",(0,i.kt)("a",{parentName:"p",href:"/docs/contributing"},"add it in"),"."),(0,i.kt)("h2",{id:"wallets"},"Wallets"),(0,i.kt)("p",null,"Please see the ",(0,i.kt)("a",{parentName:"p",href:"./wallets"},"Wallets")," page."),(0,i.kt)("h2",{id:"block-explorers"},"Block Explorers"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps/#/explorer"},"Polkadot-JS Apps Explorer")," - Polkadot dashboard block\nexplorer. Supports dozens of other networks, including Kusama, Westend, and other remote or local\nendpoints. ",(0,i.kt)("a",{parentName:"li",href:"https://ipfs.io/ipns/dotapps.io"},"Access via IPFS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkascan.io/"},"Polkascan")," - Blockchain explorer for Polkadot, Kusama, and other related\nchains. ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/polkascan-os"},"Repo"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://subscan.io"},"Subscan")," - Blockchain explorer for Substrate chains.\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/itering/subscan-essentials"},"Repo"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://dotscanner.com?utm_source=polkadot_wiki"},"DotScanner")," - Polkadot & Kusama Blockchain\nexplorer."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://3xpl.com/polkadot"},"3xpl.com")," - Fastest ad-free universal block explorer and JSON API with\nPolkadot support."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://blockchair.com/polkadot"},"Blockchair.com")," - Universal blockchain explorer and search\nengine with Polkadot support."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkaholic.io"},"Polkaholic.io")," - Polkadot & Kusama Blockchain explorer with API and DeFi\nsupport across 40+ parachains.")),(0,i.kt)("h2",{id:"blockchain-analytics"},"Blockchain Analytics"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://app.web3go.xyz/#/"},"Web3go")," - An open platform for everyone to play with, curate and\nvisualize multi-blockchain data"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkawatch.app/"},"Polkawatch")," - Polkadot Decentralization Analytics")),(0,i.kt)("h2",{id:"network-monitoring--reporting"},"Network Monitoring & Reporting"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://telemetry.polkadot.io/"},"Polkadot Telemetry Service")," - Network information including what\nnodes are running the chain, what software versions they are running, sync status, and location."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://gitlab.com/Polkabot"},"Polkabot")," - Polkadot network monitoring and reporting using Matrix\n(Riot / Element) chat. Users may create custom bot plugins.\n",(0,i.kt)("a",{parentName:"li",href:"https://medium.com/polkadot-network/polkabot-a3dba18c20c8"},"Blogpost"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/Ryabina-io/substratebot"},"Ryabina's Telegram Bot")," - A Telegram bot for\nmonitoring on-chain events of Substrate chains.\n",(0,i.kt)("a",{parentName:"li",href:"https://gitlab.com/Polkabot/polkabot"},"GitHub Repository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkastats.io/"},"PolkaStats")," - Polkadot network statistics (includes Kusama). Shows\nnetwork information and staking details from validators and intentions.\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/Colm3na/polkastats-v2/"},"GitHub Repository"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/SimplyVC/panic"},"Panic")," - A node monitoring and alert server for validators."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/open-web3-stack/guardian"},"OpenWeb3/Guardian")," - A CLI tool and JS library to\nmonitor on chain states and events."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/sodazone/ocelloids"},"Ocelloids SDK")," - Typescript SDK for multi-chain monitoring\nthat supports domain-specific logic for different pallets.")),(0,i.kt)("h2",{id:"clients"},"Clients"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/polkadot"},"Polkadot")," - The original Rust implementation of the\nPolkadot Host."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/kagome"},"Kagome")," - A C++ Polkadot implementation of the Polkadot Host\ndeveloped by ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu"},"Soramitsu"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/ChainSafe/gossamer"},"Gossamer")," - A Go implementation of the Polkadot Host\ndeveloped by ",(0,i.kt)("a",{parentName:"li",href:"https://chainsafe.io/"},"ChainSafe Systems"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/txwrapper"},"TX Wrapper")," - Helper functions for offline transaction\ngeneration.")),(0,i.kt)("h2",{id:"tools"},"Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate"},"Substrate")," - Blockchain development platform written in\nRust. The Rust version of the Polkadot Host is being built with Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.substrate.io/"},"Substrate Docs")," - Comprehensive documentation and tutorials for\nbuilding a blockchain using Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/vscode-substrate"},"Substrate VSCode plugin"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-debug-kit"},"Substrate Debug Kit")," - A collection of debug\ntools and libraries around substrate chains. Includes tools to calculate NPoS elections offline,\ndisk usage monitoring, test templates against chain state and other pallet-specific helper."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://crates.io/crates/diener"},"Diener")," - A tool for easy changing of Polkadot or Substrate\ndependency versions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/shawntabrizi/polkadot-launch"},"Polkadot Launch")," - A tool to easily launch\ncustom local parachain-enabled Polkadot versions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/halva-suite/halva"},"Halva")," - A Truffle-inspired local development environment\nfor Substrate."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/maxsam4/fork-off-substrate"},"Fork-off Substrate")," - Copies the state of an\nexisting chain into your local version and lets you further experiment on it."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://www.chevdor.com/tags/srtool/"},"srtool")," - A tool for verifying runtime versions against\non-chain proposal hashes."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/nikvolf/sub-bench"},"sub-bench")," - A tool to spam your node with transactions for\nthe sake of benchmarking."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/danforbes/substrate-devhub-utils"},"substrate-devhub-utils")," - A set of\nJavaScript utilities making life with Substrate a little easier."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/NikVolf/sub-flood"},"sub-flood")," - A tool to benchmark Substrate by flooding it\nwith requests.")),(0,i.kt)("h2",{id:"ui"},"UI"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/Swader/polkadash"},"Polkadash")," - VueJS-based starter kit for custom user\ninterfaces for Substrate chains."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/apps"},"Polkadot JS Apps UI")," - Repository of the\n",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/apps"},"polkadot.js.org/apps")," UI."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/substrate-developer-hub/substrate-front-end-template"},"Substrate Front-end Template")," -\nReactJS-based starter UI for custom user interfaces for Substrate chains."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/extension"},"Polkadot JS Browser Extension")," - Key management in a\nChrome extension.")),(0,i.kt)("h2",{id:"libraries"},"Libraries"),(0,i.kt)("h3",{id:"polkadot-js-api"},"Polkadot-JS API"),(0,i.kt)("p",null,"The Polkadot-JS API provides various utility functions that are used across all projects in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"@polkadot")," namespace and is split into a number of internal utility packages. The documentation and\nusage instructions are provided at ",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.js.org/docs/"},"Polkadot-JS API Documentation"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring"},"@polkadot/keyring")," This allows you to create and load\naccounts in JavaScript. It is helpful for creating wallets or any application that will require\nthe user to write to chain. ",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring/start/create"},"Examples"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/keyring/start/install#other-dependencies"},"@polkadot/util")," Utility\nfunctions like checking if a string is hex-encoded."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/util-crypto/"},"@polkadot/util-crypto")," Useful cryptographic utilities\nfor developing with Polkadot.")),(0,i.kt)("h3",{id:"alternative-libraries"},"Alternative Libraries"),(0,i.kt)("p",null,"The following libraries/SDKs allow for interfacing with a Substrate node in other languages:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/py-substrate-interface"},"Python Library by Polkascan")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/centrifuge/go-substrate-rpc-client"},"Go Library by Centrifuge")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/strategyobject/substrate-client-java"},"Java Library by StrategyObject")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/fearless-utils-iOS"},"Fearless Utils iOS Swift SDK")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/nova-wallet/substrate-sdk-ios"},"Nova Wallet iOS/Swift Substrate SDK")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/soramitsu/fearless-utils-Android"},"Kotlin SDK"))),(0,i.kt)("h3",{id:"cli-tools"},"CLI Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/api-cli"},"@polkadot/api-cli")," Command\nline interface for the polkadot API. ",(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/api/start"},"Documentation"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/monitor-rpc"},"@polkadot/monitor-rpc")," An\nRPC monitor for Polkadot. See the RPC tools below for additional information."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/tools/tree/master/packages/signer-cli"},"@polkadot/signer-cli")," A\nTool to construct, sign, and broadcast transactions. Signing can be done offline."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"Polkadot API Cpp")," - A \u0421++ API for Polkadot, can\nbuild ",(0,i.kt)("inlineCode",{parentName:"li"},"clip"),", a command line tool."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.substrate.io/reference/command-line-tools/subkey/"},"Subkey")," - Command line utility\nfor generating and inspecting key pairs.")),(0,i.kt)("h3",{id:"wasm"},"WASM"),(0,i.kt)("p",null,"WebAssembly related tools and projects."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/ink/"},"ink!")," - An eDSL to write WebAssembly based smart contracts\nusing the Rust programming language."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/parity-wasm"},"parity-wasm")," - Low-level WebAssembly format library."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/wasm-utils"},"wasm-utils")," - Collection of WebAssembly utilities used\nin pwasm-ethereum and substrate contract development."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/wasmi"},"wasmi")," - A WebAssembly interpreter conceived as a component\nof parity-ethereum (Ethereum-like contracts in Wasm) and Substrate.")),(0,i.kt)("h3",{id:"rpc-and-api-tools"},"RPC and API Tools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkadot-js/api/tree/master/packages/rpc-provider"},"@polkadot/api/rpc-provider"),"\nDemonstrates how the JS tools interact with the node over RPC."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://polkadot.js.org/docs/substrate/rpc"},"RPC documentation")," - Documentation of Substrate RPC\nmethods."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/SimplyVC/polkadot_api_server"},"Polkadot API Server by SimplyVC")," - A wrapper\naround the Polkadot API which makes it easier to make Polkadot API calls from any programming\nlanguage."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/itering/substrate-api-rpc"},"Go: Subscan API")," - Go API for Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_cpp"},"C++ Polkadot API")," - \u0421++ API for Polkadot."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/ajuna-network/Ajuna.SDK"},".NET Toolchain for Polkadot/Substrate API")," -\nToolchain to generate Polkadot API & Service Layer for .NET (usable in Unity)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/usetech-llc/polkadot_api_dotnet"},".NET Polkadot API")," - Polkadot Substrate API\nfor .NET."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/py-substrate-interface"},"Python Polkadot API")," - Polkadot library for\nPython."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/centrifuge/go-substrate-rpc-client/"},"GSRPC")," - Substrate RPC client in Go,\na.k.a. GSRPC."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-api-sidecar"},"Substrate API Sidecar")," - An HTTP wrapper for\nSubstrate, abstracting some complex RPC calls into simple REST calls."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-subxt"},"Subxt")," - A Rust library to submit extrinsics to a\nSubstrate node via RPC.")),(0,i.kt)("h3",{id:"scale-codec"},"SCALE Codec"),(0,i.kt)("p",null,"The SCALE (Simple Concatenated Aggregate Little-Endian) Codec is a lightweight, efficient, binary\nserialization and deserialization codec."),(0,i.kt)("p",null,"It is designed for high-performance, copy-free encoding and decoding of data in resource-constrained\nexecution contexts, such as the Substrate runtime. It is not self-describing in any way and assumes\nthe decoding context has all type knowledge about the encoded data."),(0,i.kt)("p",null,"It is used in almost all communication to/from Substrate nodes, so implementations in different\nlanguages exist:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/substrate-developer-hub/awesome-substrate#scale-codec"},"Substrate Awesome"),"\nmaintains a list of SCALE codex implementations.")),(0,i.kt)("h2",{id:"data-crawling-and-conversion"},"Data Crawling and Conversion"),(0,i.kt)("p",null,"The following tools help you extract and structure data from a Substrate node."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/polkascan-pre-harvester"},"Polkascan PRE Harvester"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/polkascan/polkascan-pre-explorer-gui"},"matching explorer for harvested data"),") -\nTransforms raw blockchain data into relational data."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/paritytech/substrate-archive"},"Parity's Substrate Archive")," - Can be run\nalongside a Substrate node to archive all blocks, state, and extrinsic data into PostgreSQL\ndatabase."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/subsquid/squid-archive-setup"},"Subsquid Archives")," - Generate a GraphQL database\nfrom a Substrate chain's data with rich filtering and querying capabilities. The data (events,\nextrinsics, blocks) for most parachains is readily available though public archive GraphQL\nendpoints, kept in\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/subsquid/archive-registry/blob/main/archives.json"},"Squid Archive Registry")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/TheGoldenEye/polka-store"},"Polka-store")," - A tool which scans a Substrate chain\nand stores balance-relevant transactions in an SQLite database."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/playzero/substrate-graph"},"Substrate-graph")," - A compact indexer for Substrate\nbased nodes providing a GraphQL interface.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/da9f79cb.d9943246.js b/assets/js/da9f79cb.d9943246.js deleted file mode 100644 index 98057c07b36b..000000000000 --- a/assets/js/da9f79cb.d9943246.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk=self.webpackChunk||[]).push([[2248],{47940:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(74165),a=n(15861),i=n(67294),r=n(87152),s=n(17145),l=n(67425);function m(e,t,n){return d.apply(this,arguments)}function d(){return(d=(0,a.Z)((0,o.Z)().mark((function e(t,n,a){var i,l,m,d,p;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 m=new r.U(i),e.next=21,s.G.create({provider:m});case 21:d=e.sent,(p=n.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=p[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return 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 ("+p[0]+") in "+n);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(e,t,n,o){switch(t){case"humanReadable":(0,l.HumanReadable)(e,n,o);break;case"precise":(0,l.Precise)(e,n,o);break;case"blocksToDays":(0,l.BlocksToDays)(e,o);break;case"percentage":(0,l.Percentage)(e,o);break;case"permillToPercent":(0,l.PermillToPercent)(e,o);break;case"arrayLength":(0,l.ArrayLength)(e,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,n=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,d=(0,i.useState)(""),c=d[0],h=d[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?p(r.toString(),l,t,h):h(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://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,a.Z)((0,o.Z)().mark((function e(){var a;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m(t,n,h);case 2:if(void 0!==(a=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?p(a,l,t,h):h(a);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,n,o){var a=void 0;if("polkadot"===n||"statemint"===n)a=3;else{if("kusama"!==n&&"statemine"!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");a=6}e=parseFloat(e),o((e=Number.isInteger(e/t[n].precision)?e/t[n].precision+" "+t[n].symbol:(e/t[n].precision).toFixed(a)+" "+t[n].symbol).toString())},Precise:function(e,n,o){o(e=(e=parseFloat(e))/t[n].precision+" "+t[n].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},92916:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>m,default:()=>k,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=n(87462),a=n(63366),i=(n(67294),n(3905)),r=n(47940),s=["components"],l={id:"learn-nomination-pools",title:"Nomination Pools",sidebar_label:"Nomination Pools",description:"Staking through Polkadot's Nomination Pools.",keyword:["nominate","nominator","stake","staking","pools"],slug:"../learn-nomination-pools"},m=void 0,d={unversionedId:"learn/learn-nomination-pools",id:"learn/learn-nomination-pools",title:"Nomination Pools",description:"Staking through Polkadot's Nomination Pools.",source:"@site/../docs/learn/learn-nomination-pools.md",sourceDirName:"learn",slug:"/learn-nomination-pools",permalink:"/docs/learn-nomination-pools",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-nomination-pools.md",tags:[],version:"current",lastUpdatedBy:"bader y",lastUpdatedAt:1693406812,formattedLastUpdatedAt:"Aug 30, 2023",frontMatter:{id:"learn-nomination-pools",title:"Nomination Pools",sidebar_label:"Nomination Pools",description:"Staking through Polkadot's Nomination Pools.",keyword:["nominate","nominator","stake","staking","pools"],slug:"../learn-nomination-pools"},sidebar:"docs",previous:{title:"Introduction to Staking",permalink:"/docs/learn-staking"},next:{title:"Polkadot OpenGov",permalink:"/docs/learn-polkadot-opengov"}},p={},c=[{value:"Key Components",id:"key-components",level:2},{value:"Pool Member Lifecycle",id:"pool-member-lifecycle",level:2},{value:"Join a pool",id:"join-a-pool",level:3},{value:"Claim rewards",id:"claim-rewards",level:3},{value:"Claim Permissions",id:"claim-permissions",level:3},{value:"Unbond and withdraw funds",id:"unbond-and-withdraw-funds",level:3},{value:"Limitations of Nomination Pools",id:"limitations-of-nomination-pools",level:3},{value:"Pool Administration",id:"pool-administration",level:2},{value:"States",id:"states",level:3},{value:"Roles",id:"roles",level:3},{value:"Pool Commissions",id:"pool-commissions",level:3},{value:"Pool Lifecycle",id:"pool-lifecycle",level:2},{value:"Nomination Pools - Slashing",id:"nomination-pools---slashing",level:2},{value:"Nominating vs Joining a Pool",id:"nominating-vs-joining-a-pool",level:2}],h={toc:c},u="wrapper";function k(e){var t=e.components,l=(0,a.Z)(e,s);return(0,i.kt)(u,(0,o.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"Nomination Pools are live on Polkadot!",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Nomination pools are a new feature for Polkadot\u2019s staking system that allows users to pool their\nDOT tokens together on-chain to nominate\nvalidators and receive rewards, significantly improving the system\u2019s scalability. Now, anyone with\nas little as\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"1 DOT can receive rewards for staking natively on Polkadot"),".\nNote that rewards are not guaranteed for those pools that do not have enough bonded funds to be\nincluded within the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#bags-list"},"bags list"),". ",(0,i.kt)("strong",{parentName:"p"},"Only members of active\npools will receive rewards.")),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"There are currently\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.counterForPoolMembers",defaultValue:4376,mdxType:"RPC"}),"\nmembers. (There can be a maximum of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.maxPoolMembers",defaultValue:16384,mdxType:"RPC"}),"\nmembers.)"),(0,i.kt)("li",{parentName:"ul"},"There are currently\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.lastPoolId",defaultValue:80,mdxType:"RPC"}),"\npools. (There can be a maximum of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.maxPools",defaultValue:64,mdxType:"RPC"}),"\npools)"),(0,i.kt)("li",{parentName:"ul"},"No limit on\n","\nmembers per pool."))),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Learn the key differences between\n",(0,i.kt)("a",{parentName:"p",href:"#nominating-vs-joining-a-pool"},(0,i.kt)("strong",{parentName:"a"},"Staking directly vs Joining a Nomination Pool")),"."),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"For Ledger users:")," Joining a nomination pool is possible only with the XL version of the Polkadot\nLedger App. This should be installed by default on Ledger Nano X and S Plus, but not on the Nano S."),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"If you become a nomination pool member or a pool admin, you cannot participate in Governance with\nthe bonded tokens in the pool, as they are held in a\n",(0,i.kt)("a",{parentName:"strong",href:"/docs/learn-account-advanced#system-accounts"},"system account"),"."))),(0,i.kt)("admonition",{title:"Have questions on Nomination Pools?",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Please join the ",(0,i.kt)("a",{parentName:"p",href:"https://dot.li/discord"},"Polkadot Discord")," for asking general questions about\nNomination Pools. If you are a developer, please join our\n",(0,i.kt)("a",{parentName:"p",href:"https://matrix.to/#/#nompools-support:matrix.parity.io"},"nomination pools support channel"),".")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nomination Pools",src:n(85408).Z,width:"1720",height:"963"})),(0,i.kt)("p",null,"Nomination pools are one of the key features from the roadmap of staking improvements on\nPolkadot. They are designed to\npermissionlessly allow members to pool their funds together and act as a single nominator account."),(0,i.kt)("p",null,"Due to the current runtime constraints,\nPolkadot can only handle\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),"\n","\nnominators comfortably in the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator#staking-election-stages"},"electing set"),". As one of\nthe objectives of the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"NPoS algorithm")," is to maximize the overall stake on the\nnetwork, it can be inferred that the staking system on\nPolkadot favors nominators with a larger\nstake. Only the nominator accounts which back the validators in the active set are eligible for\nreceiving staking rewards. This leaves out nomination intents from the accounts with lower token\nbalance than the min-active nomination and places them in a waiting queue to enter electing set.\nNomination pools will be handy for members who want to participate in the staking system with a\nstake much lower than the dynamic min-active nomination threshold on the network. All operations are\nconstant space and time complexity relative to the number of members, eliminating any theoretical\nupper bound on the number of members the system can handle and thus scaling the number of accounts\nthat can participate and earn rewards in the staking system on\nPolkadot. In summary, each nomination pool is\nviewed as a single nominator from the NPoS system point of view."),(0,i.kt)("admonition",{title:"Why aren't the members in the nomination pools called delegators?",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The term ",(0,i.kt)("inlineCode",{parentName:"p"},"delegator")," is associated too much with Delegated Proof of Staking (DPoS), and since\nPolkadot implements Nominated Proof of Staking\n(NPoS), naming them delegators would be misleading. The term ",(0,i.kt)("inlineCode",{parentName:"p"},"member")," is our generic replacement for\n",(0,i.kt)("inlineCode",{parentName:"p"},"delegator"),". In action, members are quite similar to delegators and delegate their nomination power\nto the pool.")),(0,i.kt)("p",null,"The pool\u2019s earnings are split pro rata to a member's stake in the bonded pool (and thus, the staking\nrewards for members will be the same as if they were a nominator). Importantly, slashes are also\napplied proportionally to members who may have been actively bonded."),(0,i.kt)("h2",{id:"key-components"},"Key Components"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Bonded Pool: Tracks the distribution of actively staked funds."),(0,i.kt)("li",{parentName:"ul"},"Reward Pool: Tracks rewards earned by actively staked funds."),(0,i.kt)("li",{parentName:"ul"},"Unbonding Sub Pools: Collection of pools at different phases (i.e. eras) of the unbonding\nlifecycle."),(0,i.kt)("li",{parentName:"ul"},"Members: Accounts that nominate to the pools."),(0,i.kt)("li",{parentName:"ul"},"Point: Unit of measure for a member\u2019s portion of a pool's funds. All pools start with a point to\nPlanck ratio of 1. Over time, if the pool receives rewards, they increase in value, and if the\npool is slashed, it decreases in value.")),(0,i.kt)("h2",{id:"pool-member-lifecycle"},"Pool Member Lifecycle"),(0,i.kt)("h3",{id:"join-a-pool"},"Join a pool"),(0,i.kt)("p",null,"A member delegates funds to a pool by transferring some amount to the pool\u2019s bonded account with the\n",(0,i.kt)("inlineCode",{parentName:"p"},"join")," extrinsic. The pool then increases its bond with the new funds. A member is afforded the\nability to bond additional funds or re-stake rewards as long as they are already actively bonded.\nNote that a member may only belong to one pool at a time."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"The current minimum bond to join a pool on"),"\n",(0,i.kt)("strong",{parentName:"p"},"Polkadot"),"","\n",(0,i.kt)("strong",{parentName:"p"},"is ",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"."),"\n",""),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The funds nominated to a pool will not be visible in the member's account balance on Polkadot JS\nApps UI. This is because the member funds are transferred from their account to the pool's\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-account-advanced#system-accounts"},"system account"),". This pool account is not accessible\nby anyone (including the pool root or depositor) and only the pool's internal logic can access the\naccount.")),(0,i.kt)("admonition",{title:"Use Non-Transfer or Nomination Pools Proxy Accounts to join Nomination Pools",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Only ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies#non-transfer-proxy"},"non-transfer proxies")," and\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies#nomination-pools-proxy"},"nomination pools proxy")," can be used to participate in\nnomination pools. ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies#staking-proxy"},"Staking proxies")," cannot be used as they cannot\nmake calls to the nomination pools pallet. (The nomination pools will be supported through a staking\nproxy when the changes made in ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/pull/7448"},"this PR")," are\nreleased on the network."),(0,i.kt)("p",{parentName:"admonition"},"Thus, depending on how much control you want to give your proxy, you might choose between\nnon-transfer > staking > nomination pool proxy, with the latter being only able to sign transactions\nrelated to the ",(0,i.kt)("inlineCode",{parentName:"p"},"NominationPool")," pallet.")),(0,i.kt)("p",null,'Check the "How to join a pool" section in\n',(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181401-how-to-join-nomination-pools"},"this support article"),"\nfor guidelines."),(0,i.kt)("h3",{id:"claim-rewards"},"Claim rewards"),(0,i.kt)("p",null,'The member can claim their portion of any rewards that have accumulated since the previous time they\nclaimed (or in the case that they have never claimed, any rewards that have accumulated since the\nera after they joined). Rewards are split pro rata among the actively bonded members. Check the "How\nto claim rewards" section in\n',(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181401-how-to-join-nomination-pools"},"this support article"),"\nfor guidelines."),(0,i.kt)("h3",{id:"claim-permissions"},"Claim Permissions"),(0,i.kt)("p",null,"As a pool member, you can grant permission to any other account to claim and compound rewards on\nyour behalf. There are four permission options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Permissioned")," (default): you need to claim and compound your rewards."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"PermissionlessCompound"),": you grant permission to any other account to compound (claim and bond)\nyour rewards on your behalf."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"PermissionlessWithdraw"),": you grant permission to any other account to withdraw (claim and keep as\na free balance) your rewards on your behalf."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"PermissionlessAll"),": you grant permission to any other account to compound or withdraw your\nrewards on your behalf.")),(0,i.kt)("p",null,"See the ",(0,i.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Staking Dashboard page")," for more information about\nhow to set your claim permissions."),(0,i.kt)("p",null,"See the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-staking-pools#claim-rewards-for-other-pool-members"},"advanced guides")," to\nlearn how to claim rewards for another pool member."),(0,i.kt)("h3",{id:"unbond-and-withdraw-funds"},"Unbond and withdraw funds"),(0,i.kt)("p",null,"At any point in time after joining the pool, a member can start the process of exiting by unbonding.\n",(0,i.kt)("inlineCode",{parentName:"p"},"unbond")," will unbond part or all of the member's funds. After unbond has been called and the\nunbonding duration has passed\n(",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,mdxType:"RPC"}),"\n","\neras which correspond to\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,mdxType:"RPC"}),"\n","\ndays on Polkadot), a member may withdraw\ntheir funds with ",(0,i.kt)("inlineCode",{parentName:"p"},"withdrawUnbonded"),'. Withdrawing effectively ends a member\'s relationship with their\npool, allowing them to join a different pool if desired. Check the "Withdraw unbonded funds" section\nin\n',(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181401-how-to-join-nomination-pools"},"this support article"),"\nfor guidelines."),(0,i.kt)("admonition",{title:"Unbonding transaction automatically triggers withdrawal of rewards",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"When there is a change in the bonded balance, the accumulated rewards in the pool thus far are\nautomatically withdrawn to the account. The rewards are then accrued based on the updated bonded\nbalance.")),(0,i.kt)("h3",{id:"limitations-of-nomination-pools"},"Limitations of Nomination Pools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"A member cannot vote (e.g. in Referenda or for Council members) with their nominated funds. This\nmay be changed in the future once accounts are afforded the ability to split votes."),(0,i.kt)("li",{parentName:"ul"},"For a member to switch pools, all funds from the account must be unbonded. This process takes 28\neras."),(0,i.kt)("li",{parentName:"ul"},"A member can partially unbond the staked funds in the pool (at most 16 partial unbonds).")),(0,i.kt)("h2",{id:"pool-administration"},"Pool Administration"),(0,i.kt)("h3",{id:"states"},"States"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Open: The pool is open to be joined by anyone."),(0,i.kt)("li",{parentName:"ul"},"Blocked: The pool is blocked; no joiners are permitted."),(0,i.kt)("li",{parentName:"ul"},"Destroying: The pool is in the process of being destroyed. Once in this state, the pool may never\nrevert to any other state; it can only proceed to be destroyed. All members can be\npermissionlessly unbonded; this allows the pool to be dismantled regardless of any member\u2019s\nproactivity.")),(0,i.kt)("h3",{id:"roles"},"Roles"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Depositor: Creates the pool and is the initial member. The depositor can only leave the pool once\nall other members have left. Once they leave by withdrawing, the pool is fully removed from the\nsystem."),(0,i.kt)("li",{parentName:"ul"},"Nominator: Can select the validators the pool nominates."),(0,i.kt)("li",{parentName:"ul"},"Bouncer: Can change the pool\u2019s state and kick (permissionlessly unbond/withdraw) members if the\npool is blocked."),(0,i.kt)("li",{parentName:"ul"},"Root: Can change the nominator, bouncer, or itself. Further, it can perform any of the actions the\nnominator or bouncer can.")),(0,i.kt)("h3",{id:"pool-commissions"},"Pool Commissions"),(0,i.kt)("p",null,"As the pool root role, you can set pool commissions that will be applied to the staking rewards paid\nout to the pool's system account before rewards are allocated for the pool members. You can set pool\ncommissions through the ",(0,i.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Polkadot Staking Dashboard"),"."),(0,i.kt)("p",null,"Three methods can be used when setting the pool commission:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Commission Rate")," (",(0,i.kt)("inlineCode",{parentName:"li"},"nominationPools.setCommission")," extrinsic): the start or new commission rate\n(",(0,i.kt)("inlineCode",{parentName:"li"},"newCommission")," parameter) that can be set between 0% and\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.globalMaxCommission",defaultValue:1e8,filter:"percentage",mdxType:"RPC"}),"%\n(decided through ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov"},"governance referendum"),") via the\n",(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_nomination_pools/pallet/type.GlobalMaxCommission.html"},(0,i.kt)("inlineCode",{parentName:"a"},"globalMaxCommission")),"\nparameter. You will need to specify an Input Payee Account, i.e. the account that will receive the\ncommission."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Max Commission")," (",(0,i.kt)("inlineCode",{parentName:"li"},"nominationPools.setCommissionMax")," extrinsic): the maximum commission\n(",(0,i.kt)("inlineCode",{parentName:"li"},"maxCommission")," parameter) the pool will apply to its members (between 0% and Max Commission).\nNote that once set, ",(0,i.kt)("strong",{parentName:"li"},"the pool admin can only lower it"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Change Rate")," (",(0,i.kt)("inlineCode",{parentName:"li"},"nominationPools.setCommissionChangeRate")," extrinsic): the maximum rate increase\n(",(0,i.kt)("inlineCode",{parentName:"li"},"maxIncrease")," parameter) allowed for a single commission update. Note that once set, ",(0,i.kt)("strong",{parentName:"li"},"the pool\nadmin can only lower it"),". When setting the Change Rate, it will also be possible to set a\n",(0,i.kt)("inlineCode",{parentName:"li"},"minDelay")," quantified as the number of blocks (since last commission update) after which it is\npossible to change the commission (i.e. the minimum delay between commission updates). Note that\nonce set, ",(0,i.kt)("strong",{parentName:"li"},"the pool admin can only increase it"),".")),(0,i.kt)("p",null,"Max Commission and Change Rate must not be necessarily set. It is the choice of the pool admin to\nset those parameters and provide transparency to the pool members about the pool's commission\npolicy."),(0,i.kt)("admonition",{title:"Max Commission and Change Rate are currently permanent",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Once the Max Commission and the Change Rate are set, the pool admin currently can only decrease\nthose values. The minimum delay between commission updates can only be increased. The situation can\nchange in the future and a ",(0,i.kt)("inlineCode",{parentName:"p"},"forceSetCommissionMax")," method can be proposed through governance\nreferendum.")),(0,i.kt)("p",null,"Let's take, for example, Pool A, which sets the Commission Rate to 10%, the Max Commission to 100%,\nand the Change Rate to 1% every 300 blocks (which equates to approximately 30 minutes). The\nfollowing statements are true:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The pool commission can be increased by 1% every 30 minutes. Bigger increases are not allowed.\nIncreases of less than or equal to 1% are not allowed sooner than 30 minutes since the last\ncommission update."),(0,i.kt)("li",{parentName:"ul"},"The Max Commission can only be decreased from 100%. Once decreased, it can be decreased again but\nit cannot be increased."),(0,i.kt)("li",{parentName:"ul"},"The Change Rate's maximum increase can only be decreased from 1%. Once decreased, it can be\ndecreased again but it cannot be increased."),(0,i.kt)("li",{parentName:"ul"},"The Change Rate's minimum delay between updates of 30 min can only be increased. Once increased,\nit can be increased again but it cannot be decreased.")),(0,i.kt)("h2",{id:"pool-lifecycle"},"Pool Lifecycle"),(0,i.kt)("admonition",{title:"Advanced How-to Guides",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"./learn-guides-staking-pools#pool-creation"},"this page")," for more information about the lifecycle\nof nomination pools. The cycle includes creation, upkeep and destruction.")),(0,i.kt)("h2",{id:"nomination-pools---slashing"},"Nomination Pools - Slashing"),(0,i.kt)("p",null,"Suppose the staking system slashes a pool\u2019s underlying nomination account. In that case, the slash\nis distributed evenly across the bonded pool, and the unbonding pools from slash era+1 through the\nslash apply era. Thus, any member who either a) was unbonding or b) was actively bonded in the\naforementioned range of eras will be affected by the slash. In other words, a member who may have\nbeen actively bonded during the offence is slashed pro rata based on its stake relative to the total\nslash amount."),(0,i.kt)("p",null,"Unbonding pools need to be slashed to ensure all nominators who were in the bonded pool while it was\nbacking a validator that committed an offense are punished. Without these measures a nominator could\nunbond right after a validator equivocated with no consequences."),(0,i.kt)("p",null,"This strategy is unfair to members who joined after the slash because they get slashed as well, but\nit spares members who unbond. The latter is much more important for security: if a pool's validators\nattack the network, their members need to unbond fast! Avoiding additional slashes gives them an\nincentive to do that if validators get repeatedly slashed."),(0,i.kt)("h2",{id:"nominating-vs-joining-a-pool"},"Nominating vs Joining a Pool"),(0,i.kt)("p",null,"Nominating is the action of choosing validators. It does not simply involve bonding tokens.\nNominating is an active task, which implies that you regularly monitor that your stake is backing an\nactive validator in all the eras and check if you are receiving your staking rewards. More\nimportantly, ensure that the validators you chose always act in the best interests of the network\nprotocol and have less chance of getting slashed. To nominate, you need a minimum of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"",",\nand to receive rewards, you need at least a balance greater than the minimum active bond. Depending\non your validators, if your active validator is oversubscribed, you will earn rewards only if your\nstake is within that of the top\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"","\nnominators. If the validator misbehaves, It is worth noting that your stake is subject to slashing,\nirrespective of whether you are at the top\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"","\nnominators or not."),(0,i.kt)("p",null,"As the minimum active bond is a dynamic value, it can make your nomination inactive when the\nthreshold goes above your bonded balance. Hence, to be eligible to earn rewards while nominating,\nyou would need to stake a much higher balance than the minimum active bond."),(0,i.kt)("p",null,"Nomination pools are a way to participate in staking with as little as 1 DOT and earn staking\nrewards. Nomination pools differ from custodial solutions (like staking through central exchanges)\nbecause they are non-custodial, native to Polkadot's protocol, permissionless, transparent, and run\nin a decentralized way by the community. Before joining a nomination pool, you must ensure that the\npool is earning rewards and nominating the validators that match your preferences. Participating in\npools is more of a set-and-forget action than nominating by yourself. The pool operator maintains\nthe list of validators nominated by the pool, and so, in a way, you are trusting the pool operator\nto act in your best interests. However, it is advised to check the validators nominated by the pool\nfrom time to time and change the pool if necessary."),(0,i.kt)("admonition",{title:"Minimum Active Nomination Value is Dynamic",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum amount required to become an active nominator and earn rewards is\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minimumActiveStake",defaultValue:2937e9,filter:"humanReadable",mdxType:"RPC"})),".\n","\nIf you have less DOT than the minimum active\nnomination and still want to participate in staking, you can join the nomination pools. You can now\nstake on Polkadot natively with just\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"})),"\n","\nin the nomination pools and earn staking rewards. For additional information, see\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".\nCheck the wiki doc on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools")," for more information.")),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Nominating"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Joining a Pool"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Minimum 250 DOT to nominate."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Minimum 1 DOT to be a member.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Rewards can be compounded automatically or sent to any account."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Rewards can be manually claimed to the pool member's account and be bonded in the pool again to compound them.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"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."),(0,i.kt)("td",{parentName:"tr",align:"center"},"If the active validator gets slashed, all pool members are subjected to slashing.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Can bond and stake DOT indefinitely."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Can bond and stake DOT until the pool exists.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Unbonding period of 28 days. Can switch validators without unbonding."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Unbonding period of 28 days. Need to unbond before switching to a different pool.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Maximum uncapped."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Maximum uncapped.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Should bond more than the ",(0,i.kt)("a",{parentName:"td",href:"/docs/learn-nominator#minimum-active-nomination-to-receive-staking-rewards"},"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."),(0,i.kt)("td",{parentName:"tr",align:"center"},"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 ",(0,i.kt)("a",{parentName:"td",href:"/docs/learn-phragmen"},"the NPoS system")," perspective).")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Staked tokens can be used for participation in Governance."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Staked tokens cannot be used for participation in Governance.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"/docs/learn-staking-advanced#claiming-rewards"},"Rewards payout")," can be triggered permissionlessly by anyone (typically done by the validator)."),(0,i.kt)("td",{parentName:"tr",align:"center"},"The pool member must claim the rewards.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Bonded funds remain in your account."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Bonded funds are transferred to a pool account which is administered by the network protocol and is not accessible to anyone else. See ",(0,i.kt)("a",{parentName:"td",href:"/docs/learn-account-advanced#system-accounts"},"System Accounts")," for more information.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Nominator manages the list of staked validators (up to 16)."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Nominations managed by the pool operator.")))))}k.isMDXComponent=!0},85408:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o=n.p+"assets/images/NPoS-Pools-b758caea750e9e772fe7fcdbd6babeca.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/da9f79cb.eb3f91a8.js b/assets/js/da9f79cb.eb3f91a8.js new file mode 100644 index 000000000000..942398ef213f --- /dev/null +++ b/assets/js/da9f79cb.eb3f91a8.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[2248],{47940:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(74165),a=n(15861),i=n(67294),r=n(87152),s=n(17145),l=n(67425);function m(e,t,n){return d.apply(this,arguments)}function d(){return(d=(0,a.Z)((0,o.Z)().mark((function e(t,n,a){var i,l,m,d,p;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 m=new r.U(i),e.next=21,s.G.create({provider:m});case 21:d=e.sent,(p=n.split(".")).forEach((function(e){e in d&&(d=d[e])})),e.t1=p[0],e.next="consts"===e.t1?27:"query"===e.t1?29:34;break;case 27:return 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 ("+p[0]+") in "+n);case 35:return e.abrupt("return",l);case 36:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function p(e,t,n,o){switch(t){case"humanReadable":(0,l.HumanReadable)(e,n,o);break;case"precise":(0,l.Precise)(e,n,o);break;case"blocksToDays":(0,l.BlocksToDays)(e,o);break;case"percentage":(0,l.Percentage)(e,o);break;case"permillToPercent":(0,l.PermillToPercent)(e,o);break;case"arrayLength":(0,l.ArrayLength)(e,o);break;default:return void console.log("Ignoring unknown filter type")}}const c=function(e){var t=e.network,n=e.path,r=e.defaultValue,s=e.filter,l=void 0===s?void 0:s,d=(0,i.useState)(""),c=d[0],h=d[1];return t=t.toLowerCase(),(0,i.useEffect)((function(){void 0!==l?p(r.toString(),l,t,h):h(r.toString());var e=void 0;switch(t){case"polkadot":e="wss://rpc.polkadot.io";break;case"kusama":e="wss://kusama-rpc.polkadot.io/";break;case"statemine":e="wss://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,a.Z)((0,o.Z)().mark((function e(){var a;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m(t,n,h);case 2:if(void 0!==(a=e.sent)){e.next=7;break}return e.abrupt("return");case 7:void 0!==l?p(a,l,t,h):h(a);case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();try{i()}catch(s){console.log(s)}}}),[]),c}},67425:e=>{var t={polkadot:{precision:1e10,symbol:"DOT"},kusama:{precision:1e12,symbol:"KSM"},statemint:{precision:1e10,symbol:"DOT"},statemine:{precision:1e12,symbol:"KSM"}};e.exports={HumanReadable:function(e,n,o){var a=void 0;if("polkadot"===n||"statemint"===n)a=3;else{if("kusama"!==n&&"statemine"!==n)return void console.log("Unknown network type found when attempting to apply 'Human Readable' filter");a=6}e=parseFloat(e),o((e=Number.isInteger(e/t[n].precision)?e/t[n].precision+" "+t[n].symbol:(e/t[n].precision).toFixed(a)+" "+t[n].symbol).toString())},Precise:function(e,n,o){o(e=(e=parseFloat(e))/t[n].precision+" "+t[n].symbol)},BlocksToDays:function(e,t){t((e=6*e/86400).toString())},Percentage:function(e,t){t((e/=1e7).toString())},PermillToPercent:function(e,t){t((e/=1e4).toString())},ArrayLength:function(e,t){t((e=e.split(",").length).toString())}}},92916:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>m,default:()=>k,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=n(87462),a=n(63366),i=(n(67294),n(3905)),r=n(47940),s=["components"],l={id:"learn-nomination-pools",title:"Nomination Pools",sidebar_label:"Nomination Pools",description:"Staking through Polkadot's Nomination Pools.",keyword:["nominate","nominator","stake","staking","pools"],slug:"../learn-nomination-pools"},m=void 0,d={unversionedId:"learn/learn-nomination-pools",id:"learn/learn-nomination-pools",title:"Nomination Pools",description:"Staking through Polkadot's Nomination Pools.",source:"@site/../docs/learn/learn-nomination-pools.md",sourceDirName:"learn",slug:"/learn-nomination-pools",permalink:"/docs/learn-nomination-pools",draft:!1,editUrl:"https://github.com/w3f/polkadot-wiki/edit/master/docs/learn/learn-nomination-pools.md",tags:[],version:"current",lastUpdatedBy:"bader y",lastUpdatedAt:1693406812,formattedLastUpdatedAt:"Aug 30, 2023",frontMatter:{id:"learn-nomination-pools",title:"Nomination Pools",sidebar_label:"Nomination Pools",description:"Staking through Polkadot's Nomination Pools.",keyword:["nominate","nominator","stake","staking","pools"],slug:"../learn-nomination-pools"},sidebar:"docs",previous:{title:"Introduction to Staking",permalink:"/docs/learn-staking"},next:{title:"Staking Apps",permalink:"/docs/learn-staking-apps"}},p={},c=[{value:"Key Components",id:"key-components",level:2},{value:"Pool Member Lifecycle",id:"pool-member-lifecycle",level:2},{value:"Join a pool",id:"join-a-pool",level:3},{value:"Claim rewards",id:"claim-rewards",level:3},{value:"Claim Permissions",id:"claim-permissions",level:3},{value:"Unbond and withdraw funds",id:"unbond-and-withdraw-funds",level:3},{value:"Limitations of Nomination Pools",id:"limitations-of-nomination-pools",level:3},{value:"Pool Administration",id:"pool-administration",level:2},{value:"States",id:"states",level:3},{value:"Roles",id:"roles",level:3},{value:"Pool Commissions",id:"pool-commissions",level:3},{value:"Pool Lifecycle",id:"pool-lifecycle",level:2},{value:"Nomination Pools - Slashing",id:"nomination-pools---slashing",level:2},{value:"Nominating vs Joining a Pool",id:"nominating-vs-joining-a-pool",level:2}],h={toc:c},u="wrapper";function k(e){var t=e.components,l=(0,a.Z)(e,s);return(0,i.kt)(u,(0,o.Z)({},h,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"Nomination Pools are live on Polkadot!",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Nomination pools are a new feature for Polkadot\u2019s staking system that allows users to pool their\nDOT tokens together on-chain to nominate\nvalidators and receive rewards, significantly improving the system\u2019s scalability. Now, anyone with\nas little as\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"1 DOT can receive rewards for staking natively on Polkadot"),".\nNote that rewards are not guaranteed for those pools that do not have enough bonded funds to be\nincluded within the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-staking-advanced#bags-list"},"bags list"),". ",(0,i.kt)("strong",{parentName:"p"},"Only members of active\npools will receive rewards.")),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"There are currently\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.counterForPoolMembers",defaultValue:4376,mdxType:"RPC"}),"\nmembers. (There can be a maximum of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.maxPoolMembers",defaultValue:16384,mdxType:"RPC"}),"\nmembers.)"),(0,i.kt)("li",{parentName:"ul"},"There are currently\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.lastPoolId",defaultValue:80,mdxType:"RPC"}),"\npools. (There can be a maximum of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.maxPools",defaultValue:64,mdxType:"RPC"}),"\npools)"),(0,i.kt)("li",{parentName:"ul"},"No limit on\n","\nmembers per pool."))),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Learn the key differences between\n",(0,i.kt)("a",{parentName:"p",href:"#nominating-vs-joining-a-pool"},(0,i.kt)("strong",{parentName:"a"},"Staking directly vs Joining a Nomination Pool")),"."),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"For Ledger users:")," Joining a nomination pool is possible only with the XL version of the Polkadot\nLedger App. This should be installed by default on Ledger Nano X and S Plus, but not on the Nano S."),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"If you become a nomination pool member or a pool admin, you cannot participate in Governance with\nthe bonded tokens in the pool, as they are held in a\n",(0,i.kt)("a",{parentName:"strong",href:"/docs/learn-account-advanced#system-accounts"},"system account"),"."))),(0,i.kt)("admonition",{title:"Have questions on Nomination Pools?",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Please join the ",(0,i.kt)("a",{parentName:"p",href:"https://dot.li/discord"},"Polkadot Discord")," for asking general questions about\nNomination Pools. If you are a developer, please join our\n",(0,i.kt)("a",{parentName:"p",href:"https://matrix.to/#/#nompools-support:matrix.parity.io"},"nomination pools support channel"),".")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Nomination Pools",src:n(85408).Z,width:"1720",height:"963"})),(0,i.kt)("p",null,"Nomination pools are one of the key features from the roadmap of staking improvements on\nPolkadot. They are designed to\npermissionlessly allow members to pool their funds together and act as a single nominator account."),(0,i.kt)("p",null,"Due to the current runtime constraints,\nPolkadot can only handle\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.electionProviderMultiPhase.maxElectingVoters",defaultValue:22500,mdxType:"RPC"}),"\n","\nnominators comfortably in the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nominator#staking-election-stages"},"electing set"),". As one of\nthe objectives of the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-phragmen"},"NPoS algorithm")," is to maximize the overall stake on the\nnetwork, it can be inferred that the staking system on\nPolkadot favors nominators with a larger\nstake. Only the nominator accounts which back the validators in the active set are eligible for\nreceiving staking rewards. This leaves out nomination intents from the accounts with lower token\nbalance than the min-active nomination and places them in a waiting queue to enter electing set.\nNomination pools will be handy for members who want to participate in the staking system with a\nstake much lower than the dynamic min-active nomination threshold on the network. All operations are\nconstant space and time complexity relative to the number of members, eliminating any theoretical\nupper bound on the number of members the system can handle and thus scaling the number of accounts\nthat can participate and earn rewards in the staking system on\nPolkadot. In summary, each nomination pool is\nviewed as a single nominator from the NPoS system point of view."),(0,i.kt)("admonition",{title:"Why aren't the members in the nomination pools called delegators?",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The term ",(0,i.kt)("inlineCode",{parentName:"p"},"delegator")," is associated too much with Delegated Proof of Staking (DPoS), and since\nPolkadot implements Nominated Proof of Staking\n(NPoS), naming them delegators would be misleading. The term ",(0,i.kt)("inlineCode",{parentName:"p"},"member")," is our generic replacement for\n",(0,i.kt)("inlineCode",{parentName:"p"},"delegator"),". In action, members are quite similar to delegators and delegate their nomination power\nto the pool.")),(0,i.kt)("p",null,"The pool\u2019s earnings are split pro rata to a member's stake in the bonded pool (and thus, the staking\nrewards for members will be the same as if they were a nominator). Importantly, slashes are also\napplied proportionally to members who may have been actively bonded."),(0,i.kt)("h2",{id:"key-components"},"Key Components"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Bonded Pool: Tracks the distribution of actively staked funds."),(0,i.kt)("li",{parentName:"ul"},"Reward Pool: Tracks rewards earned by actively staked funds."),(0,i.kt)("li",{parentName:"ul"},"Unbonding Sub Pools: Collection of pools at different phases (i.e. eras) of the unbonding\nlifecycle."),(0,i.kt)("li",{parentName:"ul"},"Members: Accounts that nominate to the pools."),(0,i.kt)("li",{parentName:"ul"},"Point: Unit of measure for a member\u2019s portion of a pool's funds. All pools start with a point to\nPlanck ratio of 1. Over time, if the pool receives rewards, they increase in value, and if the\npool is slashed, it decreases in value.")),(0,i.kt)("h2",{id:"pool-member-lifecycle"},"Pool Member Lifecycle"),(0,i.kt)("h3",{id:"join-a-pool"},"Join a pool"),(0,i.kt)("p",null,"A member delegates funds to a pool by transferring some amount to the pool\u2019s bonded account with the\n",(0,i.kt)("inlineCode",{parentName:"p"},"join")," extrinsic. The pool then increases its bond with the new funds. A member is afforded the\nability to bond additional funds or re-stake rewards as long as they are already actively bonded.\nNote that a member may only belong to one pool at a time."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"The current minimum bond to join a pool on"),"\n",(0,i.kt)("strong",{parentName:"p"},"Polkadot"),"","\n",(0,i.kt)("strong",{parentName:"p"},"is ",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",defaultValue:1e10,filter:"humanReadable",mdxType:"RPC"}),"."),"\n",""),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The funds nominated to a pool will not be visible in the member's account balance on Polkadot JS\nApps UI. This is because the member funds are transferred from their account to the pool's\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-account-advanced#system-accounts"},"system account"),". This pool account is not accessible\nby anyone (including the pool root or depositor) and only the pool's internal logic can access the\naccount.")),(0,i.kt)("admonition",{title:"Use Non-Transfer or Nomination Pools Proxy Accounts to join Nomination Pools",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Only ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies#non-transfer-proxy"},"non-transfer proxies")," and\n",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies#nomination-pools-proxy"},"nomination pools proxy")," can be used to participate in\nnomination pools. ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-proxies#staking-proxy"},"Staking proxies")," cannot be used as they cannot\nmake calls to the nomination pools pallet. (The nomination pools will be supported through a staking\nproxy when the changes made in ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/paritytech/polkadot/pull/7448"},"this PR")," are\nreleased on the network."),(0,i.kt)("p",{parentName:"admonition"},"Thus, depending on how much control you want to give your proxy, you might choose between\nnon-transfer > staking > nomination pool proxy, with the latter being only able to sign transactions\nrelated to the ",(0,i.kt)("inlineCode",{parentName:"p"},"NominationPool")," pallet.")),(0,i.kt)("p",null,'Check the "How to join a pool" section in\n',(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181401-how-to-join-nomination-pools"},"this support article"),"\nfor guidelines."),(0,i.kt)("h3",{id:"claim-rewards"},"Claim rewards"),(0,i.kt)("p",null,'The member can claim their portion of any rewards that have accumulated since the previous time they\nclaimed (or in the case that they have never claimed, any rewards that have accumulated since the\nera after they joined). Rewards are split pro rata among the actively bonded members. Check the "How\nto claim rewards" section in\n',(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181401-how-to-join-nomination-pools"},"this support article"),"\nfor guidelines."),(0,i.kt)("h3",{id:"claim-permissions"},"Claim Permissions"),(0,i.kt)("p",null,"As a pool member, you can grant permission to any other account to claim and compound rewards on\nyour behalf. There are four permission options:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Permissioned")," (default): you need to claim and compound your rewards."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"PermissionlessCompound"),": you grant permission to any other account to compound (claim and bond)\nyour rewards on your behalf."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"PermissionlessWithdraw"),": you grant permission to any other account to withdraw (claim and keep as\na free balance) your rewards on your behalf."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"PermissionlessAll"),": you grant permission to any other account to compound or withdraw your\nrewards on your behalf.")),(0,i.kt)("p",null,"See the ",(0,i.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Staking Dashboard page")," for more information about\nhow to set your claim permissions."),(0,i.kt)("p",null,"See the ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-guides-staking-pools#claim-rewards-for-other-pool-members"},"advanced guides")," to\nlearn how to claim rewards for another pool member."),(0,i.kt)("h3",{id:"unbond-and-withdraw-funds"},"Unbond and withdraw funds"),(0,i.kt)("p",null,"At any point in time after joining the pool, a member can start the process of exiting by unbonding.\n",(0,i.kt)("inlineCode",{parentName:"p"},"unbond")," will unbond part or all of the member's funds. After unbond has been called and the\nunbonding duration has passed\n(",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,mdxType:"RPC"}),"\n","\neras which correspond to\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.bondingDuration",defaultValue:28,mdxType:"RPC"}),"\n","\ndays on Polkadot), a member may withdraw\ntheir funds with ",(0,i.kt)("inlineCode",{parentName:"p"},"withdrawUnbonded"),'. Withdrawing effectively ends a member\'s relationship with their\npool, allowing them to join a different pool if desired. Check the "Withdraw unbonded funds" section\nin\n',(0,i.kt)("a",{parentName:"p",href:"https://support.polkadot.network/support/solutions/articles/65000181401-how-to-join-nomination-pools"},"this support article"),"\nfor guidelines."),(0,i.kt)("admonition",{title:"Unbonding transaction automatically triggers withdrawal of rewards",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"When there is a change in the bonded balance, the accumulated rewards in the pool thus far are\nautomatically withdrawn to the account. The rewards are then accrued based on the updated bonded\nbalance.")),(0,i.kt)("h3",{id:"limitations-of-nomination-pools"},"Limitations of Nomination Pools"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"A member cannot vote (e.g. in Referenda or for Council members) with their nominated funds. This\nmay be changed in the future once accounts are afforded the ability to split votes."),(0,i.kt)("li",{parentName:"ul"},"For a member to switch pools, all funds from the account must be unbonded. This process takes 28\neras."),(0,i.kt)("li",{parentName:"ul"},"A member can partially unbond the staked funds in the pool (at most 16 partial unbonds).")),(0,i.kt)("h2",{id:"pool-administration"},"Pool Administration"),(0,i.kt)("h3",{id:"states"},"States"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Open: The pool is open to be joined by anyone."),(0,i.kt)("li",{parentName:"ul"},"Blocked: The pool is blocked; no joiners are permitted."),(0,i.kt)("li",{parentName:"ul"},"Destroying: The pool is in the process of being destroyed. Once in this state, the pool may never\nrevert to any other state; it can only proceed to be destroyed. All members can be\npermissionlessly unbonded; this allows the pool to be dismantled regardless of any member\u2019s\nproactivity.")),(0,i.kt)("h3",{id:"roles"},"Roles"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Depositor: Creates the pool and is the initial member. The depositor can only leave the pool once\nall other members have left. Once they leave by withdrawing, the pool is fully removed from the\nsystem."),(0,i.kt)("li",{parentName:"ul"},"Nominator: Can select the validators the pool nominates."),(0,i.kt)("li",{parentName:"ul"},"Bouncer: Can change the pool\u2019s state and kick (permissionlessly unbond/withdraw) members if the\npool is blocked."),(0,i.kt)("li",{parentName:"ul"},"Root: Can change the nominator, bouncer, or itself. Further, it can perform any of the actions the\nnominator or bouncer can.")),(0,i.kt)("h3",{id:"pool-commissions"},"Pool Commissions"),(0,i.kt)("p",null,"As the pool root role, you can set pool commissions that will be applied to the staking rewards paid\nout to the pool's system account before rewards are allocated for the pool members. You can set pool\ncommissions through the ",(0,i.kt)("a",{parentName:"p",href:"/docs/staking-dashboard#pools"},"Polkadot Staking Dashboard"),"."),(0,i.kt)("p",null,"Three methods can be used when setting the pool commission:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Commission Rate")," (",(0,i.kt)("inlineCode",{parentName:"li"},"nominationPools.setCommission")," extrinsic): the start or new commission rate\n(",(0,i.kt)("inlineCode",{parentName:"li"},"newCommission")," parameter) that can be set between 0% and\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.globalMaxCommission",defaultValue:1e8,filter:"percentage",mdxType:"RPC"}),"%\n(decided through ",(0,i.kt)("a",{parentName:"li",href:"/docs/learn-polkadot-opengov"},"governance referendum"),") via the\n",(0,i.kt)("a",{parentName:"li",href:"https://paritytech.github.io/substrate/master/pallet_nomination_pools/pallet/type.GlobalMaxCommission.html"},(0,i.kt)("inlineCode",{parentName:"a"},"globalMaxCommission")),"\nparameter. You will need to specify an Input Payee Account, i.e. the account that will receive the\ncommission."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Max Commission")," (",(0,i.kt)("inlineCode",{parentName:"li"},"nominationPools.setCommissionMax")," extrinsic): the maximum commission\n(",(0,i.kt)("inlineCode",{parentName:"li"},"maxCommission")," parameter) the pool will apply to its members (between 0% and Max Commission).\nNote that once set, ",(0,i.kt)("strong",{parentName:"li"},"the pool admin can only lower it"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Change Rate")," (",(0,i.kt)("inlineCode",{parentName:"li"},"nominationPools.setCommissionChangeRate")," extrinsic): the maximum rate increase\n(",(0,i.kt)("inlineCode",{parentName:"li"},"maxIncrease")," parameter) allowed for a single commission update. Note that once set, ",(0,i.kt)("strong",{parentName:"li"},"the pool\nadmin can only lower it"),". When setting the Change Rate, it will also be possible to set a\n",(0,i.kt)("inlineCode",{parentName:"li"},"minDelay")," quantified as the number of blocks (since last commission update) after which it is\npossible to change the commission (i.e. the minimum delay between commission updates). Note that\nonce set, ",(0,i.kt)("strong",{parentName:"li"},"the pool admin can only increase it"),".")),(0,i.kt)("p",null,"Max Commission and Change Rate must not be necessarily set. It is the choice of the pool admin to\nset those parameters and provide transparency to the pool members about the pool's commission\npolicy."),(0,i.kt)("admonition",{title:"Max Commission and Change Rate are currently permanent",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Once the Max Commission and the Change Rate are set, the pool admin currently can only decrease\nthose values. The minimum delay between commission updates can only be increased. The situation can\nchange in the future and a ",(0,i.kt)("inlineCode",{parentName:"p"},"forceSetCommissionMax")," method can be proposed through governance\nreferendum.")),(0,i.kt)("p",null,"Let's take, for example, Pool A, which sets the Commission Rate to 10%, the Max Commission to 100%,\nand the Change Rate to 1% every 300 blocks (which equates to approximately 30 minutes). The\nfollowing statements are true:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The pool commission can be increased by 1% every 30 minutes. Bigger increases are not allowed.\nIncreases of less than or equal to 1% are not allowed sooner than 30 minutes since the last\ncommission update."),(0,i.kt)("li",{parentName:"ul"},"The Max Commission can only be decreased from 100%. Once decreased, it can be decreased again but\nit cannot be increased."),(0,i.kt)("li",{parentName:"ul"},"The Change Rate's maximum increase can only be decreased from 1%. Once decreased, it can be\ndecreased again but it cannot be increased."),(0,i.kt)("li",{parentName:"ul"},"The Change Rate's minimum delay between updates of 30 min can only be increased. Once increased,\nit can be increased again but it cannot be decreased.")),(0,i.kt)("h2",{id:"pool-lifecycle"},"Pool Lifecycle"),(0,i.kt)("admonition",{title:"Advanced How-to Guides",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"See ",(0,i.kt)("a",{parentName:"p",href:"./learn-guides-staking-pools#pool-creation"},"this page")," for more information about the lifecycle\nof nomination pools. The cycle includes creation, upkeep and destruction.")),(0,i.kt)("h2",{id:"nomination-pools---slashing"},"Nomination Pools - Slashing"),(0,i.kt)("p",null,"Suppose the staking system slashes a pool\u2019s underlying nomination account. In that case, the slash\nis distributed evenly across the bonded pool, and the unbonding pools from slash era+1 through the\nslash apply era. Thus, any member who either a) was unbonding or b) was actively bonded in the\naforementioned range of eras will be affected by the slash. In other words, a member who may have\nbeen actively bonded during the offence is slashed pro rata based on its stake relative to the total\nslash amount."),(0,i.kt)("p",null,"Unbonding pools need to be slashed to ensure all nominators who were in the bonded pool while it was\nbacking a validator that committed an offense are punished. Without these measures a nominator could\nunbond right after a validator equivocated with no consequences."),(0,i.kt)("p",null,"This strategy is unfair to members who joined after the slash because they get slashed as well, but\nit spares members who unbond. The latter is much more important for security: if a pool's validators\nattack the network, their members need to unbond fast! Avoiding additional slashes gives them an\nincentive to do that if validators get repeatedly slashed."),(0,i.kt)("h2",{id:"nominating-vs-joining-a-pool"},"Nominating vs Joining a Pool"),(0,i.kt)("p",null,"Nominating is the action of choosing validators. It does not simply involve bonding tokens.\nNominating is an active task, which implies that you regularly monitor that your stake is backing an\nactive validator in all the eras and check if you are receiving your staking rewards. More\nimportantly, ensure that the validators you chose always act in the best interests of the network\nprotocol and have less chance of getting slashed. To nominate, you need a minimum of\n",(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minNominatorBond",defaultValue:1e11,filter:"humanReadable",mdxType:"RPC"}),"",",\nand to receive rewards, you need at least a balance greater than the minimum active bond. Depending\non your validators, if your active validator is oversubscribed, you will earn rewards only if your\nstake is within that of the top\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"","\nnominators. If the validator misbehaves, It is worth noting that your stake is subject to slashing,\nirrespective of whether you are at the top\n",(0,i.kt)(r.Z,{network:"polkadot",path:"consts.staking.maxNominatorRewardedPerValidator",defaultValue:512,mdxType:"RPC"}),"","\nnominators or not."),(0,i.kt)("p",null,"As the minimum active bond is a dynamic value, it can make your nomination inactive when the\nthreshold goes above your bonded balance. Hence, to be eligible to earn rewards while nominating,\nyou would need to stake a much higher balance than the minimum active bond."),(0,i.kt)("p",null,"Nomination pools are a way to participate in staking with as little as 1 DOT and earn staking\nrewards. Nomination pools differ from custodial solutions (like staking through central exchanges)\nbecause they are non-custodial, native to Polkadot's protocol, permissionless, transparent, and run\nin a decentralized way by the community. Before joining a nomination pool, you must ensure that the\npool is earning rewards and nominating the validators that match your preferences. Participating in\npools is more of a set-and-forget action than nominating by yourself. The pool operator maintains\nthe list of validators nominated by the pool, and so, in a way, you are trusting the pool operator\nto act in your best interests. However, it is advised to check the validators nominated by the pool\nfrom time to time and change the pool if necessary."),(0,i.kt)("admonition",{title:"Minimum Active Nomination Value is Dynamic",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"The minimum amount required to become an active nominator and earn rewards is\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.staking.minimumActiveStake",defaultValue:2937e9,filter:"humanReadable",mdxType:"RPC"})),".\n","\nIf you have less DOT than the minimum active\nnomination and still want to participate in staking, you can join the nomination pools. You can now\nstake on Polkadot natively with just\n",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)(r.Z,{network:"polkadot",path:"query.nominationPools.minJoinBond",filter:"humanReadable",defaultValue:1e10,mdxType:"RPC"})),"\n","\nin the nomination pools and earn staking rewards. For additional information, see\n",(0,i.kt)("a",{parentName:"p",href:"https://polkadot.network/blog/nomination-pools-are-live-stake-natively-with-just-1-dot/"},"this blog post"),".\nCheck the wiki doc on ",(0,i.kt)("a",{parentName:"p",href:"/docs/learn-nomination-pools"},"nomination pools")," for more information.")),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Nominating"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Joining a Pool"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Minimum 250 DOT to nominate."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Minimum 1 DOT to be a member.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Rewards can be compounded automatically or sent to any account."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Rewards can be manually claimed to the pool member's account and be bonded in the pool again to compound them.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"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."),(0,i.kt)("td",{parentName:"tr",align:"center"},"If the active validator gets slashed, all pool members are subjected to slashing.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Can bond and stake DOT indefinitely."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Can bond and stake DOT until the pool exists.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Unbonding period of 28 days. Can switch validators without unbonding."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Unbonding period of 28 days. Need to unbond before switching to a different pool.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Maximum uncapped."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Maximum uncapped.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Should bond more than the ",(0,i.kt)("a",{parentName:"td",href:"/docs/learn-nominator#minimum-active-nomination-to-receive-staking-rewards"},"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."),(0,i.kt)("td",{parentName:"tr",align:"center"},"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 ",(0,i.kt)("a",{parentName:"td",href:"/docs/learn-phragmen"},"the NPoS system")," perspective).")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Staked tokens can be used for participation in Governance."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Staked tokens cannot be used for participation in Governance.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"/docs/learn-staking-advanced#claiming-rewards"},"Rewards payout")," can be triggered permissionlessly by anyone (typically done by the validator)."),(0,i.kt)("td",{parentName:"tr",align:"center"},"The pool member must claim the rewards.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Bonded funds remain in your account."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Bonded funds are transferred to a pool account which is administered by the network protocol and is not accessible to anyone else. See ",(0,i.kt)("a",{parentName:"td",href:"/docs/learn-account-advanced#system-accounts"},"System Accounts")," for more information.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},"Nominator manages the list of staked validators (up to 16)."),(0,i.kt)("td",{parentName:"tr",align:"center"},"Nominations managed by the pool operator.")))))}k.isMDXComponent=!0},85408:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o=n.p+"assets/images/NPoS-Pools-b758caea750e9e772fe7fcdbd6babeca.png"},46601:()=>{}}]); \ No newline at end of file diff --git a/assets/js/main.1016bf4b.js b/assets/js/main.1016bf4b.js new file mode 100644 index 000000000000..16c9fe103815 --- /dev/null +++ b/assets/js/main.1016bf4b.js @@ -0,0 +1,2 @@ +/*! For license information please see main.1016bf4b.js.LICENSE.txt */ +(self.webpackChunk=self.webpackChunk||[]).push([[179],{20830:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(67294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(67294),a=r.createContext(!1);function o(e){var t=e.children,n=(0,r.useState)(!1),o=n[0],i=n[1];return(0,r.useEffect)((function(){i(!0)}),[]),r.createElement(a.Provider,{value:o},t)}},94926:(e,t,n)=>{"use strict";var r=n(67294),a=n(73935),o=n(73727),i=n(70405),s=n(10412);const c=[n(32497),n(3310),n(18320),n(39604),n(32104),n(70378)];var l=n(69204),u=n(16550),d=n(18790);function f(e){var t=e.children;return r.createElement(r.Fragment,null,t)}var p=n(87462),m=n(35742),h=n(52263),g=n(44996),b=n(86668),v=n(10833),y=n(94711),x=n(19727),k=n(43320),w=n(18780),E=n(90197);function _(){var e=(0,h.Z)().i18n,t=e.defaultLocale,n=e.localeConfigs,a=(0,y.l)();return r.createElement(m.Z,null,Object.entries(n).map((function(e){var t=e[0],n=e[1].htmlLang;return r.createElement("link",{key:t,rel:"alternate",href:a.createUrl({locale:t,fullyQualified:!0}),hrefLang:n})})),r.createElement("link",{rel:"alternate",href:a.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}))}function S(e){var t=e.permalink,n=(0,h.Z)().siteConfig.url,a=function(){var e=(0,h.Z)().siteConfig,t=e.url,n=e.baseUrl,r=e.trailingSlash,a=(0,u.TH)().pathname;return t+(0,w.applyTrailingSlash)((0,g.Z)(a),{trailingSlash:r,baseUrl:n})}(),o=t?""+n+t:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){var e=(0,h.Z)().i18n.currentLocale,t=(0,b.L)(),n=t.metadata,a=t.image;return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:x.h})),a&&r.createElement(v.d,{image:a}),r.createElement(S,null),r.createElement(_,null),r.createElement(E.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,n.map((function(e,t){return r.createElement("meta",(0,p.Z)({key:t},e))}))))}var T=new Map;function A(e){if(T.has(e.pathname))return Object.assign({},e,{pathname:T.get(e.pathname)});if((0,d.f)(l.Z,e.pathname).some((function(e){return!0===e.route.exact})))return T.set(e.pathname,e.pathname),e;var t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),Object.assign({},e,{pathname:t})}var P=n(98934),O=n(49633),L=n(94578);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

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

\n

We suggest trying baseUrl =

\n\n'}(e)).replace(/{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(67294),a=n(8618);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"general/getting-started","docs":[{"id":"build/build-data","path":"/docs/build-data","sidebar":"docs"},{"id":"build/build-guide","path":"/docs/build-guide","sidebar":"docs"},{"id":"build/build-hackathon","path":"/docs/build-hackathon","sidebar":"docs"},{"id":"build/build-hrmp-channels","path":"/docs/build-hrmp-channels","sidebar":"docs"},{"id":"build/build-index","path":"/docs/build-index","sidebar":"docs"},{"id":"build/build-integrate-assets","path":"/docs/build-integrate-assets","sidebar":"docs"},{"id":"build/build-integration","path":"/docs/build-integration","sidebar":"docs"},{"id":"build/build-node-interaction","path":"/docs/build-node-interaction","sidebar":"docs"},{"id":"build/build-node-management","path":"/docs/build-node-management","sidebar":"docs"},{"id":"build/build-open-source","path":"/docs/build-open-source","sidebar":"docs"},{"id":"build/build-oracle","path":"/docs/build-oracle","sidebar":"docs"},{"id":"build/build-parachains","path":"/docs/build-pdk","sidebar":"docs"},{"id":"build/build-protocol-info","path":"/docs/build-protocol-info","sidebar":"docs"},{"id":"build/build-smart-contracts","path":"/docs/build-smart-contracts","sidebar":"docs"},{"id":"build/build-ss58-registry","path":"/docs/build-ss58-registry","sidebar":"docs"},{"id":"build/build-storage","path":"/docs/build-storage","sidebar":"docs"},{"id":"build/build-substrate","path":"/docs/build-substrate","sidebar":"docs"},{"id":"build/build-tools-index","path":"/docs/build-tools-index","sidebar":"docs"},{"id":"build/build-transaction-construction","path":"/docs/build-transaction-construction","sidebar":"docs"},{"id":"general/ambassadors","path":"/docs/ambassadors","sidebar":"docs"},{"id":"general/bug-bounty","path":"/docs/bug-bounty","sidebar":"docs"},{"id":"general/builders-program","path":"/docs/builders-program","sidebar":"docs"},{"id":"general/community","path":"/docs/community","sidebar":"docs"},{"id":"general/contributing","path":"/docs/contributing","sidebar":"docs"},{"id":"general/contributors","path":"/docs/contributors","sidebar":"docs"},{"id":"general/dev-heroes","path":"/docs/dev-heroes","sidebar":"docs"},{"id":"general/doc-thousand-contributors","path":"/docs/thousand-contributors","sidebar":"docs"},{"id":"general/doc-thousand-validators","path":"/docs/thousand-validators","sidebar":"docs"},{"id":"general/faq","path":"/docs/faq","sidebar":"docs"},{"id":"general/getting-started","path":"/docs/getting-started","sidebar":"docs"},{"id":"general/glossary","path":"/docs/glossary","sidebar":"docs"},{"id":"general/grants","path":"/docs/grants","sidebar":"docs"},{"id":"general/how-to-dyor","path":"/docs/how-to-dyor","sidebar":"docs"},{"id":"general/kusama/kusama-adversarial-cheatsheet","path":"/docs/kusama-adversarial-cheatsheet"},{"id":"general/kusama/kusama-bug-bounty","path":"/docs/kusama-bug-bounty"},{"id":"general/kusama/kusama-claims","path":"/docs/kusama-claims"},{"id":"general/kusama/kusama-coc","path":"/docs/kusama-coc"},{"id":"general/kusama/kusama-community","path":"/docs/kusama-community"},{"id":"general/kusama/kusama-getting-started","path":"/docs/kusama-getting-started"},{"id":"general/kusama/kusama-index","path":"/docs/kusama-index"},{"id":"general/kusama/kusama-parameters","path":"/docs/kusama-parameters"},{"id":"general/kusama/kusama-social-recovery","path":"/docs/kusama-social-recovery"},{"id":"general/kusama/kusama-timeline","path":"/docs/kusama-timeline"},{"id":"general/ledger","path":"/docs/ledger","sidebar":"docs"},{"id":"general/metadata","path":"/docs/metadata","sidebar":"docs"},{"id":"general/polkadot-direction","path":"/docs/polkadot-direction","sidebar":"docs"},{"id":"general/polkadot-v1","path":"/docs/polkadot-v1","sidebar":"docs"},{"id":"general/polkadot-vault","path":"/docs/polkadot-vault","sidebar":"docs"},{"id":"general/polkadotjs","path":"/docs/polkadotjs","sidebar":"docs"},{"id":"general/polkadotjs-ui","path":"/docs/polkadotjs-ui","sidebar":"docs"},{"id":"general/research","path":"/docs/research","sidebar":"docs"},{"id":"general/scams","path":"/docs/learn-scams","sidebar":"docs"},{"id":"general/staking-dashboard","path":"/docs/staking-dashboard","sidebar":"docs"},{"id":"general/start-building","path":"/docs/start-building","sidebar":"docs"},{"id":"general/wallets-and-extensions","path":"/docs/wallets-and-extensions","sidebar":"docs"},{"id":"general/web3-and-polkadot","path":"/docs/web3-and-polkadot","sidebar":"docs"},{"id":"learn/learn-account-abstraction","path":"/docs/learn-account-abstraction","sidebar":"docs"},{"id":"learn/learn-account-advanced","path":"/docs/learn-account-advanced","sidebar":"docs"},{"id":"learn/learn-account-generation","path":"/docs/learn-account-generation","sidebar":"docs"},{"id":"learn/learn-account-multisig","path":"/docs/learn-account-multisig","sidebar":"docs"},{"id":"learn/learn-accounts","path":"/docs/learn-accounts","sidebar":"docs"},{"id":"learn/learn-architecture","path":"/docs/learn-architecture","sidebar":"docs"},{"id":"learn/learn-assets","path":"/docs/learn-assets","sidebar":"docs"},{"id":"learn/learn-async-backing","path":"/docs/learn-async-backing","sidebar":"docs"},{"id":"learn/learn-auction","path":"/docs/learn-auction","sidebar":"docs"},{"id":"learn/learn-balance-transfers","path":"/docs/learn-balance-transfers","sidebar":"docs"},{"id":"learn/learn-bridges","path":"/docs/learn-bridges","sidebar":"docs"},{"id":"learn/learn-collator","path":"/docs/learn-collator","sidebar":"docs"},{"id":"learn/learn-comparisons","path":"/docs/learn-comparisons","sidebar":"docs"},{"id":"learn/learn-comparisons-avalanche","path":"/docs/learn-comparisons-avalanche","sidebar":"docs"},{"id":"learn/learn-comparisons-cosmos","path":"/docs/learn-comparisons-cosmos","sidebar":"docs"},{"id":"learn/learn-comparisons-ethereum-2","path":"/docs/learn-comparisons-ethereum-2","sidebar":"docs"},{"id":"learn/learn-comparisons-kusama","path":"/docs/learn-comparisons-kusama","sidebar":"docs"},{"id":"learn/learn-comparisons-rollups","path":"/docs/learn-comparisons-rollups","sidebar":"docs"},{"id":"learn/learn-consensus","path":"/docs/learn-consensus","sidebar":"docs"},{"id":"learn/learn-controller","path":"/docs/learn-controller","sidebar":"docs"},{"id":"learn/learn-crowdloans","path":"/docs/learn-crowdloans","sidebar":"docs"},{"id":"learn/learn-cryptography","path":"/docs/learn-cryptography","sidebar":"docs"},{"id":"learn/learn-DOT","path":"/docs/learn-DOT","sidebar":"docs"},{"id":"learn/learn-extrinsics","path":"/docs/learn-extrinsics","sidebar":"docs"},{"id":"learn/learn-governance","path":"/docs/learn-governance","sidebar":"docs"},{"id":"learn/learn-guides-assets-create","path":"/docs/learn-guides-assets-create","sidebar":"docs"},{"id":"learn/learn-guides-assets-ledger","path":"/docs/learn-guides-assets-ledger","sidebar":"docs"},{"id":"learn/learn-guides-bounties","path":"/docs/learn-guides-bounties","sidebar":"docs"},{"id":"learn/learn-guides-identity","path":"/docs/learn-guides-identity","sidebar":"docs"},{"id":"learn/learn-guides-polkadot-opengov","path":"/docs/learn-guides-polkadot-opengov","sidebar":"docs"},{"id":"learn/learn-guides-staking","path":"/docs/learn-guides-staking","sidebar":"docs"},{"id":"learn/learn-guides-staking-pools","path":"/docs/learn-guides-staking-pools","sidebar":"docs"},{"id":"learn/learn-guides-treasury","path":"/docs/learn-guides-treasury","sidebar":"docs"},{"id":"learn/learn-guides-vault","path":"/docs/learn-guides-vault","sidebar":"docs"},{"id":"learn/learn-identity","path":"/docs/learn-identity","sidebar":"docs"},{"id":"learn/learn-implementations","path":"/docs/learn-implementations"},{"id":"learn/learn-inflation","path":"/docs/learn-inflation","sidebar":"docs"},{"id":"learn/learn-launch","path":"/docs/learn-launch","sidebar":"docs"},{"id":"learn/learn-nft","path":"/docs/learn-nft","sidebar":"docs"},{"id":"learn/learn-nft-pallets","path":"/docs/learn-nft-pallets","sidebar":"docs"},{"id":"learn/learn-nft-projects","path":"/docs/learn-nft-projects","sidebar":"docs"},{"id":"learn/learn-nomination-pools","path":"/docs/learn-nomination-pools","sidebar":"docs"},{"id":"learn/learn-nominator","path":"/docs/learn-nominator","sidebar":"docs"},{"id":"learn/learn-parachains","path":"/docs/learn-parachains","sidebar":"docs"},{"id":"learn/learn-parachains-faq","path":"/docs/learn-parachains-faq","sidebar":"docs"},{"id":"learn/learn-parachains-protocol","path":"/docs/learn-parachains-protocol","sidebar":"docs"},{"id":"learn/learn-parathreads","path":"/docs/learn-parathreads","sidebar":"docs"},{"id":"learn/learn-phragmen","path":"/docs/learn-phragmen","sidebar":"docs"},{"id":"learn/learn-polkadot-host","path":"/docs/learn-polkadot-host","sidebar":"docs"},{"id":"learn/learn-polkadot-opengov","path":"/docs/learn-polkadot-opengov","sidebar":"docs"},{"id":"learn/learn-polkadot-opengov-treasury","path":"/docs/learn-polkadot-opengov-treasury","sidebar":"docs"},{"id":"learn/learn-proxies","path":"/docs/learn-proxies","sidebar":"docs"},{"id":"learn/learn-proxies-pure","path":"/docs/learn-proxies-pure","sidebar":"docs"},{"id":"learn/learn-redenomination","path":"/docs/learn-redenomination","sidebar":"docs"},{"id":"learn/learn-runtime-upgrades","path":"/docs/learn-runtime-upgrades","sidebar":"docs"},{"id":"learn/learn-sassafras","path":"/docs/learn-sassafras","sidebar":"docs"},{"id":"learn/learn-spree","path":"/docs/learn-spree","sidebar":"docs"},{"id":"learn/learn-staking","path":"/docs/learn-staking","sidebar":"docs"},{"id":"learn/learn-staking-advanced","path":"/docs/learn-staking-advanced","sidebar":"docs"},{"id":"learn/learn-staking-apps","path":"/docs/learn-staking-apps","sidebar":"docs"},{"id":"learn/learn-system-chains","path":"/docs/learn-system-chains","sidebar":"docs"},{"id":"learn/learn-teleport","path":"/docs/learn-teleport","sidebar":"docs"},{"id":"learn/learn-transaction-fees","path":"/docs/learn-transaction-fees","sidebar":"docs"},{"id":"learn/learn-treasury","path":"/docs/learn-treasury","sidebar":"docs"},{"id":"learn/learn-validator","path":"/docs/learn-validator","sidebar":"docs"},{"id":"learn/learn-video-tutorials","path":"/docs/learn-video-tutorials","sidebar":"docs"},{"id":"learn/learn-wasm","path":"/docs/learn-wasm","sidebar":"docs"},{"id":"learn/learn-xcm","path":"/docs/learn-xcm","sidebar":"docs"},{"id":"learn/learn-xcm-instructions","path":"/docs/learn-xcm-instructions","sidebar":"docs"},{"id":"learn/learn-xcm-pallet","path":"/docs/learn-xcm-pallet","sidebar":"docs"},{"id":"learn/learn-xcm-transport","path":"/docs/learn-xcm-transport","sidebar":"docs"},{"id":"learn/learn-xcm-usecases","path":"/docs/learn-xcm-usecases","sidebar":"docs"},{"id":"learn/learn-xcvm","path":"/docs/learn-xcvm","sidebar":"docs"},{"id":"learn/xcm/executor_config/learn-xcm-docs-config-deep-dive","path":"/docs/learn/xcm/config-deep-dive","sidebar":"docs"},{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-fees","path":"/docs/learn/xcm/fundamentals-fees","sidebar":"docs"},{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-multiasset","path":"/docs/learn/xcm/fundamentals-multiasset","sidebar":"docs"},{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-summary","path":"/docs/learn/xcm/fundamentals-summary","sidebar":"docs"},{"id":"learn/xcm/fundamentals/learn-xcm-docs-fundamentals-xcvm","path":"/docs/learn/xcm/fundamentals-xcvm","sidebar":"docs"},{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-example","path":"/docs/learn/xcm/fundamentals/multilocation-example","sidebar":"docs"},{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-junctions","path":"/docs/learn/xcm/fundamentals/multilocation-junctions","sidebar":"docs"},{"id":"learn/xcm/fundamentals/multilocation/learn-xcm-docs-multilocation-summary","path":"/docs/learn/xcm/fundamentals/multilocation-summary","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-assets","path":"/docs/learn/xcm/journey-assets","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-channels","path":"/docs/learn/xcm/journey-channels","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-expectations","path":"/docs/learn/xcm/journey-expectations","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-fees","path":"/docs/learn/xcm/journey-fees","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-holding","path":"/docs/learn/xcm/journey-holding","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-origin","path":"/docs/learn/xcm/journey-origin","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-queries","path":"/docs/learn/xcm/journey-queries","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-register","path":"/docs/learn/xcm/journey-register","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-summary","path":"/docs/learn/xcm/journey-summary","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-transact","path":"/docs/learn/xcm/journey-transact","sidebar":"docs"},{"id":"learn/xcm/journey/learn-xcm-docs-journey-version","path":"/docs/learn/xcm/journey-version","sidebar":"docs"},{"id":"learn/xcm/journey/locks/learn-xcm-docs-journey-locks","path":"/docs/learn/xcm/journey-locks","sidebar":"docs"},{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-reserve","path":"/docs/learn/xcm/journey/transfers-reserve","sidebar":"docs"},{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-summary","path":"/docs/learn/xcm/journey/transfers-summary","sidebar":"docs"},{"id":"learn/xcm/journey/transfers/learn-xcm-docs-transfers-teleport","path":"/docs/learn/xcm/journey/transfers-teleport","sidebar":"docs"},{"id":"learn/xcm/learn-xcm-docs-intro","path":"/docs/learn/xcm/introduction","sidebar":"docs"},{"id":"learn/xcm/learn-xcm-docs-testing","path":"/docs/learn/xcm/testing","sidebar":"docs"},{"id":"learn/xcm/overview/learn-xcm-docs-overview-architecture","path":"/docs/learn/xcm/overview-architecture","sidebar":"docs"},{"id":"learn/xcm/overview/learn-xcm-docs-overview-format","path":"/docs/learn/xcm/overview-format","sidebar":"docs"},{"id":"learn/xcm/overview/learn-xcm-docs-overview-intro","path":"/docs/learn/xcm/overview-intro","sidebar":"docs"},{"id":"learn/xcm/overview/learn-xcm-docs-overview-summary","path":"/docs/learn/xcm/overview-summary","sidebar":"docs"},{"id":"learn/xcm/overview/learn-xcm-docs-overview-xcvm","path":"/docs/learn/xcm/overview-xcvm","sidebar":"docs"},{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-first-look","path":"/docs/learn/xcm/quickstart-first-look","sidebar":"docs"},{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-simulator","path":"/docs/learn/xcm/quickstart-simulator","sidebar":"docs"},{"id":"learn/xcm/quickstart/learn-xcm-docs-quickstart-summary","path":"/docs/learn/xcm/quickstart-summary","sidebar":"docs"},{"id":"learn/xcm/reference/learn-xcm-docs-reference-glossary","path":"/docs/learn/xcm/reference-glossary","sidebar":"docs"},{"id":"learn/xcm/reference/learn-xcm-docs-reference-xcvm-registers","path":"/docs/learn/xcm/reference-xcvm-registers","sidebar":"docs"},{"id":"maintain/doc-maintain-guides-validator-community","path":"/docs/maintain-guides-validator-community","sidebar":"docs"},{"id":"maintain/kusama/maintain-guides-how-to-nominate-kusama","path":"/docs/maintain-guides-how-to-nominate-kusama"},{"id":"maintain/kusama/maintain-guides-how-to-validate-kusama","path":"/docs/maintain-guides-how-to-validate-kusama"},{"id":"maintain/kusama/maintain-guides-society-kusama","path":"/docs/maintain-guides-society-kusama"},{"id":"maintain/maintain-bootnode","path":"/docs/maintain-bootnode","sidebar":"docs"},{"id":"maintain/maintain-endpoints","path":"/docs/maintain-endpoints","sidebar":"docs"},{"id":"maintain/maintain-errors","path":"/docs/maintain-errors","sidebar":"docs"},{"id":"maintain/maintain-guides-avoid-slashing","path":"/docs/maintain-guides-avoid-slashing","sidebar":"docs"},{"id":"maintain/maintain-guides-democracy","path":"/docs/maintain-guides-democracy","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-chill","path":"/docs/maintain-guides-how-to-chill","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-join-council","path":"/docs/maintain-guides-how-to-join-council","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-monitor-your-node","path":"/docs/maintain-guides-how-to-monitor-your-node","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-nominate-polkadot","path":"/docs/maintain-guides-how-to-nominate-polkadot","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-stop-validating","path":"/docs/maintain-guides-how-to-stop-validating","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-systemd","path":"/docs/maintain-guides-how-to-systemd","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-upgrade","path":"/docs/maintain-guides-how-to-upgrade","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-validate-polkadot","path":"/docs/maintain-guides-how-to-validate-polkadot","sidebar":"docs"},{"id":"maintain/maintain-guides-how-to-vote-councillor","path":"/docs/maintain-guides-how-to-vote-councillor","sidebar":"docs"},{"id":"maintain/maintain-guides-polkadot-opengov","path":"/docs/maintain-guides-polkadot-opengov","sidebar":"docs"},{"id":"maintain/maintain-guides-secure-validator","path":"/docs/maintain-guides-secure-validator","sidebar":"docs"},{"id":"maintain/maintain-guides-validator-payout","path":"/docs/maintain-guides-validator-payout","sidebar":"docs"},{"id":"maintain/maintain-index","path":"/docs/maintain-index","sidebar":"docs"},{"id":"maintain/maintain-networks","path":"/docs/maintain-networks","sidebar":"docs"},{"id":"maintain/maintain-polkadot-parameters","path":"/docs/maintain-polkadot-parameters","sidebar":"docs"},{"id":"maintain/maintain-rpc","path":"/docs/maintain-rpc","sidebar":"docs"},{"id":"maintain/maintain-sync","path":"/docs/maintain-sync","sidebar":"docs"},{"id":"maintain/maintain-wss","path":"/docs/maintain-wss","sidebar":"docs"},{"id":"/learn-index","path":"/docs/learn-index","sidebar":"docs"},{"id":"/general-index","path":"/docs/general-index","sidebar":"docs"},{"id":"/polkadot-vision-index","path":"/docs/polkadot-vision-index","sidebar":"docs"},{"id":"/stay-safe-index","path":"/docs/stay-safe-index","sidebar":"docs"},{"id":"/wallets-index","path":"/docs/wallets-index","sidebar":"docs"},{"id":"/dashboards-index","path":"/docs/dashboards-index","sidebar":"docs"},{"id":"/community-index","path":"/docs/community-index","sidebar":"docs"},{"id":"/programmes-index","path":"/docs/programmes-index","sidebar":"docs"},{"id":"/learn-basics-index","path":"/docs/learn-basics-index","sidebar":"docs"},{"id":"/learn-accounts-index","path":"/docs/learn-accounts-index","sidebar":"docs"},{"id":"/learn-transactions-index","path":"/docs/learn-transactions-index","sidebar":"docs"},{"id":"/learn-staking-index","path":"/docs/learn-staking-index","sidebar":"docs"},{"id":"/learn-assets-index","path":"/docs/learn-assets-index","sidebar":"docs"},{"id":"/learn-nft-index","path":"/docs/learn-nft-index","sidebar":"docs"},{"id":"/learn-components-index","path":"/docs/learn-components-index","sidebar":"docs"},{"id":"/learn-advanced-index","path":"/docs/learn-advanced-index","sidebar":"docs"},{"id":"/learn-guides-index","path":"/docs/learn-guides-index","sidebar":"docs"},{"id":"/learn-guides-staking-index","path":"/docs/learn-guides-staking-index","sidebar":"docs"},{"id":"/learn-guides-assets-index","path":"/docs/learn-guides-assets-index","sidebar":"docs"},{"id":"/learn-architecture-index","path":"/docs/learn-architecture-index","sidebar":"docs"},{"id":"/learn-participants-index","path":"/docs/learn-participants-index","sidebar":"docs"},{"id":"/learn-parachains-index","path":"/docs/learn-parachains-index","sidebar":"docs"},{"id":"/learn-xcm-index","path":"/docs/learn-xcm-index","sidebar":"docs"},{"id":"learn/xcm","path":"/docs/learn/xcm","sidebar":"docs"},{"id":"/learn/xcm/overview","path":"/docs/learn/xcm/overview","sidebar":"docs"},{"id":"/learn/xcm/quickstart","path":"/docs/learn/xcm/quickstart","sidebar":"docs"},{"id":"/learn/xcm/fundamentals","path":"/docs/learn/xcm/fundamentals","sidebar":"docs"},{"id":"/learn/xcm/fundamentals/multilocation","path":"/docs/learn/xcm/fundamentals/multilocation","sidebar":"docs"},{"id":"/learn/xcm/journey","path":"/docs/learn/xcm/journey","sidebar":"docs"},{"id":"/learn/xcm/journey/transfers","path":"/docs/learn/xcm/journey/transfers","sidebar":"docs"},{"id":"/learn/xcm/references","path":"/docs/learn/xcm/references","sidebar":"docs"},{"id":"/learn-comparisons-index","path":"/docs/learn-comparisons-index","sidebar":"docs"},{"id":"/learn-future-implementations-index","path":"/docs/learn-future-implementations-index","sidebar":"docs"},{"id":"/learn-archive-index","path":"/docs/learn-archive-index","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/learn-index","label":"Learn"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(81465);const c=JSON.parse('{"docusaurusVersion":"2.4.3","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.4.3"},"undefined":{"type":"package","name":"remark-docusaurus-tabs","version":"0.2.0"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"2.4.3"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"2.4.3"}}}');var l={siteConfig:a.default,siteMetadata:c,globalData:o,i18n:i,codeTranslations:s},u=r.createContext(l);function d(e){var t=e.children;return r.createElement(u.Provider,{value:l},t)}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(94578),a=n(67294),o=n(10412),i=n(35742),s=n(18780),c=n(34033);function l(e){var t=e.error,n=e.tryAgain;return a.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},a.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),a.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),a.createElement(u,{error:t}))}function u(e){var t=e.error,n=(0,s.getErrorCausalChain)(t).map((function(e){return e.message})).join("\n\nCause:\n");return a.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function d(e){var t=e.error,n=e.tryAgain;return a.createElement(p,{fallback:function(){return a.createElement(l,{error:t,tryAgain:n})}},a.createElement(i.Z,null,a.createElement("title",null,"Page Error")),a.createElement(c.Z,null,a.createElement(l,{error:t,tryAgain:n})))}var f=function(e){return a.createElement(d,e)},p=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={error:null},n}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidCatch=function(e){o.Z.canUseDOM&&this.setState({error:e})},n.render=function(){var e=this,t=this.props.children,n=this.state.error;if(n){var r,a={error:n,tryAgain:function(){return e.setState({error:null})}};return(null!=(r=this.props.fallback)?r:f)(a)}return null!=t?t:null},t}(a.Component)},10412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document;const a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(70405);function o(e){return r.createElement(a.ql,e)}},39960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var r=n(87462),a=n(63366),o=n(67294),i=n(73727),s=n(18780),c=n(52263),l=n(13919),u=n(10412),d=o.createContext({collectLink:function(){}});var f=n(44996),p=["isNavLink","to","href","activeClassName","isActive","data-noBrokenLinkCheck","autoAddBaseUrl"];function m(e,t){var n,m,h=e.isNavLink,g=e.to,b=e.href,v=e.activeClassName,y=e.isActive,x=e["data-noBrokenLinkCheck"],k=e.autoAddBaseUrl,w=void 0===k||k,E=(0,a.Z)(e,p),_=(0,c.Z)().siteConfig,S=_.trailingSlash,C=_.baseUrl,T=(0,f.C)().withBaseUrl,A=(0,o.useContext)(d),P=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(function(){return P.current}));var O=g||b;var L,N=(0,l.Z)(O),I=null==O?void 0:O.replace("pathname://",""),R=void 0!==I?(L=I,w&&function(e){return e.startsWith("/")}(L)?T(L):L):void 0;R&&N&&(R=(0,s.applyTrailingSlash)(R,{trailingSlash:S,baseUrl:C}));var j=(0,o.useRef)(!1),M=h?i.OL:i.rU,D=u.Z.canUseIntersectionObserver,F=(0,o.useRef)(),B=function(){j.current||null==R||(window.docusaurus.preload(R),j.current=!0)};(0,o.useEffect)((function(){return!D&&N&&null!=R&&window.docusaurus.prefetch(R),function(){D&&F.current&&F.current.disconnect()}}),[F,R,D,N]);var z=null!=(n=null==(m=R)?void 0:m.startsWith("#"))&&n,U=!R||!N||z;return U||x||A.collectLink(R),U?o.createElement("a",(0,r.Z)({ref:P,href:R},O&&!N&&{target:"_blank",rel:"noopener noreferrer"},E)):o.createElement(M,(0,r.Z)({},E,{onMouseEnter:B,onTouchStart:B,innerRef:function(e){P.current=e,D&&e&&N&&(F.current=new window.IntersectionObserver((function(t){t.forEach((function(t){e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(F.current.unobserve(e),F.current.disconnect(),null!=R&&window.docusaurus.prefetch(R))}))})),F.current.observe(e))},to:R},h&&{isActive:y,activeClassName:v}))}const h=o.forwardRef(m)},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>s});var r=n(67294);function a(e,t){var n=e.split(/(\{\w+\})/).map((function(e,n){if(n%2==1){var r=null==t?void 0:t[e.slice(1,-1)];if(void 0!==r)return r}return e}));return n.some((function(e){return(0,r.isValidElement)(e)}))?n.map((function(e,t){return(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e})).filter((function(e){return""!==e})):n.join("")}var o=n(81465);function i(e){var t,n,r=e.id,a=e.message;if(void 0===r&&void 0===a)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return null!=(t=null!=(n=o[null!=r?r:a])?n:a)?t:r}function s(e,t){return a(i({message:e.message,id:e.id}),t)}function c(e){var t=e.children,n=e.id,o=e.values;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");var s=i({message:t,id:n});return r.createElement(r.Fragment,null,a(s,o))}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});var r="default"},13919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},44996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(67294),a=n(52263),o=n(13919);function i(){var e=(0,a.Z)().siteConfig,t=e.baseUrl,n=e.url,i=(0,r.useCallback)((function(e,r){return function(e,t,n,r){var a=void 0===r?{}:r,i=a.forcePrependBaseUrl,s=void 0!==i&&i,c=a.absolute,l=void 0!==c&&c;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(s)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;var u=n.startsWith(t)?n:t+n.replace(/^\//,"");return l?e+u:u}(n,t,e,r)}),[n,t]);return{withBaseUrl:i}}function s(e,t){return void 0===t&&(t={}),(0,i().withBaseUrl)(e,t)}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(49633);function o(){return(0,r.useContext)(a._)}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(98934);function o(){return(0,r.useContext)(a._)}},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(e){return"object"==typeof e&&!!e&&Object.keys(e).length>0};function a(e){var t={};return function e(n,a){Object.entries(n).forEach((function(n){var o=n[0],i=n[1],s=a?a+"."+o:o;r(i)?e(i,s):t[s]=i}))}(e),t}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(67294),a=r.createContext(null);function o(e){var t=e.children,n=e.value,o=r.useContext(a),i=(0,r.useMemo)((function(){return function(e){var t=e.parent,n=e.value;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}var r=Object.assign({},t.data,null==n?void 0:n.data);return{plugin:t.plugin,data:r}}({parent:o,value:n})}),[o,n]);return r.createElement(a.Provider,{value:i},t)}},80143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>b,gA:()=>p,WS:()=>m,_r:()=>d,Jo:()=>v,zh:()=>f,yW:()=>g,gB:()=>h});var r=n(16550),a=n(52263),o=n(29935);function i(e,t){void 0===t&&(t={});var n=(0,a.Z)().globalData[e];if(!n&&t.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin.');return n}var s=function(e){return e.versions.find((function(e){return e.isLast}))};function c(e,t){var n=s(e);return[].concat(e.versions.filter((function(e){return e!==n})),[n]).find((function(e){return!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})}))}function l(e,t){var n,a,o=c(e,t),i=null==o?void 0:o.docs.find((function(e){return!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})}));return{activeVersion:o,activeDoc:i,alternateDocVersions:i?(n=i.id,a={},e.versions.forEach((function(e){e.docs.forEach((function(t){t.id===n&&(a[e.name]=t)}))})),a):{}}}var u={},d=function(){var e;return null!=(e=i("docusaurus-plugin-content-docs"))?e:u},f=function(e){return function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});var r=i(e),a=null==r?void 0:r[t];if(!a&&n.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin with id "'+t+'".');return a}("docusaurus-plugin-content-docs",e,{failfast:!0})};function p(e){return void 0===e&&(e={}),function(e,t,n){void 0===n&&(n={});var a=Object.entries(e).sort((function(e,t){return t[1].path.localeCompare(e[1].path)})).find((function(e){var n=e[1];return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error("Can't find active docs plugin for \""+t+'" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: '+Object.values(e).map((function(e){return e.path})).join(", "));return o}(d(),(0,r.TH)().pathname,e)}function m(e){void 0===e&&(e={});var t=p(e),n=(0,r.TH)().pathname;if(t)return{activePlugin:t,activeVersion:c(t.pluginData,n)}}function h(e){return f(e).versions}function g(e){var t=f(e);return s(t)}function b(e){return l(f(e),(0,r.TH)().pathname)}function v(e){return function(e,t){var n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(f(e),(0,r.TH)().pathname)}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(74865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate:function(e){var t=e.location,n=e.previousLocation;if(n&&t.pathname!==n.pathname){var r=window.setTimeout((function(){a().start()}),200);return function(){return window.clearTimeout(r)}}},onRouteDidUpdate:function(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r,a,o=n(87410),i=n(8618);r=o.Z,a=i.default.themeConfig.prism.additionalLanguages,globalThis.Prism=r,a.forEach((function(e){n(54294)("./prism-"+e)})),delete globalThis.Prism},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){var t=e.width,n=void 0===t?13.5:t,o=e.height,i=void 0===o?13.5:o;return r.createElement("svg",{width:n,height:i,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},34033:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Xt});var r=n(67294),a=n(86010),o=n(44763),i=n(10833),s=n(87462),c=n(16550),l=n(95999),u=n(85936),d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){var e=(0,r.useRef)(null),t=(0,c.k6)().action,n=(0,r.useCallback)((function(e){e.preventDefault();var t,n=null!=(t=document.querySelector("main:first-of-type"))?t:document.getElementById(d);n&&f(n)}),[]);return(0,u.S)((function(n){var r=n.location;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}var m=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){var t,n=null!=(t=e.children)?t:m,a=p(),o=a.containerRef,i=a.onClick;return r.createElement("div",{ref:o,role:"region","aria-label":m},r.createElement("a",(0,s.Z)({},e,{href:"#"+d,onClick:i}),n))}var g=n(35281),b=n(19727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(h,{className:v.skipToContent})}var x=n(86668),k=n(59689),w=n(63366),E=["width","height","color","strokeWidth","className"];function _(e){var t=e.width,n=void 0===t?21:t,a=e.height,o=void 0===a?21:a,i=e.color,c=void 0===i?"currentColor":i,l=e.strokeWidth,u=void 0===l?1.2:l,d=(e.className,(0,w.Z)(e,E));return r.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:n,height:o},d),r.createElement("g",{stroke:c,strokeWidth:u},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function C(e){return r.createElement("button",(0,s.Z)({type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(_,{width:14,height:14,strokeWidth:3.1}))}const T={content:"content_knG7"};function A(e){var t=(0,x.L)().announcementBar.content;return r.createElement("div",(0,s.Z)({},e,{className:(0,a.Z)(T.content,e.className),dangerouslySetInnerHTML:{__html:t}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function O(){var e=(0,x.L)().announcementBar,t=(0,k.nT)(),n=t.isActive,a=t.close;if(!n)return null;var o=e.backgroundColor,i=e.textColor,s=e.isCloseable;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:i},role:"banner"},s&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(A,{className:P.announcementBarContent}),s&&r.createElement(C,{onClick:a,className:P.announcementBarClose}))}var L=n(93163),N=n(12466);var I=n(69688),R=n(13102),j=r.createContext(null);function M(e){var t,n,a,o,i,s,c,l=e.children,u=(t=(0,L.e)(),n=(0,R.HY)(),a=(0,r.useState)(!1),o=a[0],i=a[1],s=null!==n.component,c=(0,I.D9)(s),(0,r.useEffect)((function(){s&&!c&&i(!0)}),[s,c]),(0,r.useEffect)((function(){s?t.shown||i(!0):i(!1)}),[t.shown,s]),(0,r.useMemo)((function(){return[o,i]}),[o]));return r.createElement(j.Provider,{value:u},l)}function D(e){if(e.component){var t=e.component;return r.createElement(t,e.props)}}function F(){var e=(0,r.useContext)(j);if(!e)throw new I.i6("NavbarSecondaryMenuDisplayProvider");var t=e[0],n=e[1],a=(0,r.useCallback)((function(){return n(!1)}),[n]),o=(0,R.HY)();return(0,r.useMemo)((function(){return{shown:t,hide:a,content:D(o)}}),[a,o,t])}function B(e){var t=e.header,n=e.primaryMenu,o=e.secondaryMenu,i=F().shown;return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var z=n(92949),U=n(72389);function $(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function Z(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const H={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function G(e){var t=e.className,n=e.buttonClassName,o=e.value,i=e.onChange,s=(0,U.Z)(),c=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(H.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",H.toggleButton,!s&&H.toggleButtonDisabled,n),type:"button",onClick:function(){return i("dark"===o?"light":"dark")},disabled:!s,title:c,"aria-label":c,"aria-live":"polite"},r.createElement($,{className:(0,a.Z)(H.toggleIcon,H.lightToggleIcon)}),r.createElement(Z,{className:(0,a.Z)(H.toggleIcon,H.darkToggleIcon)})))}const V=r.memo(G),q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){var t=e.className,n=(0,x.L)().navbar.style,a=(0,x.L)().colorMode.disableSwitch,o=(0,z.I)(),i=o.colorMode,s=o.setColorMode;return a?null:r.createElement(V,{className:t,buttonClassName:"dark"===n?q.darkNavbarColorModeToggle:void 0,value:i,onChange:s})}var Y=n(87846);function K(){return r.createElement(Y.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function X(){var e=(0,L.e)();return r.createElement("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:function(){return e.toggle()}},r.createElement(_,{color:"var(--ifm-color-emphasis-600)"}))}function Q(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(K,null),r.createElement(W,{className:"margin-right--md"}),r.createElement(X,null))}var J=n(39960),ee=n(44996),te=n(13919),ne=n(98022),re=n(39471),ae=["activeBasePath","activeBaseRegex","to","href","label","html","isDropdownLink","prependBaseUrlToHref"];function oe(e){var t=e.activeBasePath,n=e.activeBaseRegex,a=e.to,o=e.href,i=e.label,c=e.html,l=e.isDropdownLink,u=e.prependBaseUrlToHref,d=(0,w.Z)(e,ae),f=(0,ee.Z)(a),p=(0,ee.Z)(t),m=(0,ee.Z)(o,{forcePrependBaseUrl:!0}),h=i&&o&&!(0,te.Z)(o),g=c?{dangerouslySetInnerHTML:{__html:c}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(re.Z,l&&{width:12,height:12}))};return o?r.createElement(J.Z,(0,s.Z)({href:u?m:o},d,g)):r.createElement(J.Z,(0,s.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:function(e,t){return n?(0,ne.F)(n,t.pathname):t.pathname.startsWith(p)}},d,g))}var ie=["className","isDropdownItem"],se=["className","isDropdownItem"],ce=["mobile","position"];function le(e){var t=e.className,n=e.isDropdownItem,o=void 0!==n&&n,i=(0,w.Z)(e,ie),c=r.createElement(oe,(0,s.Z)({className:(0,a.Z)(o?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:o},i));return o?r.createElement("li",null,c):c}function ue(e){var t=e.className,n=(e.isDropdownItem,(0,w.Z)(e,se));return r.createElement("li",{className:"menu__list-item"},r.createElement(oe,(0,s.Z)({className:(0,a.Z)("menu__link",t)},n)))}function de(e){var t,n=e.mobile,a=void 0!==n&&n,o=(e.position,(0,w.Z)(e,ce)),i=a?ue:le;return r.createElement(i,(0,s.Z)({},o,{activeClassName:null!=(t=o.activeClassName)?t:a?"menu__link--active":"navbar__link--active"}))}var fe=n(86043),pe=n(48596),me=n(52263);var he=["items","position","className","onClick"],ge=["items","className","position","onClick"],be=["mobile"];function ve(e,t){return e.some((function(e){return function(e,t){return!!(0,pe.Mg)(e.to,t)||!!(0,ne.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)}))}function ye(e){var t,n=e.items,o=e.position,i=e.className,c=(e.onClick,(0,w.Z)(e,he)),l=(0,r.useRef)(null),u=(0,r.useState)(!1),d=u[0],f=u[1];return(0,r.useEffect)((function(){var e=function(e){l.current&&!l.current.contains(e.target)&&f(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),function(){document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),r.createElement("div",{ref:l,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===o,"dropdown--show":d})},r.createElement(oe,(0,s.Z)({"aria-haspopup":"true","aria-expanded":d,role:"button",href:c.to?void 0:"#",className:(0,a.Z)("navbar__link",i)},c,{onClick:c.to?void 0:function(e){return e.preventDefault()},onKeyDown:function(e){"Enter"===e.key&&(e.preventDefault(),f(!d))}}),null!=(t=c.children)?t:c.label),r.createElement("ul",{className:"dropdown__menu"},n.map((function(e,t){return r.createElement(it,(0,s.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))}))))}function xe(e){var t,n,o=e.items,i=e.className,l=(e.position,e.onClick),u=(0,w.Z)(e,ge),d=(n=(0,me.Z)().siteConfig.baseUrl,(0,c.TH)().pathname.replace(n,"/")),f=ve(o,d),p=(0,fe.u)({initialState:function(){return!f}}),m=p.collapsed,h=p.toggleCollapsed,g=p.setCollapsed;return(0,r.useEffect)((function(){f&&g(!f)}),[d,f,g]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":m})},r.createElement(oe,(0,s.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",i)},u,{onClick:function(e){e.preventDefault(),h()}}),null!=(t=u.children)?t:u.label),r.createElement(fe.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:m},o.map((function(e,t){return r.createElement(it,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:l,activeClassName:"menu__link--active"},e,{key:t}))}))))}function ke(e){var t=e.mobile,n=void 0!==t&&t,a=(0,w.Z)(e,be),o=n?xe:ye;return r.createElement(o,a)}var we=n(94711),Ee=["width","height"];function _e(e){var t=e.width,n=void 0===t?20:t,a=e.height,o=void 0===a?20:a,i=(0,w.Z)(e,Ee);return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:n,height:o,"aria-hidden":!0},i),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const Se="iconLanguage_nlXk";var Ce=["mobile","dropdownItemsBefore","dropdownItemsAfter"];function Te(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var Ae=n(20830),Pe=["translations"];function Oe(){return Oe=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Re="Ctrl";var je=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=Ie(e,Pe),i=a.buttonText,s=void 0===i?"Search":i,c=a.buttonAriaLabel,l=void 0===c?"Search":c,u=Le((0,r.useState)(null),2),d=u[0],f=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?f("\u2318"):f(Re))}),[]),r.createElement("button",Oe({type:"button",className:"DocSearch DocSearch-Button","aria-label":l},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(Ae.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===Re?r.createElement(Te,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),Me=n(35742),De=n(66177),Fe=n(239),Be=n(43320);var ze=n(73935);const Ue={button:{buttonText:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,l.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,l.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,l.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,l.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,l.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,l.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,l.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,l.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};var $e=["contextualSearch","externalUrlRegex"],Ze=null;function He(e){var t=e.hit,n=e.children;return r.createElement(J.Z,{to:t.url},n)}function Ge(e){var t=e.state,n=e.onClose,a=(0,De.M)();return r.createElement(J.Z,{to:a(t.query),onClick:n},r.createElement(l.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits}},"See all {count} results"))}function Ve(e){var t,a,o,i,l,u=e.contextualSearch,d=e.externalUrlRegex,f=(0,w.Z)(e,$e),p=(0,me.Z)().siteMetadata,m=(0,Fe.l)(),h=["language:"+(o=(0,Be._q)()).locale,o.tags.map((function(e){return"docusaurus_tag:"+e}))],g=null!=(t=null==(a=f.searchParameters)?void 0:a.facetFilters)?t:[],b=u?(i=g,[].concat((l=function(e){return"string"==typeof e?[e]:e})(h),l(i))):g,v=Object.assign({},f.searchParameters,{facetFilters:b}),y=(0,c.k6)(),x=(0,r.useRef)(null),k=(0,r.useRef)(null),E=(0,r.useState)(!1),_=E[0],S=E[1],C=(0,r.useState)(void 0),T=C[0],A=C[1],P=(0,r.useCallback)((function(){return Ze?Promise.resolve():Promise.all([n.e(6780).then(n.bind(n,76780)),Promise.all([n.e(532),n.e(6945)]).then(n.bind(n,46945)),Promise.all([n.e(532),n.e(8894)]).then(n.bind(n,18894))]).then((function(e){var t=e[0].DocSearchModal;Ze=t}))}),[]),O=(0,r.useCallback)((function(){P().then((function(){x.current=document.createElement("div"),document.body.insertBefore(x.current,document.body.firstChild),S(!0)}))}),[P,S]),L=(0,r.useCallback)((function(){var e;S(!1),null==(e=x.current)||e.remove()}),[S]),N=(0,r.useCallback)((function(e){P().then((function(){S(!0),A(e.key)}))}),[P,S,A]),I=(0,r.useRef)({navigate:function(e){var t=e.itemUrl;(0,ne.F)(d,t)?window.location.href=t:y.push(t)}}).current,R=(0,r.useRef)((function(e){return f.transformItems?f.transformItems(e):e.map((function(e){return Object.assign({},e,{url:m(e.url)})}))})).current,j=(0,r.useMemo)((function(){return function(e){return r.createElement(Ge,(0,s.Z)({},e,{onClose:L}))}}),[L]),M=(0,r.useCallback)((function(e){return e.addAlgoliaAgent("docusaurus",p.docusaurusVersion),e}),[p.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){(27===e.keyCode&&t||"k"===e.key.toLowerCase()&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:_,onOpen:O,onClose:L,onInput:N,searchButtonRef:k}),r.createElement(r.Fragment,null,r.createElement(Me.Z,null,r.createElement("link",{rel:"preconnect",href:"https://"+f.appId+"-dsn.algolia.net",crossOrigin:"anonymous"})),r.createElement(je,{onTouchStart:P,onFocus:P,onMouseOver:P,onClick:O,ref:k,translations:Ue.button}),_&&Ze&&x.current&&(0,ze.createPortal)(r.createElement(Ze,(0,s.Z)({onClose:L,initialScrollY:window.scrollY,initialQuery:T,navigator:I,transformItems:R,hitComponent:He,transformSearchClient:M},f.searchPagePath&&{resultsFooterComponent:j},f,{searchParameters:v,placeholder:Ue.placeholder,translations:Ue.modal})),x.current))}function qe(){var e=(0,me.Z)().siteConfig;return r.createElement(Ve,e.themeConfig.algolia)}const We={searchBox:"searchBox_ZlJk"};function Ye(e){var t=e.children,n=e.className;return r.createElement("div",{className:(0,a.Z)(n,We.searchBox)},t)}var Ke=n(80143),Xe=n(53438),Qe=["docId","label","docsPluginId"];var Je=["sidebarId","label","docsPluginId"];var et=["label","to","docsPluginId"];var tt=n(60373),nt=["mobile","docsPluginId","dropdownActiveClassDisabled","dropdownItemsBefore","dropdownItemsAfter"],rt=function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))};const at={default:de,localeDropdown:function(e){var t=e.mobile,n=e.dropdownItemsBefore,a=e.dropdownItemsAfter,o=(0,w.Z)(e,Ce),i=(0,me.Z)().i18n,u=i.currentLocale,d=i.locales,f=i.localeConfigs,p=(0,we.l)(),m=(0,c.TH)(),h=m.search,g=m.hash,b=d.map((function(e){var n=""+("pathname://"+p.createUrl({locale:e,fullyQualified:!1}))+h+g;return{label:f[e].label,lang:f[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===u?t?"menu__link--active":"dropdown__link--active":""}})),v=[].concat(n,b,a),y=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):f[u].label;return r.createElement(ke,(0,s.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(_e,{className:Se}),y),items:v}))},search:function(e){var t=e.mobile,n=e.className;return t?null:r.createElement(Ye,{className:n},r.createElement(qe,null))},dropdown:ke,html:function(e){var t=e.value,n=e.className,o=e.mobile,i=void 0!==o&&o,s=e.isDropdownItem,c=void 0!==s&&s,l=c?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!i&&!c,"menu__list-item":i},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){var t=e.docId,n=e.label,a=e.docsPluginId,o=(0,w.Z)(e,Qe),i=(0,Ke.Iw)(a).activeDoc,c=(0,Xe.vY)(t,a);return null===c?null:r.createElement(de,(0,s.Z)({exact:!0},o,{isActive:function(){return(null==i?void 0:i.path)===c.path||!(null==i||!i.sidebar)&&i.sidebar===c.sidebar},label:null!=n?n:c.id,to:c.path}))},docSidebar:function(e){var t=e.sidebarId,n=e.label,a=e.docsPluginId,o=(0,w.Z)(e,Je),i=(0,Ke.Iw)(a).activeDoc,c=(0,Xe.oz)(t,a).link;if(!c)throw new Error('DocSidebarNavbarItem: Sidebar with ID "'+t+"\" doesn't have anything to be linked to.");return r.createElement(de,(0,s.Z)({exact:!0},o,{isActive:function(){return(null==i?void 0:i.sidebar)===t},label:null!=n?n:c.label,to:c.path}))},docsVersion:function(e){var t=e.label,n=e.to,a=e.docsPluginId,o=(0,w.Z)(e,et),i=(0,Xe.lO)(a)[0],c=null!=t?t:i.label,l=null!=n?n:function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))}(i).path;return r.createElement(de,(0,s.Z)({},o,{label:c,to:l}))},docsVersionDropdown:function(e){var t=e.mobile,n=e.docsPluginId,a=e.dropdownActiveClassDisabled,o=e.dropdownItemsBefore,i=e.dropdownItemsAfter,u=(0,w.Z)(e,nt),d=(0,c.TH)(),f=d.search,p=d.hash,m=(0,Ke.Iw)(n),h=(0,Ke.gB)(n),g=(0,tt.J)(n).savePreferredVersionName,b=h.map((function(e){var t,n=null!=(t=m.alternateDocVersions[e.name])?t:rt(e);return{label:e.label,to:""+n.path+f+p,isActive:function(){return e===m.activeVersion},onClick:function(){return g(e.name)}}})),v=[].concat(o,b,i),y=(0,Xe.lO)(n)[0],x=t&&v.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):y.label,k=t&&v.length>1?void 0:rt(y).path;return v.length<=1?r.createElement(de,(0,s.Z)({},u,{mobile:t,label:x,to:k,isActive:a?function(){return!1}:void 0})):r.createElement(ke,(0,s.Z)({},u,{mobile:t,label:x,to:k,items:v,isActive:a?function(){return!1}:void 0}))}};var ot=["type"];function it(e){var t=e.type,n=(0,w.Z)(e,ot),a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=at[a];if(!o)throw new Error('No NavbarItem component found for type "'+t+'".');return r.createElement(o,n)}function st(){var e=(0,L.e)(),t=(0,x.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map((function(t,n){return r.createElement(it,(0,s.Z)({mobile:!0},t,{onClick:function(){return e.toggle()},key:n}))})))}function ct(e){return r.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function lt(){var e=0===(0,x.L)().navbar.items.length,t=F();return r.createElement(r.Fragment,null,!e&&r.createElement(ct,{onClick:function(){return t.hide()}}),t.content)}function ut(){var e,t=(0,L.e)();return void 0===(e=t.shown)&&(e=!0),(0,r.useEffect)((function(){return document.body.style.overflow=e?"hidden":"visible",function(){document.body.style.overflow="visible"}}),[e]),t.shouldRender?r.createElement(B,{header:r.createElement(Q,null),primaryMenu:r.createElement(st,null),secondaryMenu:r.createElement(lt,null)}):null}const dt={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ft(e){return r.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function pt(e){var t=e.children,n=(0,x.L)().navbar,o=n.hideOnScroll,i=n.style,s=(0,L.e)(),c=function(e){var t=(0,r.useState)(e),n=t[0],a=t[1],o=(0,r.useRef)(!1),i=(0,r.useRef)(0),s=(0,r.useCallback)((function(e){null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)((function(t,n){var r=t.scrollY;if(e)if(r=s?a(!1):r+l=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}const Zt=function(e){var t=e.title,n=e.titleId,a=$t(e,zt);return r.createElement("svg",Ut({id:"Content",xmlns:"http://www.w3.org/2000/svg",x:0,y:0,viewBox:"0 0 6593.8 1410.3",style:{enableBackground:"new 0 0 6593.8 1410.3"},xmlSpace:"preserve","aria-labelledby":n},a),t?r.createElement("title",{id:n},t):null,Pt||(Pt=r.createElement("style",null,".st0{fill:#fff}")),Ot||(Ot=r.createElement("path",{className:"st0",d:"M2047.8 210.4c-77.2 0-151.6 9.7-181.9 17.9-44.1 12.4-55.1 31.7-63.4 71.7l-175 807.5c-2.8 16.5-5.5 30.3-5.5 44.1 0 40 26.2 66.1 68.9 66.1 46.9 0 66.2-30.3 75.8-77.2l49.6-230.1c34.4 4.1 79.9 8.3 144.7 8.3 285.3 0 463-154.3 463-387.2 0-204-142-321.1-376.2-321.1zm-93.7 576c-44.1 0-78.6-1.4-110.2-5.5l92.3-428.6c28.9-4.1 71.7-9.7 115.8-9.7 151.6 0 228.8 71.7 228.8 190.2-.1 151.6-110.4 253.6-326.7 253.6zM6537.3 951.7c-23.4 0-38.6 13.8-67.5 45.5-51 52.4-82.7 81.3-122.6 81.3-35.8 0-55.1-28.9-55.1-75.8 0-26.2 5.5-57.9 12.4-92.3l51-239.8h153c48.2 0 77.2-27.6 77.2-77.2 0-27.6-17.9-48.2-59.2-48.2H6383l24.8-111.6c2.8-16.5 5.5-31.7 5.5-45.5 0-38.6-26.2-66.2-68.9-66.2-45.5 0-66.1 30.3-75.8 77.2l-31.7 146.1h-64.8c-49.6 0-78.5 27.6-78.5 77.2 0 27.6 19.3 48.2 60.6 48.2h56.5l-51 237c-5.5 26.2-12.4 68.9-12.4 113 0 111.6 57.9 192.9 181.9 192.9 71.7 0 135-35.8 183.3-78.6 46.9-41.3 81.3-92.3 81.3-125.4 0-31.6-24.8-57.8-56.5-57.8zM3367.9 291.7c0-40-27.6-66.2-70.3-66.2-45.5 0-66.1 30.3-75.8 77.2l-172.2 800.6c-4.1 16.5-6.9 30.3-6.9 44.1 0 40 27.6 66.1 68.9 66.1 46.9 0 67.5-30.3 77.2-77.2L3361 335.8c2.8-16.6 6.9-30.3 6.9-44.1zM5827.6 531.4c-220.5 0-370.7 219.1-370.7 427.2 0 3.9.1 7.8.2 11.6-34.6 52.5-78.8 106.9-109.1 106.9-22 0-30.3-20.7-30.3-52.4 0-38.6 11-103.4 23.4-159.9l114.4-529.2c2.8-16.5 5.5-30.3 5.5-44.1 0-40-26.2-66.2-68.9-66.2-46.9 0-66.1 30.3-75.8 77.2l-62 286.6c-33.1-34.4-81.4-57.9-154.4-57.9-146.4 0-293.7 112.7-351.1 285.6-63.2 163.4-119.7 260.1-164.3 260.1-16.5 0-26.2-13.8-26.2-37.2 0-68.9 38.6-237 55.1-318.3 5.5-30.3 8.3-42.7 8.3-60.6 0-60.6-100.6-132.3-231.5-132.3-151.4 0-288.5 95.9-357.2 238.3-102.1 180.4-195.8 310.1-242.2 310.1-20.7 0-27.6-26.2-33.1-51L3723.4 836l210.8-172.2c19.3-16.5 44.1-40 44.1-70.3 0-37.2-24.8-62-62-62-27.6 0-51 16.5-74.4 35.8L3525 829.1l106.1-493.3c2.8-16.5 6.9-30.3 6.9-44.1 0-40-27.6-66.2-70.3-66.2-45.5 0-66.1 30.3-75.8 77.2l-172.2 800.6c-4.1 16.5-6.9 30.3-6.9 44.1 0 40 27.6 66.1 68.9 66.1 46.9 0 67.5-30.3 77.2-77.2L3481 1033l129.5-104.7 31.7 159.8c12.4 63.4 45.5 125.4 130.9 125.4 85 0 151.9-77.6 218.9-182.5 20.3 109.9 98.5 182.5 207 182.5 108.9 0 183.3-64.8 231.5-151.6v2.8c0 89.6 45.5 148.8 125.4 148.8 72.3 0 132.3-43.6 185.9-136.2 30.4 80.7 98.4 136.2 193 136.2 111.6 0 191.5-67.5 242.5-161.2v8.3c0 99.2 49.6 153 130.9 153 71.8 0 132.8-41.7 184.9-109.5 39.6 67.8 110.6 109.5 206.5 109.5 220.5 0 370.7-219.1 370.7-428.6-.1-147.5-89.7-253.6-242.7-253.6zM4453.8 811.2c-40 172.2-125.4 270.1-221.9 270.1-64.8 0-100.6-49.6-100.6-124 0-146.1 106.1-303.2 248-303.2 42.7 0 75.8 12.4 104.7 30.3l-30.2 126.8zm767.5-73c-44.1 202.6-144.7 343.1-254.9 343.1-60.6 0-96.5-46.9-96.5-124 0-147.4 102-300.4 238.4-300.4 52.4 0 92.3 17.9 121.3 41.3l-8.3 40zm494.7 343.1c-79.9 0-113-57.9-113-130.9 0-133.7 92.3-286.6 208.1-286.6 79.9 0 113 57.9 113 130.9 0 135-92.3 286.6-208.1 286.6zM2767.1 531.4c-220.5 0-370.7 219.1-370.7 427.2 0 148.8 89.6 254.9 242.5 254.9 220.5 0 370.7-219.1 370.7-428.6 0-147.4-89.6-253.5-242.5-253.5zm-111.6 549.9c-79.9 0-113-57.9-113-130.9 0-133.7 92.3-286.6 208.1-286.6 79.9 0 113 57.9 113 130.9-.1 135-92.4 286.6-208.1 286.6z"})),Lt||(Lt=r.createElement("ellipse",{className:"st0",cx:663,cy:147.9,rx:254.3,ry:147.9})),Nt||(Nt=r.createElement("ellipse",{className:"st0",cx:663,cy:1262.3,rx:254.3,ry:147.9})),It||(It=r.createElement("ellipse",{transform:"rotate(-60 180.499 426.56)",className:"st0",cx:180.5,cy:426.5,rx:254.3,ry:148})),Rt||(Rt=r.createElement("ellipse",{transform:"rotate(-60 1145.575 983.768)",className:"st0",cx:1145.6,cy:983.7,rx:254.3,ry:147.9})),jt||(jt=r.createElement("ellipse",{transform:"rotate(-30 180.45 983.72)",className:"st0",cx:180.5,cy:983.7,rx:148,ry:254.3})),Mt||(Mt=r.createElement("ellipse",{transform:"rotate(-30 1145.522 426.601)",className:"st0",cx:1145.6,cy:426.6,rx:147.9,ry:254.3})))};function Ht(){var e=function(e){var t=e.href,n=e.className;return r.createElement("li",{className:"text-white mr-2 mr-lg-0 mr-xl-2"},r.createElement("a",{href:t,target:"_blank",rel:"noopener noreferrer"},r.createElement("i",{className:n})))},t=function(){return r.createElement("ul",{className:"list-social-links mt-5 mt-lg-0 justify-content-lg-end"},r.createElement(e,{href:"https://twitter.com/Polkadot",className:"socicon-twitter"}),r.createElement(e,{href:"https://www.reddit.com/r/polkadot",className:"socicon-reddit"}),r.createElement(e,{href:"https://github.com/paritytech/polkadot",className:"socicon-github"}),r.createElement(e,{href:"https://www.youtube.com/channel/UCB7PbjuZLEba_znc7mEGNgw",className:"socicon-youtube"}),r.createElement(e,{href:"https://dot.li/discord",className:"socicon-discord"}))};return r.createElement(Bt.Z,{className:"px-lg-0"},r.createElement(t,null))}function Gt(e){var t=e.href,n=e.content;return r.createElement("li",null,r.createElement("a",{href:t,className:"text-white text-small",target:"_blank",rel:"noopener noreferrer"},n))}function Vt(){var e=(0,me.Z)().siteConfig.themeConfig.footer;return r.createElement("footer",{className:"nav-footer spacer-y-4",id:"footer"},r.createElement(Dt.Z,{className:"container-custom"},r.createElement(Ft.Z,{className:"footer-legal align-items-end"},e&&r.createElement(Bt.Z,{lg:2,className:"mb-2 mb-lg-0"},r.createElement("a",{className:"navbar-brand",href:"https://polkadot.network/",target:"_blank",rel:"noopener noreferrer"},r.createElement(Zt,{height:31,alt:"Polkadot Network"}))),r.createElement(Bt.Z,{lg:6},r.createElement("ul",{className:"list-unstyled d-flex flex-wrap list-pipe-separator mt-2"},r.createElement(Gt,{content:e.copyright,href:"https://web3.foundation"}),r.createElement(Gt,{content:(0,l.I)({message:"Legal Disclosures",id:"footer.footerLegal.legal-diclosures",description:"Legal Disclosures Button Label in Footer Legal"}),href:"https://polkadot.network/legal-disclosures"}),r.createElement(Gt,{content:(0,l.I)({message:"Disclaimer",id:"footer.footerLegal.disclaimer",description:"Disclaimer Button Label in Footer Legal"}),href:"https://polkadot.network/disclaimer"}),r.createElement(Gt,{content:(0,l.I)({message:"Privacy",id:"footer.footerLegal.privacy",description:"Privacy Button Label in Footer Legal"}),href:"https://polkadot.network/privacy"}))),r.createElement(Ht,null))))}var qt=(0,I.Qc)([z.S,k.pl,N.OC,tt.L5,i.VC,function(e){var t=e.children;return r.createElement(R.n2,null,r.createElement(L.M,null,r.createElement(M,null,t)))}]);function Wt(e){var t=e.children;return r.createElement(qt,null,t)}function Yt(e){var t=e.error,n=e.tryAgain;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(bt,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(vt,{error:t})))))}const Kt={mainWrapper:"mainWrapper_z2l0"};function Xt(e){var t=e.children,n=e.noFooter,s=e.wrapperClassName,c=e.title,l=e.description;return(0,b.t)(),r.createElement(Wt,null,r.createElement(i.d,{title:c,description:l}),r.createElement(y,null),r.createElement(O,null),r.createElement(At,null),r.createElement("div",{id:d,className:(0,a.Z)(g.k.wrapper.main,Kt.mainWrapper,s)},r.createElement(o.Z,{fallback:function(e){return r.createElement(Yt,e)}},t)),!n&&r.createElement(Vt,null))}},87846:(e,t,n)=>{"use strict";n.d(t,{Z:()=>v});var r=n(87462),a=n(63366),o=n(67294),i=n(39960),s=n(44996),c=n(52263),l=n(86668),u=n(86010),d=n(72389),f=n(92949);const p={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};var m=["sources","className","alt"];function h(e){var t=(0,d.Z)(),n=(0,f.I)().colorMode,i=e.sources,s=e.className,c=e.alt,l=(0,a.Z)(e,m),h=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,h.map((function(e){return o.createElement("img",(0,r.Z)({key:e,src:i[e],alt:c,className:(0,u.Z)(p.themedImage,p["themedImage--"+e],s)},l))})))}var g=["imageClassName","titleClassName"];function b(e){var t=e.logo,n=e.alt,r=e.imageClassName,a={light:(0,s.Z)(t.src),dark:(0,s.Z)(t.srcDark||t.src)},i=o.createElement(h,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},i):i}function v(e){var t,n=(0,c.Z)().siteConfig.title,u=(0,l.L)().navbar,d=u.title,f=u.logo,p=e.imageClassName,m=e.titleClassName,h=(0,a.Z)(e,g),v=(0,s.Z)((null==f?void 0:f.href)||"/"),y=d?"":n,x=null!=(t=null==f?void 0:f.alt)?t:y;return o.createElement(i.Z,(0,r.Z)({to:v},h,(null==f?void 0:f.target)&&{target:f.target}),f&&o.createElement(b,{logo:f,alt:x,imageClassName:p}),null!=d&&o.createElement("b",{className:m},d))}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(35742);function o(e){var t=e.locale,n=e.version,o=e.tag,i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>d,z:()=>y});var r=n(87462),a=n(63366),o=n(67294),i=n(10412),s=n(91442),c=["collapsed"],l=["lazy"],u="ease-in-out";function d(e){var t=e.initialState,n=(0,o.useState)(null!=t&&t),r=n[0],a=n[1],i=(0,o.useCallback)((function(){a((function(e){return!e}))}),[]);return{collapsed:r,setCollapsed:a,toggleCollapsed:i}}var f={display:"none",overflow:"hidden",height:"0px"},p={display:"block",overflow:"visible",height:"auto"};function m(e,t){var n=t?f:p;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function h(e){var t=e.collapsibleRef,n=e.collapsed,r=e.animation,a=(0,o.useRef)(!1);(0,o.useEffect)((function(){var e,o=t.current;function i(){var e,t,n=o.scrollHeight,a=null!=(e=null==r?void 0:r.duration)?e:function(e){if((0,s.n)())return 1;var t=e/36;return Math.round(10*(4+15*Math.pow(t,.25)+t/5))}(n);return{transition:"height "+a+"ms "+(null!=(t=null==r?void 0:r.easing)?t:u),height:n+"px"}}function c(){var e=i();o.style.transition=e.transition,o.style.height=e.height}if(!a.current)return m(o,n),void(a.current=!0);return o.style.willChange="height",e=requestAnimationFrame((function(){n?(c(),requestAnimationFrame((function(){o.style.height=f.height,o.style.overflow=f.overflow}))):(o.style.display="block",requestAnimationFrame((function(){c()})))})),function(){return cancelAnimationFrame(e)}}),[t,n,r])}function g(e){if(!i.Z.canUseDOM)return e?f:p}function b(e){var t=e.as,n=void 0===t?"div":t,r=e.collapsed,a=e.children,i=e.animation,s=e.onCollapseTransitionEnd,c=e.className,l=e.disableSSRStyle,u=(0,o.useRef)(null);return h({collapsibleRef:u,collapsed:r,animation:i}),o.createElement(n,{ref:u,style:l?void 0:g(r),onTransitionEnd:function(e){"height"===e.propertyName&&(m(u.current,r),null==s||s(r))},className:c},a)}function v(e){var t=e.collapsed,n=(0,a.Z)(e,c),i=(0,o.useState)(!t),s=i[0],l=i[1],u=(0,o.useState)(t),d=u[0],f=u[1];return(0,o.useLayoutEffect)((function(){t||l(!0)}),[t]),(0,o.useLayoutEffect)((function(){s&&f(t)}),[s,t]),s?o.createElement(b,(0,r.Z)({},n,{collapsed:d})):null}function y(e){var t=e.lazy,n=(0,a.Z)(e,l),r=t?v:b;return o.createElement(r,n)}},59689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(67294),a=n(72389),o=n(50012),i=n(69688),s=n(86668),c=(0,o.WA)("docusaurus.announcement.dismiss"),l=(0,o.WA)("docusaurus.announcement.id"),u=function(){return"true"===c.get()},d=function(e){return c.set(String(e))},f=r.createContext(null);function p(e){var t=e.children,n=function(){var e=(0,s.L)().announcementBar,t=(0,a.Z)(),n=(0,r.useState)((function(){return!!t&&u()})),o=n[0],i=n[1];(0,r.useEffect)((function(){i(u())}),[]);var c=(0,r.useCallback)((function(){d(!0),i(!0)}),[]);return(0,r.useEffect)((function(){if(e){var t=e.id,n=l.get();"annoucement-bar"===n&&(n="announcement-bar");var r=t!==n;l.set(t),r&&d(!1),!r&&u()||i(!1)}}),[e]),(0,r.useMemo)((function(){return{isActive:!!e&&!o,close:c}}),[e,o,c])}();return r.createElement(f.Provider,{value:n},t)}function m(){var e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(67294),a=n(10412),o=n(69688),i=n(50012),s=n(86668),c=r.createContext(void 0),l="theme",u=(0,i.WA)(l),d={light:"light",dark:"dark"},f=function(e){return e===d.dark?d.dark:d.light},p=function(e){return a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e)},m=function(e){u.set(f(e))};function h(e){var t=e.children,n=function(){var e=(0,s.L)().colorMode,t=e.defaultMode,n=e.disableSwitch,a=e.respectPrefersColorScheme,o=(0,r.useState)(p(t)),i=o[0],c=o[1];(0,r.useEffect)((function(){n&&u.del()}),[n]);var h=(0,r.useCallback)((function(e,n){void 0===n&&(n={});var r=n.persist,o=void 0===r||r;e?(c(e),o&&m(e)):(c(a?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:t),u.del())}),[a,t]);(0,r.useEffect)((function(){document.documentElement.setAttribute("data-theme",f(i))}),[i]),(0,r.useEffect)((function(){if(!n){var e=function(e){if(e.key===l){var t=u.get();null!==t&&h(f(t))}};return window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}}),[n,h]);var g=(0,r.useRef)(!1);return(0,r.useEffect)((function(){if(!n||a){var e=window.matchMedia("(prefers-color-scheme: dark)"),t=function(){window.matchMedia("print").matches||g.current?g.current=window.matchMedia("print").matches:h(null)};return e.addListener(t),function(){return e.removeListener(t)}}}),[h,n,a]),(0,r.useMemo)((function(){return{colorMode:i,setColorMode:h,get isDarkTheme(){return i===d.dark},setLightTheme:function(){h(d.light)},setDarkTheme:function(){h(d.dark)}}}),[i,h])}();return r.createElement(c.Provider,{value:n},t)}function g(){var e=(0,r.useContext)(c);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>g,Oh:()=>y});var r=n(67294),a=n(80143),o=n(29935),i=n(86668),s=n(53438),c=n(69688),l=n(50012),u=function(e){return"docs-preferred-version-"+e},d={save:function(e,t,n){(0,l.WA)(u(e),{persistence:t}).set(n)},read:function(e,t){return(0,l.WA)(u(e),{persistence:t}).get()},clear:function(e,t){(0,l.WA)(u(e),{persistence:t}).del()}},f=function(e){return Object.fromEntries(e.map((function(e){return[e,{preferredVersionName:null}]})))};var p=r.createContext(null);function m(){var e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((function(){return Object.keys(e)}),[e]),o=(0,r.useState)((function(){return f(n)})),s=o[0],c=o[1];return(0,r.useEffect)((function(){c(function(e){var t=e.pluginIds,n=e.versionPersistence,r=e.allDocsData;return Object.fromEntries(t.map((function(e){return[e,(t=e,a=d.read(t,n),r[t].versions.some((function(e){return e.name===a}))?{preferredVersionName:a}:(d.clear(t,n),{preferredVersionName:null}))];var t,a})))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]),[s,(0,r.useMemo)((function(){return{savePreferredVersion:function(e,n){d.save(e,t,n),c((function(t){var r;return Object.assign({},t,((r={})[e]={preferredVersionName:n},r))}))}}}),[t])]}function h(e){var t=e.children,n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){var t=e.children;return s.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function b(){var e=(0,r.useContext)(p);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}function v(e){var t;void 0===e&&(e=o.m);var n=(0,a.zh)(e),i=b(),s=i[0],c=i[1],l=s[e].preferredVersionName;return{preferredVersion:null!=(t=n.versions.find((function(e){return e.name===l})))?t:null,savePreferredVersionName:(0,r.useCallback)((function(t){c.savePreferredVersion(e,t)}),[c,e])}}function y(){var e=(0,a._r)(),t=b()[0];var n=Object.keys(e);return Object.fromEntries(n.map((function(n){return[n,(r=n,o=e[r],i=t[r].preferredVersionName,null!=(a=o.versions.find((function(e){return e.name===i})))?a:null)];var r,a,o,i})))}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>s});var r=n(67294),a=n(69688),o=Symbol("EmptyContext"),i=r.createContext(o);function s(e){var t=e.children,n=e.name,a=e.items,o=(0,r.useMemo)((function(){return n&&a?{name:n,items:a}:null}),[n,a]);return r.createElement(i.Provider,{value:o},t)}function c(){var e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},74477:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>i});var r=n(67294),a=n(69688),o=r.createContext(null);function i(e){var t=e.children,n=e.version;return r.createElement(o.Provider,{value:n},t)}function s(){var e=(0,r.useContext)(o);if(null===e)throw new a.i6("DocsVersionProvider");return e}},93163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(67294),a=n(13102),o=n(87524),i=n(91980),s=n(86668),c=n(69688),l=r.createContext(void 0);function u(){var e,t=(e=(0,a.HY)(),0===(0,s.L)().navbar.items.length&&!e.component),n=(0,o.i)(),c=!t&&"mobile"===n,l=(0,r.useState)(!1),u=l[0],d=l[1];(0,i.Rb)((function(){if(u)return d(!1),!1}));var f=(0,r.useCallback)((function(){d((function(e){return!e}))}),[]);return(0,r.useEffect)((function(){"desktop"===n&&d(!1)}),[n]),(0,r.useMemo)((function(){return{disabled:t,shouldRender:c,toggle:f,shown:u}}),[t,c,f,u])}function d(e){var t=e.children,n=u();return r.createElement(l.Provider,{value:n},t)}function f(){var e=r.useContext(l);if(void 0===e)throw new c.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>c,n2:()=>i});var r=n(67294),a=n(69688),o=r.createContext(null);function i(e){var t=e.children,n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function s(){var e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){var t=e.component,n=e.props,i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");var s=i[1],c=(0,a.Ql)(n);return(0,r.useEffect)((function(){s({component:t,props:c})}),[s,t,c]),(0,r.useEffect)((function(){return function(){return s({component:null,props:null})}}),[s]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(67294),a="navigation-with-keyboard";function o(){(0,r.useEffect)((function(){function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),function(){document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},66177:(e,t,n)=>{"use strict";n.d(t,{K:()=>s,M:()=>c});var r=n(67294),a=n(52263),o=n(91980),i="q";function s(){return(0,o.Nc)(i)}function c(){var e=(0,a.Z)().siteConfig,t=e.baseUrl,n=e.themeConfig.algolia.searchPagePath;return(0,r.useCallback)((function(e){return""+t+n+"?"+i+"="+encodeURIComponent(e)}),[t,n])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>l});var r=n(67294),a=n(10412),o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}var c=!1;function l(){var e=(0,r.useState)((function(){return c?"ssr":s()})),t=e[0],n=e[1];return(0,r.useEffect)((function(){function e(){n(s())}var t=c?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),function(){window.removeEventListener("resize",e),clearTimeout(t)}}),[]),t}},35281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});var r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:function(e){return"theme-admonition-"+e}},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:function(e){return"theme-doc-sidebar-item-category-level-"+e},docSidebarItemLinkLevel:function(e){return"theme-doc-sidebar-item-link-level-"+e}},blog:{}}},91442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},53438:(e,t,n)=>{"use strict";n.d(t,{MN:()=>C,Wl:()=>h,_F:()=>y,cE:()=>p,hI:()=>S,jA:()=>g,lO:()=>w,oz:()=>E,s1:()=>k,vY:()=>_,xz:()=>m});var r=n(67855),a=n(67294),o=n(16550),i=n(18790),s=n(80143),c=n(60373),l=n(74477),u=n(1116),d=n(67392),f=n(48596),p=!!s._r;function m(e){var t=(0,l.E)();if(e){var n=t.docs[e];if(!n)throw new Error("no version doc found by id="+e);return n}}function h(e){if(e.href)return e.href;for(var t,n=(0,r.Z)(e.items);!(t=n()).done;){var a=t.value;if("link"===a.type)return a.href;if("category"===a.type){var o=h(a);if(o)return o}}}function g(){var e=(0,o.TH)().pathname,t=(0,u.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");var n=x({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(e+" is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.");return n}var b=function(e,t){return void 0!==e&&(0,f.Mg)(e,t)},v=function(e,t){return e.some((function(e){return y(e,t)}))};function y(e,t){return"link"===e.type?b(e.href,t):"category"===e.type&&(b(e.href,t)||v(e.items,t))}function x(e){var t=e.sidebarItems,n=e.pathname,a=e.onlyCategories,o=void 0!==a&&a,i=[];return function e(t){for(var a,s=(0,r.Z)(t);!(a=s()).done;){var c=a.value;if("category"===c.type&&((0,f.Mg)(c.href,n)||e(c.items))||"link"===c.type&&(0,f.Mg)(c.href,n))return o&&"category"!==c.type||i.unshift(c),!0}return!1}(t),i}function k(){var e,t=(0,u.V)(),n=(0,o.TH)().pathname;return!1!==(null==(e=(0,s.gA)())?void 0:e.pluginData.breadcrumbs)&&t?x({sidebarItems:t.items,pathname:n}):null}function w(e){var t=(0,s.Iw)(e).activeVersion,n=(0,c.J)(e).preferredVersion,r=(0,s.yW)(e);return(0,a.useMemo)((function(){return(0,d.j)([t,n,r].filter(Boolean))}),[t,n,r])}function E(e,t){var n=w(t);return(0,a.useMemo)((function(){var t=n.flatMap((function(e){return e.sidebars?Object.entries(e.sidebars):[]})),r=t.find((function(t){return t[0]===e}));if(!r)throw new Error("Can't find any sidebar with id \""+e+'" in version'+(n.length>1?"s":"")+" "+n.map((function(e){return e.name})).join(", ")+'".\nAvailable sidebar ids are:\n- '+t.map((function(e){return e[0]})).join("\n- "));return r[1]}),[e,n])}function _(e,t){var n=w(t);return(0,a.useMemo)((function(){var t=n.flatMap((function(e){return e.docs})),r=t.find((function(t){return t.id===e}));if(!r){if(n.flatMap((function(e){return e.draftIds})).includes(e))return null;throw new Error("Couldn't find any doc with id \""+e+'" in version'+(n.length>1?"s":"")+' "'+n.map((function(e){return e.name})).join(", ")+'".\nAvailable doc ids are:\n- '+(0,d.j)(t.map((function(e){return e.id}))).join("\n- "))}return r}),[e,n])}function S(e){var t=e.route,n=e.versionMetadata,r=(0,o.TH)(),a=t.routes,s=a.find((function(e){return(0,o.LX)(r.pathname,e)}));if(!s)return null;var c=s.sidebar,l=c?n.docsSidebars[c]:void 0;return{docElement:(0,i.H)(a),sidebarName:c,sidebarItems:l}}function C(e){return e.filter((function(e){return"category"!==e.type||!!h(e)}))}},82128:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(52263);function a(e){var t=(0,r.Z)().siteConfig,n=t.title,a=t.titleDelimiter;return null!=e&&e.trim().length?e.trim()+" "+a+" "+n:n}},91980:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>l,Rb:()=>s,_X:()=>c});var r=n(67294),a=n(16550),o=n(61688),i=n(69688);function s(e){!function(e){var t=(0,a.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((function(){return t.block((function(e,t){return n(e,t)}))}),[t,n])}((function(t,n){if("POP"===n)return e(t,n)}))}function c(e){return t=function(t){return null===e?null:new URLSearchParams(t.location.search).get(e)},n=(0,a.k6)(),(0,o.useSyncExternalStore)(n.listen,(function(){return t(n)}),(function(){return t(n)}));var t,n}function l(e){var t,n,o=null!=(t=c(e))?t:"",i=(n=(0,a.k6)(),(0,r.useCallback)((function(e,t,r){var a=new URLSearchParams(n.location.search);t?a.set(e,t):a.delete(e),(null!=r&&r.push?n.push:n.replace)({search:a.toString()})}),[n]));return[o,(0,r.useCallback)((function(t,n){i(e,t,n)}),[i,e])]}},67392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=function(e,t){return e===t}),e.filter((function(n,r){return e.findIndex((function(e){return t(e,n)}))!==r}))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},10833:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>u,VC:()=>p});var r=n(67294),a=n(86010),o=n(35742),i=n(30226);function s(){var e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var c=n(44996),l=n(82128);function u(e){var t=e.title,n=e.description,a=e.keywords,i=e.image,s=e.children,u=(0,l.p)(t),d=(0,c.C)().withBaseUrl,f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),s)}var d=r.createContext(void 0);function f(e){var t=e.className,n=e.children,i=r.useContext(d),s=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:s},r.createElement(o.Z,null,r.createElement("html",{className:s})),n)}function p(e){var t=e.children,n=s(),o="plugin-"+n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,""),i="plugin-id-"+n.plugin.id;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},69688:(e,t,n)=>{"use strict";n.d(t,{i6:()=>p,Qc:()=>h,zX:()=>d,D9:()=>f,Ql:()=>m});var r=n(87099),a=n(94578);function o(e){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},o(e)}var i=n(89611);function s(e,t,n){return s=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&(0,i.Z)(a,n.prototype),a},s.apply(null,arguments)}function c(e){var t="function"==typeof Map?new Map:void 0;return c=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return s(e,arguments,o(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),(0,i.Z)(r,e)},c(e)}var l=n(67294),u=n(10412).Z.canUseDOM?l.useLayoutEffect:l.useEffect;function d(e){var t=(0,l.useRef)(e);return u((function(){t.current=e}),[e]),(0,l.useCallback)((function(){return t.current.apply(t,arguments)}),[])}function f(e){var t=(0,l.useRef)();return u((function(){t.current=e})),t.current}var p=function(e){function t(t,n){var a,o,i,s,c;return(c=e.call(this)||this).name="ReactContextError",c.message="Hook "+(null!=(a=null==(o=c.stack)||null==(i=o.split("\n")[1])||null==(s=i.match((0,r.Z)(/at (?:\w+\.)?(\w+)/,{name:1})))?void 0:s.groups.name)?a:"")+" is called outside the <"+t+">. "+(null!=n?n:""),c}return(0,a.Z)(t,e),t}(c(Error));function m(e){var t=Object.entries(e);return t.sort((function(e,t){return e[0].localeCompare(t[0])})),(0,l.useMemo)((function(){return e}),t.flat())}function h(e){return function(t){var n=t.children;return l.createElement(l.Fragment,null,e.reduceRight((function(e,t){return l.createElement(t,null,e)}),n))}}},98022:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(67294),a=n(69204),o=n(52263);function i(e,t){var n=function(e){var t;return null==(t=!e||e.endsWith("/")?e:e+"/")?void 0:t.toLowerCase()};return n(e)===n(t)}function s(){var e=(0,o.Z)().siteConfig.baseUrl;return(0,r.useMemo)((function(){return function(e){var t=e.baseUrl;function n(e){return e.path===t&&!0===e.exact}function r(e){return e.path===t&&!e.exact}return function e(t){if(0!==t.length)return t.find(n)||e(t.filter(r).flatMap((function(e){var t;return null!=(t=e.routes)?t:[]})))}(e.routes)}({routes:a.Z,baseUrl:e})}),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>c,RF:()=>d,o5:()=>f});var r=n(67294),a=n(10412),o=n(72389),i=n(69688);var s=r.createContext(void 0);function c(e){var t,n=e.children,a=(t=(0,r.useRef)(!0),(0,r.useMemo)((function(){return{scrollEventsEnabledRef:t,enableScrollEvents:function(){t.current=!0},disableScrollEvents:function(){t.current=!1}}}),[]));return r.createElement(s.Provider,{value:a},n)}function l(){var e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}var u=function(){return a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null};function d(e,t){void 0===t&&(t=[]);var n=l().scrollEventsEnabledRef,a=(0,r.useRef)(u()),o=(0,i.zX)(e);(0,r.useEffect)((function(){var e=function(){if(n.current){var e=u();o(e,a.current),a.current=e}},t={passive:!0};return e(),window.addEventListener("scroll",e,t),function(){return window.removeEventListener("scroll",e,t)}}),[o,n].concat(t))}function f(){var e,t,n,a=l(),o=(e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((function(t){e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((function(){var t=e.current,n=t.elem,r=t.top;if(!n)return{restored:!1};var a=n.getBoundingClientRect().top-r;return a&&window.scrollBy({left:0,top:a}),e.current={elem:null,top:0},{restored:0!==a}}),[]),(0,r.useMemo)((function(){return{save:t,restore:n}}),[n,t])),i=(0,r.useRef)(void 0),s=(0,r.useCallback)((function(e){o.save(e),a.disableScrollEvents(),i.current=function(){var e=o.restore().restored;if(i.current=void 0,e){window.addEventListener("scroll",(function e(){a.enableScrollEvents(),window.removeEventListener("scroll",e)}))}else a.enableScrollEvents()}}),[a,o]);return(0,r.useLayoutEffect)((function(){queueMicrotask((function(){return null==i.current?void 0:i.current()}))})),{blockElementScrollPositionUntilNextRender:s}}function p(){var e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:function(n){e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),function(){}}(n):function(e){var t=null,n=document.documentElement.scrollTop>e;return function r(){var a=document.documentElement.scrollTop;(n&&a>e||!n&&a{"use strict";n.d(t,{HX:()=>i,_q:()=>c,os:()=>s});var r=n(80143),a=n(52263),o=n(60373),i="default";function s(e,t){return"docs-"+e+"-"+t}function c(){var e=(0,a.Z)().i18n,t=(0,r._r)(),n=(0,r.WS)(),c=(0,o.Oh)();var l=[i].concat(Object.keys(t).map((function(e){var r,a=(null==n?void 0:n.activePlugin.pluginId)===e?n.activeVersion:void 0,o=c[e],i=t[e].versions.find((function(e){return e.isLast}));return s(e,(null!=(r=null!=a?a:o)?r:i).name)})));return{locale:e.currentLocale,tags:l}}},50012:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u});var r=n(67294),a=n(61688),o="localStorage";function i(e){var t=e.key,n=e.oldValue,r=e.newValue,a=e.storage;if(n!==r){var o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}}function s(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,c||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),c=!0),null}var t}var c=!1;var l={get:function(){return null},set:function(){},del:function(){},listen:function(){return function(){}}};function u(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error('Illegal storage API usage for storage key "'+e+'".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.')}return{get:t,set:t,del:t,listen:t}}(e);var n=s(null==t?void 0:t.persistence);return null===n?l:{get:function(){try{return n.getItem(e)}catch(t){return console.error("Docusaurus storage error, can't get key="+e,t),null}},set:function(t){try{var r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(a){console.error("Docusaurus storage error, can't set "+e+"="+t,a)}},del:function(){try{var t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(r){console.error("Docusaurus storage error, can't delete key="+e,r)}},listen:function(t){try{var r=function(r){r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),function(){return window.removeEventListener("storage",r)}}catch(a){return console.error("Docusaurus storage error, can't listen for changes of key="+e,a),function(){}}}}}function d(e,t){var n=(0,r.useRef)((function(){return null===e?l:u(e,t)})).current(),o=(0,r.useCallback)((function(e){return"undefined"==typeof window?function(){}:n.listen(e)}),[n]);return[(0,a.useSyncExternalStore)(o,(function(){return"undefined"==typeof window?null:n.get()}),(function(){return null})),n]}},94711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(52263),a=n(16550),o=n(18780);function i(){var e=(0,r.Z)(),t=e.siteConfig,n=t.baseUrl,i=t.url,s=t.trailingSlash,c=e.i18n,l=c.defaultLocale,u=c.currentLocale,d=(0,a.TH)().pathname,f=(0,o.applyTrailingSlash)(d,{trailingSlash:s,baseUrl:n}),p=u===l?n:n.replace("/"+u+"/","/"),m=f.replace(n,"");return{createUrl:function(e){var t=e.locale;return""+(e.fullyQualified?i:"")+function(e){return e===l?""+p:""+p+e+"/"}(t)+m}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(67294),a=n(16550),o=n(69688);function i(e){var t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((function(){n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(52263);function a(){return(0,r.Z)().siteConfig.themeConfig}},6278:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(52263);function a(){return(0,r.Z)().siteConfig.themeConfig}},239:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(67294),a=n(98022),o=n(44996),i=n(6278);function s(){var e=(0,o.C)().withBaseUrl,t=(0,i.L)().algolia,n=t.externalUrlRegex,s=t.replaceSearchResultPathname;return(0,r.useCallback)((function(t){var r=new URL(t);if((0,a.F)(n,r.href))return t;var o=""+(r.pathname+r.hash);return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(o,s))}),[e,n,s])}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=t.trailingSlash,r=t.baseUrl;if(e.startsWith("#"))return e;if(void 0===n)return e;var a,o=e.split(/[#?]/)[0],i="/"===o||o===r?o:(a=o,n?function(e){return e.endsWith("/")?e:e+"/"}(a):function(e){return e.endsWith("/")?e.slice(0,-1):e}(a));return e.replace(o,i)}},54143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t].concat(e(t.cause)):[t]}},18780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(54143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},69204:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(67294),a=n(87462),o=n(68356),i=n.n(o),s=n(85345);const c={"04a995e6":[function(){return n.e(785).then(n.t.bind(n,76886,19))},"~docs/default/category-docs-docs-category-advanced-guides-for-staking-dcd.json",76886],"0a3f0c9b":[function(){return n.e(7837).then(n.bind(n,83388))},"@site/../docs/general/ledger.md",83388],"0c06bca3":[function(){return n.e(601).then(n.bind(n,52812))},"@site/../docs/maintain/maintain-guides-how-to-join-council.md",52812],"0c68fb82":[function(){return n.e(5526).then(n.bind(n,81424))},"@site/../docs/general/kusama/kusama-claims.md",81424],"0cb62240":[function(){return n.e(1979).then(n.t.bind(n,74518,19))},"~docs/default/category-docs-docs-category-fundamentals-60b.json",74518],"0df78d26":[function(){return n.e(1723).then(n.bind(n,13449))},"@site/../docs/maintain/maintain-guides-secure-validator.md",13449],"12331e8b":[function(){return n.e(8270).then(n.bind(n,67881))},"@site/../docs/general/polkadotjs.md",67881],"131c7f55":[function(){return n.e(9323).then(n.bind(n,93928))},"@site/../docs/learn/learn-architecture.md",93928],"13b7bafa":[function(){return Promise.all([n.e(1122),n.e(9447),n.e(6585)]).then(n.bind(n,83881))},"@site/../docs/learn/learn-auction.md",83881],"145746f5":[function(){return Promise.all([n.e(1122),n.e(691)]).then(n.bind(n,1735))},"@site/../docs/maintain/maintain-polkadot-parameters.md",1735],"14eb3368":[function(){return Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,34228))},"@theme/DocCategoryGeneratedIndexPage",34228],15985664:[function(){return n.e(7830).then(n.bind(n,43394))},"@site/../docs/learn/xcm/journey/summary.md",43394],"1646726c":[function(){return Promise.all([n.e(1122),n.e(2169)]).then(n.bind(n,78381))},"@site/../docs/learn/learn-staking.md",78381],17896441:[function(){return Promise.all([n.e(532),n.e(7918)]).then(n.bind(n,81026))},"@theme/DocItem",81026],"1882e65d":[function(){return n.e(5492).then(n.t.bind(n,77274,19))},"/home/runner/work/polkadot-wiki/polkadot-wiki/polkadot-wiki/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",77274],"19ed4d4c":[function(){return n.e(4355).then(n.bind(n,51191))},"@site/../docs/learn/learn-comparisons-cosmos.md",51191],"1a4e3797":[function(){return Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,56675))},"@theme/SearchPage",56675],"1ae2b102":[function(){return Promise.all([n.e(1122),n.e(4537)]).then(n.bind(n,1799))},"@site/../docs/build/build-protocol-info.md",1799],"1be78505":[function(){return Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,19963))},"@theme/DocPage",19963],"1d6d4797":[function(){return n.e(12).then(n.bind(n,35290))},"@site/../docs/learn/xcm/journey/transact.md",35290],"1dc05242":[function(){return n.e(4696).then(n.t.bind(n,14820,19))},"~docs/default/category-docs-docs-category-nfts-9fb.json",14820],"1e15616a":[function(){return n.e(9802).then(n.bind(n,39420))},"@site/../docs/learn/learn-wasm.md",39420],"1ed3671a":[function(){return n.e(1953).then(n.bind(n,63092))},"@site/../docs/learn/xcm/journey/trap-and-claim.md",63092],"21877fa5":[function(){return Promise.all([n.e(1122),n.e(2117)]).then(n.bind(n,4381))},"@site/../docs/learn/learn-system-chains.md",4381],"21899dd2":[function(){return n.e(3599).then(n.bind(n,2741))},"@site/../docs/learn/learn-parachains.md",2741],"23498fd5":[function(){return n.e(810).then(n.bind(n,7551))},"@site/../docs/build/build-integrate-assets.md",7551],"25f2bd2a":[function(){return n.e(1213).then(n.bind(n,16769))},"@site/../docs/maintain/maintain-guides-how-to-stop-validating.md",16769],"279fb1d6":[function(){return Promise.all([n.e(1122),n.e(6827)]).then(n.bind(n,81807))},"@site/../docs/general/kusama/kusama-getting-started.md",81807],"295fff6c":[function(){return n.e(4543).then(n.t.bind(n,15619,19))},"~docs/default/category-docs-docs-category-advanced-guides-69d.json",15619],"29a046f3":[function(){return n.e(6918).then(n.t.bind(n,59904,19))},"~docs/default/category-docs-docs-category-polkadot-comparisons-3b4.json",59904],"2be0d940":[function(){return n.e(2914).then(n.bind(n,77078))},"@site/../docs/learn/learn-guides-identity.md",77078],"2d429218":[function(){return n.e(502).then(n.bind(n,20925))},"@site/../docs/learn/learn-consensus.md",20925],"2ea50c63":[function(){return n.e(2949).then(n.bind(n,84941))},"@site/../docs/learn/learn-xcm-usecases.md",84941],"2f3b630e":[function(){return Promise.all([n.e(1122),n.e(9226)]).then(n.bind(n,42569))},"@site/../docs/learn/learn-polkadot-opengov.md",42569],"30d868e8":[function(){return n.e(8215).then(n.t.bind(n,8578,19))},"~docs/default/category-docs-docs-category-multilocation-8c6.json",8578],"31bd35e0":[function(){return n.e(5281).then(n.bind(n,35660))},"@site/../docs/learn/xcm/overview/summary.md",35660],"31c99aa1":[function(){return n.e(8876).then(n.t.bind(n,45497,19))},"~docs/default/category-docs-docs-category-references-a4f.json",45497],"320c8a05":[function(){return n.e(5005).then(n.bind(n,76184))},"@site/../docs/maintain/maintain-networks.md",76184],"32c9742a":[function(){return n.e(9626).then(n.bind(n,84639))},"@site/../docs/learn/xcm/fundamentals/summary.md",84639],"32dac8d4":[function(){return n.e(3347).then(n.t.bind(n,76432,19))},"~docs/default/category-docs-docs-category-programmes-ab0.json",76432],"32e8da05":[function(){return Promise.all([n.e(1122),n.e(6140)]).then(n.bind(n,65779))},"@site/../docs/learn/learn-crowdloans.md",65779],"33b0bcab":[function(){return n.e(1585).then(n.bind(n,27281))},"@site/../docs/learn/xcm/reference/xcvm-registers.md",27281],"33bbe353":[function(){return n.e(7908).then(n.bind(n,46437))},"@site/../docs/maintain/kusama/maintain-guides-society-kusama.md",46437],"3497b7c6":[function(){return n.e(3332).then(n.t.bind(n,73834,19))},"~docs/default/category-docs-docs-category-quickstart-1e9.json",73834],"3829cf1d":[function(){return n.e(537).then(n.bind(n,77778))},"@site/../docs/maintain/maintain-guides-validator-community.md",77778],"386099fc":[function(){return Promise.all([n.e(1122),n.e(8139)]).then(n.bind(n,60283))},"@site/../docs/learn/learn-polkadot-opengov-treasury.md",60283],"386bfe51":[function(){return n.e(657).then(n.bind(n,35810))},"@site/../docs/general/contributing.md",35810],"3bd77df4":[function(){return n.e(8831).then(n.bind(n,94752))},"@site/../docs/learn/learn-bridges.md",94752],"3e56470e":[function(){return n.e(4541).then(n.bind(n,80432))},"@site/../docs/maintain/maintain-wss.md",80432],"408829bd":[function(){return n.e(6).then(n.bind(n,11982))},"@site/../docs/learn/learn-transaction-fees.md",11982],"41871d53":[function(){return n.e(7778).then(n.t.bind(n,69713,19))},"/home/runner/work/polkadot-wiki/polkadot-wiki/polkadot-wiki/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",69713],"41b7b3e8":[function(){return Promise.all([n.e(1122),n.e(3513)]).then(n.bind(n,84358))},"@site/../docs/learn/learn-staking-advanced.md",84358],"43cda9e8":[function(){return n.e(6357).then(n.bind(n,96736))},"@site/../docs/learn/learn-guides-assets-ledger.md",96736],"43ee4f22":[function(){return Promise.all([n.e(532),n.e(4672)]).then(n.bind(n,24567))},"@site/../docs/build/build-guide.md",24567],"452ad91d":[function(){return n.e(6255).then(n.bind(n,94100))},"@site/../docs/learn/xcm/overview/intro.md",94100],"4642ab5c":[function(){return n.e(6946).then(n.bind(n,75925))},"@site/../docs/learn/learn-cryptography.md",75925],"48074a08":[function(){return n.e(1825).then(n.t.bind(n,64515,19))},"~docs/default/category-docs-docs-category-advanced-concepts-637.json",64515],"482bfb5c":[function(){return n.e(9993).then(n.t.bind(n,59085,19))},"~docs/default/category-docs-docs-category-dashboards-ddd.json",59085],"48d75399":[function(){return Promise.all([n.e(1122),n.e(4620)]).then(n.bind(n,17384))},"@site/../docs/general/faq.md",17384],"493c7fdf":[function(){return Promise.all([n.e(1122),n.e(2354)]).then(n.bind(n,22703))},"@site/../docs/general/glossary.md",22703],49816380:[function(){return n.e(6482).then(n.t.bind(n,13302,19))},"~docs/default/category-docs-docs-category-polkadot-vision-2bc.json",13302],"4a8eb552":[function(){return Promise.all([n.e(1122),n.e(7202)]).then(n.bind(n,87149))},"@site/../docs/learn/learn-comparisons-kusama.md",87149],"4d76887f":[function(){return n.e(1415).then(n.bind(n,77799))},"@site/../docs/build/build-hackathon.md",77799],"4d9b9869":[function(){return n.e(4445).then(n.bind(n,56136))},"@site/../docs/learn/learn-parachains-protocol.md",56136],"4dff184a":[function(){return Promise.all([n.e(1122),n.e(6495),n.e(1481)]).then(n.bind(n,32323))},"@site/../docs/maintain/maintain-guides-polkadot-opengov.md",32323],"4f031749":[function(){return Promise.all([n.e(1122),n.e(2008)]).then(n.bind(n,44002))},"@site/../docs/learn/learn-guides-staking-pools.md",44002],"5136ee31":[function(){return n.e(1446).then(n.bind(n,57904))},"@site/../docs/learn/xcm/journey/expects.md",57904],"51fbc2c9":[function(){return n.e(9806).then(n.bind(n,68114))},"@site/../docs/learn/learn-comparisons.md",68114],"54338ffb":[function(){return Promise.all([n.e(1122),n.e(4634)]).then(n.bind(n,97765))},"@site/../docs/learn/learn-account-multisig.md",97765],"543610b9":[function(){return n.e(7022).then(n.t.bind(n,50491,19))},"~docs/default/category-docs-docs-category-community-contributors-548.json",50491],"591eca19":[function(){return n.e(7714).then(n.bind(n,32876))},"@site/../docs/general/polkadot-direction.md",32876],"5c90fc9b":[function(){return n.e(3484).then(n.bind(n,11213))},"@site/../docs/learn/xcm/executor_config/config.md",11213],"5d69d9d4":[function(){return n.e(2884).then(n.bind(n,48470))},"@site/../docs/maintain/maintain-guides-how-to-upgrade.md",48470],"5e9f5e1a":[function(){return Promise.resolve().then(n.bind(n,8618))},"@generated/docusaurus.config",8618],"60738e36":[function(){return Promise.all([n.e(1122),n.e(9071)]).then(n.bind(n,71345))},"@site/../docs/general/metadata.md",71345],"60e73337":[function(){return n.e(6862).then(n.bind(n,71401))},"@site/../docs/maintain/maintain-guides-democracy.md",71401],"6151e7ce":[function(){return Promise.all([n.e(1122),n.e(2194)]).then(n.bind(n,8417))},"@site/../docs/general/kusama/kusama-parameters.md",8417],"64c7e1cc":[function(){return n.e(9217).then(n.bind(n,45725))},"@site/../docs/build/build-integration.md",45725],"666ba125":[function(){return n.e(6776).then(n.bind(n,39949))},"@site/../docs/learn/learn-redenomination.md",39949],"694672cd":[function(){return Promise.all([n.e(1122),n.e(8138)]).then(n.bind(n,29576))},"@site/../docs/learn/learn-guides-staking.md",29576],"694e7470":[function(){return n.e(4566).then(n.t.bind(n,6269,19))},"~docs/default/category-docs-docs-category-future-implementations-236.json",6269],"69b97ecd":[function(){return n.e(8067).then(n.bind(n,75217))},"@site/../docs/learn/learn-implementations.md",75217],"6d2ffbf3":[function(){return n.e(9315).then(n.bind(n,91599))},"@site/../docs/learn/xcm/quickstart/first-look.md",91599],"6f1a81b8":[function(){return Promise.all([n.e(1122),n.e(7288)]).then(n.bind(n,15418))},"@site/../docs/maintain/maintain-guides-how-to-chill.md",15418],"702d5d94":[function(){return n.e(4105).then(n.t.bind(n,54229,19))},"~docs/default/category-docs-docs-category-wallets-bf2.json",54229],"71ed82b9":[function(){return n.e(8648).then(n.bind(n,4401))},"@site/../docs/general/start-building.md",4401],"73c3bebc":[function(){return n.e(1211).then(n.t.bind(n,47084,19))},"~docs/default/category-docs-docs-category-stay-safe-1ef.json",47084],"74df6a22":[function(){return n.e(1299).then(n.bind(n,50223))},"@site/../docs/maintain/maintain-rpc.md",50223],"75a6958b":[function(){return n.e(3635).then(n.t.bind(n,14183,19))},"~docs/default/category-docs-docs-category-advanced-guides-for-staking-1-526.json",14183],"766a10e1":[function(){return n.e(8860).then(n.bind(n,83611))},"@site/../docs/learn/learn-comparisons-avalanche.md",83611],"77a2b809":[function(){return Promise.all([n.e(1122),n.e(8080)]).then(n.bind(n,83583))},"@site/../docs/learn/learn-balance-transfers.md",83583],"78868b16":[function(){return n.e(2754).then(n.bind(n,17134))},"@site/../docs/general/kusama/kusama-social-recovery.md",17134],"78e1e977":[function(){return n.e(1872).then(n.bind(n,3830))},"@site/../docs/learn/xcm/journey/holding-modifiers.md",3830],"79d4be33":[function(){return n.e(626).then(n.bind(n,60657))},"@site/../docs/build/build-substrate.md",60657],"7c78c461":[function(){return n.e(2507).then(n.bind(n,41962))},"@site/../docs/general/kusama/kusama-community.md",41962],"7ccc428f":[function(){return n.e(3348).then(n.t.bind(n,56705,19))},"~docs/default/category-docs-docs-category-learn-about-polkadot-534.json",56705],"7d54ab5a":[function(){return Promise.all([n.e(1122),n.e(2791)]).then(n.bind(n,77611))},"@site/../docs/maintain/kusama/maintain-guides-how-to-nominate-kusama.md",77611],"7e9389ad":[function(){return n.e(5011).then(n.t.bind(n,69074,19))},"~docs/default/category-docs-docs-category-participants-in-the-polkadot-ecosystem-e03.json",69074],"7fbac68a":[function(){return n.e(1598).then(n.bind(n,81475))},"@site/../docs/general/ambassadors.md",81475],"8167490d":[function(){return n.e(9247).then(n.bind(n,92468))},"@site/../docs/learn/learn-controller.md",92468],"824749c6":[function(){return n.e(8361).then(n.bind(n,94521))},"@site/../docs/build/build-node-interaction.md",94521],"8247eba8":[function(){return n.e(8115).then(n.bind(n,76785))},"@site/../docs/learn/xcm/journey/transfers/teleports.md",76785],"83d4859f":[function(){return n.e(8757).then(n.bind(n,25310))},"@site/../docs/learn/xcm/journey/transfers/summary.md",25310],"84f79495":[function(){return n.e(2078).then(n.bind(n,96709))},"@site/../docs/learn/learn-parathreads.md",96709],"85afe03a":[function(){return n.e(3132).then(n.bind(n,31714))},"@site/../docs/maintain/maintain-errors.md",31714],"863c4753":[function(){return n.e(2552).then(n.bind(n,15719))},"@site/../docs/learn/xcm/journey/register-modifiers.md",15719],"899aadcc":[function(){return n.e(1083).then(n.bind(n,11422))},"@site/../docs/learn/xcm/overview/architecture.md",11422],"8a8a7d05":[function(){return n.e(3262).then(n.bind(n,34204))},"@site/../docs/build/build-parachains.md",34204],"8b670b2b":[function(){return n.e(7799).then(n.bind(n,12897))},"@site/../docs/build/build-index.md",12897],"8d3a1bf8":[function(){return Promise.all([n.e(1122),n.e(2399)]).then(n.bind(n,10209))},"@site/../docs/learn/learn-inflation.md",10209],"8dd7cee0":[function(){return n.e(1486).then(n.bind(n,63349))},"@site/../docs/general/thousand-validators.md",63349],"918b38b6":[function(){return Promise.all([n.e(1122),n.e(2508)]).then(n.bind(n,90594))},"@site/../docs/learn/learn-async-backing.md",90594],"924835c1":[function(){return n.e(9126).then(n.t.bind(n,32788,19))},"~docs/default/category-docs-docs-category-archive-519.json",32788],"935f2afb":[function(){return n.e(53).then(n.t.bind(n,22624,19))},"~docs/default/version-current-metadata-prop-751.json",22624],"9528ac88":[function(){return n.e(315).then(n.bind(n,85517))},"@site/../docs/learn/learn-xcm-transport.md",85517],"987d08ef":[function(){return n.e(1748).then(n.bind(n,11732))},"@site/../docs/build/build-smart-contracts.md",11732],"98a30fd8":[function(){return n.e(8866).then(n.bind(n,94062))},"@site/../docs/learn/xcm/fundamentals/multiasset.md",94062],"991ceaa9":[function(){return Promise.all([n.e(1122),n.e(4428)]).then(n.bind(n,35265))},"@site/../docs/maintain/maintain-guides-how-to-nominate-polkadot.md",35265],"9a101178":[function(){return n.e(2505).then(n.bind(n,42047))},"@site/../docs/build/build-ss58-registry.md",42047],"9a679a70":[function(){return n.e(8178).then(n.t.bind(n,92189,19))},"~docs/default/category-docs-docs-category-overview-c3c.json",92189],"9e2042f5":[function(){return n.e(5651).then(n.bind(n,99476))},"@site/../docs/learn/learn-collator.md",99476],"9e3f6a8a":[function(){return n.e(2758).then(n.bind(n,14865))},"@site/../docs/learn/learn-comparison-ethereum-2.md",14865],"9e6341e5":[function(){return n.e(1774).then(n.bind(n,61601))},"@site/../docs/learn/xcm/journey/transfers/reserve.md",61601],"9e76b49d":[function(){return n.e(7823).then(n.bind(n,85268))},"@site/../docs/learn/xcm/testing.md",85268],"9f319605":[function(){return n.e(63).then(n.bind(n,48442))},"@site/../docs/learn/xcm/journey/fees.md",48442],a2800a5b:[function(){return n.e(7961).then(n.bind(n,69595))},"@site/../docs/build/build-transaction-construction.md",69595],a29dc56e:[function(){return n.e(6253).then(n.bind(n,16898))},"@site/../docs/maintain/maintain-guides-how-to-monitor-your-node.md",16898],a4b71220:[function(){return n.e(9112).then(n.t.bind(n,68388,19))},"/home/runner/work/polkadot-wiki/polkadot-wiki/polkadot-wiki/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",68388],a5002e4a:[function(){return n.e(1703).then(n.bind(n,53714))},"@site/../docs/build/build-oracle.md",53714],a5b3561d:[function(){return n.e(7466).then(n.bind(n,75007))},"@site/../docs/general/kusama/kusama-coc.md",75007],a62d9768:[function(){return n.e(6277).then(n.t.bind(n,46241,19))},"~docs/default/category-docs-docs-category-advanced-guides-for-asset-hub-9aa.json",46241],a74a59a0:[function(){return Promise.all([n.e(1122),n.e(8702)]).then(n.bind(n,11300))},"@site/../docs/maintain/maintain-guides-how-to-validate-polkadot.md",11300],a7b37b86:[function(){return n.e(4507).then(n.bind(n,588))},"@site/../docs/general/scams.md",588],a7c27f4d:[function(){return n.e(4174).then(n.t.bind(n,39220,19))},"~docs/default/category-docs-docs-category-basic-concepts-about-polkadot-793.json",39220],a996ffc3:[function(){return n.e(9383).then(n.t.bind(n,58976,19))},"~docs/default/category-docs-docs-category-transactions-db3.json",58976],ab138bf8:[function(){return Promise.all([n.e(1122),n.e(8791)]).then(n.bind(n,83433))},"@site/../docs/learn/learn-proxies.md",83433],ad762f86:[function(){return Promise.all([n.e(1122),n.e(7940)]).then(n.bind(n,79569))},"@site/../docs/learn/learn-account-advanced.md",79569],af40287e:[function(){return n.e(3066).then(n.t.bind(n,48292,19))},"~docs/default/category-docs-docs-category-transfers-b84.json",48292],b0cb055f:[function(){return n.e(9905).then(n.bind(n,65959))},"@site/../docs/learn/xcm/fundamentals/xcvm.md",65959],b0cbc1d4:[function(){return Promise.all([n.e(1122),n.e(3667)]).then(n.bind(n,14374))},"@site/../docs/general/staking-dashboard.md",14374],b21dd8a7:[function(){return n.e(1494).then(n.bind(n,7788))},"@site/../docs/learn/learn-comparison-rollups.md",7788],b225a2ce:[function(){return n.e(3668).then(n.bind(n,63021))},"@site/../docs/learn/xcm/fundamentals/multilocation/summary.md",63021],b336bb09:[function(){return n.e(1592).then(n.t.bind(n,34082,19))},"~docs/default/category-docs-docs-category-accounts-c2d.json",34082],b3719d54:[function(){return n.e(5422).then(n.bind(n,64633))},"@site/../docs/general/polkadot-v1.md",64633],b38833d4:[function(){return Promise.all([n.e(1122),n.e(9062)]).then(n.bind(n,2774))},"@site/../docs/learn/learn-phragmen.md",2774],b48c599b:[function(){return n.e(8901).then(n.bind(n,99098))},"@site/../docs/general/kusama/kusama-bug-bounty.md",99098],b61f6dc7:[function(){return n.e(1372).then(n.bind(n,7678))},"@site/../docs/general/research.md",7678],b940de31:[function(){return Promise.all([n.e(1122),n.e(7633)]).then(n.bind(n,11427))},"@site/../docs/learn/learn-assets.md",11427],b9b4ec9e:[function(){return n.e(5704).then(n.bind(n,15137))},"@site/../docs/learn/xcm/reference/glossary.md",15137],bb8b1738:[function(){return Promise.all([n.e(1122),n.e(7368)]).then(n.bind(n,49175))},"@site/../docs/learn/learn-validator.md",49175],bbba852d:[function(){return n.e(6294).then(n.bind(n,33736))},"@site/../docs/general/kusama/kusama-adverserial-cheatsheet.md",33736],bd701914:[function(){return n.e(7388).then(n.bind(n,55965))},"@site/../docs/learn/learn-parachains-faq.md",55965],bea375d6:[function(){return n.e(3757).then(n.bind(n,86676))},"@site/../docs/general/grants.md",86676],c07c2447:[function(){return Promise.all([n.e(1122),n.e(7654)]).then(n.bind(n,40569))},"@site/../docs/learn/learn-guides-polkadot-opengov.md",40569],c1bbdb2a:[function(){return n.e(4916).then(n.bind(n,27122))},"@site/../docs/learn/learn-polkadot-host.md",27122],c2c6a3a6:[function(){return n.e(2712).then(n.bind(n,5812))},"@site/../docs/learn/learn-nft-projects.md",5812],c41801b5:[function(){return Promise.all([n.e(1122),n.e(5013)]).then(n.bind(n,63801))},"@site/../docs/maintain/kusama/maintain-guides-how-to-validate-kusama.md",63801],c4f5d8e4:[function(){return n.e(4195).then(n.bind(n,75844))},"@site/src/pages/index.js",75844],c662f00a:[function(){return n.e(4379).then(n.bind(n,56021))},"@site/../docs/learn/xcm/journey/queries.md",56021],c764f0e2:[function(){return n.e(2624).then(n.bind(n,99445))},"@site/../docs/learn/learn-staking-apps.md",99445],c7a044bb:[function(){return n.e(217).then(n.bind(n,47223))},"@site/../docs/learn/xcm/journey/channels-and-bridges.md",47223],c7a2145e:[function(){return n.e(9478).then(n.bind(n,25690))},"@site/../docs/general/how-to-dyor.md",25690],c7c5ba1a:[function(){return Promise.all([n.e(1122),n.e(6104)]).then(n.bind(n,63706))},"@site/../docs/learn/learn-accounts.md",63706],c91a9c06:[function(){return Promise.all([n.e(1122),n.e(8355)]).then(n.bind(n,48693))},"@site/../docs/learn/learn-identity.md",48693],c977dfe8:[function(){return Promise.all([n.e(1122),n.e(1506)]).then(n.bind(n,38948))},"@site/../docs/learn/learn-teleport.md",38948],ca9fe671:[function(){return n.e(6598).then(n.bind(n,37579))},"@site/../docs/learn/xcm/overview/xcvm.md",37579],cc44e8fd:[function(){return n.e(7683).then(n.bind(n,6005))},"@site/../docs/build/build-node-management.md",6005],ccc1222e:[function(){return n.e(6920).then(n.bind(n,60147))},"@site/../docs/build/build-open-source.md",60147],cd144357:[function(){return n.e(9779).then(n.t.bind(n,14423,19))},"~docs/default/category-docs-docs-category-polkadots-parachains-4b5.json",14423],cda87995:[function(){return n.e(3933).then(n.bind(n,27023))},"@site/../docs/build/build-tools-index.md",27023],ceaa29cb:[function(){return n.e(6373).then(n.bind(n,41230))},"@site/../docs/learn/xcm/journey/locks/locks.md",41230],cfd53ea4:[function(){return n.e(1090).then(n.bind(n,7007))},"@site/../docs/general/kusama/kusama-timeline.md",7007],d01f45b7:[function(){return n.e(6220).then(n.t.bind(n,73443,19))},"~docs/default/category-docs-docs-category-polkadots-xcm-416.json",73443],d27ae88d:[function(){return n.e(5157).then(n.bind(n,19994))},"@site/../docs/learn/learn-video-tutorials.md",19994],d3a753cf:[function(){return n.e(8855).then(n.bind(n,8032))},"@site/../docs/learn/xcm/fundamentals/multilocation/example.md",8032],d3db551a:[function(){return Promise.all([n.e(1122),n.e(7485)]).then(n.bind(n,67445))},"@site/../docs/learn/learn-treasury.md",67445],d569989b:[function(){return n.e(609).then(n.bind(n,17340))},"@site/../docs/general/bug-bounty.md",17340],d5909206:[function(){return n.e(3554).then(n.bind(n,43543))},"@site/../docs/learn/xcm/fundamentals/multilocation/junction.md",43543],d6a97e7e:[function(){return n.e(7858).then(n.bind(n,55984))},"@site/../docs/learn/xcm/quickstart/xcm-simulator.md",55984],d6b0148d:[function(){return n.e(5548).then(n.bind(n,7926))},"@site/../docs/learn/xcm/journey/origins.md",7926],d6d2b2d5:[function(){return Promise.all([n.e(1122),n.e(2483)]).then(n.bind(n,41973))},"@site/../docs/maintain/maintain-guides-how-to-vote-councillor.md",41973],d9ef69a7:[function(){return n.e(1786).then(n.bind(n,4245))},"@site/../docs/general/contributors.md",4245],da9f79cb:[function(){return Promise.all([n.e(1122),n.e(2248)]).then(n.bind(n,92916))},"@site/../docs/learn/learn-nomination-pools.md",92916],db039c7f:[function(){return n.e(5103).then(n.bind(n,50740))},"@site/../docs/learn/xcm/overview/format.md",50740],db0b42b0:[function(){return n.e(2609).then(n.bind(n,64271))},"@site/../docs/learn/learn-sassafras.md",64271],db3d6c4d:[function(){return n.e(7313).then(n.bind(n,1171))},"@site/../docs/learn/learn-account-abstraction.md",1171],dbbd9e76:[function(){return n.e(3669).then(n.bind(n,69156))},"@site/../docs/learn/learn-guides-vault.md",69156],dbc4065c:[function(){return n.e(6312).then(n.t.bind(n,8654,19))},"~docs/default/category-docs-docs-category-tokens-and-assets-d90.json",8654],dc776cbc:[function(){return n.e(9764).then(n.bind(n,8117))},"@site/../docs/general/thousand-contributors.md",8117],dd32e389:[function(){return n.e(2042).then(n.bind(n,63689))},"@site/../docs/general/polkadot-vault.md",63689],df154d69:[function(){return n.e(1957).then(n.bind(n,15474))},"@site/../docs/learn/learn-xcm.md",15474],e2e89062:[function(){return n.e(2633).then(n.bind(n,81843))},"@site/../docs/learn/learn-proxies-pure.md",81843],e31fc461:[function(){return n.e(3330).then(n.bind(n,60682))},"@site/../docs/learn/xcm/learn-xcm-docs-intro.md",60682],e344dd79:[function(){return n.e(9276).then(n.t.bind(n,71462,19))},"~docs/default/category-docs-docs-category-polkadots-architecture-348.json",71462],e4f3654b:[function(){return n.e(8618).then(n.bind(n,22610))},"@site/../docs/learn/learn-extrinsics.md",22610],ec3b6a32:[function(){return n.e(4004).then(n.bind(n,56794))},"@site/../docs/learn/learn-nft.md",56794],ecb495b7:[function(){return n.e(2136).then(n.bind(n,82956))},"@site/../docs/maintain/maintain-guides-how-to-systemd.md",82956],ece9fdae:[function(){return n.e(2677).then(n.bind(n,81862))},"@site/../docs/general/community.md",81862],ed3409b3:[function(){return n.e(8609).then(n.bind(n,64539))},"@site/../docs/learn/learn-guides-bounties.md",64539],eef3f1dd:[function(){return Promise.all([n.e(1122),n.e(4097)]).then(n.bind(n,7522))},"@site/../docs/learn/learn-guides-treasury.md",7522],f0855ff9:[function(){return n.e(4909).then(n.bind(n,9012))},"@site/../docs/general/kusama/kusama-index.md",9012],f137ce68:[function(){return Promise.all([n.e(532),n.e(3620)]).then(n.bind(n,2137))},"@site/../docs/learn/learn-xcm-instructions.md",2137],f14351c1:[function(){return n.e(3356).then(n.t.bind(n,2551,19))},"~docs/default/category-docs-docs-category-components-a98.json",2551],f1585bfb:[function(){return n.e(3665).then(n.bind(n,43507))},"@site/../docs/learn/xcm/quickstart/summary.md",43507],f189ca9f:[function(){return n.e(192).then(n.bind(n,20458))},"@site/../docs/learn/learn-spree.md",20458],f2521980:[function(){return Promise.all([n.e(1122),n.e(6689)]).then(n.bind(n,24595))},"@site/../docs/general/getting-started.md",24595],f2717f8e:[function(){return n.e(250).then(n.bind(n,96879))},"@site/../docs/general/builders-program.md",96879],f2c21b54:[function(){return n.e(4363).then(n.bind(n,3011))},"@site/../docs/build/build-storage.md",3011],f3027c84:[function(){return n.e(2242).then(n.bind(n,3361))},"@site/../docs/general/polkadotjs-ui.md",3361],f359a251:[function(){return n.e(1239).then(n.bind(n,15759))},"@site/../docs/maintain/maintain-endpoints.md",15759],f3bde756:[function(){return n.e(2704).then(n.bind(n,84741))},"@site/../docs/maintain/maintain-bootnode.md",84741],f4003c83:[function(){return Promise.all([n.e(1122),n.e(4476)]).then(n.bind(n,19084))},"@site/../docs/learn/learn-governance.md",19084],f4130007:[function(){return n.e(2665).then(n.bind(n,86975))},"@site/../docs/general/wallets-and-extensions.md",86975],f41c4e9d:[function(){return n.e(4666).then(n.bind(n,32036))},"@site/../docs/learn/learn-xcm-pallet.md",32036],f4200fe5:[function(){return Promise.all([n.e(532),n.e(2909)]).then(n.bind(n,31101))},"@site/../docs/maintain/maintain-sync.md",31101],f44ed8f8:[function(){return n.e(7211).then(n.bind(n,71294))},"@site/../docs/build/build-hrmp-channels.md",71294],f47489cd:[function(){return n.e(1966).then(n.bind(n,11611))},"@site/../docs/learn/learn-runtime-upgrades.md",11611],f4fb6e9c:[function(){return n.e(1).then(n.t.bind(n,40132,19))},"~docs/default/category-docs-docs-category-a-journey-through-xcm-9f8.json",40132],f7191335:[function(){return n.e(1686).then(n.t.bind(n,1691,19))},"~docs/default/category-docs-docs-category-general-cbc.json",1691],f750c690:[function(){return n.e(1419).then(n.bind(n,91251))},"@site/../docs/learn/learn-nft-pallets.md",91251],f7acb151:[function(){return Promise.all([n.e(1122),n.e(5483)]).then(n.bind(n,49736))},"@site/../docs/learn/learn-guides-assets-create.md",49736],f8518919:[function(){return n.e(3945).then(n.bind(n,51094))},"@site/../docs/general/web3-and-polkadot.md",51094],f90fa732:[function(){return n.e(1062).then(n.bind(n,71358))},"@site/../docs/build/build-data.md",71358],f95cee6f:[function(){return n.e(9548).then(n.bind(n,24195))},"@site/../docs/maintain/maintain-guides-best-practices-to-avoid-slashes.md",24195],fa343ad1:[function(){return n.e(1678).then(n.bind(n,42352))},"@site/../docs/learn/xcm/fundamentals/weight_and_fees.md",42352],fabebe44:[function(){return n.e(1288).then(n.bind(n,38993))},"@site/../docs/general/dev-heroes.md",38993],fac80962:[function(){return n.e(3944).then(n.bind(n,96238))},"@site/../docs/learn/learn-account-generation.md",96238],fbea1897:[function(){return n.e(7280).then(n.bind(n,56025))},"@site/../docs/learn/learn-launch.md",56025],fbf58567:[function(){return n.e(5989).then(n.t.bind(n,46599,19))},"~docs/default/category-docs-docs-category-xcm-documentation-30c.json",46599],fea93377:[function(){return Promise.all([n.e(1122),n.e(6730)]).then(n.bind(n,26029))},"@site/../docs/maintain/maintain-guides-validator-payout.md",26029],fecdcc34:[function(){return n.e(8034).then(n.bind(n,26269))},"@site/../docs/learn/xcm/journey/version.md",26269],feea648c:[function(){return n.e(7061).then(n.bind(n,39966))},"@site/../docs/learn/learn-xcvm.md",39966],ff6596ea:[function(){return Promise.all([n.e(1122),n.e(3842)]).then(n.bind(n,25398))},"@site/../docs/learn/learn-nominator.md",25398],ffd76171:[function(){return n.e(8236).then(n.bind(n,88559))},"@site/../docs/maintain/maintain-index.md",88559],ffe9c3c9:[function(){return Promise.all([n.e(1122),n.e(1529)]).then(n.bind(n,64204))},"@site/../docs/learn/learn-DOT.md",64204]};function l(e){var t=e.error,n=e.retry,a=e.pastDelay;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(99670),d=n(30226);function f(e,t){if("*"===e)return i()({loading:l,loader:function(){return n.e(4972).then(n.bind(n,4972))},modules:["@theme/NotFound"],webpack:function(){return[4972]},render:function(e,t){var n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});var o=s[e+"-"+t],f={},p=[],m=[],h=(0,u.Z)(o);return Object.entries(h).forEach((function(e){var t=e[0],n=e[1],r=c[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:l,loader:f,modules:p,webpack:function(){return m},render:function(t,n){var i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((function(t){var n=t[0],r=t[1],a=r.default;if(!a)throw new Error("The page component at "+e+" doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.");"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((function(e){return"default"!==e})).forEach((function(e){a[e]=r[e]}));var o=i,s=n.split(".");s.slice(0,-1).forEach((function(e){o=o[e]})),o[s[s.length-1]]=a}));var s=i.__comp;delete i.__comp;var c=i.__context;return delete i.__context,r.createElement(d.z,{value:c},r.createElement(s,(0,a.Z)({},i,n)))}})}const p=[{path:"/search",component:f("/search","740"),exact:!0},{path:"/docs",component:f("/docs","932"),routes:[{path:"/docs/ambassadors",component:f("/docs/ambassadors","afd"),exact:!0,sidebar:"docs"},{path:"/docs/bug-bounty",component:f("/docs/bug-bounty","bab"),exact:!0,sidebar:"docs"},{path:"/docs/build-data",component:f("/docs/build-data","c63"),exact:!0,sidebar:"docs"},{path:"/docs/build-guide",component:f("/docs/build-guide","4c0"),exact:!0,sidebar:"docs"},{path:"/docs/build-hackathon",component:f("/docs/build-hackathon","170"),exact:!0,sidebar:"docs"},{path:"/docs/build-hrmp-channels",component:f("/docs/build-hrmp-channels","9d7"),exact:!0,sidebar:"docs"},{path:"/docs/build-index",component:f("/docs/build-index","a82"),exact:!0,sidebar:"docs"},{path:"/docs/build-integrate-assets",component:f("/docs/build-integrate-assets","521"),exact:!0,sidebar:"docs"},{path:"/docs/build-integration",component:f("/docs/build-integration","0e9"),exact:!0,sidebar:"docs"},{path:"/docs/build-node-interaction",component:f("/docs/build-node-interaction","26d"),exact:!0,sidebar:"docs"},{path:"/docs/build-node-management",component:f("/docs/build-node-management","033"),exact:!0,sidebar:"docs"},{path:"/docs/build-open-source",component:f("/docs/build-open-source","d93"),exact:!0,sidebar:"docs"},{path:"/docs/build-oracle",component:f("/docs/build-oracle","66f"),exact:!0,sidebar:"docs"},{path:"/docs/build-pdk",component:f("/docs/build-pdk","841"),exact:!0,sidebar:"docs"},{path:"/docs/build-protocol-info",component:f("/docs/build-protocol-info","d4a"),exact:!0,sidebar:"docs"},{path:"/docs/build-smart-contracts",component:f("/docs/build-smart-contracts","4b8"),exact:!0,sidebar:"docs"},{path:"/docs/build-ss58-registry",component:f("/docs/build-ss58-registry","62f"),exact:!0,sidebar:"docs"},{path:"/docs/build-storage",component:f("/docs/build-storage","47b"),exact:!0,sidebar:"docs"},{path:"/docs/build-substrate",component:f("/docs/build-substrate","206"),exact:!0,sidebar:"docs"},{path:"/docs/build-tools-index",component:f("/docs/build-tools-index","410"),exact:!0,sidebar:"docs"},{path:"/docs/build-transaction-construction",component:f("/docs/build-transaction-construction","d68"),exact:!0,sidebar:"docs"},{path:"/docs/builders-program",component:f("/docs/builders-program","41f"),exact:!0,sidebar:"docs"},{path:"/docs/community",component:f("/docs/community","b89"),exact:!0,sidebar:"docs"},{path:"/docs/community-index",component:f("/docs/community-index","c5c"),exact:!0,sidebar:"docs"},{path:"/docs/contributing",component:f("/docs/contributing","677"),exact:!0,sidebar:"docs"},{path:"/docs/contributors",component:f("/docs/contributors","1e6"),exact:!0,sidebar:"docs"},{path:"/docs/dashboards-index",component:f("/docs/dashboards-index","d3f"),exact:!0,sidebar:"docs"},{path:"/docs/dev-heroes",component:f("/docs/dev-heroes","4e8"),exact:!0,sidebar:"docs"},{path:"/docs/faq",component:f("/docs/faq","e21"),exact:!0,sidebar:"docs"},{path:"/docs/general-index",component:f("/docs/general-index","84d"),exact:!0,sidebar:"docs"},{path:"/docs/getting-started",component:f("/docs/getting-started","6f8"),exact:!0,sidebar:"docs"},{path:"/docs/glossary",component:f("/docs/glossary","5f2"),exact:!0,sidebar:"docs"},{path:"/docs/grants",component:f("/docs/grants","240"),exact:!0,sidebar:"docs"},{path:"/docs/how-to-dyor",component:f("/docs/how-to-dyor","3d9"),exact:!0,sidebar:"docs"},{path:"/docs/kusama-adversarial-cheatsheet",component:f("/docs/kusama-adversarial-cheatsheet","ff3"),exact:!0},{path:"/docs/kusama-bug-bounty",component:f("/docs/kusama-bug-bounty","c07"),exact:!0},{path:"/docs/kusama-claims",component:f("/docs/kusama-claims","b28"),exact:!0},{path:"/docs/kusama-coc",component:f("/docs/kusama-coc","302"),exact:!0},{path:"/docs/kusama-community",component:f("/docs/kusama-community","c98"),exact:!0},{path:"/docs/kusama-getting-started",component:f("/docs/kusama-getting-started","bd7"),exact:!0},{path:"/docs/kusama-index",component:f("/docs/kusama-index","eeb"),exact:!0},{path:"/docs/kusama-parameters",component:f("/docs/kusama-parameters","a62"),exact:!0},{path:"/docs/kusama-social-recovery",component:f("/docs/kusama-social-recovery","62f"),exact:!0},{path:"/docs/kusama-timeline",component:f("/docs/kusama-timeline","288"),exact:!0},{path:"/docs/learn-account-abstraction",component:f("/docs/learn-account-abstraction","962"),exact:!0,sidebar:"docs"},{path:"/docs/learn-account-advanced",component:f("/docs/learn-account-advanced","c5d"),exact:!0,sidebar:"docs"},{path:"/docs/learn-account-generation",component:f("/docs/learn-account-generation","a11"),exact:!0,sidebar:"docs"},{path:"/docs/learn-account-multisig",component:f("/docs/learn-account-multisig","f7c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-accounts",component:f("/docs/learn-accounts","9c2"),exact:!0,sidebar:"docs"},{path:"/docs/learn-accounts-index",component:f("/docs/learn-accounts-index","6b7"),exact:!0,sidebar:"docs"},{path:"/docs/learn-advanced-index",component:f("/docs/learn-advanced-index","66f"),exact:!0,sidebar:"docs"},{path:"/docs/learn-architecture",component:f("/docs/learn-architecture","fa2"),exact:!0,sidebar:"docs"},{path:"/docs/learn-architecture-index",component:f("/docs/learn-architecture-index","f6c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-archive-index",component:f("/docs/learn-archive-index","130"),exact:!0,sidebar:"docs"},{path:"/docs/learn-assets",component:f("/docs/learn-assets","71c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-assets-index",component:f("/docs/learn-assets-index","980"),exact:!0,sidebar:"docs"},{path:"/docs/learn-async-backing",component:f("/docs/learn-async-backing","8d8"),exact:!0,sidebar:"docs"},{path:"/docs/learn-auction",component:f("/docs/learn-auction","5f7"),exact:!0,sidebar:"docs"},{path:"/docs/learn-balance-transfers",component:f("/docs/learn-balance-transfers","48e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-basics-index",component:f("/docs/learn-basics-index","90b"),exact:!0,sidebar:"docs"},{path:"/docs/learn-bridges",component:f("/docs/learn-bridges","fc1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-collator",component:f("/docs/learn-collator","8d9"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons",component:f("/docs/learn-comparisons","ef1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-avalanche",component:f("/docs/learn-comparisons-avalanche","6f0"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-cosmos",component:f("/docs/learn-comparisons-cosmos","72c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-ethereum-2",component:f("/docs/learn-comparisons-ethereum-2","af0"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-index",component:f("/docs/learn-comparisons-index","3a8"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-kusama",component:f("/docs/learn-comparisons-kusama","de0"),exact:!0,sidebar:"docs"},{path:"/docs/learn-comparisons-rollups",component:f("/docs/learn-comparisons-rollups","656"),exact:!0,sidebar:"docs"},{path:"/docs/learn-components-index",component:f("/docs/learn-components-index","565"),exact:!0,sidebar:"docs"},{path:"/docs/learn-consensus",component:f("/docs/learn-consensus","c72"),exact:!0,sidebar:"docs"},{path:"/docs/learn-controller",component:f("/docs/learn-controller","e68"),exact:!0,sidebar:"docs"},{path:"/docs/learn-crowdloans",component:f("/docs/learn-crowdloans","98f"),exact:!0,sidebar:"docs"},{path:"/docs/learn-cryptography",component:f("/docs/learn-cryptography","3de"),exact:!0,sidebar:"docs"},{path:"/docs/learn-DOT",component:f("/docs/learn-DOT","913"),exact:!0,sidebar:"docs"},{path:"/docs/learn-extrinsics",component:f("/docs/learn-extrinsics","950"),exact:!0,sidebar:"docs"},{path:"/docs/learn-future-implementations-index",component:f("/docs/learn-future-implementations-index","d18"),exact:!0,sidebar:"docs"},{path:"/docs/learn-governance",component:f("/docs/learn-governance","e59"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-assets-create",component:f("/docs/learn-guides-assets-create","dd9"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-assets-index",component:f("/docs/learn-guides-assets-index","525"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-assets-ledger",component:f("/docs/learn-guides-assets-ledger","1f0"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-bounties",component:f("/docs/learn-guides-bounties","2dc"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-identity",component:f("/docs/learn-guides-identity","9f1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-index",component:f("/docs/learn-guides-index","cb6"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-polkadot-opengov",component:f("/docs/learn-guides-polkadot-opengov","097"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-staking",component:f("/docs/learn-guides-staking","e1a"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-staking-index",component:f("/docs/learn-guides-staking-index","934"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-staking-pools",component:f("/docs/learn-guides-staking-pools","8e8"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-treasury",component:f("/docs/learn-guides-treasury","45a"),exact:!0,sidebar:"docs"},{path:"/docs/learn-guides-vault",component:f("/docs/learn-guides-vault","407"),exact:!0,sidebar:"docs"},{path:"/docs/learn-identity",component:f("/docs/learn-identity","414"),exact:!0,sidebar:"docs"},{path:"/docs/learn-implementations",component:f("/docs/learn-implementations","a5b"),exact:!0},{path:"/docs/learn-index",component:f("/docs/learn-index","706"),exact:!0,sidebar:"docs"},{path:"/docs/learn-inflation",component:f("/docs/learn-inflation","5ea"),exact:!0,sidebar:"docs"},{path:"/docs/learn-launch",component:f("/docs/learn-launch","6e9"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nft",component:f("/docs/learn-nft","4b1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nft-index",component:f("/docs/learn-nft-index","048"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nft-pallets",component:f("/docs/learn-nft-pallets","8ea"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nft-projects",component:f("/docs/learn-nft-projects","18f"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nomination-pools",component:f("/docs/learn-nomination-pools","964"),exact:!0,sidebar:"docs"},{path:"/docs/learn-nominator",component:f("/docs/learn-nominator","5fc"),exact:!0,sidebar:"docs"},{path:"/docs/learn-parachains",component:f("/docs/learn-parachains","0d1"),exact:!0,sidebar:"docs"},{path:"/docs/learn-parachains-faq",component:f("/docs/learn-parachains-faq","eed"),exact:!0,sidebar:"docs"},{path:"/docs/learn-parachains-index",component:f("/docs/learn-parachains-index","4e5"),exact:!0,sidebar:"docs"},{path:"/docs/learn-parachains-protocol",component:f("/docs/learn-parachains-protocol","f2b"),exact:!0,sidebar:"docs"},{path:"/docs/learn-parathreads",component:f("/docs/learn-parathreads","03d"),exact:!0,sidebar:"docs"},{path:"/docs/learn-participants-index",component:f("/docs/learn-participants-index","b1a"),exact:!0,sidebar:"docs"},{path:"/docs/learn-phragmen",component:f("/docs/learn-phragmen","c5c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadot-host",component:f("/docs/learn-polkadot-host","48e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadot-opengov",component:f("/docs/learn-polkadot-opengov","ecc"),exact:!0,sidebar:"docs"},{path:"/docs/learn-polkadot-opengov-treasury",component:f("/docs/learn-polkadot-opengov-treasury","582"),exact:!0,sidebar:"docs"},{path:"/docs/learn-proxies",component:f("/docs/learn-proxies","92e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-proxies-pure",component:f("/docs/learn-proxies-pure","b02"),exact:!0,sidebar:"docs"},{path:"/docs/learn-redenomination",component:f("/docs/learn-redenomination","0ff"),exact:!0,sidebar:"docs"},{path:"/docs/learn-runtime-upgrades",component:f("/docs/learn-runtime-upgrades","8e7"),exact:!0,sidebar:"docs"},{path:"/docs/learn-sassafras",component:f("/docs/learn-sassafras","11d"),exact:!0,sidebar:"docs"},{path:"/docs/learn-scams",component:f("/docs/learn-scams","f1c"),exact:!0,sidebar:"docs"},{path:"/docs/learn-spree",component:f("/docs/learn-spree","14e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-staking",component:f("/docs/learn-staking","183"),exact:!0,sidebar:"docs"},{path:"/docs/learn-staking-advanced",component:f("/docs/learn-staking-advanced","089"),exact:!0,sidebar:"docs"},{path:"/docs/learn-staking-apps",component:f("/docs/learn-staking-apps","d3d"),exact:!0,sidebar:"docs"},{path:"/docs/learn-staking-index",component:f("/docs/learn-staking-index","cfb"),exact:!0,sidebar:"docs"},{path:"/docs/learn-system-chains",component:f("/docs/learn-system-chains","29d"),exact:!0,sidebar:"docs"},{path:"/docs/learn-teleport",component:f("/docs/learn-teleport","814"),exact:!0,sidebar:"docs"},{path:"/docs/learn-transaction-fees",component:f("/docs/learn-transaction-fees","42e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-transactions-index",component:f("/docs/learn-transactions-index","a4f"),exact:!0,sidebar:"docs"},{path:"/docs/learn-treasury",component:f("/docs/learn-treasury","ba6"),exact:!0,sidebar:"docs"},{path:"/docs/learn-validator",component:f("/docs/learn-validator","cae"),exact:!0,sidebar:"docs"},{path:"/docs/learn-video-tutorials",component:f("/docs/learn-video-tutorials","a9e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-wasm",component:f("/docs/learn-wasm","16e"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm",component:f("/docs/learn-xcm","f30"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm-index",component:f("/docs/learn-xcm-index","90a"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm-instructions",component:f("/docs/learn-xcm-instructions","82b"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm-pallet",component:f("/docs/learn-xcm-pallet","c28"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm-transport",component:f("/docs/learn-xcm-transport","b2a"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcm-usecases",component:f("/docs/learn-xcm-usecases","4fd"),exact:!0,sidebar:"docs"},{path:"/docs/learn-xcvm",component:f("/docs/learn-xcvm","db4"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm",component:f("/docs/learn/xcm","b7a"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/config-deep-dive",component:f("/docs/learn/xcm/config-deep-dive","e68"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals",component:f("/docs/learn/xcm/fundamentals","e35"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals-fees",component:f("/docs/learn/xcm/fundamentals-fees","80a"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals-multiasset",component:f("/docs/learn/xcm/fundamentals-multiasset","ead"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals-summary",component:f("/docs/learn/xcm/fundamentals-summary","1e3"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals-xcvm",component:f("/docs/learn/xcm/fundamentals-xcvm","752"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals/multilocation",component:f("/docs/learn/xcm/fundamentals/multilocation","f7c"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals/multilocation-example",component:f("/docs/learn/xcm/fundamentals/multilocation-example","9c5"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals/multilocation-junctions",component:f("/docs/learn/xcm/fundamentals/multilocation-junctions","776"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/fundamentals/multilocation-summary",component:f("/docs/learn/xcm/fundamentals/multilocation-summary","6f7"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/introduction",component:f("/docs/learn/xcm/introduction","e34"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey",component:f("/docs/learn/xcm/journey","ac5"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-assets",component:f("/docs/learn/xcm/journey-assets","f26"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-channels",component:f("/docs/learn/xcm/journey-channels","ae8"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-expectations",component:f("/docs/learn/xcm/journey-expectations","a11"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-fees",component:f("/docs/learn/xcm/journey-fees","1e0"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-holding",component:f("/docs/learn/xcm/journey-holding","914"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-locks",component:f("/docs/learn/xcm/journey-locks","f94"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-origin",component:f("/docs/learn/xcm/journey-origin","4f3"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-queries",component:f("/docs/learn/xcm/journey-queries","3fb"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-register",component:f("/docs/learn/xcm/journey-register","e9c"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-summary",component:f("/docs/learn/xcm/journey-summary","2a4"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-transact",component:f("/docs/learn/xcm/journey-transact","283"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey-version",component:f("/docs/learn/xcm/journey-version","c0d"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey/transfers",component:f("/docs/learn/xcm/journey/transfers","454"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey/transfers-reserve",component:f("/docs/learn/xcm/journey/transfers-reserve","5ce"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey/transfers-summary",component:f("/docs/learn/xcm/journey/transfers-summary","e08"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/journey/transfers-teleport",component:f("/docs/learn/xcm/journey/transfers-teleport","85b"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview",component:f("/docs/learn/xcm/overview","c0f"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview-architecture",component:f("/docs/learn/xcm/overview-architecture","7ec"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview-format",component:f("/docs/learn/xcm/overview-format","d5c"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview-intro",component:f("/docs/learn/xcm/overview-intro","529"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview-summary",component:f("/docs/learn/xcm/overview-summary","ffd"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/overview-xcvm",component:f("/docs/learn/xcm/overview-xcvm","9ad"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/quickstart",component:f("/docs/learn/xcm/quickstart","c96"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/quickstart-first-look",component:f("/docs/learn/xcm/quickstart-first-look","c89"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/quickstart-simulator",component:f("/docs/learn/xcm/quickstart-simulator","d3a"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/quickstart-summary",component:f("/docs/learn/xcm/quickstart-summary","e79"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/reference-glossary",component:f("/docs/learn/xcm/reference-glossary","e83"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/reference-xcvm-registers",component:f("/docs/learn/xcm/reference-xcvm-registers","ceb"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/references",component:f("/docs/learn/xcm/references","103"),exact:!0,sidebar:"docs"},{path:"/docs/learn/xcm/testing",component:f("/docs/learn/xcm/testing","0a7"),exact:!0,sidebar:"docs"},{path:"/docs/ledger",component:f("/docs/ledger","50e"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-bootnode",component:f("/docs/maintain-bootnode","294"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-endpoints",component:f("/docs/maintain-endpoints","31b"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-errors",component:f("/docs/maintain-errors","92e"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-avoid-slashing",component:f("/docs/maintain-guides-avoid-slashing","578"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-democracy",component:f("/docs/maintain-guides-democracy","740"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-chill",component:f("/docs/maintain-guides-how-to-chill","668"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-join-council",component:f("/docs/maintain-guides-how-to-join-council","9c3"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-monitor-your-node",component:f("/docs/maintain-guides-how-to-monitor-your-node","bdd"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-nominate-kusama",component:f("/docs/maintain-guides-how-to-nominate-kusama","f8d"),exact:!0},{path:"/docs/maintain-guides-how-to-nominate-polkadot",component:f("/docs/maintain-guides-how-to-nominate-polkadot","52a"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-stop-validating",component:f("/docs/maintain-guides-how-to-stop-validating","993"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-systemd",component:f("/docs/maintain-guides-how-to-systemd","3e8"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-upgrade",component:f("/docs/maintain-guides-how-to-upgrade","f9d"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-validate-kusama",component:f("/docs/maintain-guides-how-to-validate-kusama","eb0"),exact:!0},{path:"/docs/maintain-guides-how-to-validate-polkadot",component:f("/docs/maintain-guides-how-to-validate-polkadot","e43"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-how-to-vote-councillor",component:f("/docs/maintain-guides-how-to-vote-councillor","050"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-polkadot-opengov",component:f("/docs/maintain-guides-polkadot-opengov","751"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-secure-validator",component:f("/docs/maintain-guides-secure-validator","310"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-society-kusama",component:f("/docs/maintain-guides-society-kusama","6d3"),exact:!0},{path:"/docs/maintain-guides-validator-community",component:f("/docs/maintain-guides-validator-community","18d"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-guides-validator-payout",component:f("/docs/maintain-guides-validator-payout","712"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-index",component:f("/docs/maintain-index","d6e"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-networks",component:f("/docs/maintain-networks","234"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-polkadot-parameters",component:f("/docs/maintain-polkadot-parameters","5d7"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-rpc",component:f("/docs/maintain-rpc","f10"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-sync",component:f("/docs/maintain-sync","fd0"),exact:!0,sidebar:"docs"},{path:"/docs/maintain-wss",component:f("/docs/maintain-wss","7f4"),exact:!0,sidebar:"docs"},{path:"/docs/metadata",component:f("/docs/metadata","ba9"),exact:!0,sidebar:"docs"},{path:"/docs/polkadot-direction",component:f("/docs/polkadot-direction","2f6"),exact:!0,sidebar:"docs"},{path:"/docs/polkadot-v1",component:f("/docs/polkadot-v1","770"),exact:!0,sidebar:"docs"},{path:"/docs/polkadot-vault",component:f("/docs/polkadot-vault","d52"),exact:!0,sidebar:"docs"},{path:"/docs/polkadot-vision-index",component:f("/docs/polkadot-vision-index","3c3"),exact:!0,sidebar:"docs"},{path:"/docs/polkadotjs",component:f("/docs/polkadotjs","516"),exact:!0,sidebar:"docs"},{path:"/docs/polkadotjs-ui",component:f("/docs/polkadotjs-ui","884"),exact:!0,sidebar:"docs"},{path:"/docs/programmes-index",component:f("/docs/programmes-index","233"),exact:!0,sidebar:"docs"},{path:"/docs/research",component:f("/docs/research","5f7"),exact:!0,sidebar:"docs"},{path:"/docs/staking-dashboard",component:f("/docs/staking-dashboard","a9a"),exact:!0,sidebar:"docs"},{path:"/docs/start-building",component:f("/docs/start-building","16a"),exact:!0,sidebar:"docs"},{path:"/docs/stay-safe-index",component:f("/docs/stay-safe-index","580"),exact:!0,sidebar:"docs"},{path:"/docs/thousand-contributors",component:f("/docs/thousand-contributors","9ba"),exact:!0,sidebar:"docs"},{path:"/docs/thousand-validators",component:f("/docs/thousand-validators","053"),exact:!0,sidebar:"docs"},{path:"/docs/wallets-and-extensions",component:f("/docs/wallets-and-extensions","e5f"),exact:!0,sidebar:"docs"},{path:"/docs/wallets-index",component:f("/docs/wallets-index","656"),exact:!0,sidebar:"docs"},{path:"/docs/web3-and-polkadot",component:f("/docs/web3-and-polkadot","85e"),exact:!0,sidebar:"docs"}]},{path:"/",component:f("/","7cb"),exact:!0},{path:"*",component:f("*")}]},94184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>x,q_:()=>C,ob:()=>p,PP:()=>A,Ep:()=>f});var r=n(87462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!l)for(;d--;d)i.unshift("..");!l||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(38776);function c(e){return"/"===e.charAt(0)?e:"/"+e}function l(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,h(),x.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(x.entries[x.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=x.index+e;return t>=0&&t{"use strict";var r=n(59864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var l=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=c(t),h=c(n),g=0;g{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,a,o,i,s],u=0;(c=new Error(t.replace(/%s/g,(function(){return l[u++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},32497:(e,t,n)=>{"use strict";n.r(t)},32104:(e,t,n)=>{"use strict";n.r(t)},39604:(e,t,n)=>{"use strict";n.r(t)},70378:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),l=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),c(l,i(e,u,d)),1===e?(c(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){c(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),l=document.querySelector(r.parent);return c(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),l!=document.body&&u(l,"nprogress-custom-parent"),l.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),c=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function l(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;l(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);l(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);E+=w.value.length,w=w.next){var _=w.value;if(t.length>e.length)return;if(!(_ instanceof a)){var S,C=1;if(v){if(!(S=o(k,E,e,b))||S.index>=e.length)break;var T=S.index,A=S.index+S[0].length,P=E;for(P+=w.value.length;T>=P;)P+=(w=w.next).value.length;if(E=P-=w.value.length,w.value instanceof a)continue;for(var O=w;O!==t.tail&&(Pd.reach&&(d.reach=R);var j=w.prev;if(N&&(j=c(t,j,N),E+=N.length),l(t,j,C),w=c(t,j,new a(f,g?r.tokenize(L,g):L,y,L)),I&&c(t,w,I),C>1){var M={cause:f+","+m,reach:R};i(e,t,n,w.prev,E,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function c(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function l(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},c=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var s=f(/^\{$/,/^\}$/);if(-1===s)continue;for(var c=n;c=0&&p(l,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function c(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function l(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,c(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function u(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=c(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=s(i++,r)););return u[n]=a,n})).join(""),n,r),f=Object.keys(u);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,s=o.indexOf(a);if(-1!==s){++i;var c=o.substring(0,s),d=l(u[a]),p=o.substring(s+a.length),m=[];if(c&&m.push(c),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var c=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(c=i(t[r-1])+c,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",c,null,c)}a.content&&"string"!=typeof a.content&&s(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var c=0;c=o.length);c++){var l=s[c];if("string"==typeof l||l.content&&"string"==typeof l.content){var u=o[a],d=n.tokenStack[u],f="string"==typeof l?l:l.content,p=t(r,u),m=f.indexOf(p);if(m>-1){++a;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),b&&v.push.apply(v,i([b])),"string"==typeof l?s.splice.apply(s,[c,1].concat(v)):l.content=v}}else l.content&&i(l.content)}return s}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},70767:()=>{!function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|)*\*\//.source,n=0;n<2;n++)t=t.replace(//g,(function(){return t}));t=t.replace(//g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism)},54294:(e,t,n)=>{var r={"./prism-rust":70767};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=54294},92703:(e,t,n)=>{"use strict";var r=n(50414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},31555:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var r=n(94184),a=n.n(r),o=n(67294),i=n(76792),s=n(85893);const c=o.forwardRef(((e,t)=>{const[{className:n,...r},{as:o="div",bsPrefix:c,spans:l}]=function({as:e,bsPrefix:t,className:n,...r}){t=(0,i.vE)(t,"col");const o=(0,i.pi)(),s=(0,i.zG)(),c=[],l=[];return o.forEach((e=>{const n=r[e];let a,o,i;delete r[e],"object"==typeof n&&null!=n?({span:a,offset:o,order:i}=n):a=n;const u=e!==s?`-${e}`:"";a&&c.push(!0===a?`${t}${u}`:`${t}${u}-${a}`),null!=i&&l.push(`order${u}-${i}`),null!=o&&l.push(`offset${u}-${o}`)})),[{...r,className:a()(n,...c,...l)},{as:e,bsPrefix:t,spans:c}]}(e);return(0,s.jsx)(o,{...r,ref:t,className:a()(n,!l.length&&c)})}));c.displayName="Col";const l=c},10682:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var r=n(94184),a=n.n(r),o=n(67294),i=n(76792),s=n(85893);const c=o.forwardRef((({bsPrefix:e,fluid:t=!1,as:n="div",className:r,...o},c)=>{const l=(0,i.vE)(e,"container"),u="string"==typeof t?`-${t}`:"-fluid";return(0,s.jsx)(n,{ref:c,...o,className:a()(r,t?`${l}${u}`:l)})}));c.displayName="Container";const l=c},34051:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var r=n(94184),a=n.n(r),o=n(67294),i=n(76792),s=n(85893);const c=o.forwardRef((({bsPrefix:e,className:t,as:n="div",...r},o)=>{const c=(0,i.vE)(e,"row"),l=(0,i.pi)(),u=(0,i.zG)(),d=`${c}-cols`,f=[];return l.forEach((e=>{const t=r[e];let n;delete r[e],null!=t&&"object"==typeof t?({cols:n}=t):n=t;const a=e!==u?`-${e}`:"";null!=n&&f.push(`${d}${a}-${n}`)})),(0,s.jsx)(n,{ref:o,...r,className:a()(t,c,...f)})}));c.displayName="Row";const l=c},76792:(e,t,n)=>{"use strict";n.d(t,{pi:()=>l,vE:()=>c,zG:()=>u});var r=n(67294);n(85893);const a=["xxl","xl","lg","md","sm","xs"],o=r.createContext({prefixes:{},breakpoints:a,minBreakpoint:"xs"}),{Consumer:i,Provider:s}=o;function c(e,t){const{prefixes:n}=(0,r.useContext)(o);return e||n[t]||t}function l(){const{breakpoints:e}=(0,r.useContext)(o);return e}function u(){const{minBreakpoint:e}=(0,r.useContext)(o);return e}},64448:(e,t,n)=>{"use strict";var r=n(67294),a=n(27418),o=n(63840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n